void LaunchUnits(List <UnitData.FighterComplement> Complements, List <FighterWing> WingsContainer) { ShipManager shipManager = Parent.GetShipManager(); foreach (UnitData.FighterComplement complement in Complements) { for (int i = 0; i < complement.GetCount(); i++) { int troopCount = 0; if (ParentData.RequestCrew(complement.GetFighterType().Crew) > 0) { troopCount = ParentData.RequestTroops(complement.GetFighterType().Troops); } else { break; } Fighter newUnit = ResourceManager.CreateCombatFighter(complement.GetFighterType(), Parent.transform.position, Quaternion.Euler(-Parent.transform.forward)); newUnit.SetTroops(troopCount); if (newUnit != null) { newUnit.SetNewGoalPosition(Parent.transform.position + -Parent.transform.forward * 2f); if (WingsContainer.Count == 0 || WingsContainer[WingsContainer.Count - 1].atCapacity() || WingsContainer[WingsContainer.Count - 1].GetFirstFighter().GetName() != newUnit.GetName()) { FighterWing unitWing = ResourceManager.CreateFighterWing(); unitWing.SetParent(Parent, shipManager); unitWing.addFighter(newUnit); WingsContainer.Add(unitWing); } else { WingsContainer[WingsContainer.Count - 1].addFighter(newUnit); } shipManager.AddSpaceUnit(newUnit); } } complement.SetCount(0); } }
public bool isEnemy(SpaceUnit target) { ShipManager targetManager = target.GetShipManager(); if (EnemyShipManagers.Contains(targetManager)) { return(true); } else { return(false); } }
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(); } } }
ShipManager GetShipManager() { return(parentUnit.GetShipManager()); }