public static function processSiege(Army $army, City $city) { // TODO check if the army has catapult // TODO message users about the result $attack_point = $army->calculateAttackingPoints(); $defense_point = $city->calculateDefensePoints(); if ($attack_point > $defense_point) { // attacker wins // the city becomes the attacker's city $city->update(['owner' => $army->user->id, 'capital' => 0, 'nation' => $army->user->nation]); $city->hex->update(['owner' => $army->user->id]); } elseif ($attack_point < $defense_point) { // defender wins $army->destroyArmy(); } }
/** * Chooses the winner army based on attack and defense points * * @param Army $attacking_army * @return void */ public function processBattle(Army $attacking_army) { /** * attacking army's attack points * * @var int $attacking_attack */ $attacking_attack = $attacking_army->calculateAttackingPoints(); /** * attacked army's defense points * * @var int $attacked_defense */ $attacked_defense = $this->calculateDefensePoints(); // TODO include hex modifier in the calculation /** @var int $point */ $point = $attacking_attack - $attacked_defense; if ($point === 0) { // it's a tie $point += rand(-1, 1); // randomly add or remove 1 so the $point will be 1 or -1 } if ($point > 0) { // the attacking army wins /** @var Army $winner */ $winner = $attacking_army; /** @var Army $loser */ $loser = $this; } elseif ($point < 0) { // the attacked army wins /** @var Army $winner */ $winner = $this; /** @var Army $loser */ $loser = $attacking_army; } // TODO $this::calculateCasualties(); /** @var Army $loser */ $loser->destroyArmy(); // TODO a pontok alapján kiszámolni a veszteségeket és ennek megfelelően módosítani a seregeket // jelenleg a vesztes sereg teljesen megsemmisül, a győztesnek nincs vesztesége és folytatja az útját // TODO a csata eredményét megjeleníteni a felhasználónak }