Starsector API
Loading...
Searching...
No Matches
CBRemnantStation.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;
6import java.util.Random;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.StarSystemAPI;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.characters.PersonAPI;
15import com.fs.starfarer.api.fleet.FleetMemberAPI;
16import com.fs.starfarer.api.fleet.FleetMemberType;
17import com.fs.starfarer.api.impl.campaign.DebugFlags;
18import com.fs.starfarer.api.impl.campaign.ids.Factions;
19import com.fs.starfarer.api.impl.campaign.ids.Tags;
20import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
21import com.fs.starfarer.api.ui.TooltipMakerAPI;
22import com.fs.starfarer.api.util.Misc;
23import com.fs.starfarer.api.util.WeightedRandomPicker;
24
26
27 @Override
28 public float getBountyDays() {
30 }
31
32 @Override
33 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
34 String faction = mission.getPerson().getFaction().getId();
35 if (!Factions.HEGEMONY.equals(faction) &&
36 !Factions.LUDDIC_PATH.equals(faction) &&
37 !Factions.LUDDIC_CHURCH.equals(faction)) {
38 return 0f;
39 }
40 if (getStations(mission, difficulty).isEmpty()) return 0f;
41 return super.getFrequency(mission, difficulty) * CBStats.REMNANT_STATION_FREQ;
42 }
43
44 public void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data) {
45 float opad = 10f;
46 List<FleetMemberAPI> list = new ArrayList<FleetMemberAPI>();
47 List<FleetMemberAPI> members = data.fleet.getFleetData().getMembersListCopy();
48 int max = 7;
49 int cols = 7;
50 float iconSize = 440 / cols;
51 Color h = Misc.getHighlightColor();
52
53 for (FleetMemberAPI member : members) {
54 if (list.size() >= max) break;
55
56 if (member.isFighterWing()) continue;
57
58 FleetMemberAPI copy = Global.getFactory().createFleetMember(FleetMemberType.SHIP, member.getVariant());
59 if (member.isFlagship()) {
60 copy.setCaptain(data.fleet.getCommander());
61 }
62 list.add(copy);
63 }
64
65 if (!list.isEmpty()) {
66 TooltipMakerAPI info = text.beginTooltip();
67 info.setParaSmallInsignia();
68 info.addPara(Misc.ucFirst(mission.getPerson().getHeOrShe()) + " taps a data pad, and " +
69 "an intel assessment shows up on your tripad.", 0f);
70 info.addShipList(cols, 1, iconSize, data.fleet.getFaction().getBaseUIColor(), list, opad);
71
72 if (data.difficulty >= 9) {
73 info.addPara("The station is assessed to be fully functional and extremely dangerous.", opad);
74 } else {
75 info.addPara("The station is assessed to be damaged, but still highly dangerous.", opad);
76 }
77 text.addTooltip();
78 }
79 return;
80 }
81
82
83 public void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data) {
84 PersonAPI person = data.fleet.getCommander();
85 FactionAPI faction = person.getFaction();
86 int cols = 7;
87 float iconSize = width / cols;
88 float opad = 10f;
89 Color h = Misc.getHighlightColor();
90
92
93 }
94 boolean deflate = false;
95 if (!data.fleet.isInflated()) {
96 data.fleet.inflateIfNeeded();
97 deflate = true;
98 }
99
100 List<FleetMemberAPI> list = new ArrayList<FleetMemberAPI>();
101 Random random = new Random(person.getNameString().hashCode() * 170000);
102
103 List<FleetMemberAPI> members = data.fleet.getFleetData().getMembersListCopy();
104 int max = 7;
105 for (FleetMemberAPI member : members) {
106 if (list.size() >= max) break;
107
108 if (member.isFighterWing()) continue;
109
110 float prob = (float) member.getFleetPointCost() / 20f;
111 prob += (float) max / (float) members.size();
112 if (member.isFlagship()) prob = 1f;
113 //if (members.size() <= max) prob = 1f;
114
115 if (random.nextFloat() > prob) continue;
116
117 FleetMemberAPI copy = Global.getFactory().createFleetMember(FleetMemberType.SHIP, member.getVariant());
118 if (member.isFlagship()) {
119 copy.setCaptain(person);
120 }
121 list.add(copy);
122 }
123
124 if (!list.isEmpty()) {
125 info.addPara("The bounty posting contains partial intel about the station.", opad);
126 info.addShipList(cols, 1, iconSize, faction.getBaseUIColor(), list, opad);
127
128 int num = members.size() - list.size();
129 //num = Math.round((float)num * (1f + random.nextFloat() * 0.5f));
130
131 if (num < 5) num = 0;
132 else if (num < 10) num = 5;
133 else if (num < 20) num = 10;
134 else num = 20;
135
136 if (data.difficulty >= 9) {
137 info.addPara("The station is assessed to be fully functional and extremely dangerous.", opad);
138 } else {
139 info.addPara("The station is assessed to be damaged, but still highly dangerous.", opad);
140 }
141 }
142
143 if (deflate) {
144 data.fleet.deflate();
145 }
146 }
147
148
149 public List<CampaignFleetAPI> getStations(HubMissionWithBarEvent mission, int difficulty) {
150 List<CampaignFleetAPI> stations = new ArrayList<CampaignFleetAPI>();
151 for (StarSystemAPI system : Global.getSector().getStarSystems()) {
152 if (!system.hasTag(Tags.THEME_REMNANT_MAIN)) continue;
153 if (system.hasTag(Tags.THEME_REMNANT_DESTROYED)) continue;
154
155 for (CampaignFleetAPI fleet : system.getFleets()) {
156 if (!fleet.isStationMode()) continue;
157 if (!Factions.REMNANTS.equals(fleet.getFaction().getId())) continue;
158
159 boolean damaged = fleet.getMemoryWithoutUpdate().getBoolean("$damagedStation");
160 if ((difficulty == 7 || difficulty == 8) && damaged) {
161 stations.add(fleet);
162 } else if (!damaged && difficulty > 8) {
163 stations.add(fleet);
164 }
165 }
166 }
167 return stations;
168 }
169
170 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
171 return " - Remnant Nexus";
172 }
173
174 @Override
175 public String getIconName() {
176 return Global.getSettings().getSpriteName("campaignMissions", "remnant_bounty");
177 }
178
179 @Override
180 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
182 data.difficulty = difficulty;
183
184
185 WeightedRandomPicker<CampaignFleetAPI> picker = new WeightedRandomPicker<CampaignFleetAPI>(mission.getGenRandom());
186 picker.addAll(getStations(mission, difficulty));
187
188 data.fleet = picker.pick();
189 if (data.fleet == null) return null;
190
191 data.system = data.fleet.getStarSystem();
192 if (data.system == null) return null;
193
194 setRepChangesBasedOnDifficulty(data, difficulty);
195 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.REMNANT_STATION_MULT, mission);
196
197 return data;
198 }
199
200
201 @Override
202 public int getMaxDifficulty() {
203 return super.getMaxDifficulty();
204 }
205
206 @Override
207 public int getMinDifficulty() {
208 return 7;
209 }
210
211}
212
213
214
215
216
217
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
void addFleetDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
List< CampaignFleetAPI > getStations(HubMissionWithBarEvent mission, int difficulty)
void addIntelAssessment(TextPanelAPI text, HubMissionWithBarEvent mission, CustomBountyData data)
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
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)