001package com.fs.starfarer.api.impl.hullmods;
002
003import java.util.HashMap;
004import java.util.Map;
005
006import com.fs.starfarer.api.combat.MutableShipStatsAPI;
007import com.fs.starfarer.api.combat.ShipAPI.HullSize;
008import com.fs.starfarer.api.impl.campaign.ids.HullMods;
009
010public class ExpandedCargoHolds extends BaseLogisticsHullMod {
011
012        public static float MIN_FRACTION = 0.3f;
013        
014        private static Map mag = new HashMap();
015        static {
016                mag.put(HullSize.FRIGATE, 30f);
017                mag.put(HullSize.DESTROYER, 60f);
018                mag.put(HullSize.CRUISER, 100f);
019                mag.put(HullSize.CAPITAL_SHIP, 200f);
020        }
021        
022        public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
023                float mod = (Float) mag.get(hullSize);
024                if (stats.getVariant() != null) {
025                        mod = Math.max(stats.getVariant().getHullSpec().getCargo() * MIN_FRACTION, mod);
026                }
027                
028                boolean sMod = isSMod(stats);
029                if (sMod) mod *= AdditionalBerthing.SMOD_MULT;
030                stats.getCargoMod().modifyFlat(id, mod);
031                
032                if (!sMod && stats.getVariant() != null && stats.getVariant().hasHullMod(HullMods.CIVGRADE) && !stats.getVariant().hasHullMod(HullMods.MILITARIZED_SUBSYSTEMS)) {
033                        stats.getSuppliesPerMonth().modifyPercent(id, AdditionalBerthing.MAINTENANCE_PERCENT);
034                }
035        }
036        
037        public String getDescriptionParam(int index, HullSize hullSize) {
038                if (index == 0) return "" + ((Float) mag.get(HullSize.FRIGATE)).intValue();
039                if (index == 1) return "" + ((Float) mag.get(HullSize.DESTROYER)).intValue();
040                if (index == 2) return "" + ((Float) mag.get(HullSize.CRUISER)).intValue();
041                if (index == 3) return "" + ((Float) mag.get(HullSize.CAPITAL_SHIP)).intValue();
042                if (index == 4) return "" + (int) Math.round(MIN_FRACTION * 100f) + "%";
043                if (index == 5) return "" + (int)Math.round(AdditionalBerthing.MAINTENANCE_PERCENT) + "%";
044                return null;
045        }
046
047}
048
049
050
051