ISAP/Assets/Scripts/Data/EventCenter.cs

105 lines
2.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static EventCenter;
public class EventCenter : SingleTon<EventCenter>
{
public delegate void EventListenerDelegate(Message evt);
public static Dispatcher dispatcher;
public void Init()
{
dispatcher = new Dispatcher();
}
}
public class Dispatcher
{
private Dictionary<MsgType, EventListenerDelegate> events = new Dictionary<MsgType, EventListenerDelegate>();
public void AddListener(MsgType type, EventListenerDelegate listener)
{
if (listener == null)
{
Debug.LogError("AddListener: listener²»ÄÜΪ¿Õ");
return;
}
EventListenerDelegate myListener = null;
events.TryGetValue(type, out myListener);
events[type] = (EventListenerDelegate)Delegate.Combine(myListener, listener);
}
public void RemoveListener(MsgType type, EventListenerDelegate listener)
{
if (listener == null)
{
Debug.LogError("RemoveListener: listener²»ÄÜΪ¿Õ");
return;
}
events[type] = (EventListenerDelegate)Delegate.Remove(events[type], listener);
}
public void SendMessage(MsgType type, object param)
{
EventListenerDelegate listenerDelegate;
if (events.TryGetValue(type, out listenerDelegate))
{
Message evt = new Message(type, param);
try
{
if (listenerDelegate != null)
{
listenerDelegate(evt);
}
}
catch (System.Exception e)
{
Debug.Log("SendMessage:" + evt.msgType.ToString() + " " + e.Message + " " + e.StackTrace + " " + e);
}
}
}
public void Clear()
{
events.Clear();
}
}
public class Message
{
public MsgType msgType;
public object MsgParams;
public Message(MsgType _msgType, object _MsgParams)
{
msgType = _msgType;
MsgParams = _MsgParams;
}
}
public enum MsgType
{
OnGetPeopleInfo,
OnGetCurrentPeopleProgress,
OnGetPeopleQuetionList,
OnSubmitQuestion,
OnGetTalkMsg,
/// <summary>
/// ²¡È˸öÈË×ÊÁÏ
/// </summary>
OnGetPeopleInfo2,
OnGetAskReason,
OnGetHistoryInfo,
OnGetLifeType,
OnGetHealing,
OnGetCheckReason,
OnGetOtherInfo,
OnGetBodyNum,
OnGetBodyInfo,
OnGetBodyPosInfo,
OnGetAllStyle,
OnGetRoom,
OnSetRoom,
OnGetCode,
OnGetStudentInfo
}