001package com.fs.starfarer.api.impl.hullmods; 002 003import com.fs.starfarer.api.GameState; 004import com.fs.starfarer.api.Global; 005import com.fs.starfarer.api.characters.MutableCharacterStatsAPI; 006import com.fs.starfarer.api.characters.PersonAPI; 007import com.fs.starfarer.api.combat.MutableShipStatsAPI; 008import com.fs.starfarer.api.combat.ShipAPI; 009import com.fs.starfarer.api.combat.ShipAPI.HullSize; 010import com.fs.starfarer.api.fleet.FleetMemberAPI; 011import com.fs.starfarer.api.impl.campaign.ids.HullMods; 012import com.fs.starfarer.api.impl.campaign.ids.Stats; 013 014public class MilitarizedSubsystems extends BaseLogisticsHullMod { 015 016 private static int BURN_LEVEL_BONUS = 1; 017 private static float MAINTENANCE_PERCENT = 100; 018// private static float FLUX_PERCENT = 25; 019// private static float ARMOR_BONUS = 25; 020// private static float FLUX_DISSIPATION_PERCENT = 10; 021// private static float ARMOR_BONUS = 10; 022 023 //private static final float DEPLOY_COST_MULT = 0.7f; 024 025 public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) { 026 boolean sMod = isSMod(stats); 027 028 stats.getSensorStrength().unmodify(HullMods.CIVGRADE); 029 stats.getSensorProfile().unmodify(HullMods.CIVGRADE); 030 031 stats.getMaxBurnLevel().modifyFlat(id, BURN_LEVEL_BONUS); 032 033// float mult = getEffectMult(stats); 034// stats.getFluxDissipation().modifyPercent(id, FLUX_DISSIPATION_PERCENT * mult); 035// stats.getEffectiveArmorBonus().modifyFlat(id, ARMOR_BONUS * mult); 036 037 //stats.getSuppliesPerMonth().modifyPercent(id, MAINTENANCE_PERCENT); 038 if (!sMod) { 039 stats.getMinCrewMod().modifyPercent(id, MAINTENANCE_PERCENT); 040 } 041 042 //stats.getDynamic().getMod(Stats.ACT_AS_COMBAT_SHIP).modifyFlat(id, 1f); 043 044 } 045 046 public static float getEffectMult(MutableShipStatsAPI stats) { 047 float bonus = getBonusPercent(stats); 048 return 1f + bonus / 100f; 049 } 050 //public static float getBonusPercent(ShipAPI ship) { 051 public static float getBonusPercent(MutableShipStatsAPI stats) { 052 if (Global.getSettings().getCurrentState() == GameState.TITLE) return 0f; 053 //FleetMemberAPI member = ship.getFleetMember(); 054 MutableCharacterStatsAPI cStats = null; 055 if (stats == null) { 056 cStats = Global.getSector().getPlayerStats(); 057 } else { 058 FleetMemberAPI member = stats.getFleetMember(); 059 if (member == null) return 0f; 060 PersonAPI commander = member.getFleetCommanderForStats(); 061 if (commander == null) { 062 commander = member.getFleetCommander(); 063 } 064 if (commander == null) return 0f; 065 cStats = commander.getStats(); 066 } 067 float bonus = cStats.getDynamic().getMod(Stats.AUXILIARY_EFFECT_ADD_PERCENT).computeEffective(0f); 068 return Math.round(bonus); 069 } 070 071 072// @Override 073// public void addPostDescriptionSection(TooltipMakerAPI tooltip, HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec) { 074// if (ship == null) return; 075// if (Global.getSettings().getCurrentState() == GameState.TITLE) return; 076// 077// float bonus = getBonusPercent(ship); 078// if(bonus <= 0) return; 079// 080// float opad = 10f; 081// tooltip.addSectionHeading("Auxiliary Support", Alignment.MID, opad); 082// } 083 084 085 086 public String getDescriptionParam(int index, HullSize hullSize) { 087 if (index == 0) return "" + BURN_LEVEL_BONUS; 088 //if (index == 1) return "" + (int)Math.round((1f - DEPLOY_COST_MULT) * 100f) + "%"; 089// float mult = getEffectMult(null); 090// if (index == 1) return "" + (int) Math.round(FLUX_DISSIPATION_PERCENT * mult) + "%"; 091// if (index == 2) return "" + (int) Math.round(ARMOR_BONUS * mult); 092 if (index == 1) return "" + (int)Math.round(MAINTENANCE_PERCENT) + "%"; 093 return null; 094 } 095 @Override 096 public boolean isApplicableToShip(ShipAPI ship) { 097 return ship.getVariant().hasHullMod(HullMods.CIVGRADE) && super.isApplicableToShip(ship); 098 } 099 100 @Override 101 public String getUnapplicableReason(ShipAPI ship) { 102 if (!ship.getVariant().hasHullMod(HullMods.CIVGRADE)) { 103 return "Can only be installed on civilian-grade hulls"; 104 } 105 return super.getUnapplicableReason(ship); 106 } 107 108 109 110 111} 112