1package com.fs.starfarer.api.combat;
5import com.fs.starfarer.api.GameState;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignUIAPI.CoreUITradeMode;
8import com.fs.starfarer.api.campaign.econ.Industry;
9import com.fs.starfarer.api.campaign.econ.MarketAPI;
10import com.fs.starfarer.api.characters.PersonAPI;
11import com.fs.starfarer.api.combat.ShipAPI.HullSize;
12import com.fs.starfarer.api.fleet.FleetMemberAPI;
13import com.fs.starfarer.api.impl.campaign.ids.HullMods;
14import com.fs.starfarer.api.impl.campaign.ids.Industries;
15import com.fs.starfarer.api.loading.HullModSpecAPI;
16import com.fs.starfarer.api.ui.Alignment;
17import com.fs.starfarer.api.ui.TooltipMakerAPI;
18import com.fs.starfarer.api.util.Misc;
22 protected HullModSpecAPI
spec;
30 if (stats ==
null || stats.
getVariant() ==
null ||
spec ==
null)
return false;
35 if (ship ==
null || ship.
getVariant() ==
null ||
spec ==
null)
return false;
40 if (ship ==
null || ship.
getVariant() ==
null ||
spec ==
null)
return false;
91 if (
spec ==
null)
return true;
93 boolean reqSpaceport =
spec.hasTag(HullMods.TAG_REQ_SPACEPORT);
94 if (!reqSpaceport)
return true;
96 if (marketOrNull ==
null)
return false;
97 if (mode == CoreUITradeMode.NONE || mode ==
null)
return false;
99 for (Industry ind : marketOrNull.getIndustries()) {
100 if (ind.getSpec().hasTag(Industries.TAG_STATION))
return true;
101 if (ind.getSpec().hasTag(Industries.TAG_SPACEPORT))
return true;
108 if (
spec ==
null)
return null;
110 boolean reqSpaceport =
spec.hasTag(HullMods.TAG_REQ_SPACEPORT);
111 if (!reqSpaceport)
return null;
115 String verb =
"installed";
119 if (has) verb =
"removed";
121 return "Can only be " + verb +
" at a colony with a spaceport or an orbital station";
137 if (Misc.CAN_SMOD_BUILT_IN) {
148 return spec !=
null &&
149 spec.getSModEffectFormat() !=
null &&
150 !
spec.getSModEffectFormat().trim().isEmpty() &&
151 !
spec.getSModEffectFormat().startsWith(
"#");
154 public void addSModEffectSection(TooltipMakerAPI tooltip, HullSize hullSize,
ShipAPI ship,
float width,
boolean isForModSpec,
boolean isForBuildInList) {
156 Color h = Misc.getHighlightColor();
157 final String [] params =
new String [] {
169 tooltip.addPara(
spec.getSModDescription(hullSize).replaceAll(
"\\%",
"%%"), opad, h, params);
173 public void addSModSection(TooltipMakerAPI tooltip, HullSize hullSize,
ShipAPI ship,
float width,
boolean isForModSpec,
boolean isForBuildInList) {
175 boolean sMod =
isSMod(ship);
176 Color s = Misc.getStoryOptionColor();
177 Color bad = Misc.getNegativeHighlightColor();
178 Color darkBad = Misc.setAlpha(Misc.scaleColorOnly(bad, 0.4f), 175);
186 if (isForBuildInList) {
187 tooltip.addSectionHeading(
spec.getDisplayName() +
" bonus", Misc.getStoryOptionColor(), Misc.getStoryDarkColor(), Alignment.MID, opad);
189 tooltip.addSectionHeading(
"S-mod bonus", Misc.getStoryOptionColor(), Misc.getStoryDarkColor(), Alignment.MID, opad);
192 if (isForBuildInList) {
193 tooltip.addSectionHeading(
spec.getDisplayName() +
" penalty", bad, darkBad, Alignment.MID, opad);
195 tooltip.addSectionHeading(
"S-mod penalty", bad, darkBad, Alignment.MID, opad);
201 if (isForBuildInList) {
202 tooltip.addSpacer(-5f);
206 if (!sMod && !isForBuildInList) {
217 tooltip.addPara(
"This effect only applies if this built-in hullmod is enhanced using a %s. Doing this does not count against the maximum number of s-mods a ship can have.",
218 opad, s,
"story point");
220 tooltip.addPara(
"This effect only applies if this hullmod is built into the hull using a story point. Cheap hullmods have stronger effects.",
221 opad, s,
"story point");
231 tooltip.addPara(
"Aside from removing its ordnance point cost, "
232 +
"this hullmod gains no extra effect from being built into the hull using "
233 +
"a story point.", opad, s,
"story point");
240 tooltip.addSpacer(opad);
262 if (!mod.hasTag(category))
continue;
263 if (
id.equals(currMod))
continue;
271 if (stats ==
null)
return false;
273 if (member ==
null)
return false;
274 PersonAPI fc = member.getFleetCommanderForStats();
275 if (fc ==
null) fc = member.getFleetCommander();
276 if (fc ==
null)
return false;
277 return fc.isPlayer();
281 if (ship ==
null)
return false;
283 if (member ==
null)
return false;
284 PersonAPI fc = member.getFleetCommanderForStats();
285 if (fc ==
null) fc = member.getFleetCommander();
286 if (fc ==
null)
return false;
287 return fc.isPlayer();
static SettingsAPI getSettings()
static GameState getCurrentState()
void advanceInCombat(ShipAPI ship, float amount)
boolean isSMod(MutableShipStatsAPI stats)
String getUnapplicableReason(ShipAPI ship)
void applyEffectsToFighterSpawnedByShip(ShipAPI fighter, ShipAPI ship, String id)
boolean isBuiltIn(ShipAPI ship)
void addPostDescriptionSection(TooltipMakerAPI tooltip, HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec)
void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
boolean shipHasOtherModInCategory(ShipAPI ship, String currMod, String category)
boolean shouldAddDescriptionToTooltip(HullSize hullSize, ShipAPI ship, boolean isForModSpec)
int getDisplayCategoryIndex()
void advanceInCampaign(FleetMemberAPI member, float amount)
boolean isInPlayerFleet(MutableShipStatsAPI stats)
boolean isInPlayerFleet(ShipAPI ship)
String getDescriptionParam(int index, HullSize hullSize)
void addSModEffectSection(TooltipMakerAPI tooltip, HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec, boolean isForBuildInList)
boolean hasSModEffectSection(HullSize hullSize, ShipAPI ship, boolean isForModSpec)
boolean isSModEffectAPenalty()
boolean isSMod(ShipAPI ship)
String getDescriptionParam(int index, HullSize hullSize, ShipAPI ship)
String getSModDescriptionParam(int index, HullSize hullSize)
void addSModSection(TooltipMakerAPI tooltip, HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec, boolean isForBuildInList)
String getSModDescriptionParam(int index, HullSize hullSize, ShipAPI ship)
boolean canBeAddedOrRemovedNow(ShipAPI ship, MarketAPI marketOrNull, CoreUITradeMode mode)
void applyEffectsAfterShipCreation(ShipAPI ship, String id)
void init(HullModSpecAPI spec)
boolean isApplicableToShip(ShipAPI ship)
boolean showInRefitScreenModPickerFor(ShipAPI ship)
int getDisplaySortOrder()
String getCanNotBeInstalledNowReason(ShipAPI ship, MarketAPI marketOrNull, CoreUITradeMode mode)
HullModSpecAPI getHullModSpec(String modId)
ShipVariantAPI getVariant()
FleetMemberAPI getFleetMember()
ShipHullSpecAPI getHullSpec()
FleetMemberAPI getFleetMember()
ShipVariantAPI getVariant()
List< String > getBuiltInMods()
Collection< String > getHullMods()
LinkedHashSet< String > getSMods()
boolean hasHullMod(String id)
LinkedHashSet< String > getSModdedBuiltIns()