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