001package com.fs.starfarer.api.impl.combat.dweller;
002
003import com.fs.starfarer.api.combat.MutableShipStatsAPI;
004import com.fs.starfarer.api.combat.ShipAPI;
005import com.fs.starfarer.api.combat.ShipAPI.HullSize;
006import com.fs.starfarer.api.impl.campaign.ids.HullMods;
007import com.fs.starfarer.api.ui.TooltipMakerAPI;
008import com.fs.starfarer.api.util.Misc;
009
010public class HumanShipShroudedHullmod extends DwellerHullmod {
011        
012        public static float CREW_CASUALTIES = 50f;
013        public static DwellerShipCreator CREATOR = new HumanShipShroudCreator();
014
015        public static boolean ALLOW_ON_PHASE_SHIPS = false;
016
017        
018        public boolean isApplicableToShip(ShipAPI ship) {
019                if (ship.getVariant().getHullMods().contains(HullMods.FRAGMENT_SWARM)) {
020                        return false;
021                }
022                if (!ALLOW_ON_PHASE_SHIPS) {
023                        if (ship != null && ship.getHullSpec().isPhase()) {
024                                return false;
025                        }
026                }
027                return true;
028        }
029        
030        public String getUnapplicableReason(ShipAPI ship) {
031                if (ship.getVariant().getHullMods().contains(HullMods.FRAGMENT_SWARM)) {
032                        return "Incompatible with Fragment Swarm";
033                }
034                return "Can not be installed on a phase ship";
035        }
036        
037        protected boolean increasesCrewCasualties() {
038                return true;
039        }
040        
041        @Override
042        protected boolean addStrategyAI() {
043                return false;
044        }
045        
046        @Override
047        protected DwellerShipCreator getShipCreator(String hullId) {
048                return CREATOR;
049        }       
050        
051        @Override
052        public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
053                super.applyEffectsBeforeShipCreation(hullSize, stats, id);
054                if (increasesCrewCasualties()) {
055                        stats.getCrewLossMult().modifyPercent(id, CREW_CASUALTIES);
056                }
057                stats.getDynamic().getStat(AssayingRiftEffect.HUNGERING_RIFT_HEAL_MULT_STAT).modifyMult(id, 0f);
058        }
059        
060        protected boolean skipFluxUseWhenOverloadedOrVenting() {
061                return true;
062        }
063        protected boolean deductFlux(ShipAPI ship, float fluxCost) {
064                if (skipFluxUseWhenOverloadedOrVenting() && ship.getFluxTracker().isOverloadedOrVenting()) {
065                        return true;
066                }
067                if (!ship.getFluxTracker().increaseFlux(fluxCost, false)) {
068                        return false;
069                }
070                return true;
071        }
072
073        
074        public void addCrewCasualties(TooltipMakerAPI tooltip, float opad) {
075                tooltip.addPara("Crew casualties in combat are increased by %s.", opad, Misc.getHighlightColor(),
076                                                "" + (int) CREW_CASUALTIES + "%");
077        }       
078
079}
080
081
082
083
084
085
086
087
088
089
090
091
092
093