38 Map<FleetMemberAPI, SmodRemovalEffectData> map =
new LinkedHashMap<FleetMemberAPI, SmodRemovalEffectData>();
55 SmodDataMap result =
new SmodDataMap();
58 for (SModRecord record : PlaythroughLog.getInstance().getSModsInstalled()) {
59 FleetMemberAPI member = record.getMember();
60 if (member ==
null)
continue;
61 if (record.getSMods().isEmpty())
continue;
62 String modId = record.getSMods().get(0);
63 if (!member.getVariant().getSMods().contains(modId))
continue;
64 if (!member.getVariant().getHullMods().contains(modId))
continue;
66 SmodRemovalEffectData data = result.map.get(member);
68 data =
new SmodRemovalEffectData();
70 data.numSmods = member.getVariant().getSMods().size();
71 data.maxBefore = Misc.getMaxPermanentMods(member, from);
72 data.maxAfter = Misc.getMaxPermanentMods(member, to);
73 result.map.put(member, data);
75 data.records.add(record);
78 for (FleetMemberAPI member :
new ArrayList<FleetMemberAPI>(result.map.keySet())) {
79 SmodRemovalEffectData data = result.map.get(member);
80 if (data.maxBefore <= data.maxAfter || data.records.isEmpty() ||
81 data.numSmods <= data.maxAfter) {
82 result.map.remove(member);
84 data.remove = Math.min(data.numSmods - data.maxAfter, data.records.size());
85 data.offerChoice = data.remove <= 1 &&
86 Global.
getSector().getPlayerFleet().getFleetData().getMembersListCopy().contains(data.member);
87 if (!data.offerChoice) {
88 List<SModRecord> copy =
new ArrayList<SModRecord>(data.records);
89 for (
int i = 0; i < data.remove; i++) {
91 SModRecord minCostMod =
null;
92 for (SModRecord record : data.records) {
94 int cost = mod.getCostFor(member.getHullSpec().getHullSize());
100 if (minCostMod !=
null) {
101 data.removeList.add(minCostMod.getSMods().get(0));
102 copy.remove(minCostMod);
127 Color h = Misc.getHighlightColor();
130 info.addSectionHeading(
"S-mods",
base,
dark, Alignment.MID, initPad);
134 info.addPara(
"Ships that you've built s-mods into that now have more than their maximum"
135 +
" number of s-mods will have the cheapest s-mods removed.", initPad,
136 Misc.getNegativeHighlightColor(),
137 "cheapest s-mods removed");
139 info.addPara(
"If only one s-mod is being removed, and the ship is currently in your fleet, "
140 +
"you can select which s-mod to remove. S-mods you did not build into a ship will not be removed, even if the ship is over the limit.", opad);
145 for (SmodRemovalEffectData data : map.map.values()) {
146 final FleetMemberAPI member = data.member;
148 if (data.offerChoice) {
149 String str =
"The " + member.getShipName() +
150 " (" + member.getHullSpec().getHullNameWithDashClass() +
"), will lose its built-in...";
151 info.addPara(str, initPad);
156 UIComponentAPI prev =
null;
158 ButtonAPI minCostButton =
null;
159 for (SModRecord record : data.records) {
162 if (prev !=
null) p = pad;
163 int cost = mod.getCostFor(member.getHullSpec().getHullSize());
164 ButtonAPI b = info.addAreaCheckbox(
165 mod.getDisplayName() +
" (" + cost +
" OP)",
new Object(),
base,
dark,
bright, bw, bh, p,
true);
169 b.getPosition().setXAlignOffset(indent);
172 if (cost < minCost) {
177 if (minCostButton !=
null) {
178 minCostButton.setChecked(
true);
181 info.addSpacer(0).getPosition().setXAlignOffset(-indent);
188 SmodDataMap map =
getMap(dataMap);
190 for (SmodRemovalEffectData data : map.map.values()) {
191 boolean found =
false;
192 for (ButtonAPI b : data.buttons) {
199 for (ButtonAPI b : data.buttons) {
213 SmodDataMap map =
getMap(dataMap);
215 for (SmodRemovalEffectData data : map.map.values()) {
216 ShipVariantAPI variant = data.member.getVariant();
217 variant = variant.clone();
218 variant.setSource(VariantSource.REFIT);
220 if (data.offerChoice) {
222 for (ButtonAPI b : data.buttons) {
224 SModRecord record = data.records.get(index);
225 data.removeList.add(record.getSMods().get(0));
230 for (String modId : data.removeList) {
231 variant.removePermaMod(modId);
233 data.member.setVariant(variant,
false,
false);