Starsector API
Loading...
Searching...
No Matches
PromoteOfficerIntel.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel;
2
3import java.util.Set;
4
5import java.awt.Color;
6
7import org.lwjgl.input.Keyboard;
8
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.CampaignFleetAPI;
11import com.fs.starfarer.api.campaign.StoryPointActionDelegate;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
14import com.fs.starfarer.api.characters.PersonAPI;
15import com.fs.starfarer.api.characters.SkillSpecAPI;
16import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent;
17import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent.SkillPickPreference;
18import com.fs.starfarer.api.impl.campaign.ids.Factions;
19import com.fs.starfarer.api.impl.campaign.ids.Ranks;
20import com.fs.starfarer.api.impl.campaign.ids.Sounds;
21import com.fs.starfarer.api.impl.campaign.ids.Tags;
22import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption.BaseOptionStoryPointActionDelegate;
23import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption.StoryOptionParams;
24import com.fs.starfarer.api.ui.ButtonAPI;
25import com.fs.starfarer.api.ui.IntelUIAPI;
26import com.fs.starfarer.api.ui.LabelAPI;
27import com.fs.starfarer.api.ui.SectorMapAPI;
28import com.fs.starfarer.api.ui.TooltipMakerAPI;
29import com.fs.starfarer.api.util.Misc;
30
32
33 public static String BUTTON_PROMOTE = "button_promote";
34 public static String BUTTON_DELETE = "button_delete";
35 public static float DURATION = 180f;
36
37 protected PersonAPI person;
38
40
43 return;
44 }
45
47 SkillPickPreference.ANY, true, null, false, false, -1, null);
49 if (text != null) {
50 text.addPara(getDescText());
51 }
52
53 setImportant(true);
54 }
55
56 public boolean shouldRemoveIntel() {
58 return true;
59 }
60
61 float days = getDaysSincePlayerVisible();
62 return isEnded() || days >= DURATION;
63 }
64
65 public String getName() {
66 return "Officer Promotion Candidate";
67 }
68
69 public String getSmallDescriptionTitle() {
70 return getName();
71 }
72
73 @Override
74 public void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode) {
75 Color c = getTitleColor(mode);
76 info.addPara(getName(), c, 0f);
77 addBulletPoints(info, mode);
78 }
79
80 protected void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode) {
81 Color h = Misc.getHighlightColor();
82 Color g = Misc.getGrayColor();
83 Color tc = getBulletColorForMode(mode);
84
85 float pad = 3f;
86 float opad = 10f;
87
88 float initPad = pad;
89 if (mode == ListInfoMode.IN_DESC) initPad = opad;
90
91 String pName = Misc.lcFirst(Misc.getPersonalityName(person));
92
93 bullet(info);
95 for (String skillId : Global.getSettings().getSortedSkillIds()) {
96 int level = (int) stats.getSkillLevel(skillId);
97 if (level > 0) {
99 String skillName = spec.getName();
100 if (level > 1) {
101 skillName += " (Elite)";
102 }
103 info.addPara("Skill: " + skillName, initPad, tc, h, skillName);
104 initPad = 0f;
105 }
106 }
107 info.addPara("Personality: %s", initPad, tc, h, pName);
108 unindent(info);
109 }
110
111 public String getDescText() {
112 String themselves = "himself";
113 if (person.isFemale()) themselves = "herself";
114 return "A junior officer, " + person.getNameString() + ", has distinguished " + themselves +
115 " recently and is worthy of consideration for " +
116 "the command of a ship.";
117 }
118
119 @Override
120 public void createSmallDescription(TooltipMakerAPI info, float width, float height) {
121 String pName = Misc.getPersonalityName(person);
122
123 Color h = Misc.getHighlightColor();
124 Color g = Misc.getGrayColor();
125 Color tc = Misc.getTextColor();
126 float pad = 3f;
127 float opad = 10f;
128
129 info.addImage(person.getPortraitSprite(), width, 128, opad);
130
131 info.addPara(getDescText(), tc, opad);
132
133 addBulletPoints(info, ListInfoMode.IN_DESC);
135
136
139
140 float days = DURATION - getDaysSincePlayerVisible();
141 info.addPara("This opportunity will be available for %s more " + getDaysString(days) + ".",
142 opad, tc, h, getDays(days));
143 addLogTimestamp(info, tc, opad);
144
145
146 Color hNum = h;
147 if (curr >= max) hNum = Misc.getNegativeHighlightColor();
148 LabelAPI label = info.addPara("Officers already under your command: %s %s %s", opad, tc, h,
149 "" + curr, "/", "" + max);
150 label.setHighlightColors(hNum, h, h);
151
152
153
154 Color color = Misc.getStoryOptionColor();
155 Color dark = Misc.getStoryDarkColor();
156
157 ButtonAPI button = addGenericButton(info, width, color, dark, "Promote to ship command", BUTTON_PROMOTE);
158 button.setShortcut(Keyboard.KEY_T, true);
159
160 info.addSpacer(-10f);
161 addDeleteButton(info, width, "Disregard");
162// ButtonAPI delete = addGenericButton(info, width, "Disregard", BUTTON_DELETE);
163// delete.setShortcut(Keyboard.KEY_G, true);
164
165 if (curr >= max) {
166 button.setEnabled(false);
167 //info.addPara("Maximum number of officers reached.", tc, opad);
168 }
169
170 }
171
172 @Override
174 prompt.addPara("Are you sure? This action can not be undone.", Misc.getTextColor(), 0f);
175 }
176
177// @Override
178// public void buttonPressConfirmed(Object buttonId, IntelUIAPI ui) {
179// if (buttonId == BUTTON_DELETE) {
180// endImmediately();
181// ui.recreateIntelUI();
182// }
183// }
184
185 public void storyActionConfirmed(Object buttonId, IntelUIAPI ui) {
186 if (buttonId == BUTTON_PROMOTE) {
188 ui.recreateIntelUI();
189 }
190 }
191
192// @Override
193// public void createConfirmationPrompt(Object buttonId, TooltipMakerAPI prompt) {
194// prompt.setParaInsigniaLarge();
195// if (buttonId == BUTTON_DELETE) {
196// prompt.addPara("Are you sure? Disregarding this promotion opportunity is permanent.", 0f);
197// } else if (buttonId == BUTTON_DEVELOP) {
198// prompt.addPara("Develop a relationship with this contact?", 0f);
199// return;
200// }
201// super.createConfirmationPrompt(buttonId, prompt);
202// return;
203// }
204//
205// @Override
206// public boolean doesButtonHaveConfirmDialog(Object buttonId) {
207// if (buttonId == BUTTON_DELETE) return true;
208// if (buttonId == BUTTON_DEVELOP) return true;
209// return super.doesButtonHaveConfirmDialog(buttonId);
210// }
211
212
214 if (buttonId == BUTTON_PROMOTE) {
215 StoryOptionParams params = new StoryOptionParams(null, 1, "promoteCrewMember",
217 "Promoted promising junior officer to ship command");
218 return new BaseOptionStoryPointActionDelegate(null, params) {
219 @Override
220 public void confirm() {
222 playerFleet.getCargo().removeCrew(1);
223
224 playerFleet.getFleetData().addOfficer(person);
226 }
227
228 @Override
229 public String getTitle() {
230 //return "Promoting junior officer to ship command";
231 return null;
232 }
233
234 @Override
235 public void createDescription(TooltipMakerAPI info) {
237 super.createDescription(info);
238 }
239 };
240 }
241 return null;
242 }
243
244
245 @Override
246 public String getIcon() {
247 return person.getPortraitSprite();
248 }
249
250 @Override
251 public Set<String> getIntelTags(SectorMapAPI map) {
252 Set<String> tags = super.getIntelTags(map);
253 tags.add(Tags.INTEL_FLEET_LOG);
254 return tags;
255 }
256
257 @Override
258 public String getSortString() {
260 }
261
262 @Override
263 public String getCommMessageSound() {
264 return super.getCommMessageSound();
265 //return getSoundMajorPosting();
266 }
267
268
269}
270
271
272
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
static String pickPortraitPreferNonDuplicate(FactionAPI faction, Gender gender)
AvailableOfficer createOfficer(boolean isMerc, MarketAPI market, Random random)
void addLogTimestamp(TooltipMakerAPI info, Color tc, float opad)
ButtonAPI addGenericButton(TooltipMakerAPI info, float width, String text, Object data)
void addDeleteButton(TooltipMakerAPI info, float width)
void createSmallDescription(TooltipMakerAPI info, float width, float height)
StoryPointActionDelegate getButtonStoryPointActionDelegate(Object buttonId)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
static Color getStoryOptionColor()
Definition Misc.java:782
static Color getTextColor()
Definition Misc.java:839
static int getMaxOfficers(CampaignFleetAPI fleet)
Definition Misc.java:5219
static String lcFirst(String str)
Definition Misc.java:565
static Color getStoryDarkColor()
Definition Misc.java:773
static Color getNegativeHighlightColor()
Definition Misc.java:802
static Color getGrayColor()
Definition Misc.java:826
static Color getHighlightColor()
Definition Misc.java:792
static String getPersonalityName(PersonAPI person)
Definition Misc.java:5805
static int getNumNonMercOfficers(CampaignFleetAPI fleet)
Definition Misc.java:5223
SkillSpecAPI getSkillSpec(String skillId)
List< String > getSortedSkillIds()
FactionAPI getFaction(String factionId)
void setPortraitSprite(String portraitSprite)
MutableCharacterStatsAPI getStats()
void setEnabled(boolean enabled)
void setShortcut(int key, boolean putLast)
void setHighlightColors(Color ... colors)
void addImage(String spriteName, float pad)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)
UIComponentAPI addSpacer(float height)