refactor 3:
- EnemyManager.cs 不再计算 droppedCoin / droppedGold / baseDamage,只在敌人隐藏完成后区分“击杀”还是“非击杀到家”,并把 DREnemy 上报给 CombatScheduler。 - CombatScheduler.cs 新增统一入口: - OnEnemyDefeated(DREnemy enemy):通过 EnemyDropResolver 解析掉落,再调用 CombatInRunResourceManager 入账,并按结果决定是否触发局外掉落判定。 - OnEnemyReachedBase(DREnemy enemy):从 enemy.BaseDamage 解析伤害,再统一扣减基地血量。
This commit is contained in:
+17
-6
@@ -26,6 +26,7 @@ namespace GeometryTD.CustomComponent
|
||||
private readonly CombatLoadSession _loadSession = new();
|
||||
private readonly CombatEventBridge _eventBridge = new();
|
||||
private readonly CombatInRunResourceManager _combatInRunResourceManager = new();
|
||||
private readonly EnemyDropResolver _enemyDropResolver = new();
|
||||
|
||||
private EntityComponent _entity;
|
||||
private DRLevel _currentLevel;
|
||||
@@ -178,14 +179,14 @@ namespace GeometryTD.CustomComponent
|
||||
return _phaseLoopRuntime.TryRequestEndCombat();
|
||||
}
|
||||
|
||||
public void OnEnemyReachedBase(int baseDamage)
|
||||
public void OnEnemyReachedBase(DREnemy enemy)
|
||||
{
|
||||
if (!IsRunning)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int resolvedBaseDamage = Mathf.Max(0, baseDamage);
|
||||
int resolvedBaseDamage = enemy != null ? Mathf.Max(0, enemy.BaseDamage) : 0;
|
||||
if (resolvedBaseDamage <= 0)
|
||||
{
|
||||
return;
|
||||
@@ -194,18 +195,28 @@ namespace GeometryTD.CustomComponent
|
||||
ApplyBaseDamage(resolvedBaseDamage);
|
||||
}
|
||||
|
||||
public void OnEnemyDefeatedRewardResolved(int gainedCoin, int gainedGold)
|
||||
public void OnEnemyDefeated(DREnemy enemy)
|
||||
{
|
||||
_combatInRunResourceManager.AddEnemyDefeatedReward(gainedCoin, gainedGold);
|
||||
|
||||
if (!IsRunning)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_combatInRunResourceManager.TryRollOutGameItemDrop(
|
||||
EnemyDropResolveContext context = new(
|
||||
enemy,
|
||||
_phaseLoopRuntime.DisplayPhaseIndex,
|
||||
ResolveCurrentThemeType());
|
||||
EnemyDropResolveResult result = _enemyDropResolver.Resolve(context);
|
||||
_combatInRunResourceManager.AddEnemyDefeatedReward(result.Coin, result.Gold);
|
||||
|
||||
if (!result.ShouldRollOutGameItem)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_combatInRunResourceManager.TryRollOutGameItemDrop(
|
||||
context.DisplayPhaseIndex,
|
||||
context.ThemeType);
|
||||
}
|
||||
|
||||
public bool OnCombatFinishReturnRequested()
|
||||
|
||||
Reference in New Issue
Block a user