001package com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special; 002 003import java.util.Map; 004import java.util.Random; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.CampaignFleetAPI; 008import com.fs.starfarer.api.campaign.CargoAPI; 009import com.fs.starfarer.api.campaign.InteractionDialogAPI; 010import com.fs.starfarer.api.campaign.OptionPanelAPI; 011import com.fs.starfarer.api.campaign.SectorEntityToken; 012import com.fs.starfarer.api.campaign.TextPanelAPI; 013import com.fs.starfarer.api.campaign.VisualPanelAPI; 014import com.fs.starfarer.api.campaign.rules.MemoryAPI; 015import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 016import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 017import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageSpecialInteraction.SalvageSpecialPlugin; 018import com.fs.starfarer.api.util.Misc; 019 020public class BaseSalvageSpecial implements SalvageSpecialPlugin { 021 022 public static final String EXTRA_SALVAGE = "$extraSpecialSalvage"; 023 public static final String TEMP_EXTRA_SALVAGE = "$tempExtraSpecialSalvage"; 024 public static class ExtraSalvage { 025 public CargoAPI cargo; 026 public ExtraSalvage(CargoAPI cargo) { 027 this.cargo = cargo; 028 } 029 } 030 031 protected boolean done = false; 032 protected boolean endWithContinue = true; 033 protected InteractionDialogAPI dialog; 034 protected Random random; 035 protected SectorEntityToken entity; 036 037 protected TextPanelAPI text; 038 protected OptionPanelAPI options; 039 protected VisualPanelAPI visual; 040 protected Map<String, MemoryAPI> memoryMap; 041 042 protected CampaignFleetAPI playerFleet; 043 044 protected void addTempExtraSalvage(CargoAPI cargo) { 045 ExtraSalvage extra = getTempExtraSalvage(memoryMap); 046 if (extra == null) { 047 extra = new ExtraSalvage(cargo); 048 } else { 049 extra.cargo.addAll(cargo); 050 } 051 MemoryAPI memory = BaseCommandPlugin.getEntityMemory(dialog.getPlugin().getMemoryMap()); 052 memory.set(TEMP_EXTRA_SALVAGE, extra, 0f); 053 } 054 055 public static void addExtraSalvage(SectorEntityToken entity, CargoAPI cargo) { 056 addExtraSalvage(cargo, entity.getMemoryWithoutUpdate(), -1); 057 } 058 public static void addExtraSalvage(CargoAPI cargo, MemoryAPI memory, float expire) { 059 ExtraSalvage extra = getExtraSalvage(memory); 060 if (extra == null) { 061 extra = new ExtraSalvage(cargo); 062 } else { 063 extra.cargo.addAll(cargo); 064 } 065 memory.set(EXTRA_SALVAGE, extra, expire); 066 } 067 068 public static CargoAPI getCombinedExtraSalvage(Map<String, MemoryAPI> memoryMap) { 069 ExtraSalvage extra = getExtraSalvage(memoryMap); 070 ExtraSalvage temp = getTempExtraSalvage(memoryMap); 071 CargoAPI cargo = Global.getFactory().createCargo(true); 072 if (extra != null && extra.cargo != null) cargo.addAll(extra.cargo); 073 if (temp != null && temp.cargo != null) cargo.addAll(temp.cargo); 074 return cargo; 075 } 076 public static CargoAPI getCombinedExtraSalvage(SectorEntityToken entity) { 077 ExtraSalvage extra = getExtraSalvage(entity); 078 ExtraSalvage temp = getTempExtraSalvage(entity); 079 CargoAPI cargo = Global.getFactory().createCargo(true); 080 if (extra != null && extra.cargo != null) cargo.addAll(extra.cargo); 081 if (temp != null && temp.cargo != null) cargo.addAll(temp.cargo); 082 return cargo; 083 } 084 public static ExtraSalvage getTempExtraSalvage(SectorEntityToken entity) { 085 return getTempExtraSalvage(entity.getMemoryWithoutUpdate()); 086 } 087 public static ExtraSalvage getExtraSalvage(SectorEntityToken entity) { 088 return getExtraSalvage(entity.getMemoryWithoutUpdate()); 089 } 090 public static ExtraSalvage getExtraSalvage(MemoryAPI memory) { 091 if (memory.contains(EXTRA_SALVAGE)) { 092 return (ExtraSalvage) memory.get(EXTRA_SALVAGE); 093 } 094 return null; 095 } 096 public static ExtraSalvage getTempExtraSalvage(MemoryAPI memory) { 097 if (memory.contains(TEMP_EXTRA_SALVAGE)) { 098 return (ExtraSalvage) memory.get(TEMP_EXTRA_SALVAGE); 099 } 100 return null; 101 } 102 public static ExtraSalvage getTempExtraSalvage(Map<String, MemoryAPI> memoryMap) { 103 MemoryAPI memory = BaseCommandPlugin.getEntityMemory(memoryMap); 104 return getTempExtraSalvage(memory); 105 } 106 public static ExtraSalvage getExtraSalvage(Map<String, MemoryAPI> memoryMap) { 107 MemoryAPI memory = BaseCommandPlugin.getEntityMemory(memoryMap); 108 return getExtraSalvage(memory); 109 } 110 public static void clearExtraSalvage(Map<String, MemoryAPI> memoryMap) { 111 MemoryAPI memory = BaseCommandPlugin.getEntityMemory(memoryMap); 112 clearExtraSalvage(memory); 113 } 114 public static void clearExtraSalvage(MemoryAPI memory) { 115 memory.unset(EXTRA_SALVAGE); 116 memory.unset(TEMP_EXTRA_SALVAGE); 117 } 118 public static void clearExtraSalvage(SectorEntityToken entity) { 119 clearExtraSalvage(entity.getMemoryWithoutUpdate()); 120 } 121 122 public void init(InteractionDialogAPI dialog, Object specialData) { 123 this.dialog = dialog; 124 125 playerFleet = Global.getSector().getPlayerFleet(); 126 127 text = dialog.getTextPanel(); 128 options = dialog.getOptionPanel(); 129 visual = dialog.getVisualPanel(); 130 memoryMap = dialog.getPlugin().getMemoryMap(); 131 132 entity = dialog.getInteractionTarget(); 133 134 MemoryAPI memory = BaseCommandPlugin.getEntityMemory(dialog.getPlugin().getMemoryMap()); 135 long seed = memory.getLong(MemFlags.SALVAGE_SEED); 136 if (seed == 0) { 137 random = new Random(); 138 } else { 139 random = Misc.getRandom(seed, 50); 140 } 141 } 142 143 public void optionSelected(String optionText, Object optionData) { 144 145 } 146 147 public void initNothing() { 148 setDone(true); 149 setEndWithContinue(false); 150 setShowAgain(false); 151 } 152 153 public boolean isDone() { 154 return done; 155 } 156 157 public void setDone(boolean done) { 158 this.done = done; 159 } 160 161 public boolean endWithContinue() { 162 return endWithContinue; 163 } 164 165 public void setEndWithContinue(boolean endWithContinue) { 166 this.endWithContinue = endWithContinue; 167 } 168 169 public String getString(String format) { 170 return Misc.getStringWithTokenReplacement(format, entity, memoryMap); 171 } 172 173 public void addText(String format) { 174 text.addParagraph(getString(format)); 175 } 176 177 private boolean showAgain = false; 178 public boolean shouldShowAgain() { 179 return showAgain; 180 } 181 182 public void setShowAgain(boolean showAgain) { 183 this.showAgain = showAgain; 184 } 185 186 private boolean shouldAbortSalvageAndRemoveEntity; 187 public boolean shouldAbortSalvageAndRemoveEntity() { 188 return shouldAbortSalvageAndRemoveEntity; 189 } 190 191 public void setShouldAbortSalvageAndRemoveEntity(boolean shouldAbortSalvageAndRemoveEntity) { 192 this.shouldAbortSalvageAndRemoveEntity = shouldAbortSalvageAndRemoveEntity; 193 } 194 195 196} 197 198 199