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