001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage; 002 003import java.util.List; 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.SectorEntityToken; 010import com.fs.starfarer.api.campaign.rules.MemoryAPI; 011import com.fs.starfarer.api.combat.EngagementResultAPI; 012import com.fs.starfarer.api.impl.campaign.DevMenuOptions; 013import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 014import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 015import com.fs.starfarer.api.impl.campaign.rulecmd.DumpMemory; 016import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest; 017import com.fs.starfarer.api.util.Misc; 018import com.fs.starfarer.api.util.Misc.Token; 019 020/** 021 * SalvageSpecialInteraction 022 */ 023public class SalvageSpecialInteraction extends BaseCommandPlugin { 024 025 public static interface SalvageSpecialData { 026 SalvageSpecialPlugin createSpecialPlugin(); 027 } 028 029 030 public static interface SalvageSpecialPlugin { 031 void init(InteractionDialogAPI dialog, Object specialData); 032 void optionSelected(String optionText, Object optionData); 033 boolean isDone(); 034 boolean endWithContinue(); 035 boolean shouldShowAgain(); 036 boolean shouldAbortSalvageAndRemoveEntity(); 037 } 038 039 040 public static class SalvageSpecialDialogPlugin implements InteractionDialogPlugin { 041 private InteractionDialogAPI dialog; 042 private InteractionDialogPlugin originalPlugin; 043 private Map<String, MemoryAPI> memoryMap; 044 private final SalvageSpecialPlugin special; 045 private final Object specialData; 046 047 public SalvageSpecialDialogPlugin(InteractionDialogPlugin originalPlugin, SalvageSpecialPlugin special, Object specialData, Map<String, MemoryAPI> memoryMap) { 048 this.originalPlugin = originalPlugin; 049 this.special = special; 050 this.specialData = specialData; 051 this.memoryMap = memoryMap; 052 } 053 054 public void init(InteractionDialogAPI dialog) { 055 this.dialog = dialog; 056 057 special.init(dialog, specialData); 058 if (special.isDone()) { 059 endSpecial(special.endWithContinue(), special.shouldAbortSalvageAndRemoveEntity()); 060 } else { 061 if (Global.getSettings().isDevMode()) { 062 DevMenuOptions.addOptions(dialog); 063 } 064 } 065 } 066 public void optionSelected(String optionText, Object optionData) { 067 if (optionText != null) { 068 dialog.getTextPanel().addParagraph(optionText, Global.getSettings().getColor("buttonText")); 069 } 070 if (optionData == DumpMemory.OPTION_ID) { 071 new DumpMemory().execute(null, dialog, null, getMemoryMap()); 072 return; 073 } else if (DevMenuOptions.isDevOption(optionData)) { 074 DevMenuOptions.execute(dialog, (String) optionData); 075 return; 076 } 077 078 079 special.optionSelected(optionText, optionData); 080 if (special.isDone()) { 081 endSpecial(special.endWithContinue(), special.shouldAbortSalvageAndRemoveEntity()); 082 } else { 083 if (Global.getSettings().isDevMode()) { 084 DevMenuOptions.addOptions(dialog); 085 } 086 } 087 } 088 089 public void endSpecial(boolean withContinue, boolean withAbort) { 090 if (!special.shouldShowAgain()) { 091 BaseCommandPlugin.getEntityMemory(memoryMap).unset(MemFlags.SALVAGE_SPECIAL_DATA); 092 } 093 094 095 dialog.setPlugin(originalPlugin); 096 if (withAbort) { 097 Misc.fadeAndExpire(dialog.getInteractionTarget(), 1f); 098 dialog.dismiss(); 099 } else { 100 if (withContinue) { 101 FireBest.fire(null, dialog, memoryMap, "SalvageSpecialFinished"); 102 } else { 103 FireBest.fire(null, dialog, memoryMap, "SalvageSpecialFinishedNoContinue"); 104 } 105 } 106 } 107 108 public void advance(float amount) { 109 } 110 public void backFromEngagement(EngagementResultAPI battleResult) { 111 } 112 public Object getContext() { 113 return null; 114 } 115 public Map<String, MemoryAPI> getMemoryMap() { 116 return memoryMap; 117 } 118 public void optionMousedOver(String optionText, Object optionData) { 119 } 120 } 121 122 123 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, final Map<String, MemoryAPI> memoryMap) { 124 if (dialog == null) return false; 125 126 SectorEntityToken entity = dialog.getInteractionTarget(); 127 //SalvageEntityGenDataSpec spec = SalvageEntityGeneratorOld.getSalvageSpec(entity.getCustomEntityType()); 128 129 MemoryAPI memory = getEntityMemory(memoryMap); 130// long seed = memory.getLong(MemFlags.MEMORY_KEY_SALVAGE_SEED); 131// Random random = Misc.getRandom(seed, 50); 132 133 //dialog.getTextPanel().addParagraph("Test special interactions"); 134 135 136 final InteractionDialogPlugin originalPlugin = dialog.getPlugin(); 137 138 139 Object specialData = memory.get(MemFlags.SALVAGE_SPECIAL_DATA); 140 141// Class specialClass = dataToSpecialPlugin.get(specialData.getClass()); 142// if (specialClass == null) { 143// FireBest.fire(null, dialog, memoryMap, "SalvageSpecialFinishedNoContinue"); 144// return true; 145// } 146 SalvageSpecialPlugin special = null; 147 if (specialData instanceof SalvageSpecialData) { 148 special = ((SalvageSpecialData) specialData).createSpecialPlugin(); 149 } 150 151 if (special == null) { 152 FireBest.fire(null, dialog, memoryMap, "SalvageSpecialFinishedNoContinue"); 153 return true; 154 } 155 156 157 //SalvageSpecialPlugin special = new BaseSalvageSpecial(); 158 //SalvageSpecialPlugin special = new DomainSurveyDerelictSpecial(); 159 //try { 160 //SalvageSpecialPlugin special = (SalvageSpecialPlugin) specialClass.newInstance(); 161 162 //SalvageSpecialDialogPlugin plugin = new SalvageSpecialDialogPlugin(originalPlugin, special, specialData, memoryMap); 163 SalvageSpecialDialogPlugin plugin = new SalvageSpecialDialogPlugin(originalPlugin, special, specialData, memoryMap); 164 dialog.setPlugin(plugin); 165 plugin.init(dialog); 166// } catch (IllegalAccessException e) { 167// throw new RuntimeException(e); 168// } catch (InstantiationException e) { 169// throw new RuntimeException(e); 170// } 171 172 return true; 173 } 174 175 176 177 178 179 180 181 182 183 184 185} 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203