1package com.fs.starfarer.api.characters;
4import java.util.ArrayList;
5import java.util.LinkedHashMap;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.combat.ShipVariantAPI;
11import com.fs.starfarer.api.fleet.FleetMemberAPI;
12import com.fs.starfarer.api.impl.campaign.plog.PlaythroughLog;
13import com.fs.starfarer.api.impl.campaign.plog.SModRecord;
14import com.fs.starfarer.api.loading.HullModSpecAPI;
15import com.fs.starfarer.api.loading.VariantSource;
16import com.fs.starfarer.api.ui.Alignment;
17import com.fs.starfarer.api.ui.ButtonAPI;
18import com.fs.starfarer.api.ui.TooltipMakerAPI;
19import com.fs.starfarer.api.ui.UIComponentAPI;
20import com.fs.starfarer.api.util.Misc;
24 public static class SmodRemovalEffectData {
26 List<SModRecord> records =
new ArrayList<SModRecord>();
31 boolean offerChoice =
false;
32 List<String> removeList =
new ArrayList<String>();
34 List<ButtonAPI> buttons =
new ArrayList<ButtonAPI>();
37 public static class SmodDataMap {
38 Map<FleetMemberAPI, SmodRemovalEffectData> map =
new LinkedHashMap<FleetMemberAPI, SmodRemovalEffectData>();
40 public void setMap(SmodDataMap map, Map<String, Object> dataMap) {
41 String key = getClass().getSimpleName();
42 dataMap.put(key, map);
44 public SmodDataMap
getMap(Map<String, Object> dataMap) {
45 String key = getClass().getSimpleName();
46 SmodDataMap map = (SmodDataMap)dataMap.get(key);
48 map =
new SmodDataMap();
49 dataMap.put(key, map);
55 SmodDataMap result =
new SmodDataMap();
60 if (member ==
null)
continue;
61 if (record.getSMods().isEmpty())
continue;
62 String modId = record.getSMods().get(0);
66 SmodRemovalEffectData data = result.map.get(member);
68 data =
new SmodRemovalEffectData();
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 &&
87 if (!data.offerChoice) {
88 List<SModRecord> copy =
new ArrayList<SModRecord>(data.records);
89 for (
int i = 0; i < data.remove; i++) {
94 int cost = mod.
getCostFor(member.getHullSpec().getHullSize());
100 if (minCostMod !=
null) {
101 data.removeList.add(minCostMod.
getSMods().get(0));
102 copy.remove(minCostMod);
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,
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()) {
148 if (data.offerChoice) {
162 if (prev !=
null) p = pad;
172 if (cost < minCost) {
177 if (minCostButton !=
null) {
188 SmodDataMap map =
getMap(dataMap);
190 for (SmodRemovalEffectData data : map.map.values()) {
191 boolean found =
false;
213 SmodDataMap map =
getMap(dataMap);
215 for (SmodRemovalEffectData data : map.map.values()) {
217 variant = variant.
clone();
220 if (data.offerChoice) {
225 data.removeList.add(record.
getSMods().get(0));
230 for (String modId : data.removeList) {
233 data.member.setVariant(variant,
false,
false);
static SettingsAPI getSettings()
static SectorAPI getSector()
void infoButtonPressed(ButtonAPI button, Object param, Map< String, Object > dataMap)
SmodDataMap getEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to)
boolean hasEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to)
SmodDataMap getMap(Map< String, Object > dataMap)
void applyEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, Map< String, Object > dataMap)
void printEffects(MutableCharacterStatsAPI from, MutableCharacterStatsAPI to, TooltipMakerAPI info, Map< String, Object > dataMap)
void setMap(SmodDataMap map, Map< String, Object > dataMap)
static PlaythroughLog getInstance()
List< SModRecord > getSModsInstalled()
List< String > getSMods()
static Color getNegativeHighlightColor()
static int getMaxPermanentMods(ShipAPI ship)
static Color getHighlightColor()
HullModSpecAPI getHullModSpec(String modId)
FleetDataAPI getFleetData()
List< FleetMemberAPI > getMembersListCopy()
CampaignFleetAPI getPlayerFleet()
String getHullNameWithDashClass()
Collection< String > getHullMods()
LinkedHashSet< String > getSMods()
void removePermaMod(String modId)
void setSource(VariantSource source)
ShipVariantAPI getVariant()
ShipHullSpecAPI getHullSpec()
int getCostFor(HullSize size)
PositionAPI setXAlignOffset(float xAlignOffset)
PositionAPI getPosition()