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