// 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; }
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); } } }
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(); }