namespace GeometryTD.CustomComponent { internal sealed class CombatRewardSelectionState : CombatStateBase { public CombatRewardSelectionState(CombatSchedulerRuntime runtime, CombatSchedulerCoordinator coordinator) : base(runtime, coordinator) { } public override void OnEnter() { if (Runtime.SettlementContext == null) { Coordinator.EnterFailureFallback("Combat reward selection failed. Settlement context is missing."); return; } Coordinator.EnsureRewardSelectFormUseCaseBound(); int nextRewardOrdinal = Runtime.NextRewardOrdinal; if (!Runtime.CombatSettlementService.TryPrepareRewardSelection( Runtime.SettlementContext, Runtime.PhaseLoopRuntime.DisplayPhaseIndex, Coordinator.ResolveCurrentThemeType(), Runtime.NodeContext != null ? Runtime.NodeContext.RunSeed : 0, Runtime.NodeContext != null ? Runtime.NodeContext.SequenceIndex : -1, ref nextRewardOrdinal, Runtime.RewardSelectFormUseCase, Coordinator.OnFullBaseHpRewardSelected, Coordinator.OnFullBaseHpRewardGiveUp)) { Coordinator.ChangeState(new CombatFinishFormState(Runtime, Coordinator)); return; } Runtime.NextRewardOrdinal = nextRewardOrdinal; } public override void OnExit() { Coordinator.CloseRewardSelectForm(); } } }