1package com.fs.starfarer.api.impl.campaign;
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Iterator;
7import java.util.Random;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin.FleetMemberData;
12import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin.Status;
13import com.fs.starfarer.api.combat.ShieldAPI.ShieldType;
14import com.fs.starfarer.api.combat.ShipHullSpecAPI;
15import com.fs.starfarer.api.combat.ShipHullSpecAPI.ShipTypeHints;
16import com.fs.starfarer.api.combat.ShipVariantAPI;
17import com.fs.starfarer.api.fleet.FleetMemberAPI;
18import com.fs.starfarer.api.impl.campaign.ids.Stats;
19import com.fs.starfarer.api.impl.campaign.ids.Tags;
20import com.fs.starfarer.api.loading.HullModSpecAPI;
21import com.fs.starfarer.api.loading.VariantSource;
22import com.fs.starfarer.api.plugins.DModAdderPlugin;
23import com.fs.starfarer.api.plugins.DModAdderPlugin.DModAdderParams;
24import com.fs.starfarer.api.util.Misc;
25import com.fs.starfarer.api.util.WeightedRandomPicker;
58 addDMods(data.getMember(), data.getStatus() == Status.DESTROYED, own, recoverer, random);
63 addDMods(variant, destroyed, own, recoverer, random);
67 if (random ==
null) random =
new Random();
72 DModAdderParams params =
new DModAdderParams();
73 params.variant = variant;
74 params.destroyed = destroyed;
76 params.recoverer = recoverer;
77 params.random = random;
101 if (hasStructDamage) {
124 int num = 2 + random.nextInt(3);
129 if (recoverer !=
null) {
132 extra = random.nextInt(extra + 1);
134 extra = -1 * random.nextInt(-extra + 1);
140 if (num < 1) num = 1;
144 int add = num - already;
146 add = (1 - reduction);
152 if (add <= 0)
return;
156 picker.
addAll(potentialMods);
157 for (
int i = 0; i < add && !picker.
isEmpty(); i++) {
173 addDMods(variant, canAddDestroyedMods, num, random);
176 if (random ==
null) random =
new Random();
178 DModAdderParams params =
new DModAdderParams();
179 params.variant = variant;
180 params.canAddDestroyedMods = canAddDestroyedMods;
182 params.random = random;
184 if (plugin !=
null) {
204 if (hasStructDamage) {
221 potentialMods =
new ArrayList<HullModSpecAPI>(potentialMods);
228 picker.
addAll(potentialMods);
230 for (
int i = 0; i < num && !picker.
isEmpty(); i++) {
262 Iterator<HullModSpecAPI> iter = mods.iterator();
263 while (iter.hasNext()) {
296 Iterator<HullModSpecAPI> iter = mods.iterator();
297 while (iter.hasNext()) {
306 if (!variant.
hasHullMod(mod.getId())) added++;
314 List<HullModSpecAPI> result =
new ArrayList<HullModSpecAPI>();
316 for (String tag : tags) {
317 if (mod.hasTag(tag))
continue OUTER;
325 List<HullModSpecAPI> result =
new ArrayList<HullModSpecAPI>();
327 if (mod.getTags().containsAll(Arrays.asList(tags))) {
357 if (!mod.
getTags().containsAll(Arrays.asList(tags)))
continue;
static SettingsAPI getSettings()
static SectorAPI getSector()
static void addDMods(ShipVariantAPI variant, boolean destroyed, boolean own, CampaignFleetAPI recoverer, Random random)
static List< HullModSpecAPI > getModsWithTags(String ... tags)
static void addDMods(FleetMemberAPI member, boolean canAddDestroyedMods, int num, Random random)
static int getNumNonBuiltInDMods(ShipVariantAPI variant)
static void addDMods(FleetMemberData data, boolean own, CampaignFleetAPI recoverer, Random random)
static boolean assumeAllShipsAreAutomated
static boolean setDHull(ShipVariantAPI variant)
static List< HullModSpecAPI > getModsWithoutTags(List< HullModSpecAPI > mods, String ... tags)
static HullModSpecAPI getMod(String id)
static int reduceNextDmodsBy
static void addDMods(ShipVariantAPI variant, boolean canAddDestroyedMods, int num, Random random)
static int addAllPermaModsWithTags(ShipVariantAPI variant, String ... tags)
static void removeUnsuitedMods(ShipVariantAPI variant, List< HullModSpecAPI > mods)
static void addDMods(FleetMemberAPI member, boolean destroyed, boolean own, CampaignFleetAPI recoverer, Random random)
static int MAX_DMODS_FROM_COMBAT
static int getNumDMods(ShipVariantAPI variant)
static int getNumDMods(ShipVariantAPI variant, String ... tags)
static void removeModsAlreadyInVariant(ShipVariantAPI variant, List< HullModSpecAPI > mods)
static void removeDMod(ShipVariantAPI v, String id)
static final String SHIP_DMOD_REDUCTION
static boolean isAutomated(MutableShipStatsAPI stats)
static String getDHullId(ShipHullSpecAPI spec)
void addAll(Collection< T > items)
ShipHullSpecAPI getHullSpec(String hullId)
HullModSpecAPI getHullModSpec(String modId)
List< HullModSpecAPI > getAllHullModSpecs()
MutableFleetStatsAPI getStats()
< T > T pickPlugin(Class< T > c, Object params)
GenericPluginManagerAPI getGenericPlugins()
EnumSet< ShipTypeHints > getHints()
ShieldType getDefenseType()
boolean isRestoreToBase()
boolean isBuiltInMod(String modId)
ShipHullSpecAPI getDParentHull()
ShipHullSpecAPI getBaseHull()
List< String > getBuiltInMods()
Collection< String > getHullMods()
void removePermaMod(String modId)
void addSuppressedMod(String modId)
void removeSuppressedMod(String modId)
boolean hasHullMod(String id)
ShipHullSpecAPI getHullSpec()
void setSource(VariantSource source)
void setHullSpecAPI(ShipHullSpecAPI hullSpec)
void removeMod(String modId)
void addPermaMod(String modId)
ShipVariantAPI getVariant()
DynamicStatsAPI getDynamic()
boolean hasTag(String tag)
void addDMods(DModAdderParams params)
float getValue(String id)