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