示例#1
0
    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);
        }
    }
示例#2
0
    public bool isEnemy(SpaceUnit target)
    {
        ShipManager targetManager = target.GetShipManager();

        if (EnemyShipManagers.Contains(targetManager))
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
示例#3
0
    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();
            }
        }
    }
示例#4
0
 ShipManager GetShipManager()
 {
     return(parentUnit.GetShipManager());
 }