35 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
36 if (params.size() != 6) {
37 throw new RuleException(
"Wait usage: Wait $handle duration $finished $interrupted $inProgress <text>");
40 handle = params.get(0).getVarNameAndMemory(memoryMap);
41 final float durationDays = Float.parseFloat(params.get(1).string);
42 finished = params.get(2).getVarNameAndMemory(memoryMap);
43 interrupted = params.get(3).getVarNameAndMemory(memoryMap);
44 inProgress = params.get(4).getVarNameAndMemory(memoryMap);
46 String text =
"Waiting";
47 if (params.size() >= 5) {
48 text = params.get(5).getString(memoryMap);
53 final SectorEntityToken target = dialog.getInteractionTarget();
55 final CampaignFleetAPI playerFleet =
Global.
getSector().getPlayerFleet();
56 playerFleet.setInteractionTarget(
null);
57 Vector2f offset = Vector2f.sub(playerFleet.getLocation(), target.getLocation(),
new Vector2f());
60 float len = offset.length();
61 float radSum = playerFleet.getRadius() + target.getRadius() - 1f;
63 offset.scale(radSum / len);
65 offset.set(radSum, 0);
69 target.getContainingLocation().addEntity(indicator);
72 waitScript =
new BaseCampaignEventListenerAndScript(durationDays + 0.1f) {
73 private float elapsedDays = 0f;
74 private boolean done =
false;
75 private boolean battleOccured =
false;
76 private boolean interactedWithSomethingElse =
false;
77 public boolean runWhilePaused() {
80 public boolean isDone() {
83 public void advance(
float amount) {
86 Global.
getSector().getCampaignUI().setDisallowPlayerInteractionsForOneFrame();
88 float days = clock.convertToDays(amount);
91 inProgress.memory.set(inProgress.name,
true);
92 inProgress.memory.expire(inProgress.name, 0.1f);
96 if (battleOccured || interactedWithSomethingElse) {
98 interrupted.memory.set(interrupted.name,
true);
99 interrupted.memory.expire(interrupted.name, 2f);
100 handle.memory.unset(handle.name);
101 indicator.interrupt();
105 }
else if (elapsedDays >= durationDays && !
Global.
getSector().getCampaignUI().isShowingDialog()) {
107 finished.memory.set(finished.name,
true);
108 finished.memory.expire(finished.name, 0f);
110 inProgress.memory.unset(inProgress.name);
111 handle.memory.unset(handle.name);
114 indicator.getContainingLocation().removeEntity(indicator);
120 public void reportBattleOccurred(CampaignFleetAPI primaryWinner, BattleAPI battle) {
121 if (battle.getSnapshotSideFor(playerFleet) !=
null ||
122 (target instanceof CampaignFleetAPI && battle.getSnapshotSideFor((CampaignFleetAPI)target) !=
null)) {
123 battleOccured =
true;
127 public void reportShownInteractionDialog(InteractionDialogAPI dialog) {
128 interactedWithSomethingElse |= dialog.getInteractionTarget() != target;
131 public void reportFleetDespawned(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param) {
132 if (fleet == playerFleet || fleet == target) {
133 battleOccured =
true;
141 interrupted.memory.set(interrupted.name,
true);
142 interrupted.memory.expire(interrupted.name, 2f);
146 handle.memory.unset(handle.name);
147 indicator.interrupt();
154 handle.memory.set(handle.name,
this);