示例#1
0
    // Use this for initialization
    public ShipQuadrant(ShipData SD, ShipDesignQuadData quadData, QuadrantTypes quadType)
    {
        parentShip = SD;

        foreach (SavedWeapon weapon in quadData.Weapons)
        {
            QuadrantTypes firingDirection = quadType;

            if (weapon.weapon.AlwaysForward)
            {
                if (weapon.rotation == 0f)
                {
                    firingDirection = QuadrantTypes.Fore;
                }
                else if (weapon.rotation == 90f)
                {
                    firingDirection = QuadrantTypes.Starboard;
                }
                else if (weapon.rotation == 180f)
                {
                    firingDirection = QuadrantTypes.Aft;
                }
                else
                {
                    firingDirection = QuadrantTypes.Port;
                }
            }
            AttachedWeapon attachedWeapon = new AttachedWeapon(weapon.weapon);
            attachedWeapon.SetFiringQuadrant(firingDirection);
            Weapons.Add(attachedWeapon);
        }

        health          = quadData.Health;
        healthMax       = quadData.Health;
        armorHealth     = quadData.ArmorHealth;
        armorHealthMax  = quadData.ArmorHealth;
        armorRating     = quadData.ArmorRating;
        shieldHealth    = quadData.ShieldHealth;
        shieldHealthMax = quadData.ShieldHealth;
        shieldRating    = quadData.ShieldRating;
        shieldRecharge  = quadData.ShieldRechargeRate;
        shieldDelay     = quadData.ShieldRechargeDelay;
        engineThrust    = quadData.EngineThrust;
        engineTurn      = quadData.EngineTurn;
    }
示例#2
0
    void AddQuadModuleStats(ShipDesignQuadData designQuad, List <DesignModule> modules, ref float Power, ref float CloakingPowerPerMass, ref int CommandPointReduction, ref float PowerEffiency, ref float EngineFTL)
    {
        foreach (DesignModule designModule in modules)
        {
            Module module = ResourceManager.GetModule(designModule.Module);

            ProductionCost     += module.ProductionCost;
            AlloyCost          += module.AlloyCost;
            AdvancedAlloyCost  += module.AdvancedAlloyCost;
            SuperiorAlloyCost  += module.SuperiorAlloyCost;
            CrystalCost        += module.CrystalCost;
            RareCrystalCost    += module.RareCrystalCost;
            ExoticCrystalCost  += module.ExoticCrystalCost;
            ExoticParticleCost += module.ExoticParticleCost;

            Mass           += module.Mass;
            PowerGenerated += module.PowerGenerated;
            Fuel           += module.Fuel;
            Ammo           += module.Ammo;
            Power          += module.Power;
            PowerStorage   += module.PowerStorage;
            Crew           += module.Crew;
            RequiredCrew   += module.RequiredCrew;
            Supplies       += module.Supplies;

            Sensor          += module.Sensor;
            LongRangeSensor += module.LongRangeSensor;
            AdvancedSensor  += module.AdvancedSensor;

            Research      += module.Research;
            Mining        += module.Mining;
            Repair        += module.Repair;
            AmmoGenerated += module.AmmoGenerated;
            Transporter   += module.Transporter;
            Troops        += module.Troops;
            Medical       += module.Medical;
            if (CloakingPowerPerMass == 0)
            {
                CloakingPowerPerMass = module.CloakingPowerPerMass;
            }
            else if (module.CloakingPowerPerMass > 0)
            {
                CloakingPowerPerMass = Mathf.Min(CloakingPowerPerMass, module.CloakingPowerPerMass);
            }
            Stealth         += module.Stealth;
            BoardingDefense += module.BoardingDefense;
            Colonies        += module.Colonies;
            Diplomacy       += module.Diplomacy;
            Construction    += module.Construction;
            ExperienceBonus  = Mathf.Max(ExperienceBonus, module.ExperienceBonus);

            JammingCount += module.JammingCount;
            if (module.JammingRange > 0)
            {
                if (JammingRange == 0)
                {
                    JammingRange = module.JammingRange;
                }
                else
                {
                    JammingRange = Mathf.Min(JammingRange, module.JammingRange);
                }
            }
            if (module.JammingDelay > 0)
            {
                if (JammingDelay == 0)
                {
                    JammingDelay = module.JammingDelay;
                }
                else
                {
                    JammingDelay = Mathf.Min(JammingDelay, module.JammingDelay);
                }
            }

            DamageBonus            = Mathf.Max(DamageBonus, module.DamageBonus);
            DefenseBonus           = Mathf.Max(DefenseBonus, module.DefenseBonus);
            DamageBonusFleet       = Mathf.Max(DamageBonusFleet, module.DamageBonusFleet);
            DefenseBonusFleet      = Mathf.Max(DefenseBonusFleet, module.DefenseBonusFleet);
            CommandPointReduction  = Mathf.Max(CommandPointReduction, module.CommandPointReduction);
            CommandPointBonusFleet = Mathf.Max(CommandPointBonusFleet, module.CommandPointBonusFleet);
            PowerEffiency          = Mathf.Max(PowerEffiency, module.PowerEfficiency);
            EngineBonus            = Mathf.Max(EngineBonus, module.EngineBonus);
            EngineFTL += module.EngineFTL;

            designQuad.Health             += module.Health;
            designQuad.ArmorHealth        += module.ArmorHealth;
            designQuad.ArmorRating        += module.ArmorRating;
            designQuad.ShieldHealth       += module.ShieldHealth;
            designQuad.ShieldRating       += module.ShieldRating;
            designQuad.ShieldRechargeDelay = Mathf.Max(CenterQuadrant.ShieldRechargeDelay, module.ShieldRechargeDelay);
            designQuad.ShieldRechargeRate += module.ShieldRechargeRate;

            designQuad.EngineThrust += module.EngineThrust;
            designQuad.EngineTurn   += module.EngineTurn;

            foreach (string fighter in module.Fighters)
            {
                AddFighters(fighter, Fighters);
            }
            foreach (string heavyFighter in module.HeavyFighters)
            {
                AddFighters(heavyFighter, HeavyFighters);
            }
            foreach (string assaultPod in module.AssaultPods)
            {
                AddFighters(assaultPod, AssaultPods);
            }

            Weapon weapon = module.GetWeapon();
            if (weapon != null)
            {
                designQuad.AddWeapon(designModule.Rotation, weapon);
            }
        }
    }
示例#3
0
    public ShipDesignData(ShipDesign design)
    {
        Fighters      = new Dictionary <FighterDefinition, int>();
        HeavyFighters = new Dictionary <FighterDefinition, int>();
        AssaultPods   = new Dictionary <FighterDefinition, int>();

        ForeQuadrant      = new ShipDesignQuadData();
        AftQuadrant       = new ShipDesignQuadData();
        PortQuadrant      = new ShipDesignQuadData();
        StarboardQuadrant = new ShipDesignQuadData();
        CenterQuadrant    = new ShipDesignQuadData();

        DamageGraph = new float[20];

        Design = design;
        Hull   = Design.GetHull();

        float EngineFTL             = 0;
        float Power                 = 0;
        int   CommandPointReduction = 0;
        float PowerEffiency         = 0;
        float CloakingPowerPerMass  = 0;

        int            ForeSlotCount      = 0;
        int            AftSlotCount       = 0;
        int            PortSlotCount      = 0;
        int            StarboardSlotCount = 0;
        int            CenterSlotCount    = 0;
        ShipSlotLayout slotLayout         = Hull.GetSlotLayout();

        if (slotLayout != null)
        {
            ForeSlotCount      = slotLayout.ForeSlots.Count;
            AftSlotCount       = slotLayout.AftSlots.Count;
            PortSlotCount      = slotLayout.PortSlots.Count;
            StarboardSlotCount = slotLayout.StarboardSlots.Count;
            CenterSlotCount    = slotLayout.CenterSlots.Count;
        }

        //Set base stats from hulldata
        CommandPoints                 = Hull.BaseCommandPoints;
        Research                      = Hull.BaseResearch;
        Repair                        = Hull.BaseRepair;
        Sensor                        = Hull.BaseSensor;
        LongRangeSensor               = Hull.BaseLongRangeSensor;
        AdvancedSensor                = Hull.BaseAdvancedSensor;
        Fuel                          = Hull.BaseFuel;
        Crew                          = Hull.BaseCrew;
        Supplies                      = Hull.BaseSupply;
        FTLSpeed                      = Hull.BaseFTL;
        ForeQuadrant.Health           = Hull.BaseHealthPerSlot * ForeSlotCount;
        ForeQuadrant.ArmorHealth      = Hull.BaseArmorPerSlot * ForeSlotCount;
        AftQuadrant.Health            = Hull.BaseHealthPerSlot * AftSlotCount;
        AftQuadrant.ArmorHealth       = Hull.BaseArmorPerSlot * AftSlotCount;
        PortQuadrant.Health           = Hull.BaseHealthPerSlot * PortSlotCount;
        PortQuadrant.ArmorHealth      = Hull.BaseArmorPerSlot * PortSlotCount;
        StarboardQuadrant.Health      = Hull.BaseHealthPerSlot * StarboardSlotCount;
        StarboardQuadrant.ArmorHealth = Hull.BaseArmorPerSlot * StarboardSlotCount;
        CenterQuadrant.Health         = Hull.BaseHealthPerSlot * CenterSlotCount;
        CenterQuadrant.ArmorHealth    = Hull.BaseArmorPerSlot * CenterSlotCount;

        //Get stats from each module
        AddQuadModuleStats(ForeQuadrant, Design.ForeModules, ref Power, ref CloakingPowerPerMass, ref CommandPointReduction, ref PowerEffiency, ref EngineFTL);
        AddQuadModuleStats(AftQuadrant, Design.AftModules, ref Power, ref CloakingPowerPerMass, ref CommandPointReduction, ref PowerEffiency, ref EngineFTL);
        AddQuadModuleStats(PortQuadrant, Design.PortModules, ref Power, ref CloakingPowerPerMass, ref CommandPointReduction, ref PowerEffiency, ref EngineFTL);
        AddQuadModuleStats(StarboardQuadrant, Design.StarboardModules, ref Power, ref CloakingPowerPerMass, ref CommandPointReduction, ref PowerEffiency, ref EngineFTL);
        AddQuadModuleStats(CenterQuadrant, Design.CenterModules, ref Power, ref CloakingPowerPerMass, ref CommandPointReduction, ref PowerEffiency, ref EngineFTL);

        //Last stat calcs
        CommandPoints  -= CommandPointReduction;
        FTLSpeed       += EngineFTL / Mass;
        PowerGenerated -= Power * (1 - PowerEffiency);
        CloakingPower   = CloakingPowerPerMass * Mass;
        MinCrew         = (int)(Crew * ResourceManager.instance.GetGameConstants().MinCrewPercent);

        maxRange = CalculateMaxRange();
        BuildDamageGraph();
    }