1package com.fs.starfarer.api.impl.campaign.rulecmd.missions;
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
8import java.util.Random;
10import org.lwjgl.input.Keyboard;
12import com.fs.starfarer.api.EveryFrameScript;
13import com.fs.starfarer.api.Global;
14import com.fs.starfarer.api.campaign.InteractionDialogAPI;
15import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
16import com.fs.starfarer.api.campaign.SectorEntityToken;
17import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
18import com.fs.starfarer.api.campaign.econ.MarketAPI;
19import com.fs.starfarer.api.campaign.rules.MemKeys;
20import com.fs.starfarer.api.campaign.rules.MemoryAPI;
21import com.fs.starfarer.api.characters.ImportantPeopleAPI;
22import com.fs.starfarer.api.characters.PersonAPI;
23import com.fs.starfarer.api.combat.EngagementResultAPI;
24import com.fs.starfarer.api.impl.campaign.DebugFlags;
25import com.fs.starfarer.api.impl.campaign.DevMenuOptions;
26import com.fs.starfarer.api.impl.campaign.RuleBasedInteractionDialogPluginImpl;
27import com.fs.starfarer.api.impl.campaign.intel.bar.BarEventDialogPlugin;
28import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarData;
29import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarEvent;
30import com.fs.starfarer.api.impl.campaign.intel.bar.events.BarEventManager;
31import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel;
32import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionBarEventWrapper;
33import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
34import com.fs.starfarer.api.impl.campaign.rulecmd.DumpMemory;
35import com.fs.starfarer.api.impl.campaign.rulecmd.FireAll;
36import com.fs.starfarer.api.impl.campaign.rulecmd.FireBest;
37import com.fs.starfarer.api.impl.campaign.rulecmd.ShowDefaultVisual;
38import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.AddBarEvent;
39import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.AddBarEvent.BarEventData;
40import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
41import com.fs.starfarer.api.util.FaderUtil;
42import com.fs.starfarer.api.util.Misc;
43import com.fs.starfarer.api.util.Misc.Token;
44import com.fs.starfarer.api.util.WeightedRandomPicker;
61 public String soundId =
"bar_ambience";
62 public float pitch = 1f;
63 public float volume = 1f;
64 public float musicSuppression = 0.95f;
65 public boolean done =
false;
68 public BarAmbiencePlayer(
MarketAPI market) {
75 public void advance(
float amount) {
83 public boolean isDone() {
86 public boolean runWhilePaused() {
97 if (
dialog ==
null)
return false;
99 String command = params.get(0).getString(
memoryMap);
100 if (command ==
null)
return false;
103 if (command.equals(
"returnFromEvent")) {
106 mem.
unset(
"$BarCMD");
118 boolean withContinue = params.size() > 1 && params.get(1).getBoolean(
memoryMap);
122 }
else if (command.equals(
"accept")) {
126 String missionId = params.get(1).getString(
memoryMap);
133 }
else if (command.equals(
"leaveBar")) {
136 }
else if (command.equals(
"playAmbience")) {
153 if (command.equals(
"showOptions")) {
182 for (
int i = min; i <= max; i++) {
186 int num = numPicker.
pick();
196 List<PortsideBarEvent> events =
new ArrayList<PortsideBarEvent>();
197 String key =
"$BarCMD_shownEvents";
199 boolean needToSaveShown =
false;
201 List<String> eventIds = (List<String>) mem.
get(key);
202 for (String
id : eventIds) {
209 if (
id.equals(event.getBarEventId())) {
214 num = Math.max(eventIds.size(), num);
217 Collections.shuffle(events, random);
218 needToSaveShown =
true;
221 boolean addedSomething =
false;
227 for (
int i = 0; i < max && i < temp.size(); i++) {
228 BarEventData b = temp.get(i);
229 if (!b.blurb.isEmpty()) {
233 if (b.optionColor !=
null) {
236 addedSomething =
true;
239 List<String> shown =
new ArrayList<String>();
255 Collections.sort(events,
new Comparator<PortsideBarEvent>() {
259 if (p1 && !p2)
return -1;
260 if (p2 && !p1)
return 1;
269 if (curr + temp.size() >= max)
break;
276 if (event.shouldRemoveEvent())
continue;
277 if (!event.shouldShowAtMarket(market))
continue;
286 event.wasShownAtMarket(market);
288 if (event.getBarEventId() !=
null) {
289 shown.add(event.getBarEventId());
292 addedSomething =
true;
294 if (!event.isAlwaysShow()) {
297 if (curr >= num)
break;
303 if (needToSaveShown) {
306 mem.
set(key, shown, time);
310 if (!addedSomething) {
314 "a few minutes before deciding what to do next.");
331 if (optionText !=
null) {
344 String optionId =
null;
345 if (optionData instanceof String) {
346 optionId = (String) optionData;
357 }
else if (
"barLeave".equals(optionData)) {
359 }
else if (
"barContinue".equals(optionData)) {
361 }
else if (optionData instanceof String) {
371 eMem.
set(
"$BarCMD",
this, 0f);
376 if (person !=
null) {
387 mem.
set(
"$option", (String) optionData, 0f);
434 if (script instanceof BarAmbiencePlayer) {
435 return (BarAmbiencePlayer) script;
444 if (player !=
null) {
static SettingsAPI getSettings()
static SoundPlayerAPI getSoundPlayer()
static SectorAPI getSector()
static final String LOCAL
void init(InteractionDialogAPI dialog)
void notifyWasInteractedWith(PortsideBarEvent event)
static BarEventManager getInstance()
long getSeed(SectorEntityToken entity, PersonAPI person, String extra)
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static final String OPTION_ID
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void returningFromEvent(boolean withContinue)
void abortMissions(String optionId)
void optionSelected(String optionText, Object optionData)
void showOptions(boolean returningFromEvent)
void backFromEngagement(EngagementResultAPI battleResult)
static float BAR_EVENT_MIN_TIME_BEFORE_CHANGING
Map< String, MemoryAPI > memoryMap
static BarAmbiencePlayer getAmbiencePlayer()
Map< String, MemoryAPI > getMemoryMap()
HubMissionBarEventWrapper getWrapperFor(String optionId)
void returningFromEvent(PortsideBarEvent event)
InteractionDialogPlugin originalPlugin
void advance(float amount)
static float BAR_EVENT_MAX_TIME_BEFORE_CHANGING
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, final Map< String, MemoryAPI > memoryMap)
void init(InteractionDialogAPI dialog)
void optionMousedOver(String optionText, Object optionData)
InteractionDialogAPI dialog
static TempBarEvents getTempEvents(MarketAPI market)
static void clearTempEvents(MarketAPI market)
static boolean isTutorialInProgress()
void advance(float amount)
static List< Token > tokenize(String string)
float getFloat(String key)
void playUILoop(String id, float pitch, float volume)
void suppressMusic(float maxLevel)
void setPlugin(InteractionDialogPlugin plugin)
void setOptionColor(Object optionId, Color color)
TextPanelAPI getTextPanel()
VisualPanelAPI getVisualPanel()
InteractionDialogPlugin getPlugin()
SectorEntityToken getInteractionTarget()
void addOptionSelectedText(Object optionId)
OptionPanelAPI getOptionPanel()
void addOption(String text, Object data)
void setShortcut(Object data, int code, boolean ctrl, boolean alt, boolean shift, boolean putLast)
List< EveryFrameScript > getTransientScripts()
boolean hasTransientScript(Class<?> clazz)
IntelManagerAPI getIntelManager()
CampaignUIAPI getCampaignUI()
void addTransientScript(EveryFrameScript script)
ImportantPeopleAPI getImportantPeople()
void setActivePerson(PersonAPI activePerson)
LabelAPI addPara(String text)
void restoreSavedVisual()
void showPersonInfo(PersonAPI person)
List< IntelInfoPlugin > getIntel()
MemoryAPI getMemoryWithoutUpdate()
boolean contains(String key)
void set(String key, Object value)
void excludeFromGetPerson(PersonAPI person)
void resetExcludeFromGetPerson()
String getTriggerPrefix()
void accept(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)