示例#1
0
    private void OnEngageTimeout()
    {
        PlayerArmy.WakeUnits();
        EnemyArmy.WakeUnits();

        List <Unit> enemySelectedUnits  = EnemyArmy.GetSelectedUnits();
        List <Unit> enemyUnits          = new List <Unit>(EnemyArmy.GetUnits());
        List <Unit> playerSelectedUnits = PlayerArmy.GetSelectedUnits();
        List <Unit> playerUnits         = new List <Unit>(PlayerArmy.GetUnits());
        int         playerPower         = 0;
        int         enemyPower          = 0;

        foreach (Unit enemyUnit in enemySelectedUnits)
        {
            enemyPower += enemyUnit.Power;
        }
        foreach (Unit playerUnit in playerSelectedUnits)
        {
            playerPower += playerUnit.Power;
        }
        if (playerPower > enemyPower)
        {
            ShowWinnerLabel("You win!", PlayerArmy);
            if (enemyPower == 0)
            {
                EnemyArmy.RemoveUnits();
                PlayerArmy.AddRestingUnits(enemyUnits);
            }
            else
            {
                EnemyArmy.RemoveSelectedUnits();
                PlayerArmy.AddRestingUnits(enemySelectedUnits);
            }
        }
        else if (enemyPower > playerPower)
        {
            ShowWinnerLabel("Enemy wins!", EnemyArmy);
            if (playerPower == 0)
            {
                PlayerArmy.RemoveUnits();
                EnemyArmy.AddRestingUnits(playerUnits);
            }
            else
            {
                PlayerArmy.RemoveSelectedUnits();
                EnemyArmy.AddRestingUnits(playerSelectedUnits);
            }
        }
        PlayerArmy.UpdateUnitPositions();
        EnemyArmy.UpdateUnitPositions();
        PlayerArmy.DeselectAll();
        EnemyArmy.DeselectAll();

        if (EnemyArmy.GetArmyPower() <= 0)
        {
            EnemyLeader.SetDefeated();
        }

        CurrentState = State.PreBattle;

        if (EnemyArmy.GetUnits().Count == 0 || PlayerArmy.GetUnits().Count == 0)
        {
            if (EnemyArmy.GetUnits().Count == 0)
            {
                WinAudio.Play();
            }
            else
            {
                LoseAudio.Play();
            }
            OnRetreatPressed();
        }
    }