Refine combat settlement exit flow

This commit is contained in:
basil
2026-03-07 20:09:50 +08:00
parent 3ad7d04b47
commit 703fd6f540
9 changed files with 16 additions and 19 deletions
@@ -15,7 +15,6 @@ namespace GeometryTD.CustomComponent
return;
}
Context.SettlementFlowService.CommitSettlementInventory(Context.SettlementContext);
Flow.EnsureCombatFinishFormUseCaseBound();
Context.SettlementFlowService.OpenCombatFinishForm(
Context.SettlementContext,
@@ -60,9 +60,9 @@ namespace GeometryTD.CustomComponent
Context.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
Context.EnemyManager.OnUpdate(elapseSeconds, realElapseSeconds);
if (Flow.ShouldEnterSettlementFromActiveState(out string reason, out bool isVictory))
if (Flow.ShouldEnterSettlementFromActiveState(out bool isVictory))
{
Flow.ChangeState(new CombatSettlementState(Context, Flow, reason, isVictory));
Flow.ChangeState(new CombatSettlementState(Context, Flow, isVictory));
return;
}
@@ -2,16 +2,13 @@ namespace GeometryTD.CustomComponent
{
internal sealed class CombatSettlementState : CombatStateBase
{
private readonly string _reason;
private readonly bool _isVictory;
public CombatSettlementState(
CombatSchedulerRuntimeContext context,
CombatSchedulerFlowCoordinator flow,
string reason,
bool isVictory) : base(context, flow)
{
_reason = reason;
_isVictory = isVictory;
}
@@ -21,7 +18,6 @@ namespace GeometryTD.CustomComponent
Context.EnemyManager.CleanupTrackedEnemies();
Context.IsFinishAsVictory = _isVictory;
Context.SettlementContext = Context.SettlementFlowService.BuildSettlementContext(
_reason,
_isVictory,
Context.CurrentLevel,
Context.EnemyManager.DefeatedEnemyCount,
@@ -22,9 +22,9 @@ namespace GeometryTD.CustomComponent
Context.PhaseLoopRuntime.AdvancePhaseElapsed(elapseSeconds);
if (Flow.ShouldEnterSettlementFromActiveState(out string reason, out bool isVictory))
if (Flow.ShouldEnterSettlementFromActiveState(out bool isVictory))
{
Flow.ChangeState(new CombatSettlementState(Context, Flow, reason, isVictory));
Flow.ChangeState(new CombatSettlementState(Context, Flow, isVictory));
return;
}
@@ -24,6 +24,13 @@ namespace GeometryTD.CustomComponent
return;
}
if (Context.SettlementContext == null)
{
Flow.EnterFailureFallback("Combat return failed. Settlement context is missing.");
return;
}
Context.SettlementFlowService.CommitSettlementInventory(Context.SettlementContext);
Context.LoadSession.Cleanup();
Flow.CloseCombatFinishForm();
Flow.CloseRewardSelectForm();