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) {
44 WeightedRandomPicker<SectorEntityToken> picker = new WeightedRandomPicker<SectorEntityToken>(random);
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 picker.add(entity, w);
61 }
62 }
63 }
64 return picker.pick();
65 }
66
67
68 public PlanetAPI pickUnexploredRuins(Random random) {
69 WeightedRandomPicker<PlanetAPI> picker = new WeightedRandomPicker<PlanetAPI>(random);
70 for (StarSystemAPI system : Global.getSector().getStarSystems()) {
71 if (system.hasTag(Tags.THEME_CORE_POPULATED)) continue;
72
73 if (!system.hasTag(Tags.THEME_INTERESTING) &&
74 !system.hasTag(Tags.THEME_INTERESTING_MINOR)) continue;
75
76 for (PlanetAPI planet : system.getPlanets()) {
77 if (planet.isStar()) continue;
78
79 if (Misc.hasUnexploredRuins(planet.getMarket())) {
80 float w = 1f;
81 picker.add(planet, w);
82 }
83 }
84 }
85 return picker.pick();
86 }
87
88 public static SectorEntityToken createEntity(Random random) {
89 WeightedRandomPicker<StarSystemAPI> picker = new WeightedRandomPicker<StarSystemAPI>(random);
90 for (StarSystemAPI system : Global.getSector().getStarSystems()) {
91 if (system.hasTag(Tags.THEME_CORE_POPULATED)) continue;
92 if (system.hasTag(Tags.THEME_REMNANT_MAIN)) continue;
93 if (system.hasTag(Tags.THEME_REMNANT_RESURGENT)) continue;
94
95 if (!system.hasTag(Tags.THEME_INTERESTING) &&
96 !system.hasTag(Tags.THEME_INTERESTING_MINOR)) continue;
97
98 float sinceVisit = Global.getSector().getClock().getElapsedDaysSince(system.getLastPlayerVisitTimestamp());
99 if (sinceVisit < 360) continue;
100
101 picker.add(system);
102 }
103
104 StarSystemAPI system = picker.pick();
105 if (system == null) return null;
106
107 EntityLocation loc = BaseThemeGenerator.pickHiddenLocationNotNearStar(random, system, 100f, null);
108 if (loc == null) return null;
109
110 //AddedEntity added = BaseThemeGenerator.addNonSalvageEntity(system, loc, Entities.STABLE_LOCATION, Factions.NEUTRAL);
111 AddedEntity added = BaseThemeGenerator.addEntity(random, system, loc, Entities.EQUIPMENT_CACHE, Factions.NEUTRAL);
112
113 if (added == null || added.entity == null) return null;
114
115 //added.entity.removeTag(Tags.SALVAGEABLE);
116// added.entity.setDiscoverable(null);
117// added.entity.setDiscoveryXP(null);
118// added.entity.setSensorProfile(null);
119
120 //Misc.setDefenderOverride(added.entity, new DefenderDataOverride(Factions.DERELICT, 1f, 100f, 100f));
121
122 added.entity.addTag(Tags.EXPIRES); // so it doesn't get targeted by "analyze entity" missions
123
124 return added.entity;
125 }
126
127 public String getOfferId(BaseHistorianOffer offer) {
128 return null;
129 }
130
131 public void notifyAccepted(HistorianOffer offer) {
132
133 }
134}
135
136
137
138
139
static SectorAPI getSector()
Definition Global.java:59