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.impl.campaign.intel.BaseIntelPlugin;
14import com.fs.starfarer.api.impl.campaign.terrain.CRRecoveryBuff;
15import com.fs.starfarer.api.ui.LabelAPI;
16import com.fs.starfarer.api.ui.TooltipMakerAPI;
17import com.fs.starfarer.api.util.Misc;
18import com.fs.starfarer.api.util.Misc.FleetMemberDamageLevel;
34 return FleetMemberDamageLevel.LOW;
43 if (fleet ==
null)
return;
50 true,
null, member.getShipName() +
" suffers damage from " +
spec.getName() +
" activation");
53 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
55 member.getRepairTracker().applyCREvent(-crLoss, Misc.ucFirst(
spec.getName().toLowerCase()));
60 fleet.getCargo().removeFuel(cost);
79 if (fleet ==
null)
return;
87 boolean needsSync =
false;
88 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
90 member.getBuffManager().removeBuff(buffId);
93 Buff test = member.getBuffManager().getBuff(buffId);
94 if (test instanceof CRRecoveryBuff) {
95 CRRecoveryBuff buff = (CRRecoveryBuff) test;
98 member.getBuffManager().addBuff(
new CRRecoveryBuff(buffId, 0f, buffDur));
122 List<FleetMemberAPI> result =
new ArrayList<FleetMemberAPI>();
125 CampaignFleetAPI fleet =
getFleet();
126 if (fleet ==
null)
return result;
128 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
130 if (Math.round(member.getRepairTracker().getCR() * 100) < Math.round(crLoss * 100)) {
139 float crLoss = member.getDeployCost() * crCostMult;
140 return Math.round(crLoss * 100f) / 100f;
144 CampaignFleetAPI fleet =
getFleet();
145 if (fleet ==
null)
return 0f;
147 float cost = fleet.getLogistics().getFuelCostPerLightYear() *
getFuelCostMult();
152 CampaignFleetAPI fleet =
getFleet();
153 if (fleet ==
null)
return 0f;
158 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) {
159 cost += member.getDeploymentCostSupplies() * crCostMult;
178 CampaignFleetAPI fleet =
getFleet();
179 if (fleet ==
null)
return;
181 Color gray = Misc.getGrayColor();
182 Color highlight = Misc.getHighlightColor();
184 Color bad = Misc.getNegativeHighlightColor();
186 LabelAPI title = tooltip.addTitle(
spec.getName());
195 String preventsRecovery =
"";
197 preventsRecovery =
" Prevents combat readiness recovery while active.";
200 if (supplyCost > 0 && fuelCost > 0) {
201 tooltip.addPara(
"Consumes %s fuel and reduces the combat readiness" +
202 " of all ships, costing up to %s supplies to recover." + preventsRecovery, pad,
204 Misc.getRoundedValueMaxOneAfterDecimal(fuelCost),
205 Misc.getRoundedValueMaxOneAfterDecimal(supplyCost));
206 }
else if (supplyCost > 0) {
207 tooltip.addPara(
"Reduces the combat readiness" +
208 " of all ships, costing up to %s supplies to recover." + preventsRecovery, pad,
210 Misc.getRoundedValueMaxOneAfterDecimal(supplyCost));
211 }
else if (fuelCost > 0) {
212 tooltip.addPara(
"Consumes %s fuel." + preventsRecovery, pad,
214 Misc.getRoundedValueMaxOneAfterDecimal(fuelCost));
218 if (!addedReason && fuelCost > 0 && fuelCost > fleet.getCargo().getFuel()) {
219 tooltip.addPara(
"Not enough fuel.", bad, pad);
225 if (!nonReady.isEmpty()) {
226 tooltip.addPara(
"Some ships don't have enough combat readiness " +
227 "and may suffer damage if the ability is activated:", pad,
228 Misc.getNegativeHighlightColor(),
"may suffer damage");
232 for (FleetMemberAPI member : nonReady) {
234 if (nonReady.size() > max + 1) {
235 tooltip.addPara(BaseIntelPlugin.INDENT +
"... and several other ships", initPad);
240 if (!member.isFighterWing()) {
241 str += member.getShipName() +
", ";
242 str += member.getHullSpec().getHullNameWithDashClass();
244 str += member.getVariant().getFullDesignationWithHullName();
247 tooltip.addPara(BaseIntelPlugin.INDENT + str, initPad);
263 if (engagedInHostilities) {
279 return super.getCooldownFraction() < 1f;
284 return super.isUsable() &&
293 return super.getCooldownFraction();
299 Color color = Misc.getNegativeHighlightColor();
300 return Misc.scaleAlpha(color,
Global.
getSector().getCampaignUI().getSharedFader().getBrightness() * 0.5f);
302 return super.getCooldownColor();
static SettingsAPI getSettings()
static SectorAPI getSector()
transient AbilitySpecAPI spec
boolean isActiveOrInProgress()
CampaignFleetAPI getFleet()
void addIncompatibleToTooltip(TooltipMakerAPI tooltip, boolean expanded)
void addInitialDescription(TooltipMakerAPI tooltip, boolean expanded)
List< FleetMemberAPI > getNonReadyShips()
void applyStatsEffect(float amount, float level)
boolean addNotUsableReasonBeforeFuelCost(TooltipMakerAPI tooltip, boolean expanded)
FleetMemberDamageLevel getActivationDamageLevel()
float getCRCost(FleetMemberAPI member)
float getActivationAtLowCRShipDamageProbability()
void applyEffect(float amount, float level)
float computeSupplyCost()
void addNotUsableReasonAfterFuelCost(TooltipMakerAPI tooltip, boolean expanded)
float getCooldownFraction()
void applyFleetVisual(float amount, float level)
boolean canRecoverCRWhileActive()
void fleetOpenedMarket(MarketAPI market)
boolean isCooldownRenderingAdditive()
void createTooltip(TooltipMakerAPI tooltip, boolean expanded)
void unapplyStatsEffect()
void fleetLeftBattle(BattleAPI battle, boolean engagedInHostilities)
Color getColor(String id)