1package com.fs.starfarer.api.impl.campaign;
4import java.util.HashMap;
7import com.fs.starfarer.api.Global;
8import com.fs.starfarer.api.campaign.CampaignFleetAPI;
9import com.fs.starfarer.api.campaign.InteractionDialogAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
11import com.fs.starfarer.api.campaign.OptionPanelAPI;
12import com.fs.starfarer.api.campaign.RuleBasedDialog;
13import com.fs.starfarer.api.campaign.TextPanelAPI;
14import com.fs.starfarer.api.campaign.VisualPanelAPI;
15import com.fs.starfarer.api.campaign.econ.MarketAPI;
16import com.fs.starfarer.api.campaign.events.CampaignEventPlugin;
17import com.fs.starfarer.api.campaign.rules.MemKeys;
18import com.fs.starfarer.api.campaign.rules.MemoryAPI;
19import com.fs.starfarer.api.campaign.rules.RulesAPI;
20import com.fs.starfarer.api.characters.PersonAPI;
21import com.fs.starfarer.api.combat.EngagementResultAPI;
22import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
23import com.fs.starfarer.api.impl.campaign.rulecmd.DismissDialog;
24import com.fs.starfarer.api.impl.campaign.rulecmd.DumpMemory;
25import com.fs.starfarer.api.impl.campaign.rulecmd.FireAll;
26import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
27import com.fs.starfarer.api.util.Misc;
40 private InteractionDialogAPI dialog;
41 private TextPanelAPI textPanel;
42 private OptionPanelAPI options;
43 private VisualPanelAPI visual;
45 private RulesAPI rules;
46 private MemoryAPI memory;
48 private CampaignFleetAPI playerFleet;
52 private boolean embeddedMode =
false;
54 this.embeddedMode = embeddedMode;
57 private final String initialTrigger;
60 this(
"OpenInteractionDialog");
63 this.initialTrigger = initialTrigger;
67 public void reinit(
boolean withContinueOnRuleFound) {
71 public void init(InteractionDialogAPI dialog) {
74 textPanel = dialog.getTextPanel();
75 options = dialog.getOptionPanel();
76 visual = dialog.getVisualPanel();
81 visual.setVisualFade(0.25f, 0.25f);
90 if (!options.hasOptions()) {
91 options.clearOptions();
101 if (memoryMap ==
null) {
102 memoryMap =
new HashMap<String, MemoryAPI>();
106 memory = dialog.getInteractionTarget().getMemory();
108 memoryMap.put(MemKeys.LOCAL, memory);
109 if (dialog.getInteractionTarget().getFaction() !=
null) {
110 memoryMap.put(MemKeys.FACTION, dialog.getInteractionTarget().getFaction().getMemory());
115 memoryMap.put(MemKeys.PLAYER,
Global.
getSector().getCharacterData().getMemory());
117 if (dialog.getInteractionTarget().getMarket() !=
null) {
118 memoryMap.put(MemKeys.MARKET, dialog.getInteractionTarget().getMarket().getMemory());
121 if (memory.contains(MemFlags.MEMORY_KEY_SOURCE_MARKET)) {
122 String marketId = memory.getString(MemFlags.MEMORY_KEY_SOURCE_MARKET);
123 MarketAPI market =
Global.
getSector().getEconomy().getMarket(marketId);
124 if (market !=
null) {
125 memoryMap.put(MemKeys.SOURCE_MARKET, market.getMemory());
129 updatePersonMemory();
132 private void updatePersonMemory() {
133 PersonAPI person = dialog.getInteractionTarget().getActivePerson();
139 if (person !=
null) {
140 memory = person.getMemory();
141 memoryMap.put(MemKeys.LOCAL, memory);
142 memoryMap.put(MemKeys.PERSON_FACTION, person.getFaction().getMemory());
143 memoryMap.put(MemKeys.ENTITY, dialog.getInteractionTarget().getMemory());
145 memory = dialog.getInteractionTarget().getMemory();
146 memoryMap.put(MemKeys.LOCAL, memory);
147 memoryMap.remove(MemKeys.ENTITY);
148 memoryMap.remove(MemKeys.PERSON_FACTION);
155 updatePersonMemory();
159 if (mission ==
null) {
160 memoryMap.remove(MemKeys.MISSION);
162 MemoryAPI memory = mission.getMemory();
163 if (memory !=
null) {
164 memoryMap.put(MemKeys.MISSION, memory);
166 memoryMap.remove(MemKeys.MISSION);
173 return FireAll.fire(
null, dialog, memoryMap, trigger);
177 return FireBest.fire(
null, dialog, memoryMap, trigger);
185 if (optionData ==
null || !(optionData instanceof String))
return;
187 String optionId = (String) optionData;
191 dialog.addOptionSelectedText(optionData);
195 new DismissDialog().execute(
null, dialog,
null, memoryMap);
199 if (optionId == DumpMemory.OPTION_ID) {
200 new DumpMemory().execute(
null, dialog,
null, memoryMap);
207 memory.set(
"$option", optionId);
208 memory.expire(
"$option", 0);
210 boolean foundRule =
fireBest(
"DialogOptionSelected");
211 if (!foundRule && !dialog.isCurrentOptionHadAConfirm()) {
212 textPanel.addPara(
"ERROR: no rule found for option " + optionId +
213 ", adding a failsafe option to exit dialog.", Misc.getNegativeHighlightColor());
214 textPanel.addPara(
"Note: this may break any mission interaction in the current dialog, "
215 +
"it's recommended that you reload an earlier save if you use this option.");
216 textPanel.highlightInLastPara(Misc.getNegativeHighlightColor(),
"recommended that you reload an earlier save");
223 private String lastOptionMousedOver =
null;
224 private Map<String, MemoryAPI> memoryMap;
235 private void addText(String text) {
236 if (text ==
null || text.isEmpty())
return;
238 textPanel.addParagraph(text);
241 private void appendText(String text) {
242 textPanel.appendToLastParagraph(
" " + text);
static SettingsAPI getSettings()
static FactoryAPI getFactory()
static SectorAPI getSector()
Map< String, MemoryAPI > getMemoryMap()
void backFromEngagement(EngagementResultAPI result)
void setEmbeddedMode(boolean embeddedMode)
RuleBasedInteractionDialogPluginImpl(String initialTrigger)
void optionMousedOver(String optionText, Object optionData)
RuleBasedInteractionDialogPluginImpl()
void optionSelected(String text, Object optionData)
static final String FAILSAFE_LEAVE
void setActiveMission(CampaignEventPlugin mission)
void reinit(boolean withContinueOnRuleFound)
boolean fireBest(String trigger)
boolean fireAll(String trigger)
void init(InteractionDialogAPI dialog)
void advance(float amount)
void notifyActivePersonChanged()
Color getColor(String id)