129 lines
2.8 KiB
C#
129 lines
2.8 KiB
C#
|
|
|
|||
|
|
using UnityEngine;
|
|||
|
|
using System;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
|
|||
|
|
public class DSEventSGT : MonoSingleton<DSEventSGT>
|
|||
|
|
{
|
|||
|
|
private DSEvent pEvent = new DSEvent();
|
|||
|
|
|
|||
|
|
public DSEventParam<T> PackArgs<T>(T pArgs)
|
|||
|
|
{
|
|||
|
|
return new DSEventParam<T>(pArgs);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public T GetArgs<T>(EventArgs pArgs)
|
|||
|
|
{
|
|||
|
|
if (null == pArgs)
|
|||
|
|
return default(T);
|
|||
|
|
|
|||
|
|
return ((DSEventParam<T>)pArgs).GetData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void SendEvent<T>(EventHandler pObserver)
|
|||
|
|
{
|
|||
|
|
if (null == pObserver)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
pEvent.Clear();
|
|||
|
|
pEvent.Add(pObserver);
|
|||
|
|
pEvent.CallBack(this);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void SendEvent<T>(EventHandler pObserver, T pArgs)
|
|||
|
|
{
|
|||
|
|
if (null == pObserver)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
pEvent.Clear();
|
|||
|
|
pEvent.Add(pObserver);
|
|||
|
|
pEvent.CallBack<T>(this, pArgs);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class DSEventParam<T> : 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<EventHandler, string> dicHandler = new Dictionary<EventHandler, string>();
|
|||
|
|
|
|||
|
|
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<T>(object pSender, T pArgs)
|
|||
|
|
{
|
|||
|
|
if (null != Handler)
|
|||
|
|
Handler(pSender, new DSEventParam<T>(pArgs));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void CallBack(object pSender, EventArgs pArgs)
|
|||
|
|
{
|
|||
|
|
if (null != Handler)
|
|||
|
|
Handler(pSender, pArgs);
|
|||
|
|
}
|
|||
|
|
}
|