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