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