/// <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); }
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; }
/// <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); }
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); } }
/// <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); }