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
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
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
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() {
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) {
94
95 if (currPage >= maxPages - 1) {
97 }
98 if (currPage <= 0) {
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
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
176 }
177}
static SettingsAPI getSettings()
Definition Global.java:57
static GameState getCurrentState()
Definition Global.java:27
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)
void setPlugin(InteractionDialogPlugin plugin)
void addOption(String text, Object data)
void setEnabled(Object data, boolean enabled)
void expire(String key, float days)
void set(String key, Object value)