1package com.fs.starfarer.api.impl.campaign.procgen.themes;
3import java.util.ArrayList;
4import java.util.Arrays;
5import java.util.Collections;
6import java.util.Comparator;
7import java.util.HashSet;
11import org.lwjgl.util.vector.Vector2f;
13import com.fs.starfarer.api.EveryFrameScript;
14import com.fs.starfarer.api.Global;
15import com.fs.starfarer.api.campaign.CampaignFleetAPI;
16import com.fs.starfarer.api.campaign.CargoAPI;
17import com.fs.starfarer.api.campaign.CustomEntitySpecAPI;
18import com.fs.starfarer.api.campaign.JumpPointAPI;
19import com.fs.starfarer.api.campaign.PlanetAPI;
20import com.fs.starfarer.api.campaign.SectorEntityToken;
21import com.fs.starfarer.api.campaign.StarSystemAPI;
22import com.fs.starfarer.api.fleet.FleetMemberAPI;
23import com.fs.starfarer.api.impl.campaign.CoronalTapParticleScript;
24import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin;
25import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin.DerelictShipData;
26import com.fs.starfarer.api.impl.campaign.econ.impl.PlanetaryShield;
27import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater;
28import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams;
29import com.fs.starfarer.api.impl.campaign.ids.Commodities;
30import com.fs.starfarer.api.impl.campaign.ids.Conditions;
31import com.fs.starfarer.api.impl.campaign.ids.Entities;
32import com.fs.starfarer.api.impl.campaign.ids.Factions;
33import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
34import com.fs.starfarer.api.impl.campaign.ids.Planets;
35import com.fs.starfarer.api.impl.campaign.ids.StarTypes;
36import com.fs.starfarer.api.impl.campaign.ids.Submarkets;
37import com.fs.starfarer.api.impl.campaign.ids.Tags;
38import com.fs.starfarer.api.impl.campaign.ids.Terrain;
39import com.fs.starfarer.api.impl.campaign.procgen.Constellation;
40import com.fs.starfarer.api.impl.campaign.procgen.DefenderDataOverride;
41import com.fs.starfarer.api.impl.campaign.procgen.NameGenData;
42import com.fs.starfarer.api.impl.campaign.procgen.PlanetConditionGenerator;
43import com.fs.starfarer.api.impl.campaign.procgen.PlanetGenDataSpec;
44import com.fs.starfarer.api.impl.campaign.procgen.ProcgenUsedNames;
45import com.fs.starfarer.api.impl.campaign.procgen.ProcgenUsedNames.NamePick;
46import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
47import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator.StarSystemType;
48import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner.ShipRecoverySpecialCreator;
49import com.fs.starfarer.api.impl.campaign.procgen.themes.SalvageSpecialAssigner.SpecialCreationContext;
50import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.PerShipData;
51import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipCondition;
52import com.fs.starfarer.api.impl.campaign.terrain.AsteroidFieldTerrainPlugin.AsteroidFieldParams;
53import com.fs.starfarer.api.util.Misc;
54import com.fs.starfarer.api.util.WeightedRandomPicker;
102 if (
DEBUG) System.out.println(
"\n\n\n");
103 if (
DEBUG) System.out.println(
"Generating misc derelicts etc in all systems");
105 List<StarSystemData> all =
new ArrayList<StarSystemData>();
116 List<StarSystemData> systems =
new ArrayList<StarSystemData>();
122 for (StarSystemData data : systems) {
128 if (!derelict && theme !=
null && !data.system.getTags().isEmpty())
continue;
145 SpecialCreationContext specialContext =
new SpecialCreationContext();
149 if (
DEBUG) System.out.println(
"Finished generating misc derelicts\n\n\n\n\n");
172 if (
DEBUG) System.out.println(
"Looking for planetary shield planet");
179 float nonHabDist = 0;
183 int systemsChecked = 0;
199 for (
PlanetAPI curr : system.getPlanets()) {
200 if (curr.isStar())
continue;
201 if (curr.isMoon())
continue;
202 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
206 float dist = system.getLocation().length() +
random.nextFloat() * 6000;
208 if (dist > habDist) {
217 if (dist > nonHabDist) {
232 if (planet ==
null) {
237 if (planet !=
null) {
255 if (
DEBUG) System.out.println(
"Failed to find a planet in remnant systems");
257 if (
DEBUG) System.out.println(
"Finished adding Planetary Shield planet\n\n\n\n\n");
261 int minNonSalvageable,
int maxNonSalvageable,
262 int minSalvageable,
int maxSalvageable,
263 String ... allowedThemes) {
265 if (
DEBUG) System.out.println(
"Adding " + variant +
" to star systems");
267 Set<String> tags =
new HashSet<String>(Arrays.asList(allowedThemes));
269 int numSalvageable = minSalvageable +
random.nextInt(maxSalvageable - minSalvageable + 1);
270 int numNonSalvageable = minNonSalvageable +
random.nextInt(maxNonSalvageable - minNonSalvageable + 1);
272 List<Constellation> list =
new ArrayList<Constellation>(context.
constellations);
273 Collections.shuffle(list,
random);
275 List<StarSystemData> systems =
new ArrayList<StarSystemData>();
283 Collections.shuffle(systems,
random);
284 for (StarSystemData data : systems) {
285 boolean matches =
false;
286 for (String tag : data.system.getTags()) {
287 if (tags.contains(tag)) {
292 if (!matches)
continue;
297 if (numSalvageable > 0) {
299 ShipRecoverySpecialCreator creator =
new ShipRecoverySpecialCreator(
random, 0, 0,
false,
null,
null);
300 Object specialData = creator.createSpecial(ae.entity,
new SpecialCreationContext());
301 if (specialData !=
null) {
308 if (
DEBUG) System.out.println(
" Added " + variant +
" to " + data.system +
"\n");
310 if (numSalvageable + numNonSalvageable <= 0)
break;
314 if (
DEBUG) System.out.println(
"Finished adding " + variant +
" to star systems\n\n\n\n\n");
321 int num = 2 +
random.nextInt(3);
325 if (
DEBUG) System.out.println(
"Adding up to " + num +
" solar shades and mirrors");
326 List<Constellation> list =
new ArrayList<Constellation>(context.
constellations);
331 if (system.isNebula())
continue;
333 for (
PlanetAPI planet : system.getPlanets()) {
334 if (planet.isStar())
continue;
337 if (!(focus instanceof
PlanetAPI))
continue;
338 if (!((
PlanetAPI) focus).isNormalStar())
continue;
343 if (spec ==
null)
continue;
346 if (cat ==
null)
continue;
357 if (weight <= 0)
continue;
374 if (weight <= 0)
continue;
377 boolean enoughRoom =
true;
378 for (
PlanetAPI other : system.getPlanets()) {
379 if (other.getOrbitFocus() == planet) {
380 if (other.getCircularOrbitRadius() < planet.getRadius() + other.getRadius() + 320) {
386 if (!enoughRoom)
continue;
389 picker.
add(planet, weight);
394 if (
DEBUG) System.out.println(
"Found " + picker.
getItems().size() +
" candidates");
395 for (
int i = 0; i < num && !picker.
isEmpty(); i++) {
397 if (
DEBUG) System.out.println(
"Adding solar shades and mirrors to [" + planet.
getName() +
"] in [" +
418 boolean forceFew =
false;
419 if (!shade && !mirror) {
428 float radius = 270f + planet.
getRadius();
432 float profile = 2000f;
435 boolean manyMirrors =
random.nextBoolean();
447 if (manyMirrors && !forceFew) {
458 boolean manyShades =
random.nextBoolean();
463 if (manyShades && !forceFew) {
475 if (
DEBUG) System.out.println(
"Done adding solar shades and mirrors");
486 if (
DEBUG) System.out.println(
" Generating misc derelicts in system " + data.system.
getName());
487 boolean special = data.isBlackHole() || data.isNebula() || data.isPulsar();
492 if (
random.nextFloat() < 0.5f)
return;
531 List<SectorEntityToken> gates =
new ArrayList<SectorEntityToken>();
533 for (
StarSystemAPI system :
new ArrayList<StarSystemAPI>(systems)) {
535 boolean galatia = system.getBaseName().toLowerCase().equals(
"galatia");
536 if (system.getTags().isEmpty() || galatia) {
537 systems.remove(system);
540 gates.addAll(system.getEntitiesWithTag(
Tags.
GATE));
547 if (
DEBUG) System.out.println(
" Already have " + gates.size() +
" gates, not adding any");
553 if (
DEBUG) System.out.println(
"");
554 if (
DEBUG) System.out.println(
"");
555 if (
DEBUG) System.out.println(
"");
556 if (
DEBUG) System.out.println(
" Adding " + addGates +
" extra gates, for a total of " + (addGates + gates.size()));
558 for (
int i = 0; i < addGates; i++) {
562 if (system.getPlanets().size() < 3)
continue;
564 float minDist = Float.MAX_VALUE;
567 if (dist < minDist) minDist = dist;
569 if (minDist > maxDist) {
574 if (farthest !=
null) {
575 StarSystemData data =
new StarSystemData();
576 data.system = farthest;
580 if (gate !=
null && gate.entity !=
null) gates.add(gate.entity);
583 if (
DEBUG) System.out.println(
" Done adding extra gates");
584 if (
DEBUG) System.out.println(
"");
585 if (
DEBUG) System.out.println(
"");
586 if (
DEBUG) System.out.println(
"");
588 SpecialCreationContext specialContext =
new SpecialCreationContext();
598 if (
DEBUG) System.out.println(
"Adding coronal taps...");
600 List<Constellation> list =
new ArrayList<Constellation>(context.
constellations);
619 if (w <= 0)
continue;
621 if (system.getType() == StarSystemType.TRINARY_2CLOSE) {
625 boolean hasBlueStar =
false;
626 boolean hasNormalStar =
false;
627 for (
PlanetAPI planet : system.getPlanets()) {
628 if (!planet.isNormalStar())
continue;
633 hasNormalStar =
true;
636 if (!hasNormalStar)
continue;
648 tapSystems.
addAll(backup);
651 int numTaps = 2 +
random.nextInt(2);
654 while (added < numTaps && !tapSystems.
isEmpty()) {
662 if (
DEBUG) System.out.println(
"Done adding coronal taps\n\n\n");
665 public static class MakeCoronalTapFaceNearestStar
implements EveryFrameScript {
670 public void advance(
float amount) {
673 float minDist = Float.MAX_VALUE;
676 if (!star.isStar())
continue;
678 if (dist < minDist) {
683 if (closest !=
null) {
687 public boolean isDone() {
690 public boolean runWhilePaused() {
701 AddedEntity entity =
null;
702 if (system.
getType() == StarSystemType.TRINARY_2CLOSE) {
703 EntityLocation loc =
new EntityLocation();
704 loc.location =
new Vector2f();
706 if (entity !=
null) {
707 system.
addScript(
new MakeCoronalTapFaceNearestStar(entity.entity));
713 if (!planet.isNormalStar())
continue;
718 fallback.
add(planet);
728 EntityLocation loc =
new EntityLocation();
730 float orbitDays = orbitRadius / 20f;
737 if (entity !=
null) {
751 if (entity !=
null) {
762 if (
DEBUG) System.out.println(
"Looking for system to hide PK in");
764 List<StarSystemAPI> preferred =
new ArrayList<StarSystemAPI>();
765 List<StarSystemAPI> other =
new ArrayList<StarSystemAPI>();
771 if (system.isNebula())
continue;
772 if (system.hasPulsar())
continue;
773 if (system.hasBlackHole())
continue;
787 if (unsafe || !(misc || nonLargeDerelict || secondaryRuins || remnantNoFleets)) {
792 for (
PlanetAPI curr : system.getPlanets()) {
793 if (curr.isStar())
continue;
794 if (curr.isMoon())
continue;
795 if (curr.isGasGiant())
continue;
796 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
797 if (curr.getCircularOrbitRadius() < 6000)
continue;
803 preferred.add(system);
810 Comparator<StarSystemAPI> comp =
new Comparator<StarSystemAPI>() {
816 List<StarSystemAPI> sorted =
new ArrayList<StarSystemAPI>();
817 if (!preferred.isEmpty()) {
818 sorted.addAll(preferred);
820 sorted.addAll(other);
822 if (sorted.isEmpty()) {
823 if (
DEBUG) System.out.println(
"FAILED TO FIND SUITABLE SYSTEM FOR PK");
826 Collections.sort(sorted, comp);
831 for (
int i = 0; i < 20 && i < sorted.size(); i++) {
833 picker.
add(sorted.get(i), 1f);
842 if (
DEBUG) System.out.println(
"Finished adding PK system\n\n\n\n\n");
857 if (curr.isStar())
continue;
859 if (curr.isGasGiant())
continue;
860 if (curr.getMarket() ==
null)
continue;
861 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
862 if (curr.getCircularOrbitRadius() < 6000)
continue;
873 if (tundra ==
null) {
875 float orbitRadius = 7000;
876 if (!gaps.isEmpty()) {
877 orbitRadius = (gaps.get(0).start + gaps.get(0).end) * 0.5f;
879 float orbitDays = orbitRadius / (20f +
random.nextFloat() * 5f);
880 float radius = 100f +
random.nextFloat() * 50f;
881 float angle =
random.nextFloat() * 360f;
884 String name = namePick.nameWithRomanSuffixIfAny;
887 if (tundra ==
null) {
888 if (
DEBUG) System.out.println(
"FAILED TO CREATE PLANET IN PK SYSTEM");
899 if (
DEBUG) System.out.println(
"Setting planet [" + tundra.
getName() +
"] to tundra");
923 if (curr.isStar())
continue;
924 if (curr.isGasGiant())
continue;
925 if (curr.getMarket() ==
null)
continue;
926 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
927 if (curr == tundra)
continue;
929 float h = curr.getMarket().getHazardValue();
932 curr.getMarket().getConditions().clear();
946 float orbitRadius = 7000;
947 if (!gaps.isEmpty()) {
948 orbitRadius = (gaps.get(0).start + gaps.get(0).end) * 0.5f;
950 float radius = 500f + 200f *
random.nextFloat();
951 float area = radius * radius * 3.14f;
952 int count = (int) (area / 80000f);
954 if (count < 10) count = 10;
955 if (count > 100) count = 100;
956 float angle =
random.nextFloat() * 360f;
957 float orbitDays = orbitRadius / (20f +
random.nextFloat() * 5f);
960 new AsteroidFieldParams(
982 StarSystemData data =
new StarSystemData();
986 hulls.
add(
"prometheus2", 1f);
987 hulls.
add(
"colossus2", 1f);
988 hulls.
add(
"colossus2", 1f);
989 hulls.
add(
"colossus2", 1f);
990 hulls.
add(
"eradicator", 1f);
991 hulls.
add(
"enforcer", 1f);
992 hulls.
add(
"sunder", 1f);
993 hulls.
add(
"venture_pather", 1f);
994 hulls.
add(
"manticore_luddic_path", 1f);
995 hulls.
add(
"cerberus_luddic_path", 1f);
996 hulls.
add(
"hound_luddic_path", 1f);
997 hulls.
add(
"buffalo2", 1f);
999 for (AddedEntity ae : data.generated) {
1009 float dist = curr.getCircularOrbitRadius();
1016 if (fringePoint !=
null) {
1017 data =
new StarSystemData();
1021 hulls.
add(
"radiant", 0.25f);
1022 hulls.
add(
"nova", 0.5f);
1023 hulls.
add(
"brilliant", 1f);
1024 hulls.
add(
"apex", 1f);
1025 hulls.
add(
"scintilla", 1f);
1026 hulls.
add(
"scintilla", 1f);
1027 hulls.
add(
"fulgent", 1f);
1028 hulls.
add(
"fulgent", 1f);
1029 hulls.
add(
"glimmer", 1f);
1030 hulls.
add(
"glimmer", 1f);
1031 hulls.
add(
"lumen", 1f);
1032 hulls.
add(
"lumen", 1f);
1036 for (AddedEntity ae : data.generated) {
1040 plugin.
getData().ship.condition = ShipCondition.WRECKED;
1074 for (String slotId : member.getVariant().getFittedWeaponSlots()) {
1075 String weaponId = member.getVariant().getWeaponId(slotId);
1076 if (
random.nextFloat() < 0.5f) {
1077 member.getVariant().clearSlot(slotId);
1079 if (
random.nextFloat() < 0.25f) {
1083 if (index == 0 || index == 2) {
1091 float minDist = Float.MAX_VALUE;
1095 if (dist < minDist) {
1100 if (nexus !=
null) {
1111 if (
DEBUG) System.out.println(
"Looking for LOCR_LUDDIC planet");
1121 if (system.isNebula())
continue;
1122 if (system.hasPulsar())
continue;
1123 if (system.hasBlackHole())
continue;
1127 for (
PlanetAPI curr : system.getPlanets()) {
1128 if (curr.isStar())
continue;
1129 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
1133 if (curr.isGasGiant())
continue;
1137 if (curr.getMarket().hasCondition(
"farmland_rich") || curr.getMarket().hasCondition(
"farmland_bountiful"))
1141 else if ( curr.getMarket().hasCondition(
"farmland_adequate"))
1143 picker_fallback.
add(curr);
1152 planet = picker_fallback.
pick();
1155 if (planet !=
null) {
1159 DerelictShipData params =
new DerelictShipData(
new PerShipData(
"nebula_Standard", ShipCondition.BATTERED, 0f),
false);
1160 params.ship.shipName =
"CGR Light of Exultation";
1161 params.ship.nameAlwaysKnown =
true;
1166 float orbitDays = 200f / (10f + (float) Math.random() * 5f);
1168 ShipRecoverySpecialCreator creator =
new ShipRecoverySpecialCreator(
null, 0, 0,
false,
null,
null);
1184 if (
DEBUG) System.out.println(
"Failed to find a LOCR_LUDDIC planet, may Ludd forgive you.");
1186 if (
DEBUG) System.out.println(
"Finished adding LOCR_LUDDIC planet\n\n\n");
1238 if (
DEBUG) System.out.println(
"Looking for LOCR_MINERS planet");
1247 if (system.hasPulsar())
continue;
1251 for (
PlanetAPI curr : system.getPlanets()) {
1252 if (curr.isStar())
continue;
1253 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
1259 if (curr.isGasGiant())
continue;
1272 if (planet !=
null) {
1282 if (
DEBUG) System.out.println(
"Failed to find a planet for LOCR_MINERS.");
1284 if (
DEBUG) System.out.println(
"Finished adding LOCR_MINERS planet\n\n\n\n\n");
1288 if (
DEBUG) System.out.println(
"Looking for LOCR_PIRATE planet");
1297 if (system.hasPulsar())
continue;
1301 for (
PlanetAPI curr : system.getPlanets()) {
1302 if (curr.isStar())
continue;
1303 if (!curr.getMarket().isPlanetConditionMarketOnly())
continue;
1307 if (curr.isGasGiant())
continue;
1316 if (planet !=
null) {
1326 if (
DEBUG) System.out.println(
"Failed to find a planet for LOCR_PIRATE; the dream is dead :( ");
1328 if (
DEBUG) System.out.println(
"Finished adding LOCR_PIRATE planet\n\n\n");
1333 List<CampaignFleetAPI> stations =
new ArrayList<CampaignFleetAPI>();
1339 if (!fleet.isStationMode())
continue;
1342 boolean damaged = fleet.getMemoryWithoutUpdate().getBoolean(
"$damagedStation");
1343 if (damaged && !includeDamaged)
continue;
1344 if (!damaged && onlyDamaged)
continue;
1346 stations.add(fleet);
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static SectorAPI getSector()
DerelictShipData getData()
static void applyVisuals(PlanetAPI planet)
static final String METALS
static final String FARMLAND_BOUNTIFUL
static final String ORGANICS_PLENTIFUL
static final String RUINS_WIDESPREAD
static final String RUINS_SCATTERED
static final String RUINS_EXTENSIVE
static final String FARMLAND_ADEQUATE
static final String POOR_LIGHT
static final String RARE_ORE_ULTRARICH
static final String INIMICAL_BIOSPHERE
static final String RUINS_VAST
static final String EXTREME_TECTONIC_ACTIVITY
static final String VOLATILES_PLENTIFUL
static final String SOLAR_ARRAY
static final String DECIVILIZED
static final String WATER_SURFACE
static final String DECIVILIZED_SUBPOP
static final String FARMLAND_POOR
static final String HABITABLE
static final String FARMLAND_RICH
static final String WEAPONS_CACHE_SMALL
static final String STELLAR_MIRROR
static final String HIDDEN_CACHE
static final String EQUIPMENT_CACHE_SMALL
static final String EQUIPMENT_CACHE
static final String SUPPLY_CACHE_SMALL
static final String WEAPONS_CACHE_HIGH
static final String WEAPONS_CACHE_LOW
static final String CORONAL_TAP
static final String WEAPONS_CACHE
static final String WRECK
static final String STATION_RESEARCH
static final String SUPPLY_CACHE
static final String WEAPONS_CACHE_SMALL_LOW
static final String WEAPONS_CACHE_SMALL_HIGH
static final String STELLAR_SHADE
static final String ORBITAL_DOCKYARD
static final String LUDDIC_PATH
static final String HEGEMONY
static final String NEUTRAL
static final String REMNANTS
static final String SALVAGE_SEED
static final String SALVAGE_SPEC_ID_OVERRIDE
static final String BARREN
static final String TUNDRA
static final String BARREN_VENUSLIKE
static final String DESERT
static final String DESERT1
static final String PLANET_TERRAN_ECCENTRIC
static final String BLUE_SUPERGIANT
static final String BLUE_GIANT
static final String BROWN_DWARF
static final String RED_DWARF
static final String SUBMARKET_STORAGE
static final String ASTEROID_FIELD
List< StarSystemAPI > getSystems()
static final String TAG_PLANET
static void generateConditionsForPlanet(GenContext context, PlanetAPI planet)
static NamePick pickName(String tag, String parent, LagrangePointType lagrangePoint)
void addShipGraveyard(StarSystemData data, float chanceToAddAny, int min, int max, WeightedRandomPicker< String > factions)
static StarSystemData computeSystemData(StarSystemAPI system)
void addDerelictShip(StarSystemData data, EntityLocation loc, WeightedRandomPicker< String > factions)
static AddedEntity addEntity(Random random, StarSystemAPI system, WeightedRandomPicker< EntityLocation > locs, String type, String faction)
void addResearchStations(StarSystemData data, float chanceToAddAny, int min, int max, WeightedRandomPicker< String > stationTypes)
static EntityLocation pickAnyLocation(Random random, StarSystemAPI system, float gap, Set< SectorEntityToken > exclude)
static List< OrbitGap > findGaps(SectorEntityToken center, float minPad, float maxDist, float minGap)
void addCaches(StarSystemData data, float chanceToAddAny, int min, int max, WeightedRandomPicker< String > cacheTypes)
void addDerelictShips(StarSystemData data, float chanceToAddAny, int min, int max, WeightedRandomPicker< String > factions)
static SectorEntityToken addSalvageEntity(LocationAPI location, String id, String faction)
AddedEntity addInactiveGate(StarSystemData data, float prob, float probDebris, float probShips, WeightedRandomPicker< String > factions)
WeightedRandomPicker< String > createStringPicker(Object ... params)
void addDebrisFields(StarSystemData data, float chanceToAddAny, int min, int max)
AddedEntity addDebrisField(StarSystemData data, SectorEntityToken focus, float radius)
static String LOCR_PIRATE_PLANET_KEY
void addSolarShadesAndMirrors(ThemeGenContext context)
static String LOCR_LUDDIC
void addPKSystem(ThemeGenContext context)
void setUpPKSystem(StarSystemAPI system)
void addCoronalTaps(ThemeGenContext context)
void addLOCRLuddicPlanet(ThemeGenContext context)
static int MIN_GATES_TO_ADD
AddedEntity addCoronalTap(StarSystemAPI system)
static void makeDiscoverable(SectorEntityToken entity, float xp, float sensorProfile)
void addLOCRPiratePlanet(ThemeGenContext context)
static String PK_PLANET_KEY
static String PK_SYSTEM_KEY
void populateNonMain(StarSystemData data)
static String LOCR_MINERS
static float PROB_TO_ADD_SOMETHING
static String PLANETARY_SHIELD_PLANET_KEY
void addLOCRMinersPlanet(ThemeGenContext context)
void generateForSector(ThemeGenContext context, float allowedUnusedFraction)
void addDerelicts(ThemeGenContext context, String variant, int minNonSalvageable, int maxNonSalvageable, int minSalvageable, int maxSalvageable, String ... allowedThemes)
static String LOCR_MINERS_PLANET_KEY
static String LOCR_LUDDIC_PLANET_KEY
static String LOCR_LUDDIC_TRANSPORT_KEY
static String PK_NEXUS_KEY
void addRedPlanet(ThemeGenContext context)
static String PK_CACHE_KEY
static List< CampaignFleetAPI > getRemnantStations(boolean includeDamaged, boolean onlyDamaged)
void addExtraGates(ThemeGenContext context)
static String LOCR_BLOCK_FIRST_SURVEY
static String PLANETARY_SHIELD_PLANET
static String LOCR_PIRATE
static void assignSpecials(SectorEntityToken entity)
static WeightedRandomPicker< String > getNearbyFactions(Random random, SectorEntityToken entity)
List< Constellation > constellations
Map< Constellation, String > majorThemes
static void setDefenderOverride(SectorEntityToken entity, DefenderDataOverride override)
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static void setAbandonedStationMarket(String marketId, SectorEntityToken station)
static void addDefeatTrigger(CampaignFleetAPI fleet, String trigger)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static void setSalvageSpecial(SectorEntityToken entity, Object data)
static boolean hasFarmland(MarketAPI market)
static float getAngleInDegrees(Vector2f v)
void addAll(Collection< T > items)
CampaignFleetAPI createEmptyFleet(String factionId, String name, boolean aiMode)
OrbitAPI createCircularOrbitPointingDown(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
ShipVariantAPI getVariant(String variantId)
Object getSpec(Class c, String id, boolean nullOnNotFound)
CustomEntitySpecAPI getCustomEntitySpec(String id)
LocationAPI getContainingLocation()
FleetDataAPI getFleetData()
void setInflater(FleetInflater inflater)
void addWeapons(String id, int count)
void initMothballedShips(String factionId)
void addCommodity(String commodityId, float quantity)
FleetDataAPI getMothballedShips()
void addFleetMember(FleetMemberAPI member)
List< FleetMemberAPI > getMembersListCopy()
SectorEntityToken addTerrain(String terrainId, Object param)
PlanetAPI addPlanet(String id, SectorEntityToken focus, String name, String type, float angle, float radius, float orbitRadius, float orbitDays)
List getEntities(Class implementedClassOrInterface)
List< SectorEntityToken > getEntitiesWithTag(String tag)
void addScript(EveryFrameScript script)
List< PlanetAPI > getPlanets()
String getNameWithLowercaseType()
CustomCampaignEntityAPI addCustomEntity(String id, String name, String type, String factionId)
void removeEntity(SectorEntityToken entity)
void changeType(String type, Random random)
boolean hasCondition(String id)
Map< String, Object > getPersistentData()
List< StarSystemAPI > getStarSystems()
MemoryAPI getMemoryWithoutUpdate()
LocationAPI getContainingLocation()
CustomCampaignEntityPlugin getCustomPlugin()
boolean isInCurrentLocation()
void setCircularOrbitPointingDown(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
float getCircularOrbitAngle()
void setSensorProfile(Float sensorProfile)
void setDiscoverable(Boolean discoverable)
void setFacing(float facing)
void setName(String name)
StarSystemAPI getStarSystem()
SectorEntityToken getOrbitFocus()
Vector2f getLocationInHyperspace()
MemoryAPI getMemoryWithoutUpdate()
float getCircularOrbitPeriod()
void setCustomDescriptionId(String customDescriptionId)
void setDiscoveryXP(Float discoveryXP)
SectorEntityToken getCenter()
SubmarketAPI getSubmarket(String specId)
void setName(String name)
String addCondition(String id)
List< MarketConditionAPI > getConditions()
void removeCondition(String id)
void set(String key, Object value)