001package com.fs.starfarer.api.impl.campaign;
002
003import java.util.HashMap;
004import java.util.Map;
005
006import com.fs.starfarer.api.Global;
007import com.fs.starfarer.api.campaign.InteractionDialogAPI;
008import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
009import com.fs.starfarer.api.campaign.OptionPanelAPI;
010import com.fs.starfarer.api.campaign.SectorEntityToken;
011import com.fs.starfarer.api.campaign.TextPanelAPI;
012import com.fs.starfarer.api.campaign.VisualPanelAPI;
013import com.fs.starfarer.api.campaign.rules.MemKeys;
014import com.fs.starfarer.api.campaign.rules.MemoryAPI;
015import com.fs.starfarer.api.characters.CharacterCreationData;
016import com.fs.starfarer.api.combat.EngagementResultAPI;
017import com.fs.starfarer.api.impl.SharedSettings;
018import com.fs.starfarer.api.impl.campaign.rulecmd.DumpMemory;
019import com.fs.starfarer.api.impl.campaign.rulecmd.FireAll;
020import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
021
022public class NewGameDialogPluginImpl implements InteractionDialogPlugin {
023
024        public static String CAMPAIGN_HELP_POPUPS_OPTION_CHECKED = "campaignHelpPopupsOptionChecked";
025        
026        private static enum OptionId {
027                INIT,
028                CONTINUE_CHOICES,
029                LEAVE,
030        }
031        
032        private static enum State {
033                OPTIONS,
034                CHOICES,
035        }
036        
037        private InteractionDialogAPI dialog;
038        private TextPanelAPI textPanel;
039        private OptionPanelAPI options;
040        private VisualPanelAPI visual;
041        
042        private CharacterCreationData data;
043        private SectorEntityToken entity;
044        
045        private State state = State.OPTIONS;
046        private HashMap<String, MemoryAPI> memoryMap;
047        private MemoryAPI memory;
048        
049        public void init(InteractionDialogAPI dialog) {
050                this.dialog = dialog;
051                textPanel = dialog.getTextPanel();
052                options = dialog.getOptionPanel();
053                visual = dialog.getVisualPanel();
054
055                dialog.setOptionOnEscape("Leave", OptionId.LEAVE);
056                createInitialOptions();
057                
058                entity = dialog.getInteractionTarget();
059                memory = entity.getMemoryWithoutUpdate();
060                data = (CharacterCreationData) memory.get("$characterData");
061                memoryMap = new HashMap<String, MemoryAPI>();
062                memoryMap.put(MemKeys.LOCAL, memory);
063                memoryMap.put(MemKeys.GLOBAL, Global.getFactory().createMemory());
064                if (Global.getSettings().isDevMode()) {
065                        memoryMap.get(MemKeys.GLOBAL).set("$isDevMode", true, 0);
066                }
067                
068                //dialog.setPromptText("------------------------------");
069                dialog.setPromptText("-");
070                
071                data.setCampaignHelpEnabled(SharedSettings.optBoolean(CAMPAIGN_HELP_POPUPS_OPTION_CHECKED, true));
072                
073                dialog.hideTextPanel();
074                visual.showNewGameOptionsPanel(data);
075                //optionSelected(null, OptionId.INIT);
076        }
077        
078        public void advance(float amount) {
079                if (state == State.OPTIONS) {
080                        String name = data.getCharacterData().getName();
081                        if (name == null || name.isEmpty()) {
082                                options.setEnabled(OptionId.CONTINUE_CHOICES, false);
083                        } else {
084                                options.setEnabled(OptionId.CONTINUE_CHOICES, true);
085                        }
086                } else if (state == State.CHOICES) {
087                        if (data.isDone()) {
088                                dialog.dismiss();
089                        }
090                }
091        }
092        
093        public Map<String, MemoryAPI> getMemoryMap() {
094                return memoryMap;
095        }
096        
097        public void backFromEngagement(EngagementResultAPI result) {
098                // no combat here, so this won't get called
099        }
100        
101        public void optionSelected(String text, Object optionData) {
102                if (optionData == null) return;
103                
104                if (text != null && state == State.CHOICES) {
105                        //textPanel.addParagraph(text, Global.getSettings().getColor("buttonText"));
106                        dialog.addOptionSelectedText(optionData);
107                }
108                
109                if (optionData instanceof String) {
110                        if (optionData == DumpMemory.OPTION_ID) {
111                                new DumpMemory().execute(null, dialog, null, memoryMap);
112                                return;
113                        } else if (DevMenuOptions.isDevOption(optionData)) {
114                                DevMenuOptions.execute(dialog, (String) optionData);
115                                return;
116                        }
117                        
118                        memory.set("$option", optionData);
119                        memory.expire("$option", 0);
120                        fireBest("NewGameOptionSelected");
121                } else {
122                        OptionId option = (OptionId) optionData;
123                        switch (option) {
124                        case LEAVE:
125                                SharedSettings.setBoolean(CAMPAIGN_HELP_POPUPS_OPTION_CHECKED, data.isCampaignHelpEnabled());
126                                SharedSettings.saveIfNeeded();
127                                dialog.dismissAsCancel();
128                                break;
129                        case CONTINUE_CHOICES:
130                                SharedSettings.setBoolean(CAMPAIGN_HELP_POPUPS_OPTION_CHECKED, data.isCampaignHelpEnabled());
131                                SharedSettings.saveIfNeeded();
132                                
133                                dialog.showTextPanel();
134                                visual.showPersonInfo(data.getPerson(), true);
135                                options.clearOptions();
136                                state = State.CHOICES;
137                                fireBest("BeginNewGameCreation");
138                                break;
139                        }
140                }
141        }
142        
143        private void createInitialOptions() {
144                options.clearOptions();
145                boolean dev = Global.getSettings().isDevMode();
146                options.addOption("Continue", OptionId.CONTINUE_CHOICES, null);
147                //options.addOption("Leave", OptionId.LEAVE, null);
148        }
149        
150        private OptionId lastOptionMousedOver = null;
151        public void optionMousedOver(String optionText, Object optionData) {
152
153        }
154        
155        public Object getContext() {
156                return null;
157        }
158        
159        public boolean fireAll(String trigger) {
160                return FireAll.fire(null, dialog, memoryMap, trigger);
161        }
162        
163        public boolean fireBest(String trigger) {
164                return FireBest.fire(null, dialog, memoryMap, trigger);
165        }
166}
167
168
169