/// <summary>
    /// Finishes game.
    /// </summary>
    public static void EndGame()
    {
        void SetZeroBatter <T>(HashSet <T> set) where T : Player
        {
            foreach (T player in set)
            {
                foreach (PlayerStatistics.PS stat in PlayerStatistics.generalPS)
                {
                    if (player.stats.FIndStat(stat))
                    {
                        player.stats.SetStat(0, stat);
                    }

                    //NOTE: THIS SHOULD BE REMOVED AFTER RATING FUNCTION DEFINED.
                    player.stats.SetStat(Random.Range(3f, 9.9f), PlayerStatistics.PS.RAT);
                }

                if (typeof(T) == typeof(Batter))
                {
                    foreach (PlayerStatistics.PS stat in PlayerStatistics.batterPS)
                    {
                        if (!player.stats.FIndStat(stat))
                        {
                            player.stats.SetStat(0, stat);
                        }
                    }
                }
                else if (typeof(T) == typeof(Pitcher))
                {
                    foreach (PlayerStatistics.PS stat in PlayerStatistics.pitcherPS)
                    {
                        if (!player.stats.FIndStat(stat))
                        {
                            player.stats.SetStat(0, stat);
                        }
                    }
                }
            }
        }

        Player FindHighestRate()
        {
            float  rate          = 0;
            Player highestPlayer = null;

            void rateRefresh <T>(HashSet <T> set) where T : Player
            {
                foreach (Player player in set)
                {
                    float playerRate = player.stats.GetStat(PlayerStatistics.PS.RAT);
                    if (playerRate > rate)
                    {
                        rate          = playerRate;
                        highestPlayer = player;
                    }
                }
            }

            rateRefresh(InGameManager.game.homeBatterSet);
            rateRefresh(InGameManager.game.awayBatterSet);
            rateRefresh(InGameManager.game.homePitcherSet);
            rateRefresh(InGameManager.game.awayPitcherSet);

            return(highestPlayer);
        }

        //Set unassigned stats to be zero.
        SetZeroBatter(InGameManager.game.homeBatterSet);
        SetZeroBatter(InGameManager.game.awayBatterSet);
        SetZeroBatter(InGameManager.game.homePitcherSet);
        SetZeroBatter(InGameManager.game.awayPitcherSet);

        //Assigns POTM.
        InGameManager.game.playerOfTheMatch = FindHighestRate();

        //Assigns win or loss to the game.
        if (InGameManager.game.homeScoreBoard.R > InGameManager.game.awayScoreBoard.R)
        {
            InGameManager.game.home.teamStats.SetData(TeamStatistics.TS.WIN, 1);
            InGameManager.game.away.teamStats.SetData(TeamStatistics.TS.LOSS, 1);
        }
        else if (InGameManager.game.homeScoreBoard.R < InGameManager.game.awayScoreBoard.R)
        {
            InGameManager.game.away.teamStats.SetData(TeamStatistics.TS.WIN, 1);
            InGameManager.game.home.teamStats.SetData(TeamStatistics.TS.LOSS, 1);
        }

        //Marks game as played.
        InGameManager.game.isPlayed = true;
        InGameManager.isGameEnd     = true;
        //Shows a summary tab after finishes a game.

        if (InGameManager.isUIEnabled)
        {
            InGameObjects InGameObjects = GameObject.Find("InGameManager").GetComponent <InGameObjects>();
            InGameObjects.boardPanel.GetComponent <UnityEngine.UI.Button>().interactable = false;
            InGameObjects.resultPanel.SetActive(true);
            InGameObjects.resultPanel.GetComponent <ResultPanel>().RefreshItems(InGameManager.game);
        }
    }
Beispiel #2
0
 private void Start()
 {
     InGameObjects = new InGameObjects();
     StartCoroutine(loadLevel(levelId));
 }
    /// <summary>
    /// Advances inning.
    /// </summary>
    public static void AdvanceInning()
    {
        //Innings pitched
        InGameManager.currentPitcher.stats.SetStat(0.7f, PlayerStatistics.PS.IP);

        //If the game satisfies the end condition, end game.
        if ((InGameManager.game.homeScoreBoard.R != InGameManager.game.awayScoreBoard.R) &&
            InGameManager.currentInning >= 9 && (InGameManager.isBottom || InGameManager.game.homeScoreBoard.R > InGameManager.game.awayScoreBoard.R))
        {
            EndGame();
            return;
        }

        if (InGameManager.isUIEnabled)
        {
            //BoardPanel UI.
            InGameObjects InGameObjects = GameObject.Find("InGameManager").GetComponent <InGameObjects>();
            InGameObjects.boardPanel.AddScorePanel();
        }

        //Switch side.
        Pitcher tempPitcher = InGameManager.currentPitcher;

        InGameManager.currentPitcher = InGameManager.otherPitcher;
        InGameManager.otherPitcher   = tempPitcher;

        if (InGameManager.currentAttack == InGameManager.game.home)
        {
            InGameManager.currentAttack = InGameManager.game.away;
            InGameManager.currentDefend = InGameManager.game.home;

            InGameManager.currentBatter = InGameManager.awayBattingOrder[InGameManager.awayCurrentBattersIndex];
        }
        else if (InGameManager.currentAttack == InGameManager.game.away)
        {
            InGameManager.currentAttack = InGameManager.game.home;
            InGameManager.currentDefend = InGameManager.game.away;

            InGameManager.currentBatter = InGameManager.homeBattingOrder[InGameManager.homeCurrentBattersIndex];
        }
        else
        {
            throw new System.NullReferenceException("Error: There is no appropriate team matching. Check currentAttack and Game instance again.");
        }

        if (InGameManager.isBottom)
        {
            InGameManager.isBottom = false;
            InGameManager.currentInning++;
        }
        else
        {
            InGameManager.isBottom = true;
        }

        for (int i = 0; i < 4; ++i)
        {
            InGameManager.runnerInBases[i] = null;
        }

        InGameManager.outCount = 0;
        AtPlate.ClearCount();

        //UI
        if (InGameManager.isUIEnabled)
        {
            InGameObjects InGameObjects = GameObject.Find("InGameManager").GetComponent <InGameObjects>();
            InGameObjects.PlayerUIApply.SetPlayers();
        }
    }