1package com.fs.starfarer.api.impl.campaign.procgen;
4import java.util.ArrayList;
5import java.util.LinkedHashMap;
8import java.util.Random;
10import org.lwjgl.util.vector.Vector2f;
12import com.fs.starfarer.api.Global;
13import com.fs.starfarer.api.campaign.CampaignClockAPI;
14import com.fs.starfarer.api.campaign.CampaignFleetAPI;
15import com.fs.starfarer.api.campaign.FactionAPI;
16import com.fs.starfarer.api.campaign.InteractionDialogAPI;
17import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
18import com.fs.starfarer.api.campaign.LocationAPI;
19import com.fs.starfarer.api.campaign.OptionPanelAPI;
20import com.fs.starfarer.api.campaign.PlanetAPI;
21import com.fs.starfarer.api.campaign.SectorEntityToken;
22import com.fs.starfarer.api.campaign.StarSystemAPI;
23import com.fs.starfarer.api.campaign.TextPanelAPI;
24import com.fs.starfarer.api.campaign.VisualPanelAPI;
25import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
26import com.fs.starfarer.api.campaign.econ.Industry;
27import com.fs.starfarer.api.campaign.econ.MarketAPI;
28import com.fs.starfarer.api.campaign.rules.MemoryAPI;
29import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
30import com.fs.starfarer.api.characters.PersonAPI;
31import com.fs.starfarer.api.combat.EngagementResultAPI;
32import com.fs.starfarer.api.combat.ShipAPI.HullSize;
33import com.fs.starfarer.api.combat.ShipHullSpecAPI;
34import com.fs.starfarer.api.combat.WeaponAPI.AIHints;
35import com.fs.starfarer.api.impl.campaign.AbyssalLightEntityPlugin.AbyssalLightParams;
36import com.fs.starfarer.api.impl.campaign.DebugFlags;
37import com.fs.starfarer.api.impl.campaign.eventide.DuelDialogDelegate;
38import com.fs.starfarer.api.impl.campaign.eventide.DuelPanel;
39import com.fs.starfarer.api.impl.campaign.ids.Entities;
40import com.fs.starfarer.api.impl.campaign.ids.Factions;
41import com.fs.starfarer.api.impl.campaign.ids.Tags;
42import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
43import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel;
44import com.fs.starfarer.api.impl.campaign.intel.events.ht.HTScanFactor;
45import com.fs.starfarer.api.impl.campaign.intel.events.ht.HyperspaceTopographyEventIntel;
46import com.fs.starfarer.api.impl.campaign.intel.inspection.HegemonyInspectionManager;
47import com.fs.starfarer.api.impl.campaign.intel.misc.LuddicShrineIntel;
48import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager;
49import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager.PunExData;
50import com.fs.starfarer.api.impl.campaign.plog.PLEntry;
51import com.fs.starfarer.api.impl.campaign.plog.PLIntel;
52import com.fs.starfarer.api.impl.campaign.plog.PlaythroughLog;
53import com.fs.starfarer.api.impl.campaign.population.CoreImmigrationPluginImpl;
54import com.fs.starfarer.api.loading.FighterWingSpecAPI;
55import com.fs.starfarer.api.loading.WeaponSpecAPI;
56import com.fs.starfarer.api.util.Misc;
60 protected static enum OptionId {
77 protected InteractionDialogAPI
dialog;
100 visual.setVisualFade(0.25f, 0.25f);
106 dialog.setOptionOnEscape(
"Leave", OptionId.LEAVE);
120 if (optionData ==
null)
return;
122 if (optionData instanceof Integer) {
123 DebugFlags.FAST_RAIDS =
true;
124 Integer str = (Integer) optionData;
126 PunitiveExpeditionManager.getInstance().createExpedition(
punExData, str);
128 HegemonyInspectionManager.getInstance().createInspection(str);
134 if (optionData instanceof PunExData) {
140 OptionId option = (OptionId) optionData;
144 dialog.addOptionSelectedText(option);
154 MutableCharacterStatsAPI stats = player.getStats();
160 final DuelPanel duelPanel = DuelPanel.createTutorial(
true,
"soe_ambience");
161 dialog.showCustomVisualDialog(1024, 700,
new DuelDialogDelegate(
null, duelPanel,
dialog,
null,
true));
164 final DuelPanel duelPanel2 = DuelPanel.createDefault(
true,
true,
"soe_ambience");
165 dialog.showCustomVisualDialog(1024, 700,
new DuelDialogDelegate(
"music_soe_fight", duelPanel2,
dialog,
null,
true));
194 if (base !=
null && market !=
null && market.getStarSystem() !=
null) {
195 base.startRaid(market.getStarSystem(), 500f);
202 case INCREASE_COLONY_SIZE:
204 if (market !=
null) {
205 int was = market.getSize();
206 CoreImmigrationPluginImpl plugin =
new CoreImmigrationPluginImpl(market);
207 plugin.increaseMarketSize();
208 textPanel.addPara(
"Size of " + market.getName() +
" increased from " + was +
" to " + market.getSize());
211 case FINISH_CONSTRUCTION:
213 if (market !=
null) {
214 for (Industry curr :
new ArrayList<Industry>(market.getIndustries())) {
215 if (curr.isBuilding()) {
216 curr.finishBuildingOrUpgrading();
217 textPanel.addPara(
"Finished building or upgrading " + curr.getCurrentName());
222 case PUNITIVE_EXPEDITION:
224 for (PunExData data : PunitiveExpeditionManager.getInstance().getData().values()) {
225 if (!PunitiveExpeditionManager.getInstance().getExpeditionReasons(data).isEmpty()) {
226 options.addOption(
"Punitive expedition: " + data.faction.getDisplayName(), data);
229 options.addOption(
"Leave", OptionId.LEAVE,
null);
245 options.addOption(
"1000", 1000);
246 options.addOption(
"Leave", OptionId.LEAVE,
null);
248 case TOPOGRAPHY_POINTS:
249 HyperspaceTopographyEventIntel.addFactorCreateIfNecessary(
250 new HTScanFactor(
"Dev mode point increase", 50),
dialog);
253 if (HostileActivityEventIntel.get() !=
null) {
254 HostileActivityEventIntel intel = HostileActivityEventIntel.get();
255 intel.setRandom(
new Random());
256 int p = intel.getProgress();
257 if (p < 500 || p == 599) p = 500;
258 else if (p < 550) p = 550;
260 intel.setProgress(p);
261 textPanel.addPara(
"Progress set to " + p);
268 for (
int i = 0; i < 10; i++) {
269 Vector2f loc = Misc.getPointWithinRadius(
playerFleet.getLocation(), 10000f);
270 if (Misc.getAbyssalDepth(loc) >= 1f) {
271 AbyssalLightParams params =
new AbyssalLightParams();
272 SectorEntityToken e2 =
Global.
getSector().getHyperspace().addCustomEntity(Misc.genUID(),
null, Entities.ABYSSAL_LIGHT, Factions.NEUTRAL, params);
273 e2.setLocation(loc.x, loc.y);
297 for (PLEntry e : PlaythroughLog.getInstance().getEntries()) {
298 CampaignClockAPI clock =
Global.
getSector().getClock().createClock(e.getTimestamp());
299 log += clock.getShortDate() +
" " + e.getText() +
"\n";
308 tags +=
" " + tag +
"\n";
310 textPanel.addPara(
"\nTags for " + loc.getName() +
":\n" + tags);
311 if (loc instanceof StarSystemAPI) {
312 textPanel.addPara(
"\nSystem type: " + ((StarSystemAPI)loc).getType());
317 PLIntel intel =
new PLIntel();
320 LuddicShrineIntel.addShrineIntelIfNeeded(
"beholder_station",
textPanel);
321 LuddicShrineIntel.addShrineIntelIfNeeded(
"chicomoztoc",
textPanel);
322 LuddicShrineIntel.addShrineIntelIfNeeded(
"gilead",
textPanel);
323 LuddicShrineIntel.addShrineIntelIfNeeded(
"jangala",
textPanel);
324 LuddicShrineIntel.addShrineIntelIfNeeded(
"killa",
textPanel);
325 LuddicShrineIntel.addShrineIntelIfNeeded(
"volturn",
textPanel);
349 MarketAPI nearest =
null;
350 float minDist = Float.MAX_VALUE;
352 for (MarketAPI curr :
Global.
getSector().getEconomy().getMarketsCopy()) {
353 if (curr.isHidden())
continue;
354 if (playerOnly && !curr.isPlayerOwned())
continue;
356 float dist = Misc.getDistanceLY(pf, curr.getPrimaryEntity());
357 boolean nearer = dist < minDist;
358 if (dist == minDist && dist == 0 && nearest !=
null) {
359 float d1 = Misc.getDistance(pf, curr.getPrimaryEntity());
360 float d2 = Misc.getDistance(pf, nearest.getPrimaryEntity());
372 textPanel.appendToLastParagraph(
"\n" + str);
373 System.out.println(str);
379 options.addOption(
"Fight!", OptionId.FIGHT);
383 if (market !=
null) {
384 options.addOption(
"Send pirate raid to " + market.getContainingLocation().getName(), OptionId.PIRATE_RAID,
null);
386 options.addOption(
"Send a punitive expedition", OptionId.PUNITIVE_EXPEDITION);
387 options.addOption(
"Send an AI inspection", OptionId.INSPECTION);
388 options.addOption(
"Hyperspace Topography +50 points", OptionId.TOPOGRAPHY_POINTS);
389 options.addOption(
"Hostile Activity: reseed RNG and cycle progress through 400/450/499", OptionId.HAEI_POINTS);
390 options.addOption(
"Print player log", OptionId.PRINT_LOG);
391 options.addOption(
"Add player log intel", OptionId.ADD_LOG_INTEL);
393 if (market !=
null) {
394 options.addOption(
"Increase size of " + market.getName() +
" to " + (market.getSize() + 1), OptionId.INCREASE_COLONY_SIZE);
395 options.addOption(
"Finish construction on " + market.getName(), OptionId.FINISH_CONSTRUCTION);
398 options.addOption(
"Leave", OptionId.LEAVE,
null);
416 for (IntelInfoPlugin p :
Global.
getSector().getIntelManager().getIntel(PirateBaseIntel.class)) {
417 PirateBaseIntel intel = (PirateBaseIntel) p;
418 if (intel.isEnded() || intel.isEnding())
continue;
428 System.out.println();
429 System.out.println(
"----------------------- FIGHTERS -----------------------");
430 System.out.println();
432 Map<String, String> oneFactionFighters =
new LinkedHashMap<String, String>();
434 if (spec.hasTag(Tags.RESTRICTED))
continue;
436 String
id = spec.getId();
438 List<String> all =
new ArrayList<String>();
439 for (FactionAPI f : factions) {
440 if (f.isPlayerFaction())
continue;
441 if (f.getKnownFighters().contains(
id)) {
449 System.out.println(
"FIGHTER WING [" +
id +
"] IS NOT USED BY ANY FACTION");
452 oneFactionFighters.put(
id, fId);
456 System.out.println(
"Fighter wing [" +
id +
"] is known by: [" + Misc.getAndJoined(all) +
"]");
460 System.out.println();
461 System.out.println(
"----------------------- WEAPONS -----------------------");
462 System.out.println();
465 if (spec.hasTag(Tags.RESTRICTED))
continue;
466 if (spec.hasTag(Tags.NO_SELL))
continue;
467 if (spec.getAIHints().contains(AIHints.SYSTEM))
continue;
468 String
id = spec.getWeaponId();
470 List<String> all =
new ArrayList<String>();
471 for (FactionAPI f : factions) {
472 if (f.isPlayerFaction())
continue;
473 Float p = f.getWeaponSellFrequency().get(
id);
474 if (p !=
null && p > 1f) {
477 if (f.knowsWeapon(
id)) {
482 System.out.println(
"Weapon [" +
id +
"] is not sold with higher frequency; known by: [" + Misc.getAndJoined(all) +
"]");
487 System.out.println();
488 System.out.println(
"----------------------- SHIPS -----------------------");
489 System.out.println();
491 Map<String, String> oneFactionShips =
new LinkedHashMap<String, String>();
493 if (spec.hasTag(Tags.RESTRICTED))
continue;
494 if (spec.hasTag(Tags.NO_SELL))
continue;
495 if (spec.getHullSize() == HullSize.FIGHTER)
continue;
496 String
id = spec.getHullId();
497 if (
id.endsWith(
"_default_D"))
continue;
498 if (
id.endsWith(
"_default_D"))
continue;
499 if (
id.startsWith(
"module_"))
continue;
502 List<String> all =
new ArrayList<String>();
503 for (FactionAPI f : factions) {
504 if (f.isPlayerFaction())
continue;
505 if (f.getKnownShips().contains(
id)) {
516 oneFactionShips.put(
id, fId);
520 System.out.println(
"Ship [" +
id +
"] is known by: [" + Misc.getAndJoined(all) +
"]");
static SettingsAPI getSettings()
static SectorAPI getSector()
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
List< WeaponSpecAPI > getAllWeaponSpecs()
List< ShipHullSpecAPI > getAllShipHullSpecs()
List< FighterWingSpecAPI > getAllFighterWingSpecs()
Color getColor(String id)