Starsector API
Loading...
Searching...
No Matches
CBEnemyStation.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.cb;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.List;
6
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.FactionAPI;
10import com.fs.starfarer.api.campaign.TextPanelAPI;
11import com.fs.starfarer.api.campaign.econ.Industry;
12import com.fs.starfarer.api.campaign.econ.MarketAPI;
13import com.fs.starfarer.api.characters.PersonAPI;
14import com.fs.starfarer.api.fleet.FleetMemberAPI;
15import com.fs.starfarer.api.fleet.FleetMemberType;
16import com.fs.starfarer.api.impl.campaign.DebugFlags;
17import com.fs.starfarer.api.impl.campaign.econ.impl.OrbitalStation;
18import com.fs.starfarer.api.impl.campaign.ids.Conditions;
19import com.fs.starfarer.api.impl.campaign.ids.Industries;
20import com.fs.starfarer.api.impl.campaign.missions.cb.BaseCustomBounty.Stage;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc;
24import com.fs.starfarer.api.util.WeightedRandomPicker;
25
27
28 @Override
29 public float getBountyDays() {
31 }
32
33 @Override
34 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
35 if (getStations(mission, difficulty).isEmpty()) return 0f;
36 return super.getFrequency(mission, difficulty) * CBStats.ENEMY_STATION_FREQ;
37 }
38
39 public void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data) {
40 float opad = 10f;
41 List<FleetMemberAPI> list = new ArrayList<FleetMemberAPI>();
42 List<FleetMemberAPI> members = data.fleet.getFleetData().getMembersListCopy();
43 int max = 7;
44 int cols = 7;
45 float iconSize = 440 / cols;
46 Color h = Misc.getHighlightColor();
47
48 for (FleetMemberAPI member : members) {
49 if (list.size() >= max) break;
50
51 if (member.isFighterWing()) continue;
52
53 FleetMemberAPI copy = Global.getFactory().createFleetMember(FleetMemberType.SHIP, member.getVariant());
54 if (member.isFlagship()) {
55 copy.setCaptain(data.fleet.getCommander());
56 }
57 list.add(copy);
58 }
59
60 if (!list.isEmpty()) {
61 TooltipMakerAPI info = text.beginTooltip();
62 info.setParaSmallInsignia();
63 info.addPara(Misc.ucFirst(mission.getPerson().getHeOrShe()) + " taps a data pad, and " +
64 "an intel assessment shows up on your tripad.", 0f);
65 info.addShipList(cols, 1, iconSize, data.fleet.getFaction().getBaseUIColor(), list, opad);
66
67 FactionAPI f = data.fleet.getFaction();
68 info.addPara("The station is controlled by " + f.getDisplayNameWithArticle() + " and is likely to " +
69 "be supported by a number of patrols.",
70 opad, f.getBaseUIColor(),
71 f.getDisplayNameWithArticleWithoutArticle());
72 text.addTooltip();
73 }
74 return;
75 }
76
77
78 public void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data) {
79 PersonAPI person = data.fleet.getCommander();
80 FactionAPI faction = person.getFaction();
81 int cols = 7;
82 float iconSize = width / cols;
83 float opad = 10f;
84 Color h = Misc.getHighlightColor();
85
87
88 }
89 boolean deflate = false;
90 if (!data.fleet.isInflated()) {
91 data.fleet.inflateIfNeeded();
92 deflate = true;
93 }
94
95 List<FleetMemberAPI> list = new ArrayList<FleetMemberAPI>();
96
97 List<FleetMemberAPI> members = data.fleet.getFleetData().getMembersListCopy();
98 int max = 7;
99 for (FleetMemberAPI member : members) {
100 if (list.size() >= max) break;
101
102 if (member.isFighterWing()) continue;
103
104 FleetMemberAPI copy = Global.getFactory().createFleetMember(FleetMemberType.SHIP, member.getVariant());
105 if (member.isFlagship()) {
106 copy.setCaptain(person);
107 }
108 list.add(copy);
109 }
110
111 if (!list.isEmpty()) {
112 info.addPara("The bounty posting contains partial intel about the station.", opad);
113 info.addShipList(cols, 1, iconSize, faction.getBaseUIColor(), list, opad);
114
115 int num = members.size() - list.size();
116 //num = Math.round((float)num * (1f + random.nextFloat() * 0.5f));
117
118 if (num < 5) num = 0;
119 else if (num < 10) num = 5;
120 else if (num < 20) num = 10;
121 else num = 20;
122
123 FactionAPI f = data.fleet.getFaction();
124 info.addPara("The station is controlled by " + f.getDisplayNameWithArticle() + " and is likely to " +
125 "be supported by a number of patrols.",
126 opad, f.getBaseUIColor(),
127 f.getDisplayNameWithArticleWithoutArticle());
128 }
129
130 if (deflate) {
131 data.fleet.deflate();
132 }
133 }
134
135
136 public List<CampaignFleetAPI> getStations(HubMissionWithBarEvent mission, int difficulty) {
137 List<CampaignFleetAPI> stations = new ArrayList<CampaignFleetAPI>();
138 String faction = mission.getPerson().getFaction().getId();
139 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) {
140 if (market.isHidden()) continue;
141 if (market.isPlayerOwned()) continue;
142 if (market.hasCondition(Conditions.DECIVILIZED)) continue;
143 if (!market.getFaction().isHostileTo(faction)) continue;
144
145 Industry ind = Misc.getStationIndustry(market);
146
147 if (!(ind instanceof OrbitalStation)) continue;
148 OrbitalStation os = (OrbitalStation) ind;
149 if (os.getDisruptedDays() > 0) continue;
150
151 boolean battlestation = os.getSpec().hasTag(Industries.TAG_BATTLESTATION);
152 boolean starfortress = os.getSpec().hasTag(Industries.TAG_STARFORTRESS);
153
154 if (difficulty == 10 && !starfortress) continue;
155 if ((difficulty == 8 || difficulty == 9) && !battlestation) continue;
156 if (!battlestation && !starfortress && difficulty >= 8) continue;
157
158 CampaignFleetAPI fleet = Misc.getStationFleet(market);
159 if (fleet != null) {
160 stations.add(fleet);
161 }
162 }
163 return stations;
164 }
165
166 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
167 return " - " + data.fleet.getName();
168 }
169
170
171 @Override
172 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
174 data.difficulty = difficulty;
175
176
177 WeightedRandomPicker<CampaignFleetAPI> picker = new WeightedRandomPicker<CampaignFleetAPI>(mission.getGenRandom());
178 picker.addAll(getStations(mission, difficulty));
179
180
181 data.fleet = picker.pick();
182 if (data.fleet == null) return null;
183
184 MarketAPI market = Misc.getStationMarket(data.fleet);
185 if (market == null) return null;
186
187 data.market = market;
188 data.custom2 = bountyStage;
189
190 data.system = data.fleet.getStarSystem();
191 if (data.system == null) return null;
192
193 setRepChangesBasedOnDifficulty(data, difficulty);
194 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.ENEMY_STATION_MULT, mission);
195
196 return data;
197 }
198
199 @Override
200 public void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data) {
201 MarketAPI market = data.market;
202 Object stage = data.custom2;
203
204 if (data.difficulty <= 7) {
205 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
206 mission.triggerCreateSmallPatrolAroundMarket(market, stage, 0f);
207 } else if (data.difficulty <= 9) {
208 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
209 mission.triggerCreateMediumPatrolAroundMarket(market, stage, 0f);
210 mission.triggerCreateSmallPatrolAroundMarket(market, stage, 0f);
211 } else {
212 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
213 mission.triggerCreateLargePatrolAroundMarket(market, stage, 0f);
214 mission.triggerCreateMediumPatrolAroundMarket(market, stage, 0f);
215 mission.triggerCreateSmallPatrolAroundMarket(market, stage, 0f);
216 }
217
218 mission.connectWithHostilitiesEnded(Stage.BOUNTY, Stage.FAILED_NO_PENALTY, mission.getPerson(), market);
219 mission.setStageOnHostilitiesEnded(Stage.FAILED_NO_PENALTY, mission.getPerson(), market);
220 }
221
222 @Override
223 public String getIconName() {
224 return Global.getSettings().getSpriteName("campaignMissions", "station_bounty");
225 }
226
227
228 @Override
229 public int getMaxDifficulty() {
230 return super.getMaxDifficulty();
231 }
232
233 @Override
234 public int getMinDifficulty() {
235 return 6;
236 }
237
238}
239
240
241
242
243
244
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data)
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data)
List< CampaignFleetAPI > getStations(HubMissionWithBarEvent mission, int difficulty)
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
Definition CBStats.java:83
FleetMemberAPI createFleetMember(FleetMemberType type, String variantOrWingId)
String getSpriteName(String category, String id)