1package com.fs.starfarer.api.impl.campaign.abilities;
4import java.util.ArrayList;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.BattleAPI;
9import com.fs.starfarer.api.campaign.BuffManagerAPI.Buff;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.econ.MarketAPI;
12import com.fs.starfarer.api.fleet.FleetMemberAPI;
13import com.fs.starfarer.api.fleet.FleetMemberViewAPI;
14import com.fs.starfarer.api.impl.campaign.ids.Stats;
15import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
16import com.fs.starfarer.api.impl.campaign.terrain.CRRecoveryBuff;
17import com.fs.starfarer.api.ui.LabelAPI;
18import com.fs.starfarer.api.ui.TooltipMakerAPI;
19import com.fs.starfarer.api.util.Misc;
20import com.fs.starfarer.api.util.Misc.FleetMemberDamageLevel;
63 if (fleet ==
null)
return;
65 float crCostFleetMult = fleet.getStats().getDynamic().getValue(Stats.EMERGENCY_BURN_CR_MULT);
66 if (crCostFleetMult > 0) {
69 Misc.applyDamage(member,
null, FleetMemberDamageLevel.LOW,
false,
null,
null,
70 true,
null, member.getShipName() +
" suffers damage from Emergency Burn activation");
73 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
74 float crLoss = member.getDeployCost() *
CR_COST_MULT * crCostFleetMult;
75 member.getRepairTracker().applyCREvent(-crLoss,
"Emergency burn");
80 fleet.getCargo().removeFuel(cost);
107 CampaignFleetAPI fleet =
getFleet();
108 if (fleet ==
null)
return;
116 for (FleetMemberViewAPI view : fleet.getViews()) {
118 view.getContrailColor().shift(
getModId(),
new Color(250,150,100,255), 1f, 1f, .75f);
122 view.getEngineGlowSizeMult().shift(
getModId(), 2f, 1f, 1f, 1f);
123 view.getEngineHeightMult().shift(
getModId(), 5f, 1f, 1f, 1f);
124 view.getEngineWidthMult().shift(
getModId(), 3f, 1f, 1f, 1f);
129 float buffDur = 0.1f;
130 boolean needsSync =
false;
131 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
133 member.getBuffManager().removeBuff(buffId);
136 Buff test = member.getBuffManager().getBuff(buffId);
137 if (test instanceof CRRecoveryBuff) {
138 CRRecoveryBuff buff = (CRRecoveryBuff) test;
139 buff.setDur(buffDur);
141 member.getBuffManager().addBuff(
new CRRecoveryBuff(buffId, 0f, buffDur));
168 CampaignFleetAPI fleet =
getFleet();
169 if (fleet ==
null)
return;
171 fleet.getStats().getSensorRangeMod().unmodify(
getModId());
172 fleet.getStats().getDetectedRangeMod().unmodify(
getModId());
173 fleet.getStats().getFleetwideMaxBurnMod().unmodify(
getModId());
174 fleet.getStats().getAccelerationMult().unmodify(
getModId());
200 List<FleetMemberAPI> result =
new ArrayList<FleetMemberAPI>();
201 CampaignFleetAPI fleet =
getFleet();
202 if (fleet ==
null)
return result;
204 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
208 if (Math.round(member.getRepairTracker().getCR() * 100) < Math.round(crLoss * 100)) {
221 public static float getCRCost(FleetMemberAPI member, CampaignFleetAPI fleet) {
222 float crCostFleetMult = fleet.getStats().getDynamic().getValue(Stats.EMERGENCY_BURN_CR_MULT);
223 float crLoss = member.getDeployCost() *
CR_COST_MULT * crCostFleetMult;
224 return Math.round(crLoss * 100f) / 100f;
228 CampaignFleetAPI fleet =
getFleet();
229 if (fleet ==
null)
return 0f;
231 float cost = fleet.getLogistics().getFuelCostPerLightYear() *
FUEL_USE_MULT;
236 CampaignFleetAPI fleet =
getFleet();
237 if (fleet ==
null)
return 0f;
239 float crCostFleetMult = fleet.getStats().getDynamic().getValue(Stats.EMERGENCY_BURN_CR_MULT);
242 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
243 cost += member.getDeploymentCostSupplies() *
CR_COST_MULT * crCostFleetMult;
251 CampaignFleetAPI fleet =
getFleet();
252 if (fleet ==
null)
return;
254 Color gray = Misc.getGrayColor();
255 Color highlight = Misc.getHighlightColor();
257 Color bad = Misc.getNegativeHighlightColor();
259 LabelAPI title = tooltip.addTitle(
"Emergency Burn");
268 tooltip.addPara(
"Increases the maximum burn level by %s." +
269 " Reduces sensor range by %s and increases the range at" +
270 " which the fleet can be detected by %s.",
281 if (supplyCost > 0) {
282 tooltip.addPara(
"Consumes %s fuel and reduces the combat readiness" +
283 " of all ships, costing up to %s supplies to recover. Also prevents combat readiness recovery while active.", pad,
285 Misc.getRoundedValueMaxOneAfterDecimal(fuelCost),
286 Misc.getRoundedValueMaxOneAfterDecimal(supplyCost));
288 tooltip.addPara(
"Consumes %s fuel and prevents combat readiness recovery while active.", pad,
290 Misc.getRoundedValueMaxOneAfterDecimal(fuelCost));
293 if (fuelCost > fleet.getCargo().getFuel()) {
294 tooltip.addPara(
"Not enough fuel.", bad, pad);
298 if (!nonReady.isEmpty()) {
300 tooltip.addPara(
"Some ships don't have enough combat readiness to safely initiate an emergency burn " +
301 "and may suffer damage if the ability is activated:", pad,
302 Misc.getNegativeHighlightColor(),
"may suffer damage");
308 for (FleetMemberAPI member : nonReady) {
310 if (nonReady.size() > max + 1) {
311 tooltip.addPara(BaseIntelPlugin.INDENT +
"... and several other ships", initPad);
319 if (!member.isFighterWing()) {
320 str += member.getShipName() +
", ";
321 str += member.getHullSpec().getHullNameWithDashClass();
323 str += member.getVariant().getFullDesignationWithHullName();
326 tooltip.addPara(BaseIntelPlugin.INDENT + str, initPad);
346 if (engagedInHostilities) {
382 return super.isUsable() &&
392 return super.getCooldownFraction();
396 return super.showCooldownIndicator();
400 return super.getCooldownFraction() < 1f;
406 Color color = Misc.getNegativeHighlightColor();
407 return Misc.scaleAlpha(color,
Global.
getSector().getCampaignUI().getSharedFader().getBrightness() * 0.5f);
409 return super.getCooldownColor();
static SettingsAPI getSettings()
static SectorAPI getSector()
boolean isActiveOrInProgress()
CampaignFleetAPI getFleet()
void addIncompatibleToTooltip(TooltipMakerAPI tooltip, boolean expanded)
void fleetOpenedMarket(MarketAPI market)
static float SENSOR_RANGE_MULT
static float MAX_BURN_MOD
static float DETECTABILITY_PERCENT
static float FUEL_USE_MULT
boolean showCooldownIndicator()
void fleetLeftBattle(BattleAPI battle, boolean engagedInHostilities)
void createTooltip(TooltipMakerAPI tooltip, boolean expanded)
float getCooldownFraction()
static float CR_COST_MULT
static float ACCELERATION_MULT
float computeSupplyCost()
void applyEffect(float amount, float level)
List< FleetMemberAPI > getNonReadyShips()
boolean isCooldownRenderingAdditive()
static float ACTIVATION_DAMAGE_PROB
static float getCRCost(FleetMemberAPI member, CampaignFleetAPI fleet)
Color getColor(String id)