public void Initialize() { uiHandler = GetComponent <UIHandler>(); gameManager = GetComponent <GameManager>(); scenarioLoader = GetComponent <ScenarioLoader>(); outcomeVisualizer = new OutcomeVisualizer(GetComponent <PathVisualizer>()); outcomeExecutor = new OutcomeExecutor(this); outcomeAnimator = new OutcomeAnimator(this, uiHandler); selectionReachableHexes = new HashSet <HexEntry>(); enemyReachableHexes = new List <HexEntry>(); UpdateUnitList(); uiHandler.SlideCameraToHexAvg(UnitsByPlayer[gameManager.ActivePlayer].Select(x => x.Position).ToList()); turnsOfPlay = 0; scenarioLoader.SetTurnsRemainingText(Config.turnsBeforePlayer1Wins - turnsOfPlay + 1); gameManager.AITryAITurn(); if (gameManager.NetEnemyTurn()) // Netcode { uiHandler.NotYourTurn(); } }
public void EndTurn() { if (playbackAnimation != null) { RevertBoardState(CreateBoardState(new List <Outcome>())); return; } UnitSelected = null; // Clear selection gameManager.NetTrySendMoves(boardStateHistory); foreach (IUnitController unit in _unitsByPlayer[gameManager.ActivePlayer]) { unit.TurnEndUpkeep(); } PlayerType previousPlayer = gameManager.playerDirectory[gameManager.ActivePlayer]; switch (gameManager.ActivePlayer) { case 1: gameManager.ActivePlayer = 2; break; case 2: gameManager.ActivePlayer = 1; break; } /* * foreach(IUnitController unit in unitsByUniqueID) { * if (unit.PlayerOwner == gameManager.ActivePlayer) { * unit.SpriteManager.MovePointDisplay(true); * } * else { * unit.SpriteManager.MovePointDisplay(false); * } * }*/ if (gameManager.NetEnemyTurn()) // If it's an online enemy's turn, show the panel { uiHandler.NotYourTurn(); } uiHandler.SlideCameraToHexAvg(UnitsByPlayer[gameManager.ActivePlayer].Select(x => x.Position).ToList()); foreach (IUnitController unit in _unitsByPlayer[gameManager.ActivePlayer]) { unit.TurnStartUpkeep(); } if (previousPlayer == PlayerType.Local) { uiHandler.TurnButtonDisplay(gameManager.ActivePlayer); // Only update after local turns if (gameManager.playerDirectory[gameManager.ActivePlayer] == PlayerType.Local) // If previous and current player were local, save boardstatehistory as storedenemymoves { storedEnemyPremoveState = boardStateHistory[0]; storedEnemyMoves = new List <Outcome>(); foreach (BoardState boardState in boardStateHistory) { storedEnemyMoves = storedEnemyMoves.Concat(boardState.movesSincePrevState).ToList(); } } boardStateHistory = new List <BoardState>(); // Clear undos -- turn end button is commitment! boardStateHistory.Add(CreateBoardState(new List <Outcome>())); // Prepare next player's potential undo (after upkeep) if (gameManager.playerDirectory[gameManager.ActivePlayer] != PlayerType.Local) { storedEnemyMoves = new List <Outcome>(); // For new nonlocal moves, clear enemy move cache storedEnemyPremoveState = boardStateHistory[0]; } } else { boardStateHistory = new List <BoardState>(); // Clear undos -- turn end button is commitment! boardStateHistory.Add(CreateBoardState(new List <Outcome>())); // Prepare next player's potential undo (after upkeep) } if (gameManager.ActivePlayer == 1) { turnsOfPlay++; scenarioLoader.SetTurnsRemainingText(Config.turnsBeforePlayer1Wins - turnsOfPlay + 1); } if (UnitsByPlayer[1].Count == 0) { uiHandler.DisplayVictory(2); } if (UnitsByPlayer[2].Count == 0) { uiHandler.DisplayVictory(1); } else if (turnsOfPlay > Config.turnsBeforePlayer1Wins) { uiHandler.DisplayVictory(1); } else { gameManager.AITryAITurn(); } }