Ejemplo n.º 1
0
        /// <summary>
        /// returns true if attacker is winner
        /// </summary>
        BattleResult attack(Army defender)
        {
            Army attacker            = this;
            int  initialAttackerSize = attacker.getSize();
            int  initialDefenderSize = defender.getSize();

            bool         attackerWon;
            BattleResult result;
            string       attackerBonus;
            var          attackerModifier = Army.modifierStrenght.getModifier(attacker, out attackerBonus);
            string       defenderBonus;
            var          defenderModifier = Army.modifierStrenght.getModifier(defender, out defenderBonus);

            if (attacker.getStrenght(attackerModifier) > defender.getStrenght(defenderModifier))
            {
                attackerWon = true;
                float winnerLossUnConverted;
                if (attacker.getStrenght(attackerModifier) > 0f)
                {
                    winnerLossUnConverted = defender.getStrenght(defenderModifier) * defender.getStrenght(defenderModifier) / attacker.getStrenght(attackerModifier);
                }
                else
                {
                    winnerLossUnConverted = 0f;
                }
                int attackerLoss = attacker.takeLossUnconverted(winnerLossUnConverted, defender.owner);
                int loserLoss    = defender.takeLoss(defender.getSize(), attacker.owner);

                result = new BattleResult(attacker.getOwner(), defender.getOwner(), initialAttackerSize, attackerLoss
                                          , initialDefenderSize, loserLoss, attacker.destination, attackerWon, attackerBonus, defenderBonus);
            }
            else if (attacker.getStrenght(attackerModifier) == defender.getStrenght(defenderModifier))
            {
                attacker.takeLoss(attacker.getSize(), defender.owner);
                defender.takeLoss(defender.getSize(), attacker.owner);

                var r = new BattleResult(attacker.getOwner(), defender.getOwner(), attacker.getSize(), attacker.getSize(), defender.getSize(), defender.getSize(),
                                         attacker.destination, false, attackerBonus, defenderBonus);
                return(r);
            }
            else //defender.getStrenght() > attacker.getStrenght()
            {
                attackerWon = false;
                float winnerLossUnConverted;
                if (defender.getStrenght(defenderModifier) > 0f)
                {
                    winnerLossUnConverted = attacker.getStrenght(attackerModifier) * attacker.getStrenght(attackerModifier) / (defender.getStrenght(defenderModifier));
                }
                else
                {
                    winnerLossUnConverted = 0f;
                }
                int defenderLoss = defender.takeLossUnconverted(winnerLossUnConverted, attacker.owner);

                int attackerLoss = attacker.takeLoss(attacker.getSize(), defender.owner);
                result = new BattleResult(attacker.getOwner(), defender.getOwner(), initialAttackerSize, attackerLoss
                                          , initialDefenderSize, defenderLoss, attacker.destination, attackerWon, attackerBonus, defenderBonus);
            }
            return(result);
        }
Ejemplo n.º 2
0
        public void refresh(bool rebuildDropdown)
        {
            if (rebuildDropdown)
            {
                //Game.player.homeArmy.balance(Game.player.sendingArmy, new Procent(armySendLimit.value));
                armySendLimit.value = 0; // cause extra mobilization
                rebuildDropDown();
            }
            sb.Clear();
            sb.Append("Military of ").Append(Game.Player);
            captionText.text = sb.ToString();

            sb.Clear();
            sb.Append("Home army: ").Append(Game.Player.getDefenceForces().getName());
            allArmySizeText.text = sb.ToString();

            if (virtualArmyToSend == null)
            {
                virtualArmyToSend = new Army(Game.Player);
            }
            sb.Clear();
            sb.Append("Sending army: ").Append(virtualArmyToSend.getName());
            sendingArmySizeText.text = sb.ToString();
            //sendArmy.interactable = virtualArmyToSend == "0" ? false : true;
            sendArmy.interactable = virtualArmyToSend.getSize() > 0 ? true : false;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// howMuchShouldBeInSecondArmy - procent of this army. Returns second army
        /// </summary>
        public Army balance(Procent howMuchShouldBeInSecondArmy)
        {
            owner.armyCount++;
            Army secondArmy = new Army(owner, Province, owner + "'s " + owner.armyCount.ToString() + "th");

            int secondArmyExpectedSize = howMuchShouldBeInSecondArmy.getProcentOf(getSize());

            //secondArmy.clear();

            int needToFullFill = secondArmyExpectedSize;

            while (needToFullFill > 0)
            {
                var corpsToBalance = getBiggestCorpsSmallerThan(needToFullFill);
                if (corpsToBalance == null)
                {
                    break;
                }
                else
                {
                    moveCorps(corpsToBalance, secondArmy);
                }
                needToFullFill = secondArmyExpectedSize - secondArmy.getSize();
            }

            return(secondArmy);
        }
Ejemplo n.º 4
0
        internal Army balance(Procent howMuchShouldBeInSecondArmy)
        {
            //if (howMuchShouldBeInSecondArmy.get() == 1f)
            //{
            //    return this;
            //    //this.personal.Clear();
            //}
            //else
            {
                Army secondArmy = new Army(this.getOwner());

                //Army sumArmy = new Army();
                //sumArmy.add(this);
                //this.joinin(secondArmy);
                int secondArmyExpectedSize = howMuchShouldBeInSecondArmy.getProcentOf(this.getSize());

                //secondArmy.clear();

                int needToFullFill = secondArmyExpectedSize;
                while (needToFullFill > 0)
                {
                    var corpsToBalance = this.getBiggestCorpsSmallerThan(needToFullFill);
                    if (corpsToBalance == null)
                    {
                        break;
                    }
                    else
                    {
                        this.move(corpsToBalance, secondArmy);
                    }
                    needToFullFill = secondArmyExpectedSize - secondArmy.getSize();
                }
                return(secondArmy);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// returns true if attacker is winner
        /// </summary>
        private BattleResult attack(Army defender)
        {
            Army attacker            = this;
            int  initialAttackerSize = attacker.getSize();
            int  initialDefenderSize = defender.getSize();

            bool         attackerWon;
            BattleResult result;
            string       attackerBonus;
            var          attackerModifier = modifierStrenght.getModifier(attacker, out attackerBonus);
            string       defenderBonus;
            var          defenderModifier = modifierStrenght.getModifier(defender, out defenderBonus);

            if (attacker.getStrenght(attackerModifier) > defender.getStrenght(defenderModifier))
            {
                attackerWon = true;
                float winnerLossUnConverted;
                if (attacker.getStrenght(attackerModifier) > 0f)
                {
                    winnerLossUnConverted = defender.getStrenght(defenderModifier) * defender.getStrenght(defenderModifier) / attacker.getStrenght(attackerModifier);
                }
                else
                {
                    winnerLossUnConverted = 0f;
                }
                int attackerLoss = attacker.takeLossUnconverted(winnerLossUnConverted, defender.owner);
                int loserLoss    = defender.takeLoss(defender.getSize(), attacker.owner);



                result = new BattleResult(attacker.getOwner(), defender.getOwner(), initialAttackerSize, attackerLoss
                                          , initialDefenderSize, loserLoss, attacker.Province, attackerWon, attackerBonus, defenderBonus);
            }
            else if (attacker.getStrenght(attackerModifier) == defender.getStrenght(defenderModifier))
            {
                attacker.takeLoss(attacker.getSize(), defender.owner);
                defender.takeLoss(defender.getSize(), attacker.owner);



                result = new BattleResult(attacker.getOwner(), defender.getOwner(), attacker.getSize(), attacker.getSize(), defender.getSize(), defender.getSize(),
                                          attacker.Province, false, attackerBonus, defenderBonus);
            }
            else // defender win
            {
                attackerWon = false;
                float winnerLossUnConverted;
                if (defender.getStrenght(defenderModifier) > 0f)
                {
                    winnerLossUnConverted = attacker.getStrenght(attackerModifier) * attacker.getStrenght(attackerModifier) / (defender.getStrenght(defenderModifier));
                }
                else
                {
                    winnerLossUnConverted = 0f;
                }
                int defenderLoss = defender.takeLossUnconverted(winnerLossUnConverted, attacker.owner);

                int attackerLoss = attacker.takeLoss(attacker.getSize(), defender.owner);



                result = new BattleResult(attacker.getOwner(), defender.getOwner(), initialAttackerSize, attackerLoss
                                          , initialDefenderSize, defenderLoss, attacker.Province, attackerWon, attackerBonus, defenderBonus);
            }
            Game.provincesToRedrawArmies.Add(defender.Province);

            if (attacker.getSize() == 0)
            {
                attacker.owner.KillArmy(attacker);
            }
            if (defender.getSize() == 0)
            {
                defender.owner.KillArmy(defender);
            }
            return(result);
        }