Starsector API
Loading...
Searching...
No Matches
TacticallyBombardColony.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions;
2
3import java.awt.Color;
4import java.util.ArrayList;
5import java.util.List;
6import java.util.Map;
7
8import org.lwjgl.util.vector.Vector2f;
9
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.CargoAPI;
12import com.fs.starfarer.api.campaign.InteractionDialogAPI;
13import com.fs.starfarer.api.campaign.econ.Industry;
14import com.fs.starfarer.api.campaign.econ.MarketAPI;
15import com.fs.starfarer.api.campaign.listeners.ColonyPlayerHostileActListener;
16import com.fs.starfarer.api.campaign.rules.MemoryAPI;
17import com.fs.starfarer.api.characters.PersonAPI;
18import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
19import com.fs.starfarer.api.impl.campaign.ids.Ranks;
20import com.fs.starfarer.api.impl.campaign.ids.Tags;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
22import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.TempData;
23import com.fs.starfarer.api.ui.TooltipMakerAPI;
24import com.fs.starfarer.api.util.Misc;
25
27
28 public static float PROB_PATROL_ENCOUNTER_AFTER = 0.5f;
29 public static float MISSION_DAYS = 120f;
30
31 public static enum Stage {
32 BOMBARD,
33 COMPLETED,
34 FAILED,
35 FAILED_NO_PENALTY,
36 }
37
38
39
40 protected void createBarGiver(MarketAPI createdAt) {
41 List<String> posts = new ArrayList<String>();
42 posts.add(Ranks.POST_AGENT);
43 if (createdAt.getSize() >= 6) {
44 posts.add(Ranks.POST_ADMINISTRATOR);
45 }
46 if (Misc.isMilitary(createdAt)) {
47 posts.add(Ranks.POST_BASE_COMMANDER);
48 }
49 if (Misc.hasOrbitalStation(createdAt)) {
51 }
52 String post = pickOne(posts);
53 if (post == null) return;
54
55 // rank used only when it's an agent, since the other posts mean the person already exists
56 // and doesn't need to be created
60 setGiverPost(post);
62 findOrCreateGiver(createdAt, false, false);
63 }
64
65
66 protected MarketAPI market;
67
68 @Override
69 protected boolean create(MarketAPI createdAt, boolean barEvent) {
70 //genRandom = Misc.random;
71
72 if (barEvent) {
73 createBarGiver(createdAt);
74 }
75
76 if (!Misc.isMilitary(createdAt)) return false;
77
78 PersonAPI person = getPerson();
79 if (person == null) return false;
80
81 if (!setPersonMissionRef(person, "$tabo_ref")) {
82 return false;
83 }
84
85 if (barEvent) {
87 }
88
89 requireMarketIsNot(createdAt);
95
96 float q = getQuality();
97 if (q <= 0) {
99 } else if (q <= 0.25) {
101 } else if (q <= 0.5) {
103 } else if (q <= 0.75) {
105 }
106
107 market = pickMarket();
108 if (market == null) return false;
109
110 if (!setMarketMissionRef(market, "$tabo_ref")) {
111 return false;
112 }
113 makeImportant(market, "$tabo_target", Stage.BOMBARD);
114
115 setStartingStage(Stage.BOMBARD);
116 setSuccessStage(Stage.COMPLETED);
117 setFailureStage(Stage.FAILED);
118
119 setStageOnMemoryFlag(Stage.COMPLETED, market, "$tabo_completed");
120 setTimeLimit(Stage.FAILED, MISSION_DAYS, null);
121
122 addNoPenaltyFailureStages(Stage.FAILED_NO_PENALTY);
123 connectWithMarketDecivilized(Stage.BOMBARD, Stage.FAILED_NO_PENALTY, market);
124 setStageOnMarketDecivilized(Stage.FAILED_NO_PENALTY, createdAt);
125 connectWithHostilitiesEnded(Stage.BOMBARD, Stage.FAILED_NO_PENALTY, person, market);
126 setStageOnHostilitiesEnded(Stage.FAILED_NO_PENALTY, person, market);
127
128 //setCreditReward(80000, 100000);
129 setCreditReward(CreditReward.VERY_HIGH, market.getSize());
130
131 if (market.getSize() <= 4) {
134 } else if (market.getSize() <= 6) {
138 } else {
143 }
144
145 return true;
146 }
147
148 protected void updateInteractionDataImpl() {
149 set("$tabo_barEvent", isBarEvent());
150 set("$tabo_manOrWoman", getPerson().getManOrWoman());
151 set("$tabo_reward", Misc.getWithDGS(getCreditsReward()));
152
153 set("$tabo_personName", getPerson().getNameString());
154 set("$tabo_systemName", market.getStarSystem().getNameWithLowercaseTypeShort());
155 set("$tabo_marketName", market.getName());
156 set("$tabo_marketOnOrAt", market.getOnOrAt());
157 set("$tabo_dist", getDistanceLY(market));
158
159 int fuel = getBombardmentFuel(market);
160 set("$tabo_fuel", Misc.getWithDGS(fuel));
161 }
162
163 @Override
164 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
165 float opad = 10f;
166 Color h = Misc.getHighlightColor();
167 if (currentStage == Stage.BOMBARD) {
168 addStandardMarketDesc("Perform a tactical bombardment of", market, info, opad);
169 addBombardmentInfo(market, info, opad);
170 }
171 }
172
173 @Override
174 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
175 Color h = Misc.getHighlightColor();
176 if (currentStage == Stage.BOMBARD) {
177 info.addPara("Tactically bombard " + market.getName() +
178 " in the " + market.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
179 return true;
180 }
181 return false;
182 }
183
184 @Override
185 public String getBaseName() {
186 return "Bombard " + market.getName();
187 }
188
189
190 @Override
191 public void acceptImpl(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
192 super.acceptImpl(dialog, memoryMap);
194 }
195
196 @Override
197 protected void notifyEnding() {
198 super.notifyEnding();
200 }
201
203 MarketAPI market, TempData actionData, Industry industry) {
204 // TODO Auto-generated method stub
205 }
206
207
208
210 MarketAPI market, TempData actionData,
211 CargoAPI cargo) {
212 // TODO Auto-generated method stub
213 }
214
215
217 InteractionDialogAPI dialog, MarketAPI market, TempData actionData) {
218 // TODO Auto-generated method stub
219
220 }
221
223 MarketAPI market, TempData actionData) {
224 if (this.market == market) {
225 if (!isEnded() || isEnding()) {
228 e.setDelayMedium();
230 e.beginCreate();
231 e.triggerCreateFleet(FleetSize.VERY_LARGE, FleetQuality.HIGHER, market.getFactionId(), FleetTypes.PATROL_LARGE, new Vector2f());
232 e.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
236 e.triggerSetFleetMemoryValue("$tabo_marketName", market.getName());
237 e.triggerSetFleetGenericHailPermanent("TABOPatrolHail");
238 e.endCreate();
239 }
240 }
241
243 // need to set non-zero expiration since bombardment code advances the market with 0/very small elapsed time
244 // a few times, so if set to 0 the value would be removed from memory
245 market.getMemoryWithoutUpdate().set("$tabo_bombardedColony", true, 1f);
246 }
247 }
248
249}
250
251
252
253
254
static SectorAPI getSector()
Definition Global.java:65
void triggerCreateFleet(FleetSize size, FleetQuality quality, String factionId, String type, SectorEntityToken roughlyWhere)
void setLocationCoreOnly(boolean allowInsidePopulatedSystems, String requireLargestMarketNotHostileToFaction)
void reportRaidForValuablesFinishedBeforeCargoShown(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, CargoAPI cargo)
void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height)
void reportTacticalBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad)
void acceptImpl(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
void reportSaturationBombardmentFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData)
void reportRaidToDisruptFinished(InteractionDialogAPI dialog, MarketAPI market, TempData actionData, Industry industry)
void setTimeLimit(Object failStage, float days, StarSystemAPI noLimitWhileInSystem, Object ... noLimitAfterStages)
void setStageOnHostilitiesEnded(Object to, PersonAPI person, MarketAPI market)
void makeImportant(PersonAPI person, String flag, Enum ... stages)
void setStageOnMemoryFlag(Object to, HasMemory withMemory, String flag)
void connectWithHostilitiesEnded(Object from, Object to, PersonAPI person, MarketAPI market)
void findOrCreateGiver(MarketAPI market, boolean addToCommDirectory, boolean cleanUpOnMissionOverIfWasNewPerson)
static void addStandardMarketDesc(String prefix, MarketAPI market, TooltipMakerAPI info, float pad)
void addBombardmentInfo(MarketAPI market, TooltipMakerAPI info, float pad)
void connectWithMarketDecivilized(Object from, Object to, MarketAPI market)
void triggerCreateMediumPatrolAroundMarket(MarketAPI market, Object stage, float extraSuspicion)
void triggerCreateSmallPatrolAroundMarket(MarketAPI market, Object stage, float extraSuspicion)
void triggerCreateLargePatrolAroundMarket(MarketAPI market, Object stage, float extraSuspicion)
static String getWithDGS(float num)
Definition Misc.java:1381
static boolean hasOrbitalStation(MarketAPI market)
Definition Misc.java:5059
static Color getHighlightColor()
Definition Misc.java:792
static boolean isMilitary(MarketAPI market)
Definition Misc.java:5045
ListenerManagerAPI getListenerManager()
void set(String key, Object value)
LabelAPI addPara(String format, float pad, Color hl, String... highlights)