Project_WL/Assets/Script/UI/JoyStick/DSEvent.cs

129 lines
2.8 KiB
C#
Raw Permalink Normal View History

2024-12-15 01:39:39 +00:00

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);
}
}