Starsector API
Loading...
Searching...
No Matches
PaginatedOptions.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Map;
6
7import com.fs.starfarer.api.GameState;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.InteractionDialogAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
11import com.fs.starfarer.api.campaign.rules.MemKeys;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.combat.EngagementResultAPI;
14import com.fs.starfarer.api.impl.campaign.DevMenuOptions;
15import com.fs.starfarer.api.util.Misc.Token;
16
17// Alex's version + added optionsAllPages function and NGC handling
18public class PaginatedOptions extends BaseCommandPlugin implements InteractionDialogPlugin {
19
20 public static String OPTION_NEXT_PAGE = "core_option_next_page";
21 public static String OPTION_PREV_PAGE = "core_option_prev_page";
22
23 public static class PaginatedOption {
24 public String text;
25 public String id;
26 public PaginatedOption(String text, String id) {
27 this.text = text;
28 this.id = id;
29 }
30 }
31
32 protected InteractionDialogPlugin originalPlugin;
33 protected InteractionDialogAPI dialog;
34 protected Map<String, MemoryAPI> memoryMap;
35
36 protected List<PaginatedOption> options = new ArrayList<PaginatedOption>();
37 protected List<PaginatedOption> optionsAllPages = new ArrayList<PaginatedOption>();
38 protected int optionsPerPage = 5;
39 protected int currPage = 0;
40 protected boolean withSpacers = true;
41
42 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, final Map<String, MemoryAPI> memoryMap) {
43 this.dialog = dialog;
44 this.memoryMap = memoryMap;
45
46 originalPlugin = dialog.getPlugin();
47
48 dialog.setPlugin(this);
49 init(dialog);
50
51 for (int i = 0; i < params.size(); i += 2) {
52 String text = params.get(i).getString(memoryMap);
53 String id = params.get(i + 1).getString(memoryMap);
54 addOption(text, id);
55 }
56 if (params.size() > 0) {
57 showOptions();
58 }
59
60 return true;
61 }
62
63 public void addOption(String text, String id) {
64 options.add(new PaginatedOption(text, id));
65 }
66
67 public void addOptionAllPages(String text, String id) {
68 optionsAllPages.add(new PaginatedOption(text, id));
69 }
70
71 public void showOptions() {
72 dialog.getOptionPanel().clearOptions();
73
74 int maxPages = (int) Math.ceil((float)options.size() / (float)optionsPerPage);
75 if (currPage > maxPages - 1) currPage = maxPages - 1;
76 if (currPage < 0) currPage = 0;
77
78 int start = currPage * optionsPerPage;
79 for (int i = start; i < start + optionsPerPage; i++) {
80 if (i >= options.size()) {
81 if (maxPages > 1 && withSpacers) {
82 dialog.getOptionPanel().addOption("", "spacer" + i);
83 dialog.getOptionPanel().setEnabled("spacer" + i, false);
84 }
85 } else {
86 PaginatedOption option = options.get(i);
87 dialog.getOptionPanel().addOption(option.text, option.id);
88 }
89 }
90
91 if (maxPages > 1) {
92 dialog.getOptionPanel().addOption(getPreviousPageText(), OPTION_PREV_PAGE);
93 dialog.getOptionPanel().addOption(getNextPageText(), OPTION_NEXT_PAGE);
94
95 if (currPage >= maxPages - 1) {
96 dialog.getOptionPanel().setEnabled(OPTION_NEXT_PAGE, false);
97 }
98 if (currPage <= 0) {
99 dialog.getOptionPanel().setEnabled(OPTION_PREV_PAGE, false);
100 }
101 }
102
103 for (PaginatedOption option : optionsAllPages) {
104 dialog.getOptionPanel().addOption(option.text, option.id);
105 }
106
107 if (Global.getSettings().isDevMode()) {
109 }
110 }
111
112 public String getPreviousPageText() {
113 return "Previous page";
114 }
115
116 public String getNextPageText() {
117 return "Next page";
118 }
119
120 public boolean isNewGameDialog() {
121 //return false;
123 }
124
125 public void optionSelected(String optionText, Object optionData) {
126 if (optionData == OPTION_PREV_PAGE) {
127 currPage--;
128 showOptions();
129 return;
130 }
131 if (optionData == OPTION_NEXT_PAGE) {
132 currPage++;
133 showOptions();
134 return;
135 }
136
137 if (optionText != null) {
138 dialog.getTextPanel().addParagraph(optionText, Global.getSettings().getColor("buttonText"));
139 }
140
141 if (optionData == DumpMemory.OPTION_ID) {
142 new DumpMemory().execute(null, dialog, null, getMemoryMap());
143 return;
144 } else if (DevMenuOptions.isDevOption(optionData)) {
145 DevMenuOptions.execute(dialog, (String) optionData);
146 return;
147 }
148
149 dialog.setPlugin(originalPlugin);
150 MemoryAPI memory = dialog.getInteractionTarget().getMemory();
151 memory.set("$option", optionData);
152 memory.expire("$option", 0);
153 memoryMap.get(MemKeys.LOCAL).set("$option", optionData, 0); // needed to make it work in conversations
154 boolean fired = FireBest.fire(null, dialog, memoryMap, isNewGameDialog() ? "NewGameOptionSelected" : "DialogOptionSelected");
155 if (!fired) {
156 dialog.setPlugin(this); // failsafe for selecting an option with no matching rule
157 }
158 }
159
160
161
162 public void advance(float amount) {
163 }
164 public void backFromEngagement(EngagementResultAPI battleResult) {
165 }
166 public Object getContext() {
167 return null;
168 }
169 public Map<String, MemoryAPI> getMemoryMap() {
170 return memoryMap;
171 }
172 public void optionMousedOver(String optionText, Object optionData) {
173 }
174
175 public void init(InteractionDialogAPI dialog) {
176 }
177}
static SettingsAPI getSettings()
Definition Global.java:51
static GameState getCurrentState()
Definition Global.java:21
static void execute(InteractionDialogAPI dialog, String option)
static boolean isDevOption(Object optionData)
static void addOptions(InteractionDialogAPI dialog)
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
static boolean fire(String ruleId, InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, String params)
Definition FireBest.java:56
boolean execute(String ruleId, InteractionDialogAPI dialog, List< Token > params, final Map< String, MemoryAPI > memoryMap)
void optionSelected(String optionText, Object optionData)
void optionMousedOver(String optionText, Object optionData)