001package com.fs.starfarer.api.impl.campaign.rulecmd;
002
003import java.awt.Color;
004import java.util.List;
005import java.util.Map;
006
007import com.fs.starfarer.api.EveryFrameScript;
008import com.fs.starfarer.api.Global;
009import com.fs.starfarer.api.campaign.InteractionDialogAPI;
010import com.fs.starfarer.api.campaign.OptionPanelAPI;
011import com.fs.starfarer.api.campaign.rules.MemoryAPI;
012import com.fs.starfarer.api.ui.ValueDisplayMode;
013import com.fs.starfarer.api.util.Misc;
014import com.fs.starfarer.api.util.Misc.Token;
015import com.fs.starfarer.api.util.Misc.VarAndMemory;
016
017public class AddSelector extends BaseCommandPlugin {
018
019        
020        //AddSelector <order> <result variable> <text> <color> <min> <max>
021        public boolean execute(String ruleId, final InteractionDialogAPI dialog, List<Token> params, final Map<String, MemoryAPI> memoryMap) {
022                if (dialog == null) return false;
023                
024                final VarAndMemory resultVar = params.get(1).getVarNameAndMemory(memoryMap);
025                final String text = params.get(2).getStringWithTokenReplacement(ruleId, dialog, memoryMap);
026                final Color color = params.get(3).getColor(memoryMap);
027                final float min = params.get(4).getFloat(memoryMap);
028                final float max = params.get(5).getFloat(memoryMap);
029                
030                final String id = Misc.genUID();
031                final OptionPanelAPI options = dialog.getOptionPanel();
032                options.addSelector(text, id, color, 250, 50, min, max, ValueDisplayMode.VALUE, null);
033                
034                Global.getSector().addTransientScript(new EveryFrameScript() {
035                        public boolean runWhilePaused() {
036                                return true;
037                        }
038                        private boolean done = false;
039                        public boolean isDone() {
040                                return done;
041                        }
042                        public void advance(float amount) {
043                                if (done ||
044                                                !options.hasSelector(id) || 
045                                                !Global.getSector().isPaused() ||
046                                                !Global.getSector().getCampaignUI().isShowingDialog()) {
047                                        done = true;
048                                        return;
049                                }
050                                resultVar.memory.set(resultVar.name, Math.round(options.getSelectorValue(id)), 0);
051                        }
052                });
053                
054                return true;
055        }
056
057        @Override
058        public boolean doesCommandAddOptions() {
059                return true;
060        }
061
062        @Override
063        public int getOptionOrder(List<Token> params, final Map<String, MemoryAPI> memoryMap) {
064                int order = (int) params.get(0).getFloat(memoryMap);
065                return order;
066        }
067
068        
069}