Пример #1
0
 void AbsorbBoardingForce(BoardingForce force)
 {
     AddCrew(force.GetCrewCount());
     AddTroops(force.GetTroopCount());
     boardingForces.Remove(force);
 }
Пример #2
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();
            }
        }
    }