Страница 1 из 1

Глобальные события

СообщениеДобавлено: 20 май 2014, 21:37
PrefavEvolution
Однажды наткнулся на необходимость отправлять глобальные события. немного поразмыслив над ререшием пришел в голову очень простой и надежный вариант прошу любить и жаловать.

Синтаксис:
Используется csharp
using System;

public delegate void EventDelegate<TData>(Event<TData> data);
public struct Event<TData>
{
        public TData data;
}

static public class EventDispatcher<EventType>
{
        static public event Action<Event<EventType>> OnEvent;
        static public void Broadcast(EventType data)
        {
                if (OnEvent != null)
                        OnEvent(new Event<EventType> {data = data});
        }
}

static public class EventDispatcherExt
{
        static public void Broadcast<T>(this T data)
        {
                EventDispatcher<T>.Broadcast(data);
        }
}


ну и пример использования:

Синтаксис:
Используется csharp
public class Player
        {
                public struct OnPlayerDiedEvent
                {
                        public PlayerInfo player;
                }

                public Player()
                {
                        EventDispatcher<OnPlayerDiedEvent>.OnEvent += OnSomePlayerDied;
                }

                void OnSomePlayerDied (Event<OnPlayerDiedEvent> obj)
                {

                }

                public void OnDie()
                {
                        new OnPlayerDiedEvent() { player = this }.Broadcast();
                }
        }
 


В большенстве случаев помогает избавится от лишних зависимостей в коде. Пользуйтесь на здоровье)

Re: Глобальные события

СообщениеДобавлено: 21 май 2014, 05:40
KingPeas
Тоже вставала такая задача. Но памятуя о временах когда еще занимался Flash сделал нечто похожее и активно пользуюсь в своих проектах. Все никак не наберусь смелости оформить в виде плагина чтобы выложить в Asset. Я у себя добавил возможность задать приоритет вызова на событие, а также учитывать иерархию вызова в сцене Unity.

Re: Глобальные события

СообщениеДобавлено: 09 июн 2014, 21:25
[bm]
Спасибо! Как раз кстати!