Starsector API
Loading...
Searching...
No Matches
BroadcastPlayerWaitAction.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5
6import com.fs.starfarer.api.EveryFrameScript;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignClockAPI;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.SectorEntityToken;
12import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType;
13import com.fs.starfarer.api.campaign.rules.MemoryAPI;
14import com.fs.starfarer.api.util.IntervalUtil;
15import com.fs.starfarer.api.util.Misc.Token;
16import com.fs.starfarer.api.util.Misc.VarAndMemory;
17
18
20 private EveryFrameScript broadcastScript;
21 private VarAndMemory waitHandle;
22
23 //BroadcastWaitAction <wait handle> <type> <range> <responseVariable>
24 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
25 waitHandle = params.get(0).getVarNameAndMemory(memoryMap);
26
27 final ActionType type = Enum.valueOf(ActionType.class, params.get(1).string);
28 final float range = Float.parseFloat(params.get(2).string);
29 final String responseVariable = params.get(3).string;
30
31 final SectorEntityToken target = dialog.getInteractionTarget();
32 final CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet();
33
34 BroadcastPlayerAction.broadcast(type, range, responseVariable, playerFleet, target);
35 broadcastScript = new EveryFrameScript() {
36 private IntervalUtil tracker = new IntervalUtil(0.05f, 0.15f);
37 private boolean done = false;
38
39 public boolean runWhilePaused() {
40 return false;
41 }
42 public boolean isDone() {
43 return done;
44 }
45 public void advance(float amount) {
46 CampaignClockAPI clock = Global.getSector().getClock();
47
48 float days = clock.convertToDays(amount);
49 tracker.advance(days);
50
51 if (tracker.intervalElapsed() && !done) {
52 if (waitHandle.memory.contains(waitHandle.name)) {
53 Wait wait = (Wait) waitHandle.memory.get(waitHandle.name);
54 if (wait.getWaitScript().isDone()) {
55 done = true;
56 return;
57 }
58 } else {
59 done = true;
60 return;
61 }
62 BroadcastPlayerAction.broadcast(type, range, responseVariable, playerFleet, target);
63 }
64 }
65 };
66
67 Global.getSector().addScript(broadcastScript);
68
69 return true;
70 }
71
72
73}
74
75
76
77
static SectorAPI getSector()
Definition Global.java:59
static void broadcast(ActionType type, float range, String responseVariable, SectorEntityToken actor, SectorEntityToken target)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)