private IEnumerator CheckAwailiblePositions() { TallonRollHelper tallonRollHelper = new TallonRollHelper(Selection.ThisShip); yield return(tallonRollHelper.CheckPositions()); bool isAnyPositionAvailable = tallonRollHelper.IsPositionAllowed.Values.Any(n => n == true); if (isAnyPositionAvailable) { TallonRollShiftSubPhase subPhase = Phases.StartTemporarySubPhaseNew <TallonRollShiftSubPhase>( "Tallon Roll Shift", delegate { Phases.FinishSubPhase(typeof(TallonRollSubPhase)); } ); subPhase.AddDecision("Forward", delegate { TrySelectPosition(tallonRollHelper, 1); }, isCentered: true); subPhase.AddDecision("Center", delegate { TrySelectPosition(tallonRollHelper, 0); }, isCentered: true); subPhase.AddDecision("Backward", delegate { TrySelectPosition(tallonRollHelper, -1); }, isCentered: true); subPhase.DescriptionShort = "Select final position"; subPhase.DecisionOwner = Selection.ThisShip.Owner; subPhase.DefaultDecisionName = "Center"; subPhase.OnNextButtonIsPressed = FinishTallonRoll; subPhase.Start(); } else { Messages.ShowError("Tallon Roll: No available positions"); } }
private void TrySelectPosition(TallonRollHelper tallonRollHelper, int direction) { UI.HideNextButton(); Selection.ThisShip.SetPosition(tallonRollHelper.GetPosition(direction)); DecisionSubPhase.ResetInput(); if (tallonRollHelper.IsPositionAllowed[direction]) { UI.ShowNextButton(); } else { Messages.ShowError("This position is not available"); } if (Selection.ThisShip.Owner is Players.GenericAiPlayer) { UI.CallClickNextPhase(); } }