Ejemplo n.º 1
0
        public void BattleCalculation(Player player1, Player player2, CrusadeArmy crusade1, ArmyScript army2) //Attack on castle calculation
        {
            while ((crusade1.rookie > 0 || crusade1.shooter > 0 || crusade1.infantry > 0 || crusade1.cavalry > 0) &&
                   (army2.rookie > 0 || army2.shooter > 0 || army2.infantry > 0 || army2.cavalry > 0))
            {
                Attack1[0]  = Cavalry.AttackCalculation(crusade1.cavalry, player1.church.crusadeAttack);
                Attack1[1]  = Shooter.AttackCalculation(crusade1.shooter, player1.church.crusadeAttack);
                Attack1[2]  = Infantry.AttackCalculation(crusade1.infantry, player1.church.crusadeAttack);
                Attack1[3]  = Rookie.AttackCalculation(crusade1.rookie, player1.church.crusadeAttack);
                Attack2[0]  = Cavalry.AttackCalculation(army2.cavalry, player2.church.castleAttack);
                Attack2[1]  = Shooter.AttackCalculation(army2.shooter, player2.church.castleAttack);
                Attack2[2]  = Infantry.AttackCalculation(army2.infantry, player2.church.castleAttack);
                Attack2[3]  = Rookie.AttackCalculation(army2.rookie, player2.church.castleAttack);
                Defence1[0] = Rookie.DefenceCalculation(crusade1.rookie, 0);
                Defence1[1] = Shooter.DefenceCalculation(crusade1.shooter, 0);
                Defence1[2] = Infantry.DefenceCalculation(crusade1.infantry, 0);
                Defence1[3] = Cavalry.DefenceCalculation(crusade1.cavalry, 0);
                Defence2[0] = Rookie.DefenceCalculation(army2.rookie, player2.walls.defence);
                Defence2[1] = Shooter.DefenceCalculation(army2.shooter, player2.walls.defence);
                Defence2[2] = Infantry.DefenceCalculation(army2.infantry, player2.walls.defence);
                Defence2[3] = Cavalry.DefenceCalculation(army2.cavalry, player2.walls.defence);
                for (int i = 0; i < 4; i++)
                {
                    if (Attack1[i] > 0)
                    {
                        if (Defence2[0] > 0)
                        {
                            army2.rookie = ((Defence2[0] - Attack1[i]) / (Rookie.Defence + player2.walls.defence));
                            army2.rookie = army2.rookie > 0 ? army2.rookie : 0;
                            Defence2[0]  = Rookie.DefenceCalculation(army2.rookie, player2.walls.defence);
                            Attack2[3]   = Rookie.AttackCalculation(army2.rookie, player2.church.castleAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                crusade1.cavalry = ((Defence1[3] - (Attack2[3] * 3 / 4)) / (Cavalry.Defence));
                                crusade1.cavalry = crusade1.cavalry > 0 ? crusade1.cavalry : 0;
                                Attack1[0]       = Cavalry.AttackCalculation(crusade1.cavalry, player1.church.crusadeAttack);
                                Defence1[3]      = Cavalry.DefenceCalculation(crusade1.cavalry, 0);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                crusade1.infantry = ((Defence1[2] - (Attack2[3] * 3 / 4)) / (Infantry.Defence));
                                crusade1.infantry = crusade1.infantry > 0 ? crusade1.infantry : 0;
                                Attack1[2]        = Infantry.AttackCalculation(crusade1.infantry, player1.church.crusadeAttack);
                                Defence1[2]       = Infantry.DefenceCalculation(crusade1.infantry, 0);
                                break;
                            }

                            case 3:
                            {
                                crusade1.rookie = ((Defence1[0] - (Attack2[3] * 3 / 4)) / (Rookie.Defence));
                                crusade1.rookie = crusade1.rookie > 0 ? crusade1.rookie : 0;
                                Attack1[3]      = Rookie.AttackCalculation(crusade1.rookie, player1.church.crusadeAttack);
                                Defence1[0]     = Rookie.DefenceCalculation(crusade1.rookie, 0);
                                break;
                            }
                            }
                        }
                        else if (Defence2[1] > 0)
                        {
                            army2.shooter = ((Defence2[1] - Attack1[i]) / (Shooter.Defence + player2.walls.defence));
                            army2.shooter = army2.shooter > 0 ? army2.shooter : 0;
                            Defence2[1]   = Shooter.DefenceCalculation(army2.shooter, player2.walls.defence);
                            Attack2[1]    = Shooter.AttackCalculation(army2.shooter, player2.church.castleAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                crusade1.cavalry = ((Defence1[3] - (Attack2[1] * 3 / 4)) / (Cavalry.Defence));
                                crusade1.cavalry = crusade1.cavalry > 0 ? crusade1.cavalry : 0;
                                Attack1[0]       = Cavalry.AttackCalculation(crusade1.cavalry, player1.church.crusadeAttack);
                                Defence1[3]      = Cavalry.DefenceCalculation(crusade1.cavalry, 0);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                crusade1.infantry = ((Defence1[2] - (Attack2[1] * 3 / 4)) / (Infantry.Defence));
                                crusade1.infantry = crusade1.infantry > 0 ? crusade1.infantry : 0;
                                Attack1[2]        = Infantry.AttackCalculation(crusade1.infantry, player1.church.crusadeAttack);
                                Defence1[2]       = Infantry.DefenceCalculation(crusade1.infantry, 0);
                                break;
                            }

                            case 3:
                            {
                                crusade1.rookie = ((Defence1[0] - (Attack2[1] * 3 / 4)) / (Rookie.Defence));
                                crusade1.rookie = crusade1.rookie > 0 ? crusade1.rookie : 0;
                                Attack1[3]      = Rookie.AttackCalculation(crusade1.rookie, player1.church.crusadeAttack);
                                Defence1[0]     = Rookie.DefenceCalculation(crusade1.rookie, 0);
                                break;
                            }
                            }
                        }
                        else if (Defence2[2] > 0)
                        {
                            army2.infantry = ((Defence2[2] - Attack1[i]) / (Infantry.Defence + player2.walls.defence));
                            army2.infantry = army2.infantry > 0 ? army2.infantry : 0;
                            Defence2[2]    = Infantry.DefenceCalculation(army2.infantry, player2.walls.defence);
                            Attack2[2]     = Infantry.AttackCalculation(army2.infantry, player2.church.castleAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                crusade1.cavalry = ((Defence1[3] - (Attack2[2] * 3 / 4)) / (Cavalry.Defence));
                                crusade1.cavalry = crusade1.cavalry > 0 ? crusade1.cavalry : 0;
                                Attack1[0]       = Cavalry.AttackCalculation(crusade1.cavalry, player1.church.crusadeAttack);
                                Defence1[3]      = Cavalry.DefenceCalculation(crusade1.cavalry, 0);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                crusade1.infantry = ((Defence1[2] - (Attack2[2] * 3 / 4)) / (Infantry.Defence));
                                crusade1.infantry = crusade1.infantry > 0 ? crusade1.infantry : 0;
                                Attack1[2]        = Infantry.AttackCalculation(crusade1.infantry, player1.church.crusadeAttack);
                                Defence1[2]       = Infantry.DefenceCalculation(crusade1.infantry, 0);
                                break;
                            }

                            case 3:
                            {
                                crusade1.rookie = ((Defence1[0] - (Attack2[2] * 3 / 4)) / (Rookie.Defence));
                                crusade1.rookie = crusade1.rookie > 0 ? crusade1.rookie : 0;
                                Attack1[3]      = Rookie.AttackCalculation(crusade1.rookie, player1.church.crusadeAttack);
                                Defence1[0]     = Rookie.DefenceCalculation(crusade1.rookie, 0);
                                break;
                            }
                            }
                        }
                        else if (Defence2[3] > 0)
                        {
                            army2.cavalry = ((Defence2[3] - Attack1[i]) / (Cavalry.Defence + player2.walls.defence));
                            army2.cavalry = army2.cavalry > 0 ? army2.cavalry : 0;
                            Defence2[3]   = Cavalry.DefenceCalculation(army2.cavalry, player2.walls.defence);
                            Attack2[0]    = Cavalry.AttackCalculation(army2.cavalry, player2.church.castleAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                crusade1.cavalry = ((Defence1[3] - (Attack2[0] * 3 / 4)) / (Cavalry.Defence));
                                crusade1.cavalry = crusade1.cavalry > 0 ? crusade1.cavalry : 0;
                                Attack1[0]       = Cavalry.AttackCalculation(crusade1.cavalry, player1.church.crusadeAttack);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                crusade1.infantry = ((Defence1[2] - (Attack2[0] * 3 / 4)) / (Infantry.Defence));
                                crusade1.infantry = crusade1.infantry > 0 ? crusade1.infantry : 0;
                                Attack1[2]        = Infantry.AttackCalculation(crusade1.infantry, player1.church.crusadeAttack);
                                break;
                            }

                            case 3:
                            {
                                crusade1.rookie = ((Defence1[0] - (Attack2[0] * 3 / 4)) / (Rookie.Defence));
                                crusade1.rookie = crusade1.rookie > 0 ? crusade1.rookie : 0;
                                Attack1[3]      = Rookie.AttackCalculation(crusade1.rookie, player1.church.crusadeAttack);
                                break;
                            }
                            }
                        }
                    }
                }
                for (int i = 0; i < 4; i++)
                {
                    if (Attack2[i] > 0)
                    {
                        if (Defence1[0] > 0)
                        {
                            crusade1.rookie = ((Defence1[0] - Attack2[i]) / (Rookie.Defence));
                            crusade1.rookie = crusade1.rookie > 0 ? crusade1.rookie : 0;
                            Defence1[0]     = Rookie.DefenceCalculation(crusade1.rookie, 0);
                            Attack1[3]      = Rookie.AttackCalculation(crusade1.rookie, player1.church.crusadeAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                army2.cavalry = ((Defence2[3] - (Attack1[3] * 3 / 4)) / (Cavalry.Defence + player2.walls.defence));
                                army2.cavalry = army2.cavalry > 0 ? army2.cavalry : 0;
                                Attack2[0]    = Cavalry.AttackCalculation(army2.cavalry, player2.church.castleAttack);
                                Defence2[3]   = Cavalry.DefenceCalculation(army2.cavalry, player2.walls.defence);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                army2.infantry = ((Defence2[2] - (Attack1[3] * 3 / 4)) / (Infantry.Defence + player2.walls.defence));
                                army2.infantry = army2.infantry > 0 ? army2.infantry : 0;
                                Attack2[2]     = Infantry.AttackCalculation(army2.infantry, player2.church.castleAttack);
                                Defence2[2]    = Infantry.DefenceCalculation(army2.infantry, player2.walls.defence);
                                break;
                            }

                            case 3:
                            {
                                army2.rookie = ((Defence2[0] - (Attack1[3] * 3 / 4)) / (Rookie.Defence + player2.walls.defence));
                                army2.rookie = army2.rookie > 0 ? army2.rookie : 0;
                                Attack2[3]   = Rookie.AttackCalculation(army2.rookie, player2.church.castleAttack);
                                Defence2[0]  = Rookie.DefenceCalculation(army2.rookie, player2.walls.defence);
                                break;
                            }
                            }
                        }
                        else if (Defence1[1] > 0)
                        {
                            crusade1.shooter = ((Defence1[1] - Attack2[i]) / (Shooter.Defence));
                            crusade1.shooter = crusade1.shooter > 0 ? crusade1.shooter : 0;
                            Defence1[1]      = Shooter.DefenceCalculation(crusade1.shooter, 0);
                            Attack1[1]       = Shooter.AttackCalculation(crusade1.shooter, player1.church.crusadeAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                army2.cavalry = ((Defence2[3] - (Attack1[1] * 3 / 4)) / (Cavalry.Defence + player2.walls.defence));
                                army2.cavalry = army2.cavalry > 0 ? army2.cavalry : 0;
                                Attack2[0]    = Cavalry.AttackCalculation(army2.cavalry, player2.church.castleAttack);
                                Defence2[3]   = Cavalry.DefenceCalculation(army2.cavalry, player2.walls.defence);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                army2.infantry = ((Defence2[2] - (Attack1[1] * 3 / 4)) / (Infantry.Defence + player2.walls.defence));
                                army2.infantry = army2.infantry > 0 ? army2.infantry : 0;
                                Attack2[2]     = Infantry.AttackCalculation(army2.infantry, player2.church.castleAttack);
                                Defence2[2]    = Infantry.DefenceCalculation(army2.infantry, player2.walls.defence);
                                break;
                            }

                            case 3:
                            {
                                army2.rookie = ((Defence2[0] - (Attack1[1] * 3 / 4)) / (Rookie.Defence + player2.walls.defence));
                                army2.rookie = army2.rookie > 0 ? army2.rookie : 0;
                                Attack2[3]   = Rookie.AttackCalculation(army2.rookie, player2.church.castleAttack);
                                Defence2[0]  = Rookie.DefenceCalculation(army2.rookie, player2.walls.defence);
                                break;
                            }
                            }
                        }
                        else if (Defence1[2] > 0)
                        {
                            crusade1.infantry = ((Defence1[2] - Attack2[i]) / (Infantry.Defence));
                            crusade1.infantry = crusade1.infantry > 0 ? crusade1.infantry : 0;
                            Defence1[2]       = Infantry.DefenceCalculation(crusade1.infantry, 0);
                            Attack1[2]        = Infantry.AttackCalculation(crusade1.infantry, player1.church.crusadeAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                army2.cavalry = ((Defence2[3] - (Attack1[2] * 3 / 4)) / (Cavalry.Defence + player2.walls.defence));
                                army2.cavalry = army2.cavalry > 0 ? army2.cavalry : 0;
                                Attack2[0]    = Cavalry.AttackCalculation(army2.cavalry, player2.church.castleAttack);
                                Defence2[3]   = Cavalry.DefenceCalculation(army2.cavalry, player2.walls.defence);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                army2.infantry = ((Defence2[2] - (Attack1[2] * 3 / 4)) / (Infantry.Defence + player2.walls.defence));
                                army2.infantry = army2.infantry > 0 ? army2.infantry : 0;
                                Attack2[2]     = Infantry.AttackCalculation(army2.infantry, player2.church.castleAttack);
                                Defence2[2]    = Infantry.DefenceCalculation(army2.infantry, player2.walls.defence);
                                break;
                            }

                            case 3:
                            {
                                army2.rookie = ((Defence2[0] - (Attack1[2] * 3 / 4)) / (Rookie.Defence + player2.walls.defence));
                                army2.rookie = army2.rookie > 0 ? army2.rookie : 0;
                                Attack2[3]   = Rookie.AttackCalculation(army2.rookie, player2.church.castleAttack);
                                Defence2[0]  = Rookie.DefenceCalculation(army2.rookie, player2.walls.defence);
                                break;
                            }
                            }
                        }
                        else if (Defence1[3] > 0)
                        {
                            crusade1.cavalry = ((Defence1[3] - Attack2[i]) / (Cavalry.Defence));
                            crusade1.cavalry = crusade1.cavalry > 0 ? crusade1.cavalry : 0;
                            Defence1[3]      = Cavalry.DefenceCalculation(crusade1.cavalry, 0);
                            Attack1[0]       = Cavalry.AttackCalculation(crusade1.cavalry, player1.church.crusadeAttack);
                            switch (i)
                            {
                            case 0:
                            {
                                army2.cavalry = ((Defence2[3] - (Attack1[0] * 3 / 4)) / (Cavalry.Defence + player2.walls.defence));
                                army2.cavalry = army2.cavalry > 0 ? army2.cavalry : 0;
                                Attack2[0]    = Cavalry.AttackCalculation(army2.cavalry, player2.church.castleAttack);
                                Defence2[3]   = Cavalry.DefenceCalculation(army2.cavalry, player2.walls.defence);
                                break;
                            }

                            case 1:
                            {
                                break;
                            }

                            case 2:
                            {
                                army2.infantry = ((Defence2[2] - (Attack1[0] * 3 / 4)) / (Infantry.Defence + player2.walls.defence));
                                army2.infantry = army2.infantry > 0 ? army2.infantry : 0;
                                Attack2[2]     = Infantry.AttackCalculation(army2.infantry, player2.church.castleAttack);
                                Defence2[2]    = Infantry.DefenceCalculation(army2.infantry, player2.walls.defence);
                                break;
                            }

                            case 3:
                            {
                                army2.rookie = ((Defence2[0] - (Attack1[0] * 3 / 4)) / (Rookie.Defence + player2.walls.defence));
                                army2.rookie = army2.rookie > 0 ? army2.rookie : 0;
                                Attack2[3]   = Rookie.AttackCalculation(army2.rookie, player2.church.castleAttack);
                                Defence2[0]  = Rookie.DefenceCalculation(army2.rookie, player2.walls.defence);
                                break;
                            }
                            }
                        }
                    }
                }
            }
            if (crusade1.rookie <= 0 && crusade1.shooter <= 0 && crusade1.infantry <= 0 && crusade1.cavalry <= 0) //crusade army of attacker is destroyed
            {
                crusade1.rookie   = 0;
                crusade1.shooter  = 0;
                crusade1.infantry = 0;
                crusade1.cavalry  = 0;
                crusade1.CrusadeSquad.transform.localPosition = crusade1.startPosition;
                crusade1.EndCrusade();
                if (!player2.AI)
                {
                    player2.ui.showInfoArmy();
                }
            }
            if (army2.rookie <= 0 && army2.shooter <= 0 && army2.infantry <= 0 && army2.cavalry <= 0) //army in defender castle is destroyed
            {
                player1.money += player2.money / 2;
                if (!player2.AI)
                {
                    player2.ui.GameOver();
                    Player.end = true;
                }
                else
                {
                    if (player2.crusade.Crusade)
                    {
                        player2.crusade.CrusadeSquad.transform.localPosition = player2.crusade.startPosition;
                        player2.crusade.CrusadeSquad.transform.localPosition = new Vector3(-1, -1, -1);
                        player2.crusade.CrusadeSquad.SetActive(false);
                    }
                    player2.gameObject.transform.localPosition = new Vector3(-1, -1, -1);
                    player2.gameObject.SetActive(false);
                    turns.CalculateTurns();
                }
                if (!player1.AI)
                {
                    player1.ui.showInfoPlayer();
                    player1.ui.showInfoCrusade();
                    if (!player1.Enemy1.gameObject.activeSelf &&
                        !player1.Enemy2.gameObject.activeSelf &&
                        !player1.Enemy3.gameObject.activeSelf)
                    {
                        player1.ui.Victory();
                        Player.end = true;
                    }
                }
            }
        }