using UnityEngine; using System; using System.Text; using System.Collections; using System.Collections.Generic; public class DSEventSGT : MonoSingleton { private DSEvent pEvent = new DSEvent(); public DSEventParam PackArgs(T pArgs) { return new DSEventParam(pArgs); } public T GetArgs(EventArgs pArgs) { if (null == pArgs) return default(T); return ((DSEventParam)pArgs).GetData; } public void SendEvent(EventHandler pObserver) { if (null == pObserver) return; pEvent.Clear(); pEvent.Add(pObserver); pEvent.CallBack(this); } public void SendEvent(EventHandler pObserver, T pArgs) { if (null == pObserver) return; pEvent.Clear(); pEvent.Add(pObserver); pEvent.CallBack(this, pArgs); } } public class DSEventParam : EventArgs { private T epData; public T GetData { get { return epData; } } public DSEventParam(T data) { epData = data; } } public sealed class DSEvent { private event EventHandler Handler = null; private Dictionary dicHandler = new Dictionary(); public DSEvent() { } public DSEvent(EventHandler pObserver) { Add(pObserver); } public void Add(EventHandler pObserver, bool bCheckInstance = false) { if (pObserver == null) return; if (true == bCheckInstance) { if (true == dicHandler.ContainsKey(pObserver)) return; } else { if (true == dicHandler.ContainsValue(pObserver.Method.ToString())) return; } Handler += pObserver; dicHandler.Add(pObserver, pObserver.Method.ToString()); } public void Del(EventHandler pObserver) { if (pObserver == null) return; if (false == dicHandler.ContainsKey(pObserver)) return; Handler -= pObserver; dicHandler.Remove(pObserver); } public void Clear() { Handler = null; dicHandler.Clear(); } public bool IsAddEvent() { return (0 != dicHandler.Count); } public bool IsAddEvent(EventHandler pObserver) { return dicHandler.ContainsKey(pObserver); } public void CallBack(object pSender) { if (null != Handler) Handler(pSender, null); } public void CallBack(object pSender, T pArgs) { if (null != Handler) Handler(pSender, new DSEventParam(pArgs)); } public void CallBack(object pSender, EventArgs pArgs) { if (null != Handler) Handler(pSender, pArgs); } }