Starsector API
Loading...
Searching...
No Matches
BaseHistorianOfferCreator.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.bar.events.historian;
2
3import java.util.List;
4import java.util.Random;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.PlanetAPI;
8import com.fs.starfarer.api.campaign.SectorEntityToken;
9import com.fs.starfarer.api.campaign.StarSystemAPI;
10import com.fs.starfarer.api.impl.campaign.ids.Entities;
11import com.fs.starfarer.api.impl.campaign.ids.Factions;
12import com.fs.starfarer.api.impl.campaign.ids.Tags;
13import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.HistorianData.HistorianOffer;
14import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.HistorianData.HistorianOfferCreator;
15import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
16import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.AddedEntity;
17import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.EntityLocation;
18import com.fs.starfarer.api.util.Misc;
19import com.fs.starfarer.api.util.WeightedRandomPicker;
20
21public class BaseHistorianOfferCreator implements HistorianOfferCreator {
22
23 protected float frequency = 10f;
24
25 public HistorianOffer createOffer(Random random, List<HistorianOffer> soFar) {
26 return null;
27 }
28
29 public boolean ignoresLimit() {
30 return false;
31 }
32
33 public float getFrequency() {
34 return frequency;
35 }
36
37 public void setFrequency(float frequency) {
38 this.frequency = frequency;
39 }
40
41
42
43 public SectorEntityToken pickEntity(Random random, boolean allowDerelict) {
45 for (StarSystemAPI system : Global.getSector().getStarSystems()) {
46 if (system.hasTag(Tags.THEME_CORE_POPULATED)) continue;
47 if (!allowDerelict && system.hasTag(Tags.THEME_DERELICT)) continue;
48
49 if (system.hasTag(Tags.THEME_DERELICT) ||
50 system.hasTag(Tags.THEME_RUINS) ||
51 system.hasTag(Tags.THEME_REMNANT)) {
52
53 for (SectorEntityToken entity : system.getEntitiesWithTag(Tags.SALVAGEABLE)) {
54 float w = 1f;
55
56 // skip derelict ships etc that will expire
57 if (entity.hasTag(Tags.EXPIRES)) continue;
58 if (entity.hasTag(Tags.NOT_RANDOM_MISSION_TARGET)) continue;
59 if (entity.getCircularOrbitRadius() > 10000f) continue;
60 if (!entity.isDiscoverable()) continue; // don't pick already discovered
61 picker.add(entity, w);
62 }
63 }
64 }
65 return picker.pick();
66 }
67
68
69 public PlanetAPI pickUnexploredRuins(Random random) {
71 for (StarSystemAPI system : Global.getSector().getStarSystems()) {
72 if (system.hasTag(Tags.THEME_CORE_POPULATED)) continue;
73
74 if (!system.hasTag(Tags.THEME_INTERESTING) &&
75 !system.hasTag(Tags.THEME_INTERESTING_MINOR)) continue;
76
77 for (PlanetAPI planet : system.getPlanets()) {
78 if (planet.isStar()) continue;
79
80 if (Misc.hasUnexploredRuins(planet.getMarket()) &&
81 planet.getStarSystem() != null && !planet.getStarSystem().isEnteredByPlayer()) {
82 float w = 1f;
83 picker.add(planet, w);
84 }
85 }
86 }
87 return picker.pick();
88 }
89
90 public static SectorEntityToken createEntity(Random random) {
92 for (StarSystemAPI system : Global.getSector().getStarSystems()) {
93 if (system.hasTag(Tags.THEME_CORE_POPULATED)) continue;
94 if (system.hasTag(Tags.THEME_REMNANT_MAIN)) continue;
95 if (system.hasTag(Tags.THEME_REMNANT_RESURGENT)) continue;
96
97 if (!system.hasTag(Tags.THEME_INTERESTING) &&
98 !system.hasTag(Tags.THEME_INTERESTING_MINOR)) continue;
99
100 float sinceVisit = Global.getSector().getClock().getElapsedDaysSince(system.getLastPlayerVisitTimestamp());
101 if (sinceVisit < 360) continue;
102
103 picker.add(system);
104 }
105
106 StarSystemAPI system = picker.pick();
107 if (system == null) return null;
108
109 EntityLocation loc = BaseThemeGenerator.pickHiddenLocationNotNearStar(random, system, 100f, null);
110 if (loc == null) return null;
111
112 //AddedEntity added = BaseThemeGenerator.addNonSalvageEntity(system, loc, Entities.STABLE_LOCATION, Factions.NEUTRAL);
113 AddedEntity added = BaseThemeGenerator.addEntity(random, system, loc, Entities.EQUIPMENT_CACHE, Factions.NEUTRAL);
114
115 if (added == null || added.entity == null) return null;
116
117 //added.entity.removeTag(Tags.SALVAGEABLE);
118// added.entity.setDiscoverable(null);
119// added.entity.setDiscoveryXP(null);
120// added.entity.setSensorProfile(null);
121
122 //Misc.setDefenderOverride(added.entity, new DefenderDataOverride(Factions.DERELICT, 1f, 100f, 100f));
123
124 added.entity.addTag(Tags.EXPIRES); // so it doesn't get targeted by "analyze entity" missions
125
126 return added.entity;
127 }
128
129 public String getOfferId(BaseHistorianOffer offer) {
130 return null;
131 }
132
133 public void notifyAccepted(HistorianOffer offer) {
134
135 }
136}
137
138
139
140
141
static SectorAPI getSector()
Definition Global.java:65
static final String THEME_REMNANT_RESURGENT
Definition Tags.java:188
static final String THEME_INTERESTING_MINOR
Definition Tags.java:158
static final String NOT_RANDOM_MISSION_TARGET
Definition Tags.java:398
static EntityLocation pickHiddenLocationNotNearStar(Random random, StarSystemAPI system, float gap, Set< SectorEntityToken > exclude)
static AddedEntity addEntity(Random random, StarSystemAPI system, WeightedRandomPicker< EntityLocation > locs, String type, String faction)
static boolean hasUnexploredRuins(MarketAPI market)
Definition Misc.java:5879
List< StarSystemAPI > getStarSystems()