Starsector API
Loading...
Searching...
No Matches
LuddicPathBaseBarEvent.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.bar.events;
2
3import java.awt.Color;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.CargoAPI;
9import com.fs.starfarer.api.campaign.FactionAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.OptionPanelAPI;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.rules.MemoryAPI;
15import com.fs.starfarer.api.characters.FullName.Gender;
16import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
17import com.fs.starfarer.api.characters.PersonAPI;
18import com.fs.starfarer.api.characters.SkillSpecAPI;
19import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent;
20import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent.SkillPickPreference;
21import com.fs.starfarer.api.impl.campaign.ids.Factions;
22import com.fs.starfarer.api.impl.campaign.ids.Ranks;
23import com.fs.starfarer.api.impl.campaign.ids.Sounds;
24import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarData;
25import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
26import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathCellsIntel;
27import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
28import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
29import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption;
30import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption.BaseOptionStoryPointActionDelegate;
31import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption.StoryOptionParams;
32import com.fs.starfarer.api.ui.LabelAPI;
33import com.fs.starfarer.api.ui.TooltipMakerAPI;
34import com.fs.starfarer.api.util.Misc;
35
37
38 public static enum OptionId {
39 INIT,
40 AGREE,
41 HIRE,
42 HIRE_CONTINUE,
43 REJECT,
44 LEAVE,
45
46 }
47
48 public static int COST = 10000;
49
51
52 public boolean isAlwaysShow() {
53 return true;
54 }
55
57 this.intel = intel;
58 }
59
62 if (cell.isSleeper()) continue;
63 if (cell.getSleeperTimeout() > 0) continue;
64 if (cell.getMarket() == market) return true;
65 }
66 return false;
67 }
68
69 @Override
70 public boolean shouldRemoveEvent() {
72 }
73
74 @Override
75 protected void regen(MarketAPI market) {
76 if (this.market == market) return;
77 super.regen(market);
78// random = new Random(seed + market.getId().hashCode());
79// person = createPerson();
80 }
81
82 @Override
83 protected PersonAPI createPerson() {
85 int level = 1;
86 PersonAPI person = OfficerManagerEvent.createOfficer(faction, level, SkillPickPreference.NO_ENERGY_YES_BALLISTIC_YES_MISSILE_YES_DEFENSE,
87 true, null, true, false, 0, random);
88 return person;
89 }
90
91 @Override
92 public void addPromptAndOption(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
93 super.addPromptAndOption(dialog, memoryMap);
94
96
98 text.addPara("A " + getManOrWoman() + " with Pather tattoos is staring at you from across the bar " +
99 "with a desperate gleam in " + getHisOrHer() + " eyes.");
100
101 dialog.getOptionPanel().addOption("Make eye contact with the Pather and walk out into the back alley", this, null);
102 }
103
104 @Override
105 public void init(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
106 super.init(dialog, memoryMap);
107
108 done = false;
110
111 optionSelected(null, OptionId.INIT);
112 }
113
114 @Override
115 public void optionSelected(String optionText, Object optionData) {
116 if (!(optionData instanceof OptionId)) {
117 return;
118 }
119 OptionId option = (OptionId) optionData;
120
124
126 int credits = (int) cargo.getCredits().get();
127
128 Color h = Misc.getHighlightColor();
130 //COST = 10000;
131
132 switch (option) {
133 case INIT:
134 text.addPara("After a minute or two of waiting in the alley, the door opens and the Pather " +
135 "walks out.");
136 text.addPara("\"I know who you are\", " + getHeOrShe() + " says. \"I need your help. If they find " +
137 "out what I've done... well, let's just say my future with the Path is likely to be a short one. " +
138 "So, how about this: you arrange a new identity for me, and I tell you where " +
139 "the base supplying the Pather cells at this colony is located.\"");
140
141 boolean canAccept = COST <= credits;
142 LabelAPI label = text.addPara("You estimate that doing as " + getHeOrShe() +
143 " asks will run you about %s. You have %s available.",
144 h,
146 Misc.getDGSCredits(credits));
147 label.setHighlightColors(canAccept ? h : n, h);
149
150 options.addOption("Agree to " + getHisOrHer() + " terms", OptionId.AGREE);
151 if (!canAccept) {
152 options.setEnabled(OptionId.AGREE, false);
153 options.setTooltip(OptionId.AGREE, "Not enough credits.");
154 }
156 options.addOption("Suggest that " + getHeOrShe() + " handle " + getHisOrHer() + " own problems", OptionId.REJECT);
157 break;
158 case AGREE:
159 text.addPara("You agree to the " + getManOrWoman() + "'s terms and make the necessary arrangements.");
160
161 cargo.getCredits().subtract(COST);
163
164 done = true;
167
169 options.addOption("Continue", OptionId.LEAVE);
170 break;
171 case REJECT:
172 text.addPara("You leave the back alley and return to the bar.");
173
174 options.addOption("Continue", OptionId.LEAVE);
175 break;
176 case LEAVE:
177 noContinue = true;
178 done = true;
179 break;
180 }
181 }
182
183 protected void addStoryOption() {
184 String id = "join_id";
185 options.addOption("Offer for " + getHimOrHer() + " to join your fleet instead", id);
186
187 final CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
188
189 int num = Misc.getNumNonMercOfficers(playerFleet);
190 int max = Misc.getMaxOfficers(playerFleet);
191
192 if (num >= max) {
193 options.setEnabled(id, false);
194 options.setTooltip(id, "Maximum number of officers reached.");
195 }
196
197 StoryOptionParams params = new StoryOptionParams(id, 1, "patherJoinFleet", Sounds.STORY_POINT_SPEND_LEADERSHIP,
198 "Allowed " + person.getNameString() + ", a Luddic Path defector, to join your fleet");
199
200 SetStoryOption.set(dialog, params,
201 new BaseOptionStoryPointActionDelegate(dialog, params) {
202
203 @Override
204 public void confirm() {
205 super.confirm();
206
207 text.addPara(Misc.ucFirst(getHeOrShe()) + " is mistrustful at first, but that turns to surprise and " +
208 "gratitude when " + getHeOrShe() + " realizes you're serious.");
209
211 playerFleet.getFleetData().addOfficer(getPerson());
214
215 done = true;
218
220 options.addOption("Continue", OptionId.LEAVE);
221
224 options.addOption("Continue", OptionId.LEAVE);
225 }
226
227 @Override
228 public String getTitle() {
229 //return "Taking on a new officer";
230 return "Taking in Luddic Path defector";
231 //return null;
232 }
233
234 @Override
235 public void createDescription(TooltipMakerAPI info) {
236 float opad = 10f;
237
238 info.addSpacer(-opad);
239
241 //TextPanelAPI text = dialog.getTextPanel();
242 TooltipMakerAPI text = info;
243
244 //text.setFontSmallInsignia();
245
246 Color hl = Misc.getHighlightColor();
247 Color red = Misc.getNegativeHighlightColor();
248
249// text.addPara("You consider letting the Pather join your fleet. It's taking a risk, but " +
250// "something makes you feel that " + getHeOrShe() + " would be " +
251// "trustworthy if given a second chance.", opad);
252
253 text.addPara("You consider letting the Luddic Path defector, " + person.getNameString() + ", join your fleet.", opad);
254
255 //text.addPara("----------------------------------------------------------------------------------", opad);
256
257 text.addPara("Level: %s", opad, hl, "" + (int) stats.getLevel());
258 //text.highlightInLastPara(hl, "" + (int) stats.getLevel());
259
260 for (String skillId : Global.getSettings().getSortedSkillIds()) {
261 int level = (int) stats.getSkillLevel(skillId);
262 if (level > 0) {
264 String skillName = spec.getName();
265 if (spec.isAptitudeEffect()) {
266 skillName += " Aptitude";
267 }
268
269 if (level <= 1) {
270 text.addPara(skillName, opad);
271 } else {
272 text.addPara(skillName + " (Elite)", opad);
273 }
274 //text.highlightInLastPara(hl, "" + level);
275 }
276 }
277
278 String personality = Misc.lcFirst(person.getPersonalityAPI().getDisplayName());
279 text.addPara("Personality: %s", opad, Misc.getHighlightColor(), personality);
281
282 //text.addPara("----------------------------------------------------------------------------------", opad);
283
284 info.addSpacer(opad * 2f);
285 addActionCostSection(info);
286 }
287
288 });
289 }
290
291 @Override
292 protected String getPersonFaction() {
293 return Factions.LUDDIC_PATH;
294 }
295
296 @Override
297 protected String getPersonRank() {
298 return Ranks.CITIZEN;
299 }
300
301 @Override
302 protected String getPersonPost() {
303 return Ranks.CITIZEN;
304 }
305
306 @Override
307 protected String getPersonPortrait() {
308 return null;
309 }
310
311 @Override
312 protected Gender getPersonGender() {
313 return Gender.ANY;
314 }
315
316
317}
318
319
320
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
AvailableOfficer createOfficer(boolean isMerc, MarketAPI market, Random random)
void sendUpdate(Object listInfoParam, TextPanelAPI textPanel)
void addPromptAndOption(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void init(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
static List< LuddicPathCellsIntel > getCellsForBase(LuddicPathBaseIntel base, boolean includeSleeper)
static void addOfficerGainText(PersonAPI officer, TextPanelAPI text)
static void addCreditsLossText(int credits, TextPanelAPI text)
static boolean set(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
static int getMaxOfficers(CampaignFleetAPI fleet)
Definition Misc.java:5219
static String getDGSCredits(float num)
Definition Misc.java:1390
static String lcFirst(String str)
Definition Misc.java:565
static String ucFirst(String str)
Definition Misc.java:559
static Color getNegativeHighlightColor()
Definition Misc.java:802
static Color getHighlightColor()
Definition Misc.java:792
static int getNumNonMercOfficers(CampaignFleetAPI fleet)
Definition Misc.java:5223
SkillSpecAPI getSkillSpec(String skillId)
List< String > getSortedSkillIds()
void setTooltip(Object data, String tooltipText)
void addOption(String text, Object data)
void setEnabled(Object data, boolean enabled)
FactionAPI getFaction(String factionId)
MutableCharacterStatsAPI getStats()
void setHighlight(int start, int end)
void setHighlightColors(Color ... colors)
UIComponentAPI addSpacer(float height)