Starsector API
Loading...
Searching...
No Matches
FireBest.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.ArrayList;
4import java.util.Collections;
5import java.util.Comparator;
6import java.util.List;
7import java.util.Map;
8
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.impl.campaign.rulecmd.FireAll.OptionAdder;
18import com.fs.starfarer.api.util.Misc;
19import com.fs.starfarer.api.util.Misc.Token;
20import com.fs.starfarer.api.util.Misc.VarAndMemory;
21
22public class FireBest extends BaseCommandPlugin {
23
24
25 protected InteractionDialogAPI dialog;
26 protected Map<String, MemoryAPI> memoryMap;
27 protected List<Token> params;
28 protected String ruleId;
29 protected boolean keepOptions = false;
30
31 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
32
33 this.ruleId = ruleId;
34 this.dialog = dialog;
35 this.params = params;
36 this.memoryMap = memoryMap;
37 String trigger = params.get(0).string;
38 if (params.get(0).isVariable()) {
39 VarAndMemory var = params.get(0).getVarNameAndMemory(memoryMap);
40 trigger = var.memory.getString(var.name);
41 }
42 if (params.size() > 1) {
43 keepOptions = params.get(1).getBoolean(memoryMap);
44 }
45
46 RulesAPI rules = Global.getSector().getRules();
47 RuleAPI rule = rules.getBestMatching(ruleId, trigger, dialog, memoryMap);
48
49 if (rule == null) return false;
50
51 applyRule(rule);
52
53 return true;
54 }
55
56 public static boolean fire(String ruleId, InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap, String params) {
57 return new FireBest().execute(ruleId, dialog, Misc.tokenize(params), memoryMap);
58 }
59
60 private void applyRule(RuleAPI rule) {
61// if (!rule.getOptions().isEmpty()) {
62// dialog.getOptionPanel().clearOptions();
63// for (Option option : rule.getOptions()) {
64// dialog.getOptionPanel().addOption(option.text, option.id, null);
65// }
66// if (Global.getSettings().isDevMode()) {
67// DumpMemory.addOption(dialog);
68// }
69// }
70
71 List<OptionAdder> options = new ArrayList<OptionAdder>();
72 for (Option option : rule.getOptions()) {
73 if (option.id.startsWith("(dev)") && !Global.getSettings().isDevMode()) continue;
74 options.add(new OptionAdder(option));
75 }
76 for (ExpressionAPI e : rule.getScriptCopy()) {
77 if (e.doesCommandAddOptions()) {
78 options.add(new OptionAdder(e));
79 }
80 }
81
82 if (!options.isEmpty()) {
83 Collections.sort(options, new Comparator<OptionAdder>() {
84 public int compare(OptionAdder o1, OptionAdder o2) {
85 float diff = o1.getOrder(memoryMap) - o2.getOrder(memoryMap);
86 if (diff < 0) return -1;
87 if (diff > 0) return 1;
88 return 0;
89 }
90 });
91
92 if (!keepOptions) {
93 dialog.getOptionPanel().clearOptions();
94 }
95 for (OptionAdder option : options) {
96 option.add(ruleId, dialog, params, memoryMap);
97 }
98 if (!keepOptions) {
99 if (Global.getSettings().isDevMode()) {
100 DevMenuOptions.addOptions(dialog);
101 }
102 }
103 }
104
105 addText(rule.getId(), rule.pickText());
106 rule.runScript(dialog, memoryMap);
107 }
108
109 private void addText(String ruleId, String text) {
110 if (text == null || text.isEmpty()) return;
111
112
113 text = Global.getSector().getRules().performTokenReplacement(ruleId, text, dialog.getInteractionTarget(), memoryMap);
114// Map<String, String> tokens = Global.getSector().getRules().getTokenReplacements(ruleId, dialog.getInteractionTarget(), memoryMap);
115// for (String token : tokens.keySet()) {
116// String value = tokens.get(token);
117// text = text.replaceAll("(?s)\\" + token, value);
118// }
119//
120// text = Misc.replaceTokensFromMemory(text, memoryMap);
121
122 dialog.getTextPanel().addParagraph(text);
123 }
124}
125
126
127
128
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
Definition FireBest.java:31
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
Definition FireBest.java:56