Starsector API
Loading...
Searching...
No Matches
AnalyzeEntityMissionIntel.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel;
2
3import java.util.List;
4import java.util.Map;
5import java.util.Set;
6
7import java.awt.Color;
8
9import org.apache.log4j.Logger;
10import org.lwjgl.util.vector.Vector2f;
11
12import com.fs.starfarer.api.Global;
13import com.fs.starfarer.api.campaign.CampaignFleetAPI;
14import com.fs.starfarer.api.campaign.CargoAPI;
15import com.fs.starfarer.api.campaign.FactionAPI;
16import com.fs.starfarer.api.campaign.InteractionDialogAPI;
17import com.fs.starfarer.api.campaign.RepLevel;
18import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin.ReputationAdjustmentResult;
19import com.fs.starfarer.api.campaign.SectorEntityToken;
20import com.fs.starfarer.api.campaign.econ.MarketAPI;
21import com.fs.starfarer.api.campaign.rules.MemoryAPI;
22import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
23import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.MissionCompletionRep;
24import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
25import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
26import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepRewards;
27import com.fs.starfarer.api.impl.campaign.ids.Factions;
28import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
29import com.fs.starfarer.api.impl.campaign.ids.Tags;
30import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
31import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BreadcrumbSpecial;
32import com.fs.starfarer.api.ui.SectorMapAPI;
33import com.fs.starfarer.api.ui.TooltipMakerAPI;
34import com.fs.starfarer.api.util.Misc;
35import com.fs.starfarer.api.util.Misc.Token;
36import com.fs.starfarer.api.util.WeightedRandomPicker;
37
39 public static Logger log = Global.getLogger(AnalyzeEntityMissionIntel.class);
40
41 protected int reward;
43 protected MarketAPI market;
44
46
47
49 this.entity = entity;
50
53 if (market.isHidden()) continue;
54 if (market.getFaction().isPlayerFaction()) continue;
55 marketPicker.add(market, market.getSize());
56 }
57
58 market = marketPicker.pick();
59 if (market == null) {
61 return;
62 }
63
65 if (!market.getFaction().isHostileTo(Factions.INDEPENDENT) && (float) Math.random() > 0.67f) {
67 }
68
69 setDuration(120f);
70
71 reward = (int) Misc.getDistance(new Vector2f(), entity.getLocationInHyperspace());
72 //reward *= 1.25f;
73 reward = 20000 + (reward / 10000) * 10000;
74 if (reward < 10000) reward = 10000;
75
76
77 log.info("Created AnalyzeEntityMissionIntel: " + entity.getName() + ", faction: " + faction.getDisplayName());
78
79
82
84
85 }
86
87 @Override
90 cancel();
91 }
92 }
93
94
95
97 return entity;
98 }
99
100 @Override
101 protected MissionResult createAbandonedResult(boolean withPenalty) {
102 if (withPenalty) {
103 MissionCompletionRep rep = new MissionCompletionRep(RepRewards.HIGH, RepLevel.WELCOMING,
104 -RepRewards.TINY, RepLevel.INHOSPITABLE);
105 ReputationAdjustmentResult result = Global.getSector().adjustPlayerReputation(
106 new RepActionEnvelope(RepActions.MISSION_FAILURE, rep,
107 null, null, true, false),
108 faction.getId());
109 return new MissionResult(0, result);
110 }
111 return new MissionResult();
112 }
113
114 @Override
115 protected MissionResult createTimeRanOutFailedResult() {
116 return createAbandonedResult(true);
117 }
118
119 @Override
120 public void missionAccepted() {
121 entity.getMemoryWithoutUpdate().set("$aem_target", true, getDuration());
122 entity.getMemoryWithoutUpdate().set("$aem_eventRef", this, getDuration());
124 "aem", true, getDuration());
125 }
126
127
128 @Override
129 public void endMission() {
130 entity.getMemoryWithoutUpdate().unset("$aem_target");
131 entity.getMemoryWithoutUpdate().unset("$aem_eventRef");
133 "aem", false, 0f);
135 }
136
137 @Override
138 public void advanceMission(float amount) {
139 }
140
141 @Override
142 public boolean callEvent(String ruleId, final InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
143 String action = params.get(0).getString(memoryMap);
144
146 CargoAPI cargo = playerFleet.getCargo();
147
148 if (action.equals("runPackage")) {
150 cargo.getCredits().add(reward);
151
152 MissionCompletionRep rep = new MissionCompletionRep(RepRewards.HIGH, RepLevel.WELCOMING,
153 -RepRewards.TINY, RepLevel.INHOSPITABLE);
154
155 ReputationAdjustmentResult result = Global.getSector().adjustPlayerReputation(
156 new RepActionEnvelope(RepActions.MISSION_SUCCESS, rep,
157 null, dialog.getTextPanel(), true, false),
158 faction.getId());
159 setMissionResult(new MissionResult(reward, result));
160 setMissionState(MissionState.COMPLETED);
161 endMission();
162 }
163
164 return true;
165 }
166
167
168 protected void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode) {
169
170 Color h = Misc.getHighlightColor();
171 Color g = Misc.getGrayColor();
172 float pad = 3f;
173 float opad = 10f;
174
175 float initPad = pad;
176 if (mode == ListInfoMode.IN_DESC) initPad = opad;
177
178 Color tc = getBulletColorForMode(mode);
179
180 bullet(info);
181 boolean isUpdate = getListInfoParam() != null;
182
183 if (isUpdate) {
184 // 3 possible updates: de-posted/expired, failed, completed
185 if (isFailed() || isCancelled()) {
186 return;
187 } else if (isCompleted()) {
188 if (missionResult.payment > 0) {
189 info.addPara("%s received", initPad, tc, h, Misc.getDGSCredits(missionResult.payment));
190 }
192 null, null, info, tc, isUpdate, 0f);
193 }
194 } else {
195 // either in small description, or in tooltip/intel list
196 if (missionResult != null) {
197 if (missionResult.payment > 0) {
198 info.addPara("%s received", initPad, tc, h, Misc.getDGSCredits(missionResult.payment));
199 initPad = 0f;
200 }
201
202 if (missionResult.rep1 != null) {
204 null, null, info, tc, isUpdate, initPad);
205 initPad = 0f;
206 }
207 } else {
208 if (mode != ListInfoMode.IN_DESC) {
209 info.addPara("Faction: " + faction.getDisplayName(), initPad, tc,
212 initPad = 0f;
213 }
214
215 info.addPara("%s reward", initPad, tc, h, Misc.getDGSCredits(reward));
216 addDays(info, "to complete", duration - elapsedDays, tc, 0f);
217 }
218 }
219
220 unindent(info);
221 }
222
223 @Override
224 public void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode) {
225 Color c = getTitleColor(mode);
226 info.addPara(getName(), c, 0f);
227
228 addBulletPoints(info, mode);
229 }
230
231 public String getSortString() {
232 return super.getSortString();
233 //return "Analyze";
234 }
235
236 public String getName() {
237 String name = "";
238// if (entity.getCustomEntitySpec() != null) {
239// name = entity.getCustomEntitySpec().getNameInText();
240// } else {
241 name = entity.getName(); // we want caps on every word since this is a title, so no getNameInText()
242// }
243
244 return "Analyze " + name + getPostfixForState();
245 }
246
247
248 @Override
250 return faction;
251 }
252
253 public String getSmallDescriptionTitle() {
254 return getName();
255 }
256
257
258 @Override
259 public void createSmallDescription(TooltipMakerAPI info, float width, float height) {
260 Color h = Misc.getHighlightColor();
261 Color g = Misc.getGrayColor();
262 //Color c = getTitleColor(mode);
263 Color tc = Misc.getTextColor();
264 float pad = 3f;
265 float opad = 10f;
266
267 info.addImage(faction.getLogo(), width, 128, opad);
268
269 String name = "";
270 String shortName = "";
271 String isOrAre = "is";
272 String aOrAn = "a";
273 if (entity.getCustomEntitySpec() != null) {
278 } else {
279 name = entity.getName();
280 shortName = entity.getName();
281 }
282
283 String authorities = "authorities";
284 if (!faction.getId().equals(market.getFactionId())) {
285 authorities = "concerns";
286 }
287 info.addPara("%s " + authorities + " " + market.getOnOrAt() + " " + market.getName() +
288 " have posted a reward for running a custom sensor package on " + aOrAn + " " + name + ".",
290
291 String loc = BreadcrumbSpecial.getLocatedString(entity, true);
292 info.addPara("The " + shortName + " " + isOrAre + " " + loc + ".", opad);
293
294 if (isPosted() || isAccepted()) {
295 addBulletPoints(info, ListInfoMode.IN_DESC);
296
298
299 addAcceptOrAbandonButton(info, width, "Accept", "Abandon");
300 } else {
302
303 addBulletPoints(info, ListInfoMode.IN_DESC);
304 }
305
306 }
307
308 public String getIcon() {
309 return Global.getSettings().getSpriteName("campaignMissions", "analyze_entity");
310 }
311
312 public Set<String> getIntelTags(SectorMapAPI map) {
313 Set<String> tags = super.getIntelTags(map);
314 tags.add(Tags.INTEL_EXPLORATION);
315 tags.add(Tags.INTEL_MISSIONS);
316 tags.add(faction.getId());
317 return tags;
318 }
319
320 @Override
322 if (entity != null && entity.isDiscoverable() && entity.getStarSystem() != null) {
323 return entity.getStarSystem().getCenter();
324 }
325 return entity;
326 }
327
328
329
330}
static SettingsAPI getSettings()
Definition Global.java:57
static Logger getLogger(Class c)
Definition Global.java:32
static SectorAPI getSector()
Definition Global.java:65
static void addAdjustmentMessage(float delta, FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, boolean withCurrent, float pad)
boolean callEvent(String ruleId, final InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void createSmallDescription(TooltipMakerAPI info, float width, float height)
void setPostingLocation(SectorEntityToken postingLocation)
void addDays(TooltipMakerAPI info, String after, float days)
void addAcceptOrAbandonButton(TooltipMakerAPI info, float width)
static void addCreditsGainText(int credits, TextPanelAPI text)
static Color getTextColor()
Definition Misc.java:839
static String getDGSCredits(float num)
Definition Misc.java:1390
static String ucFirst(String str)
Definition Misc.java:559
static Color getGrayColor()
Definition Misc.java:826
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
static Color getHighlightColor()
Definition Misc.java:792
static boolean setFlagWithReason(MemoryAPI memory, String flagKey, String reason, boolean value, float expire)
Definition Misc.java:1439
String getSpriteName(String category, String id)
boolean isHostileTo(FactionAPI other)
ReputationAdjustmentResult adjustPlayerReputation(Object action, String factionId)
FactionAPI getFaction(String factionId)
void queueIntel(IntelInfoPlugin plugin, float maxCommQueueDays)
void set(String key, Object value)
void addImage(String spriteName, float pad)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)