1package com.fs.starfarer.api.characters;
3import java.util.LinkedHashMap;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.combat.ShipHullSpecAPI;
8import com.fs.starfarer.api.combat.ShipVariantAPI;
9import com.fs.starfarer.api.fleet.FleetMemberAPI;
10import com.fs.starfarer.api.loading.HullModSpecAPI;
11import com.fs.starfarer.api.loading.VariantSource;
12import com.fs.starfarer.api.ui.Alignment;
13import com.fs.starfarer.api.ui.ButtonAPI;
14import com.fs.starfarer.api.ui.TooltipMakerAPI;
15import com.fs.starfarer.api.util.Misc;
19 public static class OPEffectData {
20 FleetMemberAPI member;
25 public static class OPDataMap {
26 Map<FleetMemberAPI, OPEffectData> map =
new LinkedHashMap<FleetMemberAPI, OPEffectData>();
28 public void setMap(OPDataMap map, Map<String, Object> dataMap) {
29 String key = getClass().getSimpleName();
30 dataMap.put(key, map);
32 public OPDataMap
getMap(Map<String, Object> dataMap) {
33 String key = getClass().getSimpleName();
34 OPDataMap map = (OPDataMap)dataMap.get(key);
36 map =
new OPDataMap();
37 dataMap.put(key, map);
43 return hull.getOrdnancePoints(stats);
48 OPDataMap result =
new OPDataMap();
50 for (FleetMemberAPI member :
Global.
getSector().getPlayerFleet().getFleetData().getMembersListCopy()) {
51 OPEffectData data =
new OPEffectData();
52 int maxOPPre =
getMaxOP(member.getHullSpec(), from);
53 int maxOPPost =
getMaxOP(member.getHullSpec(), to);
55 int op = member.getVariant().computeOPCost(to);
58 data.maxOP = maxOPPost;
61 if (maxOPPost < maxOPPre && op > maxOPPost) {
62 result.map.put(member, data);
81 info.addSectionHeading(
"Excess ordnance points",
base,
dark, Alignment.MID, 15f);
83 info.addPara(
"Ships using more than their maximum ordnance points will have "
84 +
"vents, capacitors, hullmods, and other equipment removed to bring them under the limit.", 10f,
85 Misc.getNegativeHighlightColor(),
86 "vents, capacitors, hullmods, and other equipment removed"
91 public void infoButtonPressed(ButtonAPI button, Object param, Map<String, Object> dataMap) {
96 OPDataMap map =
getMap(dataMap);
98 for (OPEffectData data : map.map.values()) {
104 int maxOP =
getMaxOP(member.getHullSpec(), stats);
105 int op = member.getVariant().computeOPCost(stats);
106 int remove = op - maxOP;
108 ShipVariantAPI variant = member.getVariant();
109 variant = variant.clone();
110 variant.setSource(VariantSource.REFIT);
112 int caps = variant.getNumFluxCapacitors();
113 int curr = Math.min(caps,
remove);
114 variant.setNumFluxCapacitors(caps - curr);
117 int vents = variant.getNumFluxVents();
118 curr = Math.min(vents,
remove);
119 variant.setNumFluxVents(vents - curr);
123 for (String modId : variant.getNonBuiltInHullmods()) {
125 curr = mod.getCostFor(member.getHullSpec().getHullSize());
126 variant.removeMod(modId);
128 if (
remove <= 0)
break;
152 member.setVariant(variant,
false,
false);
static SettingsAPI getSettings()
static SectorAPI getSector()
static int getMaxOP(ShipHullSpecAPI hull, MutableCharacterStatsAPI stats)
OPDataMap getEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to)
void setMap(OPDataMap map, Map< String, Object > dataMap)
void applyEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, Map< String, Object > dataMap)
static void clampOP(FleetMemberAPI member, MutableCharacterStatsAPI stats)
void printEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, TooltipMakerAPI info, Map< String, Object > dataMap)
void infoButtonPressed(ButtonAPI button, Object param, Map< String, Object > dataMap)
OPDataMap getMap(Map< String, Object > dataMap)
boolean hasEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to)
HullModSpecAPI getHullModSpec(String modId)