using System; using System.Collections.Generic; namespace Core; /// /// 轻量事件总线(解耦系统之间的通信) /// 设计说明: /// 1) 系统层发布 DomainEvent,View/Controller 可订阅。 /// 2) 不依赖 Godot Signal,便于纯逻辑测试。 /// 注意事项: /// - 事件为进程内同步调用,避免在事件里做耗时操作。 /// 未来扩展: /// - 可加入“事件队列”和“延迟派发”以支持回合结算。 /// public sealed class DomainEventBus { private readonly Dictionary> _handlers = new(); /// /// 订阅事件 /// /// 事件类型 /// 事件处理器 public void Subscribe(Action handler) { var type = typeof(T); if (!_handlers.TryGetValue(type, out var list)) { list = new List(); _handlers[type] = list; } list.Add(handler); } /// /// 取消订阅事件 /// /// 事件类型 /// 事件处理器 public void Unsubscribe(Action handler) { var type = typeof(T); if (_handlers.TryGetValue(type, out var list)) list.Remove(handler); } /// /// 发布事件 /// /// 事件类型 /// 事件对象 public void Publish(T evt) { var type = typeof(T); if (!_handlers.TryGetValue(type, out var list)) return; foreach (var handler in list) if (handler is Action typedHandler) typedHandler.Invoke(evt); } }