1package com.fs.starfarer.api.impl.campaign.rulecmd;
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.rules.ExpressionAPI;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.campaign.rules.Option;
14import com.fs.starfarer.api.campaign.rules.RuleAPI;
15import com.fs.starfarer.api.campaign.rules.RulesAPI;
16import com.fs.starfarer.api.impl.campaign.DevMenuOptions;
17import com.fs.starfarer.api.util.Misc;
18import com.fs.starfarer.api.util.Misc.Token;
19import com.fs.starfarer.api.util.Misc.VarAndMemory;
23 public static class OptionAdder {
27 this.expression = expression;
29 public OptionAdder(
Option option) {
33 public int getOrder(Map<String, MemoryAPI> memoryMap) {
35 return (
int) option.
order;
37 if (expression !=
null) {
43 public void add(String ruleId,
InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
49 }
else if (expression !=
null) {
50 expression.
execute(ruleId, dialog, memoryMap);
60 private Map<String, MemoryAPI> memoryMap;
65 this.memoryMap = memoryMap;
66 String trigger = params.get(0).string;
67 if (params.get(0).isVariable()) {
68 VarAndMemory var = params.get(0).getVarNameAndMemory(memoryMap);
74 mem.
set(
"$fireAllTrigger", trigger, 0);
75 boolean intercepted =
FireBest.
fire(
null, dialog, memoryMap,
"FireAllIntercept");
82 List<RuleAPI> matches = rules.
getAllMatching(ruleId, trigger, dialog, memoryMap);
83 if (matches.isEmpty())
return false;
85 List<OptionAdder> options =
new ArrayList<OptionAdder>();
88 for (
Option option : rule.getOptions()) {
90 options.add(
new OptionAdder(option));
96 if (e.doesCommandAddOptions()) {
97 options.add(
new OptionAdder(e));
102 if (!options.isEmpty()) {
103 Collections.sort(options,
new Comparator<OptionAdder>() {
104 public int compare(OptionAdder o1, OptionAdder o2) {
105 float diff = o1.getOrder(memoryMap) - o2.getOrder(memoryMap);
106 if (diff < 0)
return -1;
107 if (diff > 0)
return 1;
113 for (OptionAdder option : options) {
115 option.add(ruleId, dialog, params, memoryMap);
129 private void applyRule(
RuleAPI rule) {
134 private void addText(String ruleId, String text) {
135 if (text ==
null || text.isEmpty())
return;
static SettingsAPI getSettings()
static SectorAPI getSector()
static MemoryAPI getEntityMemory(Map< String, MemoryAPI > memoryMap)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, final Map< String, MemoryAPI > memoryMap)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
static List< Token > tokenize(String string)
TextPanelAPI getTextPanel()
SectorEntityToken getInteractionTarget()
OptionPanelAPI getOptionPanel()
void addOption(String text, Object data)
LabelAPI addParagraph(String text)
int getOptionOrder(Map< String, MemoryAPI > memoryMap)
Object execute(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
String getString(String key)
void set(String key, Object value)
void runScript(InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)
String performTokenReplacement(String ruleId, String text, SectorEntityToken entity, Map< String, MemoryAPI > memoryMap)
List< RuleAPI > getAllMatching(String currentRule, String trigger, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap)