1package com.fs.starfarer.api.characters;
3import java.util.LinkedHashMap;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.combat.ShipAPI.HullSize;
8import com.fs.starfarer.api.combat.ShipVariantAPI;
9import com.fs.starfarer.api.fleet.FleetMemberAPI;
10import com.fs.starfarer.api.loading.VariantSource;
11import com.fs.starfarer.api.plugins.impl.CoreAutofitPlugin;
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 VentsCapsEffectData {
20 FleetMemberAPI member;
25 public static class VentsCapsDataMap {
26 Map<FleetMemberAPI, VentsCapsEffectData> map =
new LinkedHashMap<FleetMemberAPI, VentsCapsEffectData>();
28 public void setMap(VentsCapsDataMap map, Map<String, Object> dataMap) {
29 String key = getClass().getSimpleName();
30 dataMap.put(key, map);
32 public VentsCapsDataMap
getMap(Map<String, Object> dataMap) {
33 String key = getClass().getSimpleName();
34 VentsCapsDataMap map = (VentsCapsDataMap)dataMap.get(key);
36 map =
new VentsCapsDataMap();
37 dataMap.put(key, map);
43 int maxVents = CoreAutofitPlugin.getBaseMax(size);
51 int maxCapacitors = CoreAutofitPlugin.getBaseMax(size);
60 VentsCapsDataMap result =
new VentsCapsDataMap();
63 for (FleetMemberAPI member :
Global.
getSector().getPlayerFleet().getFleetData().getMembersListCopy()) {
64 VentsCapsEffectData data =
new VentsCapsEffectData();
65 int maxVentsPre =
getMaxVents(member.getHullSpec().getHullSize(), from);
66 int maxCapsPre =
getMaxCaps(member.getHullSpec().getHullSize(), from);
68 int maxVentsPost =
getMaxVents(member.getHullSpec().getHullSize(), to);
69 int maxCapsPost =
getMaxCaps(member.getHullSpec().getHullSize(), to);
71 int caps = member.getVariant().getNumFluxCapacitors();
72 int vents = member.getVariant().getNumFluxVents();
75 data.maxVents = maxVentsPost;
76 data.maxCaps = maxCapsPost;
79 if (maxVentsPre > maxVentsPost && vents > maxVentsPost) {
82 if (maxCapsPre > maxCapsPost && caps > maxCapsPost) {
86 result.map.put(member, data);
105 info.addSectionHeading(
"Excess vents and capacitors",
base,
dark, Alignment.MID, 15f);
107 info.addPara(
"Ships that have more than the new maximum number of flux vents "
108 +
"and capacitors will have the excess vents and capacitors removed.", 10f,
109 Misc.getNegativeHighlightColor(),
110 "excess vents and capacitors removed"
120 VentsCapsDataMap map =
getMap(dataMap);
122 for (VentsCapsEffectData data : map.map.values()) {
128 int maxVents =
getMaxVents(member.getHullSpec().getHullSize(), stats);
129 int maxCaps =
getMaxCaps(member.getHullSpec().getHullSize(), stats);
130 ShipVariantAPI variant = member.getVariant();
131 if (variant.getNumFluxVents() > maxVents || variant.getNumFluxCapacitors() > maxCaps) {
132 variant = variant.clone();
133 variant.setSource(VariantSource.REFIT);
134 variant.setNumFluxVents(Math.min(variant.getNumFluxVents(), maxVents));
135 variant.setNumFluxCapacitors(Math.min(variant.getNumFluxCapacitors(), maxCaps));
136 member.setVariant(variant,
false,
false);
static SectorAPI getSector()
static void clampNumVentsAndCaps(FleetMemberAPI member, MutableCharacterStatsAPI stats)
VentsCapsDataMap getMap(Map< String, Object > dataMap)
boolean hasEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to)
VentsCapsDataMap getEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to)
void applyEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, Map< String, Object > dataMap)
static int getMaxCaps(HullSize size, MutableCharacterStatsAPI stats)
void printEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, TooltipMakerAPI info, Map< String, Object > dataMap)
void infoButtonPressed(ButtonAPI button, Object param, Map< String, Object > dataMap)
static int getMaxVents(HullSize size, MutableCharacterStatsAPI stats)
void setMap(VentsCapsDataMap map, Map< String, Object > dataMap)
StatBonus getMaxCapacitorsBonus()
StatBonus getMaxVentsBonus()