1package com.fs.starfarer.api.impl.campaign.procgen;
3import java.util.ArrayList;
4import java.util.LinkedHashMap;
7import java.util.Random;
11import org.lwjgl.util.vector.Vector2f;
13import com.fs.starfarer.api.Global;
14import com.fs.starfarer.api.campaign.CampaignClockAPI;
15import com.fs.starfarer.api.campaign.CampaignFleetAPI;
16import com.fs.starfarer.api.campaign.FactionAPI;
17import com.fs.starfarer.api.campaign.InteractionDialogAPI;
18import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
19import com.fs.starfarer.api.campaign.LocationAPI;
20import com.fs.starfarer.api.campaign.OptionPanelAPI;
21import com.fs.starfarer.api.campaign.PlanetAPI;
22import com.fs.starfarer.api.campaign.SectorEntityToken;
23import com.fs.starfarer.api.campaign.StarSystemAPI;
24import com.fs.starfarer.api.campaign.TextPanelAPI;
25import com.fs.starfarer.api.campaign.VisualPanelAPI;
26import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
27import com.fs.starfarer.api.campaign.econ.Industry;
28import com.fs.starfarer.api.campaign.econ.MarketAPI;
29import com.fs.starfarer.api.campaign.rules.MemoryAPI;
30import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
31import com.fs.starfarer.api.characters.PersonAPI;
32import com.fs.starfarer.api.combat.EngagementResultAPI;
33import com.fs.starfarer.api.combat.ShipAPI.HullSize;
34import com.fs.starfarer.api.combat.ShipHullSpecAPI;
35import com.fs.starfarer.api.combat.WeaponAPI.AIHints;
36import com.fs.starfarer.api.impl.campaign.AbyssalLightEntityPlugin.AbyssalLightParams;
37import com.fs.starfarer.api.impl.campaign.DebugFlags;
38import com.fs.starfarer.api.impl.campaign.eventide.DuelDialogDelegate;
39import com.fs.starfarer.api.impl.campaign.eventide.DuelPanel;
40import com.fs.starfarer.api.impl.campaign.ids.Entities;
41import com.fs.starfarer.api.impl.campaign.ids.Factions;
42import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
43import com.fs.starfarer.api.impl.campaign.ids.Tags;
44import com.fs.starfarer.api.impl.campaign.intel.PromoteOfficerIntel;
45import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
46import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel;
47import com.fs.starfarer.api.impl.campaign.intel.events.ht.HTScanFactor;
48import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel;
49import com.fs.starfarer.api.impl.campaign.intel.inspection.HegemonyInspectionManager;
50import com.fs.starfarer.api.impl.campaign.intel.misc.LuddicShrineIntel;
51import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager;
52import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager.PunExData;
53import com.fs.starfarer.api.impl.campaign.plog.PLEntry;
54import com.fs.starfarer.api.impl.campaign.plog.PLIntel;
55import com.fs.starfarer.api.impl.campaign.plog.PlaythroughLog;
56import com.fs.starfarer.api.impl.campaign.population.CoreImmigrationPluginImpl;
57import com.fs.starfarer.api.loading.FighterWingSpecAPI;
58import com.fs.starfarer.api.loading.WeaponSpecAPI;
59import com.fs.starfarer.api.util.Misc;
63 protected static enum OptionId {
123 if (optionData ==
null)
return;
125 if (optionData instanceof Integer) {
126 DebugFlags.FAST_RAIDS =
true;
127 Integer str = (Integer) optionData;
137 if (optionData instanceof PunExData) {
143 OptionId option = (OptionId) optionData;
197 if (base !=
null && market !=
null && market.
getStarSystem() !=
null) {
205 case INCREASE_COLONY_SIZE:
207 if (market !=
null) {
214 case FINISH_CONSTRUCTION:
216 if (market !=
null) {
218 if (curr.isBuilding()) {
219 curr.finishBuildingOrUpgrading();
220 textPanel.
addPara(
"Finished building or upgrading " + curr.getCurrentName());
225 case PUNITIVE_EXPEDITION:
229 options.
addOption(
"Punitive expedition: " + data.faction.getDisplayName(), data);
251 case TOPOGRAPHY_POINTS:
260 if (p < 500 || p == 599) p = 500;
261 else if (p < 550) p = 550;
271 for (
int i = 0; i < 10; i++) {
275 AbyssalLightParams params =
new AbyssalLightParams();
278 if ((
float) Math.random() > 0.5f) {
279 params.color =
new Color(225,200,255,255);
320 tags +=
" " + tag +
"\n";
362 float minDist = Float.MAX_VALUE;
365 if (curr.isHidden())
continue;
366 if (playerOnly && !curr.isPlayerOwned())
continue;
369 boolean nearer = dist < minDist;
370 if (dist == minDist && dist == 0 && nearest !=
null) {
385 System.out.println(str);
395 if (market !=
null) {
398 options.
addOption(
"Send a punitive expedition", OptionId.PUNITIVE_EXPEDITION);
400 options.
addOption(
"Hyperspace Topography +50 points", OptionId.TOPOGRAPHY_POINTS);
401 options.
addOption(
"Hostile Activity: reseed RNG and cycle progress through 400/450/499", OptionId.HAEI_POINTS);
405 if (market !=
null) {
440 System.out.println();
441 System.out.println(
"----------------------- FIGHTERS -----------------------");
442 System.out.println();
444 Map<String, String> oneFactionFighters =
new LinkedHashMap<String, String>();
448 String
id = spec.getId();
450 List<String> all =
new ArrayList<String>();
452 if (f.isPlayerFaction())
continue;
453 if (f.getKnownFighters().contains(
id)) {
461 System.out.println(
"FIGHTER WING [" +
id +
"] IS NOT USED BY ANY FACTION");
464 oneFactionFighters.put(
id, fId);
468 System.out.println(
"Fighter wing [" +
id +
"] is known by: [" +
Misc.
getAndJoined(all) +
"]");
472 System.out.println();
473 System.out.println(
"----------------------- WEAPONS -----------------------");
474 System.out.println();
479 if (spec.getAIHints().contains(AIHints.SYSTEM))
continue;
480 String
id = spec.getWeaponId();
482 List<String> all =
new ArrayList<String>();
484 if (f.isPlayerFaction())
continue;
485 Float p = f.getWeaponSellFrequency().get(
id);
486 if (p !=
null && p > 1f) {
489 if (f.knowsWeapon(
id)) {
494 System.out.println(
"Weapon [" +
id +
"] is not sold with higher frequency; known by: [" +
Misc.
getAndJoined(all) +
"]");
499 System.out.println();
500 System.out.println(
"----------------------- SHIPS -----------------------");
501 System.out.println();
503 Map<String, String> oneFactionShips =
new LinkedHashMap<String, String>();
507 if (spec.getHullSize() == HullSize.FIGHTER)
continue;
508 String
id = spec.getHullId();
509 if (
id.endsWith(
"_default_D"))
continue;
510 if (
id.endsWith(
"_default_D"))
continue;
511 if (
id.startsWith(
"module_"))
continue;
514 List<String> all =
new ArrayList<String>();
516 if (f.isPlayerFaction())
continue;
517 if (f.getKnownShips().contains(
id)) {
528 oneFactionShips.put(
id, fId);
532 System.out.println(
"Ship [" +
id +
"] is known by: [" +
Misc.
getAndJoined(all) +
"]");
static SettingsAPI getSettings()
static SectorAPI getSector()
static DuelPanel createTutorial(boolean playerSkilled, String ambienceLoopId)
static DuelPanel createDefault(boolean playerSkilled, boolean enemySkilled, String ambienceLoopId)
static final String ABYSSAL_LIGHT
static final String NEUTRAL
static final String SALVAGE_SEED
void startRaid(StarSystemAPI target, float raidFP)
void setProgress(int progress)
void setRandom(Random random)
static HostileActivityEventIntel get()
static void addFactorCreateIfNecessary(EventFactor factor, InteractionDialogAPI dialog)
static HegemonyInspectionManager getInstance()
static void addShrineIntelIfNeeded(String id, TextPanelAPI text)
static PunitiveExpeditionManager getInstance()
List< PunExReason > getExpeditionReasons(PunExData curr)
void createExpedition(PunExData curr)
LinkedHashMap< FactionAPI, PunExData > getData()
static PlaythroughLog getInstance()
List< PLEntry > getEntries()
void increaseMarketSize()
InteractionDialogAPI dialog
void createInitialOptions()
PirateBaseIntel findPirateBase()
void init(InteractionDialogAPI dialog)
OptionId lastOptionMousedOver
static final Color HIGHLIGHT_COLOR
Map< String, MemoryAPI > getMemoryMap()
void optionSelected(String text, Object optionData)
void checkFactionUseOfStuff()
void optionMousedOver(String optionText, Object optionData)
MarketAPI getNearestMarket(boolean playerOnly)
void advance(float amount)
void backFromEngagement(EngagementResultAPI result)
CampaignFleetAPI playerFleet
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
static String getAndJoined(List< String > strings)
static float getAbyssalDepth(Vector2f loc)
static Vector2f getPointWithinRadius(Vector2f from, float r)
List< WeaponSpecAPI > getAllWeaponSpecs()
List< ShipHullSpecAPI > getAllShipHullSpecs()
List< FighterWingSpecAPI > getAllFighterWingSpecs()
Color getColor(String id)
CampaignClockAPI createClock(long timestamp)
TextPanelAPI getTextPanel()
VisualPanelAPI getVisualPanel()
void showCustomVisualDialog(float customPanelWidth, float customPanelHeight, CustomVisualDialogDelegate delegate)
SectorEntityToken getInteractionTarget()
void addOptionSelectedText(Object optionId)
void setOptionOnEscape(String text, Object optionId)
OptionPanelAPI getOptionPanel()
Collection< String > getTags()
CustomCampaignEntityAPI addCustomEntity(String id, String name, String type, String factionId)
void addOption(String text, Object data)
CampaignFleetAPI getPlayerFleet()
CampaignClockAPI getClock()
List< FactionAPI > getAllFactions()
LocationAPI getCurrentLocation()
IntelManagerAPI getIntelManager()
PersonAPI getPlayerPerson()
SectorEntityToken getEntityById(String id)
LocationAPI getHyperspace()
void setLocation(float x, float y)
MemoryAPI getMemoryWithoutUpdate()
LabelAPI addPara(String text)
void appendToLastParagraph(String text)
void setVisualFade(float in, float out)
void showLargePlanet(SectorEntityToken planet)
void addIntel(IntelInfoPlugin plugin)
List< IntelInfoPlugin > getIntel()
List< MarketAPI > getMarketsCopy()
LocationAPI getContainingLocation()
List< Industry > getIndustries()
StarSystemAPI getStarSystem()
SectorEntityToken getPrimaryEntity()
void set(String key, Object value)
MutableCharacterStatsAPI getStats()