using SLSUtilities.General; namespace Continentis.MainGame.Character { /// /// 角色生命周期事件的统一分发入口。 /// 每个 Dispatch 方法按固定顺序触发:角色 → 装备 → Buff → 卡牌, /// 消除 CombatMainManager 中手动遍历各层级的冗余代码。 /// public partial class CharacterBase { /// /// 战斗开始时分发:角色 → 装备 → Buff → 卡牌。 /// public void DispatchCombatStart() { eventSubmodule.onCombatStart.Invoke(); equipmentSubmodule.currentEquipments.ForEach(e => e.eventSubmodule.onCombatStart.Invoke()); combatBuffSubmodule.CombatStart(); deckSubmodule.GetAllCards().ForEach(c => c.eventSubmodule.onCombatStart.Invoke()); } /// /// 战斗结束时分发:角色 → 装备 → Buff。 /// public void DispatchCombatEnd() { eventSubmodule.onCombatEnd.Invoke(); equipmentSubmodule.currentEquipments.ForEach(e => e.eventSubmodule.onCombatEnd.Invoke()); combatBuffSubmodule.CombatEnd(); } /// /// 回合开始时分发:角色 → 装备 → Buff(含回合计数更新) → 卡牌。 /// public void DispatchRoundStart() { eventSubmodule.onRoundStart.Invoke(); equipmentSubmodule.currentEquipments.ForEach(e => e.eventSubmodule.onRoundStart.Invoke()); combatBuffSubmodule.RoundStart(); deckSubmodule.GetAllCards().ForEach(c => c.eventSubmodule.onRoundStart.Invoke()); } /// /// 回合结束时分发:角色 → 装备 → Buff → 卡牌。 /// public void DispatchRoundEnd() { eventSubmodule.onRoundEnd.Invoke(); equipmentSubmodule.currentEquipments.ForEach(e => e.eventSubmodule.onRoundEnd.Invoke()); combatBuffSubmodule.RoundEnd(); deckSubmodule.GetAllCards().ForEach(c => c.eventSubmodule.onRoundEnd.Invoke()); } /// /// 行动开始时分发:角色 → 装备 → Buff(含行动计数更新) → 卡牌。 /// public void DispatchActionStart() { eventSubmodule.onActionStart.Invoke(); equipmentSubmodule.currentEquipments.ForEach(e => e.eventSubmodule.onActionStart.Invoke()); combatBuffSubmodule.ActionStart(); deckSubmodule.GetAllCards().ForEach(c => c.eventSubmodule.onActionStart.Invoke()); } /// /// 行动结束时分发:角色 → 装备 → Buff → 卡牌。 /// public void DispatchActionEnd() { eventSubmodule.onActionEnd.Invoke(); equipmentSubmodule.currentEquipments.ForEach(e => e.eventSubmodule.onActionEnd.Invoke()); combatBuffSubmodule.ActionEnd(); deckSubmodule.GetAllCards().ForEach(c => c.eventSubmodule.onActionEnd.Invoke()); } } }