补全 S1 测试
- 调整 CombatNode 正常结束与异常的变量语义,现在是 DidCombatWin 与 Exception - 补充测试样例 - 完成 S1 目标
This commit is contained in:
+1
-1
@@ -91,7 +91,7 @@ namespace GeometryTD.CustomComponent
|
||||
_runtime.EnemyManager.EndPhase();
|
||||
_runtime.EnemyManager.ResetCombatStats();
|
||||
_coordinator.ResetRuntime();
|
||||
_runtime.IsFinishAsVictory = true;
|
||||
_runtime.DidCombatWin = true;
|
||||
|
||||
_runtime.CurrentLevel = level;
|
||||
_runtime.RunId = runId;
|
||||
|
||||
+19
-9
@@ -53,7 +53,7 @@ namespace GeometryTD.CustomComponent
|
||||
_runtime.EnemyDropResolver.Reset();
|
||||
_runtime.SettlementContext = null;
|
||||
_runtime.CurrentLevel = null;
|
||||
_runtime.IsFinishAsVictory = true;
|
||||
_runtime.DidCombatWin = true;
|
||||
_runtime.IsCompleted = false;
|
||||
_runtime.NodeEnterFired = false;
|
||||
_runtime.RunId = null;
|
||||
@@ -124,21 +124,21 @@ namespace GeometryTD.CustomComponent
|
||||
TryBeginNextPhase();
|
||||
}
|
||||
|
||||
public bool ShouldEnterSettlementFromActiveState(out bool isVictory)
|
||||
public bool ShouldEnterSettlementFromActiveState(out bool didCombatWin)
|
||||
{
|
||||
if (GetCurrentBaseHp() <= 0)
|
||||
{
|
||||
isVictory = false;
|
||||
didCombatWin = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_runtime.PhaseLoopRuntime.IsEndCombatRequested)
|
||||
{
|
||||
isVictory = true;
|
||||
didCombatWin = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
isVictory = true;
|
||||
didCombatWin = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -198,9 +198,9 @@ namespace GeometryTD.CustomComponent
|
||||
GameEntry.UIRouter.CloseUI(UIFormType.DialogForm);
|
||||
}
|
||||
|
||||
public void CompleteNormalCombatAndNotify(bool succeeded)
|
||||
public void CompleteNormalCombatAndNotify(bool didCombatWin)
|
||||
{
|
||||
CompleteCombat(succeeded);
|
||||
CompleteCombat(didCombatWin);
|
||||
GameEntry.Event.Fire(
|
||||
this,
|
||||
NodeCompleteEventArgs.Create(
|
||||
@@ -208,7 +208,8 @@ namespace GeometryTD.CustomComponent
|
||||
_runtime.NodeId,
|
||||
_runtime.NodeType,
|
||||
_runtime.SequenceIndex,
|
||||
succeeded,
|
||||
RunNodeCompletionStatus.Completed,
|
||||
didCombatWin,
|
||||
GameEntry.PlayerInventory != null ? GameEntry.PlayerInventory.GetInventorySnapshot() : null));
|
||||
}
|
||||
|
||||
@@ -219,7 +220,16 @@ namespace GeometryTD.CustomComponent
|
||||
CloseRewardSelectForm();
|
||||
CloseDialogForm();
|
||||
CompleteCombat(false);
|
||||
GameEntry.Event.Fire(this, CombatFailureReturnEventArgs.Create());
|
||||
GameEntry.Event.Fire(
|
||||
this,
|
||||
NodeCompleteEventArgs.Create(
|
||||
_runtime.RunId,
|
||||
_runtime.NodeId,
|
||||
_runtime.NodeType,
|
||||
_runtime.SequenceIndex,
|
||||
RunNodeCompletionStatus.Exception,
|
||||
false,
|
||||
GameEntry.PlayerInventory != null ? GameEntry.PlayerInventory.GetInventorySnapshot() : null));
|
||||
}
|
||||
|
||||
public bool HandleStartFailure(string errorMessage)
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ namespace GeometryTD.CustomComponent
|
||||
public RewardSelectFormUseCase RewardSelectFormUseCase { get; set; }
|
||||
public CombatStateBase CurrentState { get; set; }
|
||||
public Action<bool> CombatEndedCallback { get; set; }
|
||||
public bool IsFinishAsVictory { get; set; } = true;
|
||||
public bool DidCombatWin { get; set; } = true;
|
||||
public bool IsCompleted { get; set; }
|
||||
public bool NodeEnterFired { get; set; }
|
||||
public CombatSettlementContext SettlementContext { get; set; }
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ namespace GeometryTD.CustomComponent
|
||||
|
||||
internal sealed class CombatSettlementResult
|
||||
{
|
||||
public bool IsVictory;
|
||||
public bool DidCombatWin;
|
||||
public int FinalCoin;
|
||||
public int FinalBaseHp;
|
||||
public int MaxBaseHp;
|
||||
|
||||
+5
-5
@@ -18,14 +18,14 @@ namespace GeometryTD.CustomComponent
|
||||
private const float LowBaseHpTowerEndurancePenalty = 10f;
|
||||
|
||||
public CombatSettlementContext BuildSettlementContext(
|
||||
bool isVictory,
|
||||
bool didCombatWin,
|
||||
DRLevel currentLevel,
|
||||
int defeatedEnemyCount,
|
||||
CombatRunResourceStore resourceStore)
|
||||
{
|
||||
bool shouldOpenFullBaseHpRewardSelect = false;
|
||||
ResolveSettlementByBaseHp(
|
||||
isVictory,
|
||||
didCombatWin,
|
||||
currentLevel,
|
||||
resourceStore,
|
||||
out int currentBaseHp,
|
||||
@@ -39,7 +39,7 @@ namespace GeometryTD.CustomComponent
|
||||
CombatSettlementContext settlementContext = new CombatSettlementContext
|
||||
{
|
||||
};
|
||||
settlementContext.Result.IsVictory = isVictory;
|
||||
settlementContext.Result.DidCombatWin = didCombatWin;
|
||||
settlementContext.Result.FinalCoin = Mathf.Max(0, resourceStore != null ? resourceStore.CurrentCoin : 0);
|
||||
settlementContext.Result.FinalBaseHp = currentBaseHp;
|
||||
settlementContext.Result.MaxBaseHp = maxBaseHp;
|
||||
@@ -173,7 +173,7 @@ namespace GeometryTD.CustomComponent
|
||||
}
|
||||
|
||||
private static void ResolveSettlementByBaseHp(
|
||||
bool isVictory,
|
||||
bool didCombatWin,
|
||||
DRLevel currentLevel,
|
||||
CombatRunResourceStore resourceStore,
|
||||
out int currentBaseHp,
|
||||
@@ -197,7 +197,7 @@ namespace GeometryTD.CustomComponent
|
||||
appliedLowBaseHpPenalty = false;
|
||||
shouldOpenFullBaseHpRewardSelect = false;
|
||||
|
||||
if (!isVictory || resourceStore == null)
|
||||
if (!didCombatWin || resourceStore == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
+2
-2
@@ -66,9 +66,9 @@ namespace GeometryTD.CustomComponent
|
||||
Runtime.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
|
||||
Runtime.EnemyManager.OnUpdate(elapseSeconds, realElapseSeconds);
|
||||
|
||||
if (Coordinator.ShouldEnterSettlementFromActiveState(out bool isVictory))
|
||||
if (Coordinator.ShouldEnterSettlementFromActiveState(out bool didCombatWin))
|
||||
{
|
||||
Coordinator.ChangeState(new CombatSettlementState(Runtime, Coordinator, isVictory));
|
||||
Coordinator.ChangeState(new CombatSettlementState(Runtime, Coordinator, didCombatWin));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -2,23 +2,23 @@ namespace GeometryTD.CustomComponent
|
||||
{
|
||||
internal sealed class CombatSettlementState : CombatStateBase
|
||||
{
|
||||
private readonly bool _isVictory;
|
||||
private readonly bool _didCombatWin;
|
||||
|
||||
public CombatSettlementState(
|
||||
CombatSchedulerRuntime runtime,
|
||||
CombatSchedulerCoordinator coordinator,
|
||||
bool isVictory) : base(runtime, coordinator)
|
||||
bool didCombatWin) : base(runtime, coordinator)
|
||||
{
|
||||
_isVictory = isVictory;
|
||||
_didCombatWin = didCombatWin;
|
||||
}
|
||||
|
||||
public override void OnEnter()
|
||||
{
|
||||
Runtime.EnemyManager.EndPhase();
|
||||
Runtime.EnemyManager.CleanupTrackedEnemies();
|
||||
Runtime.IsFinishAsVictory = _isVictory;
|
||||
Runtime.DidCombatWin = _didCombatWin;
|
||||
Runtime.SettlementContext = Runtime.CombatSettlementService.BuildSettlementContext(
|
||||
_isVictory,
|
||||
_didCombatWin,
|
||||
Runtime.CurrentLevel,
|
||||
Runtime.EnemyManager.DefeatedEnemyCount,
|
||||
Runtime.CombatRunResourceStore);
|
||||
|
||||
+2
-2
@@ -22,9 +22,9 @@ namespace GeometryTD.CustomComponent
|
||||
|
||||
Runtime.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
|
||||
|
||||
if (Coordinator.ShouldEnterSettlementFromActiveState(out bool isVictory))
|
||||
if (Coordinator.ShouldEnterSettlementFromActiveState(out bool didCombatWin))
|
||||
{
|
||||
Coordinator.ChangeState(new CombatSettlementState(Runtime, Coordinator, isVictory));
|
||||
Coordinator.ChangeState(new CombatSettlementState(Runtime, Coordinator, didCombatWin));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ namespace GeometryTD.CustomComponent
|
||||
Runtime.LoadSession.Cleanup();
|
||||
Coordinator.CloseCombatFinishForm();
|
||||
Coordinator.CloseRewardSelectForm();
|
||||
Coordinator.CompleteNormalCombatAndNotify(Runtime.IsFinishAsVictory);
|
||||
Coordinator.CompleteNormalCombatAndNotify(Runtime.DidCombatWin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,6 +94,7 @@ namespace GeometryTD.CustomComponent
|
||||
_activeNodeId,
|
||||
_activeNodeType,
|
||||
_activeSequenceIndex,
|
||||
RunNodeCompletionStatus.Completed,
|
||||
true,
|
||||
GameEntry.PlayerInventory != null ? GameEntry.PlayerInventory.GetInventorySnapshot() : null));
|
||||
ClearActiveNodeContext();
|
||||
|
||||
@@ -59,6 +59,7 @@ namespace GeometryTD.CustomComponent
|
||||
_activeNodeId,
|
||||
_activeNodeType,
|
||||
_activeSequenceIndex,
|
||||
RunNodeCompletionStatus.Completed,
|
||||
true,
|
||||
GameEntry.PlayerInventory != null ? GameEntry.PlayerInventory.GetInventorySnapshot() : null));
|
||||
ClearActiveNodeContext();
|
||||
|
||||
Reference in New Issue
Block a user