Пример #1
0
    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);
            }
        }
    }
Пример #2
0
 void Update()
 {
     foreach (Transform go in transform)
     {
         go.gameObject.SetActive(TurnManager.Instance.TurnCount != 0 && !VictoryLossChecker.HasGameEnded());
     }
 }
Пример #3
0
    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;
        }
    }
Пример #4
0
 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];
         }
         
     }
 }
Пример #5
0
 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();
     }
 }
Пример #6
0
    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);
        }
    }
Пример #7
0
 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!";
     }
 }
Пример #8
0
    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);
    }
Пример #9
0
    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);
    }
Пример #10
0
    ///////////////// 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);
    }
Пример #11
0
    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);
        }
    }
Пример #12
0
    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);
        }
    }
Пример #13
0
    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;
            }
        }
    }