Starsector API
Loading...
Searching...
No Matches
AddRaidObjective.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd.salvage;
2
3import java.util.List;
4import java.util.Map;
5import java.util.Random;
6
7import com.fs.starfarer.api.EveryFrameScript;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.campaign.TextPanelAPI;
13import com.fs.starfarer.api.campaign.econ.MarketAPI;
14import com.fs.starfarer.api.campaign.listeners.GroundRaidObjectivesListener;
15import com.fs.starfarer.api.campaign.rules.MemoryAPI;
16import com.fs.starfarer.api.impl.campaign.graid.BaseGroundRaidObjectivePluginImpl;
17import com.fs.starfarer.api.impl.campaign.graid.GroundRaidObjectivePlugin;
18import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
19import com.fs.starfarer.api.impl.campaign.rulecmd.FireAll;
20import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel;
21import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidType;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc.Token;
24
38public class AddRaidObjective extends BaseCommandPlugin {
39
40 public static class CustomRaidObjective extends BaseGroundRaidObjectivePluginImpl {
41 public CustomRaidObjectiveAdder adder;
42
43 public CustomRaidObjective(CustomRaidObjectiveAdder adder) {
44 super(adder.market, null);
45 this.adder = adder;
46 int marines = adder.danger.marineTokens;
47 setMarinesRequired(marines);
48 }
49
50 public boolean withContinueBeforeResult() {
51 return true;
52 }
53
54 @Override
55 public String getQuantityString(int marines) {
56 return "";
57 }
58 @Override
59 public String getValueString(int marines) {
60 return "";
61 }
62 public float getValueSortValue() {
63 return super.getValueSortValue();
64 }
65 public int getCargoSpaceNeeded() {
66 return 0;
67 }
68 public int getFuelSpaceNeeded() {
69 return 0;
70 }
71 public int getProjectedCreditsValue() {
72 return 0;
73 }
74 public RaidDangerLevel getDangerLevel() {
75 return adder.danger;
76 }
77 @Override
78 public int getValue(int marines) {
79 return 0;
80 }
81 public float getQuantitySortValue() {
82 float add = adder.name.hashCode();
83 return QUANTITY_SORT_TIER_0 + add;
84 }
85 public String getName() {
86 return adder.name;
87 }
88 @Override
89 public String getIconName() {
90 return Global.getSettings().getSpriteName("raidObjectives", adder.icon);
91 }
92 @Override
93 public float getQuantity(int marines) {
94 return 0;
95 }
96 public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) {
97 return adder.xp;
98 }
99
100 @Override
101 public boolean hasTooltip() {
102 return adder.tooltip != null;
103 }
104
105 @Override
106 public void createTooltip(TooltipMakerAPI t, boolean expanded) {
107 t.addPara(adder.tooltip, 0f);
108 }
109 }
110
111 public static class CustomRaidObjectiveAdder implements EveryFrameScript, GroundRaidObjectivesListener {
112 protected boolean done = false;
113
114 public String icon;
115 public String name;
116 public String trigger;
117 public String tooltip;
118 public int xp = 0;
119 public boolean showInCustomOnly;
120 public RaidDangerLevel danger;
121 public MarketAPI market;
122 public SectorEntityToken entity;
123
124 public CustomRaidObjectiveAdder(MarketAPI market, SectorEntityToken entity, String icon, String name, String trigger, int xp, RaidDangerLevel danger, boolean showInCustomOnly, String tooltip) {
125 this.market = market;
126 this.entity = entity;
127 this.icon = icon;
128 this.name = name;
129 this.trigger = trigger;
130 this.tooltip = tooltip;
131 this.xp = xp;
132 this.danger = danger;
133 this.showInCustomOnly = showInCustomOnly;
134 for (CustomRaidObjectiveAdder adder : Global.getSector().getListenerManager().getListeners(CustomRaidObjectiveAdder.class)) {
135 if (adder.name.equals(name) && adder.trigger.equals(trigger)) {
136 return;
137 }
138 }
139 Global.getSector().getListenerManager().addListener(this);
140 Global.getSector().addScript(this);
141 }
142 public void advance(float amount) {
143 if (amount > 0 && !done) {
144 for (CustomRaidObjectiveAdder adder : Global.getSector().getListenerManager().getListeners(CustomRaidObjectiveAdder.class)) {
145 if (adder.name.equals(name) && adder.trigger.equals(trigger)) {
146 Global.getSector().getListenerManager().removeListener(this);
147 done = true;
148 break;
149 }
150 }
151 }
152 }
153 public boolean isDone() {
154 return done;
155 }
156 public boolean runWhilePaused() {
157 return false;
158 }
159 public void modifyRaidObjectives(MarketAPI market, SectorEntityToken entity, List<GroundRaidObjectivePlugin> objectives, RaidType type, int marineTokens, int priority) {
160 if (priority != 0) return;
161
162 if (type == RaidType.DISRUPT) return;
163 if (type != RaidType.CUSTOM_ONLY && showInCustomOnly) return;
164
165 if (type == RaidType.CUSTOM_ONLY && entity != null &&
166 entity.getMemoryWithoutUpdate().contains("$raidRestrictToTrigger")) {
167 String restrict = entity.getMemoryWithoutUpdate().getString("$raidRestrictToTrigger");
168 if (restrict != null && !restrict.isEmpty() && !restrict.equals(trigger)) {
169 return;
170 }
171 }
172
173 if ((this.market != null && market == this.market) ||
174 (this.entity != null && entity == this.entity)) {
175 CustomRaidObjective custom = new CustomRaidObjective(this);
176 objectives.add(custom);
177 }
178 }
179
180 public void reportRaidObjectivesAchieved(RaidResultData data, InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) {
181 boolean found = false;
182 for (GroundRaidObjectivePlugin obj : data.objectives) {
183 if (obj instanceof CustomRaidObjective) {
184 CustomRaidObjective custom = (CustomRaidObjective) obj;
185 if (custom.adder == this) {
186 found = true;
187 break;
188 }
189 }
190 }
191 if (found) {
192 advance(0.1f); // triggers removal of objective
193 dialog.getInteractionTarget().getMemoryWithoutUpdate().set("$raidMarinesLost", data.marinesLost, 0);
194 FireAll.fire(null, dialog, memoryMap, trigger);
195 }
196 }
197 }
198
199
200
201 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
202 String icon = params.get(0).getString(memoryMap);
203 String name = params.get(1).getStringWithTokenReplacement(ruleId, dialog, memoryMap);
204 RaidDangerLevel danger = RaidDangerLevel.valueOf(RaidDangerLevel.class, params.get(2).getString(memoryMap));
205 int xp = (int) params.get(3).getFloat(memoryMap);
206 String trigger = params.get(4).getString(memoryMap);
207
208 boolean showInCustomOnly = false;
209
210 String tooltip = null;
211 if (params.size() > 5) {
212 if (params.size() > 6) {
213 showInCustomOnly = params.get(5).getBoolean(memoryMap);
214 tooltip = params.get(6).getStringWithTokenReplacement(params.get(5).getString(memoryMap), dialog, memoryMap);
215 } else {
216 String str = params.get(5).getString(memoryMap);
217 if (str != null) {
218 if (str.toLowerCase().equals("true") || str.toLowerCase().equals("false")) {
219 showInCustomOnly = params.get(5).getBoolean(memoryMap);
220 } else {
221 tooltip = params.get(5).getStringWithTokenReplacement(params.get(5).getString(memoryMap), dialog, memoryMap);
222 }
223 }
224 }
225 }
226
227 SectorEntityToken entity = dialog.getInteractionTarget();
228 MarketAPI market = entity.getMarket();
229
230 new CustomRaidObjectiveAdder(market, entity, icon, name, trigger, xp, danger, showInCustomOnly, tooltip);
231
232 return true;
233 }
234
235}
236
237
238
239
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
Definition FireAll.java:55
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
String getSpriteName(String category, String id)