Starsector API
Loading...
Searching...
No Matches
SurveyPlanetIntelCreator.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel;
2
3import java.util.ArrayList;
4
5import com.fs.starfarer.api.EveryFrameScript;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.PlanetAPI;
8import com.fs.starfarer.api.campaign.StarSystemAPI;
9import com.fs.starfarer.api.campaign.econ.MarketAPI;
10import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel;
11import com.fs.starfarer.api.campaign.econ.MarketConditionAPI;
12import com.fs.starfarer.api.impl.campaign.ids.Tags;
13import com.fs.starfarer.api.impl.campaign.intel.GenericMissionManager.GenericMissionCreator;
14import com.fs.starfarer.api.util.Misc;
15import com.fs.starfarer.api.util.WeightedRandomPicker;
16
17public class SurveyPlanetIntelCreator implements GenericMissionCreator {
18
20 PlanetAPI planet = pickPlanet();
21 if (planet == null) return null;
22
23 return new SurveyPlanetMissionIntel(planet);
24 }
25
27 return 10f;
28 }
29
30
31 protected transient WeightedRandomPicker<PlanetAPI> planetPicker = null;
32
33
34 protected void initPicker() {
35 planetPicker = new WeightedRandomPicker<PlanetAPI>();
36 OUTER: for (StarSystemAPI system : Global.getSector().getStarSystems()) {
37 //if (!Misc.getMarketsInLocation(system).isEmpty()) continue;
38 for (MarketAPI market : Misc.getMarketsInLocation(system)) {
39 if (!market.isHidden()) continue OUTER;
40 }
41
42 for (PlanetAPI planet : system.getPlanets()) {
43 if (!isValidMissionTarget(planet)) continue;
44 if (Misc.isImportantForReason(planet.getMemoryWithoutUpdate(), "spm")) continue;
45
46 float weight = 1f;
47 for (MarketConditionAPI mc : planet.getMarket().getConditions()) {
48 if (mc.getGenSpec() != null) {
49 weight += mc.getGenSpec().getXpMult();
50 }
51 }
52
53 planetPicker.add(planet);
54 }
55 }
56 }
57
58 protected void prunePicker() {
59 for (PlanetAPI planet : new ArrayList<PlanetAPI>(planetPicker.getItems())) {
60 if (!isValidMissionTarget(planet)) {
61 planetPicker.remove(planet);
62 }
63 }
64 }
65
66 public static boolean isValidMissionTarget(PlanetAPI planet) {
67 if (planet.hasTag(Tags.NOT_RANDOM_MISSION_TARGET)) return false;
68 if (planet.isStar() || planet.getMarket() == null || !planet.getMarket().isPlanetConditionMarketOnly() ||
69 planet.getMarket().getSurveyLevel() == SurveyLevel.FULL) {
70 return false;
71 }
72 if (planet.getContainingLocation() != null && planet.getContainingLocation().hasTag(Tags.THEME_HIDDEN)) {
73 return false;
74 }
75 return true;
76 }
77
78 protected PlanetAPI pickPlanet() {
79 if (planetPicker == null) {
80 initPicker();
81 }
83
84 PlanetAPI planet = planetPicker.pick();
86 if (s instanceof SurveyPlanetMissionIntel) {
88 if (planet == intel.getPlanet()) {
89 return null;
90 }
91 }
92 }
93
94 return planet;
95 }
96
97}
98
99
100
static SectorAPI getSector()
Definition Global.java:59