001package com.fs.starfarer.api.impl.campaign.rulecmd; 002 003import java.util.List; 004import java.util.Map; 005 006import com.fs.starfarer.api.EveryFrameScript; 007import com.fs.starfarer.api.Global; 008import com.fs.starfarer.api.campaign.CampaignClockAPI; 009import com.fs.starfarer.api.campaign.CampaignFleetAPI; 010import com.fs.starfarer.api.campaign.InteractionDialogAPI; 011import com.fs.starfarer.api.campaign.SectorEntityToken; 012import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType; 013import com.fs.starfarer.api.campaign.rules.MemoryAPI; 014import com.fs.starfarer.api.util.IntervalUtil; 015import com.fs.starfarer.api.util.Misc.Token; 016import com.fs.starfarer.api.util.Misc.VarAndMemory; 017 018 019public class BroadcastPlayerWaitAction extends BaseCommandPlugin { 020 private EveryFrameScript broadcastScript; 021 private VarAndMemory waitHandle; 022 023 //BroadcastWaitAction <wait handle> <type> <range> <responseVariable> 024 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 025 waitHandle = params.get(0).getVarNameAndMemory(memoryMap); 026 027 final ActionType type = Enum.valueOf(ActionType.class, params.get(1).string); 028 final float range = Float.parseFloat(params.get(2).string); 029 final String responseVariable = params.get(3).string; 030 031 final SectorEntityToken target = dialog.getInteractionTarget(); 032 final CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 033 034 BroadcastPlayerAction.broadcast(type, range, responseVariable, playerFleet, target); 035 broadcastScript = new EveryFrameScript() { 036 private IntervalUtil tracker = new IntervalUtil(0.05f, 0.15f); 037 private boolean done = false; 038 039 public boolean runWhilePaused() { 040 return false; 041 } 042 public boolean isDone() { 043 return done; 044 } 045 public void advance(float amount) { 046 CampaignClockAPI clock = Global.getSector().getClock(); 047 048 float days = clock.convertToDays(amount); 049 tracker.advance(days); 050 051 if (tracker.intervalElapsed() && !done) { 052 if (waitHandle.memory.contains(waitHandle.name)) { 053 Wait wait = (Wait) waitHandle.memory.get(waitHandle.name); 054 if (wait.getWaitScript().isDone()) { 055 done = true; 056 return; 057 } 058 } else { 059 done = true; 060 return; 061 } 062 BroadcastPlayerAction.broadcast(type, range, responseVariable, playerFleet, target); 063 } 064 } 065 }; 066 067 Global.getSector().addScript(broadcastScript); 068 069 return true; 070 } 071 072 073} 074 075 076 077