refactor 2: 迁移局内资源真值

- CombatInRunResourceManager 现在持有并管理:
    - CurrentCoin
    - CurrentBaseHp
    - MaxBaseHp
    - GainedCoin / GainedGold
    - 本局 BuildTowerStats 快照
    - 奖励背包快照
    - CombatInRunResourceManager.cs:38
    - CombatInRunResourceManager.cs:46
    - CombatInRunResourceManager.cs:89
    - CombatInRunResourceManager.cs:156
- CombatScheduler 变成资源访问入口,不再通过 CombatNodeComponent 持有 coin/baseHp/build stats 真值。
    - 启动时先初始化局内资源。
    - 对外提供 CurrentCoin / CurrentGold / CurrentBaseHp / CurrentBuildTowerCount
    - 提供 TryConsumeCoin / AddCoin / TryGetBuildTowerStats
- CombatNodeComponent 已退回 facade:
    - 不再保存 _currentCoin / _currentGold / _currentBaseHp / _currentBuildTowerStats
    - 只做只读转发和启动/结束协调
- 资源变化事件现在由资源管理器发布,并补上了 delta 字段:

额外修正
- Reset() 现在会清掉奖励背包里的 ParticipantTowerInstanceIds,避免跨局残留。
- TryConsumeCoin(0) 保持原先返回 true 的语义。
This commit is contained in:
SepComet
2026-03-07 11:41:47 +08:00
parent 1d7c5b80d9
commit 853886797c
5 changed files with 207 additions and 174 deletions
@@ -10,17 +10,20 @@ namespace GeometryTD.CustomEvent
public override int Id => EventId;
public int CurrentBaseHp { get; private set; }
public int DeltaBaseHp { get; private set; }
public CombatBaseHpChangedEventArgs()
{
CurrentBaseHp = 100;
DeltaBaseHp = 0;
}
public static CombatBaseHpChangedEventArgs Create(int currentBaseHp)
public static CombatBaseHpChangedEventArgs Create(int currentBaseHp, int deltaBaseHp = 0)
{
var args = ReferencePool.Acquire<CombatBaseHpChangedEventArgs>();
args.CurrentBaseHp = currentBaseHp;
args.DeltaBaseHp = deltaBaseHp;
return args;
}
@@ -28,6 +31,7 @@ namespace GeometryTD.CustomEvent
public override void Clear()
{
CurrentBaseHp = 100;
DeltaBaseHp = 0;
}
}
}
}
@@ -10,17 +10,20 @@ namespace GeometryTD.CustomEvent
public override int Id => EventId;
public int CurrentCoin { get; private set; }
public int DeltaCoin { get; private set; }
public CombatCoinChangedEventArgs()
{
CurrentCoin = 0;
DeltaCoin = 0;
}
public static CombatCoinChangedEventArgs Create(int currentCoin)
public static CombatCoinChangedEventArgs Create(int currentCoin, int deltaCoin = 0)
{
var args = ReferencePool.Acquire<CombatCoinChangedEventArgs>();
args.CurrentCoin = currentCoin;
args.DeltaCoin = deltaCoin;
return args;
}
@@ -28,6 +31,7 @@ namespace GeometryTD.CustomEvent
public override void Clear()
{
CurrentCoin = 0;
DeltaCoin = 0;
}
}
}
}