2025-11-12 18:35:43 +08:00

118 lines
4.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CardEventSvc
{
private readonly Dictionary<CardOSData.EVENT_REGISTER_CARD_ENUM, List<Action<object>>> eventActions = new();
private readonly Dictionary<CardOSData.EVENT_REGISTER_CARD_ENUM, Type> eventBindMap = new()
{
{ CardOSData.EVENT_REGISTER_CARD_ENUM.EXCUSE_ME_PLEASE_LET_ME_DRAW_CARD, typeof(CardOSData.STRUCT_EVENT_DRAW_CARD) },
};
public void EVENT_REGISTER<T>(CardOSData.EVENT_REGISTER_CARD_ENUM event_name, Action<T> callback) where T : struct
{
if (!eventBindMap.ContainsKey(event_name))
{
Debug.LogError($"注册事件错误: 未绑定的数据类型{event_name}");
return;
}
if (eventBindMap[event_name] != typeof(T))
{
Debug.LogError($"注册事件错误: 数据类型不匹配{event_name}");
return;
}
if (!eventActions.ContainsKey(event_name))
eventActions[event_name] = new List<Action<object>>();
void wrapper(object obj) => callback((T)obj);
eventActions[event_name].Add(wrapper);
Debug.Log($"注册事件: {event_name}");
}
public void EVENT_TRIGGER(CardOSData.EVENT_REGISTER_CARD_ENUM event_name, object data)
{
if (!eventBindMap.ContainsKey(event_name))
{
Debug.LogError($"触发事件错误: 未绑定的数据类型{event_name}");
return;
}
if (data == null || data.GetType() != eventBindMap[event_name])
{
Debug.LogError($"触发事件错误: 数据类型不匹配{event_name}");
}
if (!eventActions.ContainsKey(event_name))
{
Debug.LogError($"触发事件错误: 未找到事件");
}
eventActions[event_name].ForEach(action => action.Invoke(data));
Debug.Log($"触发事件: {event_name}");
}
// public void EVENT_UNREGISTER(CardEventData.EVENT_REGISTER_CARD_ENUM event_name, Action<object> callback)
// {
// if (eventActions.TryGetValue(event_name, out var callback_list))
// {
// callback_list.Remove(callback);
// if (callback_list.Count == 0)
// eventActions.Remove(event_name);
// Debug.Log($"取消注册事件: {event_name}");
// }
// }
// ============ 触发事件 ============
// public void EVENT_REGISTER<T>(CardEventData.EVENT_REGISTER_CARD_ENUM event_name, Action<T> callback) where T : struct
// {
// if (!eventMap.TryGetValue(typeof(T), out var eventQueue))
// {
// Debug.LogError($"未找到与类型 {typeof(T).Name} 匹配的事件字典!");
// return;
// }
//
// register_event();
//
// void register_event()
// {
// if (!eventQueue.ContainsKey(event_name))
// eventQueue[event_name] = callback;
// else
// eventQueue[event_name] += callback;
// print($"注册事件: {event_name}");
// }
// }
//
// // ============= 取消注册 =============
// public void EVENT_UNREGISTER(EVENT_REGISTER_CARD_ENUM event_name, Action<object> callback)
// {
// void unregister_event(Dictionary<EVENT_REGISTER_CARD_ENUM, Action<object>> eventQueue)
// {
// if (!eventQueue.ContainsKey(event_name)) return;
// eventQueue[event_name] -= callback;
// print($"取消注册事件: {event_name}");
// }
// }
//
// // ============= 触发事件 =============
// public void EVENT_RAISE(EVENT_REGISTER_CARD_ENUM event_name, object args)
// {
// void raise_event(Dictionary<EVENT_REGISTER_CARD_ENUM, Action<object>> eventQueue)
// {
// if (eventQueue.ContainsKey(event_name))
// {
// print($"触发事件: {event_name}");
// eventQueue[event_name]?.Invoke(args);
// }
// else
// print($"未找到事件: {event_name}");
// }
// }
// // *************************************
}