private void PlayCorrectEndgameClip() { foreach (Player player in Player.Players.Values) { if (player.Type == PlayerType.AI && player.HasWon) { PlayEndGameMusic(SoundType.Loose); return; } } if (Player.Players[0].Type == PlayerType.AI || Player.Players[1].Type == PlayerType.AI) { PlayEndGameMusic(SoundType.Win); } else { if (VictoryLossChecker.IsGameDrawn()) { PlayEndGameMusic(SoundType.Loose); // draw - in the future change this to a new track } else if (Player.Players[TurnManager.Instance.PlayerHavingTurn].HasWon) { PlayEndGameMusic(SoundType.Win); } else { PlayEndGameMusic(SoundType.Loose); } } }
void Update() { foreach (Transform go in transform) { go.gameObject.SetActive(TurnManager.Instance.TurnCount != 0 && !VictoryLossChecker.HasGameEnded()); } }
private void Update() { if (Input.GetKeyDown(KeyCode.Q) && Application.isEditor) { Debug.Log(currentMusic.clip.name); } if ((SceneManager.GetActiveScene().name == "_MENU" || SceneManager.GetActiveScene().name == "_ManagementScene" || SceneManager.GetActiveScene().name == "_LobbyScene") && (currentMusic == null || currentMusic.isPlaying == false)) { PlayRandomClipOfType(SoundType.Menu); } if ((GameStateManager.Instance.IsSceneGameScene(SceneManager.GetActiveScene()) && isPlayingGameOverMusic == false && VictoryLossChecker.HasGameEnded())) { PlayCorrectEndgameClip(); } else if (VictoryLossChecker.HasGameEnded() == false && GameStateManager.Instance.IsSceneGameScene(SceneManager.GetActiveScene()) && (currentMusic == null || currentMusic.isPlaying == false)) { PlayRandomClipOfType(SoundType.Game); currentSongTime = 0f; } currentSongTime += Time.deltaTime; if (GameStateManager.Instance.IsSceneGameScene(SceneManager.GetActiveScene()) && IsPlayingWind && startedWindAlready == false) { PlayRandomClipOfType(SoundType.Wind); startedWindAlready = true; } }
void Update() { if (isEndgameFlag) { if (VictoryLossChecker.HasGameEnded() && VictoryLossChecker.IsGameDrawn() == false) { if (Player.Players[0].HasWon) { flag.sprite = Flags[(int)Player.Players[0].Colour]; emblem.sprite = Emblems[(int)Player.Players[0].Race]; } else { flag.sprite = Flags[(int)Player.Players[1].Colour]; emblem.sprite = Emblems[(int)Player.Players[1].Race]; } } UIManager.SmoothlyTransitionActivity(gameObject, VictoryLossChecker.HasGameEnded() && VictoryLossChecker.IsGameDrawn() == false, 0.01f); } else { if (Player.Players.ContainsKey(TurnManager.Instance.PlayerToMove)) { flag.sprite = Flags[(int)Player.Players[TurnManager.Instance.PlayerToMove].Colour]; emblem.sprite = Emblems[(int)Player.Players[TurnManager.Instance.PlayerToMove].Race]; } } }
private void LateUpdate() { if (GameStateManager.Instance.MatchType != MatchTypes.Singleplayer) { return; } if (TurnManager.Instance.TurnCount == 0 && GameStateManager.Instance.IsCurrentPlayerAI()) { PreGameAI tool = new PreGameAI(DeploymentPanel); tool.PositionUnits(); endButton.OK(); } if (VictoryLossChecker.HasGameEnded() || /*QCManager.QCisHappening ||*/ GameStateManager.Instance.GameState == GameStates.AnimatingState || GameStateManager.Instance.IsItPreGame() || actionCooldown || GameStateManager.Instance.IsCurrentPlayerAI() == false) { return; } // Already we know it is decisionmaking moment! // If green player has tim,e to move and he is an AI, do AI. if (CheckIfTimeForAI(0)) { ChangeAIToAppropriateOne(0); PlayerAIs[0].DoAI(); } if (CheckIfTimeForAI(1)) { ChangeAIToAppropriateOne(1); PlayerAIs[1].DoAI(); } if (GameStateManager.Instance.GameState == GameStates.RetaliationState && IsCurrentTurnHuman() && isRetaliating == false) { isRetaliating = true; CombatController.Instance.RetaliationForAI(); } }
public void ReplayTheSameGame() { // THIS AINT WORKING! Have to do it MUCH better! Debug.LogError("This aint no gonna work lol"); FindObjectOfType <TurnNumberText>().ResetColour(); AudioManager.isPlayingGameOverMusic = false; UIManager.SmoothlyTransitionActivity(WinScreen, false, 0.001f); TurnManager.Instance.TurnCount = 1; TurnManager.Instance.PlayerHavingTurn = 0; TurnManager.Instance.isEndgameTrue = false; TurnManager.Instance.MovementPhase(); VictoryLossChecker.Clear(); skybox.SetSkyboxToRandom(); foreach (UnitScript unit in FindObjectsOfType <UnitScript>()) { if (Application.isEditor) { DestroyImmediate(unit.gameObject); } else { Destroy(unit.gameObject); } } foreach (Tile tile in Map.Board) { tile.isOccupiedByPlayer[0] = false; tile.isOccupiedByPlayer[1] = false; tile.isWalkable = true; tile.myUnit = null; } foreach (KeyValuePair <Vector3, Unit> pair in PlayerOneArmy) { Instantiate(pair.Value.thisUnitFirstPlayer, pair.Key, pair.Value.thisUnitFirstPlayer.transform.rotation); } foreach (KeyValuePair <Vector3, Unit> pair in PlayerTwoArmy) { Instantiate(pair.Value.thisUnitSecondPlayer, pair.Key, pair.Value.thisUnitFirstPlayer.transform.rotation); } }
void Update() { if (VictoryLossChecker.HasGameEnded() == false) { return; } if (Player.Players[0].HasWon && Player.Players[1].HasWon == false) { GetComponent <Text>().text = Player.Players[0].Colour.ToString() + "'s Victory!"; } if (Player.Players[1].HasWon && Player.Players[0].HasWon == false) { GetComponent <Text>().text = Player.Players[1].Colour.ToString() + "'s Victory!"; } if (Player.Players[0].HasWon && Player.Players[1].HasWon) { GetComponent <Text>().text = "Draw!"; } }
public override GameObject AI_ChooseTarget() { int speed = myUnit.GetComponent <UnitMovement>().GetCurrentMoveSpeed(true); foreach (UnitScript enemy in VictoryLossChecker.GetEnemyUnitList()) { if (Pathfinder.Instance.GetDistanceFromTo(myUnit.myTile, enemy.myTile, true) <= speed && (enemy.isRanged || enemy.GetComponent <HeroScript>() != null)) { foreach (Tile neighbour in enemy.myTile.GetNeighbours()) { if (neighbour.IsLegalTile() && Pathfinder.Instance.WouldTileBeLegal(neighbour, myUnit, speed + 2)) { return(neighbour.gameObject); } } } } foreach (UnitScript enemy in VictoryLossChecker.GetEnemyUnitList()) { if (Pathfinder.Instance.GetDistanceFromTo(myUnit.myTile, enemy.myTile, true) <= speed) { foreach (Tile neighbour in enemy.myTile.GetNeighbours()) { if (neighbour.IsLegalTile() && Pathfinder.Instance.WouldTileBeLegal(neighbour, myUnit, speed + 2)) { return(neighbour.gameObject); } } } } // Here we have NO targets at all.. IMO we can move just by one for no reason at all xD foreach (Tile neighbour in myUnit.myTile.GetNeighbours()) { if (neighbour.IsLegalTile()) { Debug.Log(neighbour.name); return(neighbour.gameObject); } } Debug.Log(myUnit.myTile.name); return(myUnit.myTile.gameObject); }
public static List <UnitScript> PossibleTargets(ShootingScript shooter, Vector3 start) { Bounds Range = new Bounds(start, new Vector3(2 * shooter.currShootingRange + 0.25f, 5, 2 * shooter.currShootingRange + 0.25f)); Bounds miniRange = new Bounds(start, Vector3.zero); if (shooter.currMinimalRange > 0) { miniRange = new Bounds(start, new Vector3(2 * shooter.currMinimalRange + 0.25f, 5, 2 * shooter.currMinimalRange + 0.25f)); } List <UnitScript> targets = new List <UnitScript>(); foreach (UnitScript enemy in VictoryLossChecker.GetEnemyUnitList()) { if (Range.Contains(enemy.transform.position) == true && miniRange.Contains(enemy.transform.position) == false) { targets.Add(enemy); } } return(targets); }
///////////////// AI segment public override bool AI_IsGoodToUseNow() { if (TurnManager.Instance.TurnCount >= 15) { return(true); } if (TurnManager.Instance.TurnCount >= 9 || myUnit.CurrentHP == 1) { int speed = myUnit.GetComponent <UnitMovement>().GetCurrentMoveSpeed(true); foreach (UnitScript enemy in VictoryLossChecker.GetEnemyUnitList()) { int distance = Pathfinder.Instance.GetDistanceFromTo(myUnit.myTile, enemy.myTile, true); if ((enemy.isRanged || enemy.GetComponent <HeroScript>() != null) && distance != -1 && (distance > speed && speed < distance + 2) || speed + 2 > distance && (float)(speed + 2) / 2 < distance) { return(true); } } } return(false); }
public UnitScript FindBestTarget(ShootingScript shooter, Vector3 startingPosition, int range) { // we want to get THE BEST target XD. Which for now means: // 1. Get all enemies we, from the tile, could shoot at as a Dictionary of units and floats. // 2. For each of them calculate their value (we will use it once again as shooting evaluation) // 3. Return the best one xD. Dictionary <UnitScript, float> TargetsEvaluated = new Dictionary <UnitScript, float>(); List <UnitScript> AllEnemies = VictoryLossChecker.GetEnemyUnitList(); Bounds Range = new Bounds(startingPosition, new Vector3(2 * range + 0.25f, 5, 2 * range + 0.25f)); foreach (var enemy in AllEnemies) { if (Range.Contains(enemy.transform.position)) { TargetsEvaluated.Add(enemy, EvaluateAsATarget(shooter.GetComponent <UnitScript>(), enemy.myTile)); } } if (TargetsEvaluated.Keys.Count == 0) { return(null); } else { float highestValue = -Mathf.Infinity; UnitScript choice = null; foreach (var item in TargetsEvaluated) { if (item.Value > highestValue) { highestValue = item.Value; choice = item.Key; } } // Debug.Log("Shooting target for: " + shooter + " has been found!" + " Target is: " + choice + " Evaluated as: " + TargetsEvaluated[choice]); return(choice); } }
void SelectNextAvailableUnit() { List <UnitScript> AllUnits = new List <UnitScript>(VictoryLossChecker.GetMyUnitList()); List <UnitScript> PossibleUnits = new List <UnitScript>(); foreach (UnitScript unit in AllUnits) { if (GameStateManager.Instance.CanUnitActInThisPhase(unit)) { PossibleUnits.Add(unit); } } if (PossibleUnits.Count > 0) { SelectAUnit(PossibleUnits[Random.Range(0, PossibleUnits.Count)], true); } else { PopupTextController.AddPopupText("No more units ot act!", PopupTypes.Info); } }
void Update() { if (VictoryLossChecker.HasGameEnded() == false) { return; } if (VictoryLossChecker.IsGameDrawn()) { DrawText(); } else { switch (GameStateManager.Instance.MatchType) { case MatchTypes.Online: for (int i = 0; i < Player.Players.Count; i++) { if (Player.Players[i].Type == PlayerType.Local) { if (Player.Players[i].HasWon) { WinText(i); } else { LoseText(i); } } } break; case MatchTypes.HotSeat: for (int i = 0; i < Player.Players.Count; i++) { if (TurnManager.Instance.PlayerToMove == i) { if (Player.Players[i].HasWon) { WinText(i); } else { LoseText(i); } } } break; case MatchTypes.Singleplayer: for (int i = 0; i < Player.Players.Count; i++) { if (Player.Players[i].Type == PlayerType.Local) { if (Player.Players[i].HasWon) { WinText(i); } else { LoseText(i); } } } break; default: break; } } }