Starsector API
Loading...
Searching...
No Matches
SkillsChangeRemoveVentsCapsEffect.java
Go to the documentation of this file.
1package com.fs.starfarer.api.characters;
2
3import java.util.LinkedHashMap;
4import java.util.Map;
5
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;
16
18
19 public static class VentsCapsEffectData {
20 FleetMemberAPI member;
21 int maxVents;
22 int maxCaps;
23 }
24
25 public static class VentsCapsDataMap {
26 Map<FleetMemberAPI, VentsCapsEffectData> map = new LinkedHashMap<FleetMemberAPI, VentsCapsEffectData>();
27 }
28 public void setMap(VentsCapsDataMap map, Map<String, Object> dataMap) {
29 String key = getClass().getSimpleName();
30 dataMap.put(key, map);
31 }
32 public VentsCapsDataMap getMap(Map<String, Object> dataMap) {
33 String key = getClass().getSimpleName();
34 VentsCapsDataMap map = (VentsCapsDataMap)dataMap.get(key);
35 if (map == null) {
36 map = new VentsCapsDataMap();
37 dataMap.put(key, map);
38 }
39 return map;
40 }
41
42 public static int getMaxVents(HullSize size, MutableCharacterStatsAPI stats) {
43 int maxVents = CoreAutofitPlugin.getBaseMax(size);
44 if (stats != null) {
45 maxVents = (int) stats.getMaxVentsBonus().computeEffective(maxVents);
46 }
47 return maxVents;
48 }
49
50 public static int getMaxCaps(HullSize size, MutableCharacterStatsAPI stats) {
51 int maxCapacitors = CoreAutofitPlugin.getBaseMax(size);
52 if (stats != null) {
53 maxCapacitors = (int) stats.getMaxCapacitorsBonus().computeEffective(maxCapacitors);
54 }
55 return maxCapacitors;
56 }
57
58
60 VentsCapsDataMap result = new VentsCapsDataMap();
61
62
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);
67
68 int maxVentsPost = getMaxVents(member.getHullSpec().getHullSize(), to);
69 int maxCapsPost = getMaxCaps(member.getHullSpec().getHullSize(), to);
70
71 int caps = member.getVariant().getNumFluxCapacitors();
72 int vents = member.getVariant().getNumFluxVents();
73
74 data.member = member;
75 data.maxVents = maxVentsPost;
76 data.maxCaps = maxCapsPost;
77
78 boolean add = false;
79 if (maxVentsPre > maxVentsPost && vents > maxVentsPost) {
80 add = true;
81 }
82 if (maxCapsPre > maxCapsPost && caps > maxCapsPost) {
83 add = true;
84 }
85 if (add) {
86 result.map.put(member, data);
87 }
88 }
89 return result;
90 }
91
92
93 @Override
95 return !getEffects(from, to).map.isEmpty();
96 }
97
98 @Override
99 public void printEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, TooltipMakerAPI info, Map<String, Object> dataMap) {
100 super.prepare();
101
102 VentsCapsDataMap map = getEffects(from, to);
103 setMap(map, dataMap);
104
105 info.addSectionHeading("Excess vents and capacitors", base, dark, Alignment.MID, 15f);
106
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"
111 );
112 }
113
114 @Override
115 public void infoButtonPressed(ButtonAPI button, Object param, Map<String, Object> dataMap) {
116 }
117
118 @Override
119 public void applyEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, Map<String, Object> dataMap) {
120 VentsCapsDataMap map = getMap(dataMap);
121
122 for (VentsCapsEffectData data : map.map.values()) {
123 clampNumVentsAndCaps(data.member, to);
124 }
125 }
126
127 public static void clampNumVentsAndCaps(FleetMemberAPI member, MutableCharacterStatsAPI stats) {
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);
137 }
138 }
139
140}
141
142
143
144
145
146
147
static SectorAPI getSector()
Definition Global.java:59
static void clampNumVentsAndCaps(FleetMemberAPI member, MutableCharacterStatsAPI stats)
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)