void AbsorbBoardingForce(BoardingForce force) { AddCrew(force.GetCrewCount()); AddTroops(force.GetTroopCount()); boardingForces.Remove(force); }
void ProcessBoardingForces(BoardingForce enemyBoarders) { if (!CurrentUnit.GetShipManager().GetEnemyShipManagers().Contains(enemyBoarders.GetShipManager())) { AbsorbBoardingForce(enemyBoarders); return; } //Create boarding balance bar to show who has the advantage float AttackerCombatStrength = enemyBoarders.GetCombatStrength(); float DefendersCombatStrength = GetCombatStrength(); CurrentUnit.SetBoardingForceBalance(1 - (AttackerCombatStrength / (DefendersCombatStrength))); //Temporary hardcoded values float troopMin = 0f; float troopMax = 15f; float crewMin = 0f; float crewMax = 10f; float attacker = 0; float defender = 0; if (enemyBoarders.HasTroops()) { attacker = Random.Range(troopMin, troopMax); } else if (enemyBoarders.HasCrew()) { attacker = Random.Range(crewMin, crewMax); } else { boardingForces.Remove(enemyBoarders); return; } if (troops > 0) { defender = Random.Range(troopMin, troopMax); } else if (crew > 0) { defender = Random.Range(crewMin, crewMax); } else { enemyBoarders.GetShipManager().CaptureUnit(CurrentUnit); AbsorbBoardingForce(enemyBoarders); return; } //Apply defense bonus defender += Random.Range(0f, boardingDefense); if (attacker > defender) { if (troops > 0) { removeTroops(1); } else { removeCrew(1); } } else { if (enemyBoarders.HasTroops()) { enemyBoarders.KillTrooper(); } else { enemyBoarders.KillCrew(); } } }