Starsector API
Loading...
Searching...
No Matches
SetStoryOption.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.rulecmd;
2
3import java.util.List;
4import java.util.Map;
5
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.BaseStoryPointActionDelegate;
8import com.fs.starfarer.api.campaign.InteractionDialogAPI;
9import com.fs.starfarer.api.campaign.OptionPanelAPI.OptionTooltipCreator;
10import com.fs.starfarer.api.campaign.StoryPointActionDelegate;
11import com.fs.starfarer.api.campaign.TextPanelAPI;
12import com.fs.starfarer.api.campaign.rules.MemoryAPI;
13import com.fs.starfarer.api.ui.TooltipMakerAPI;
14import com.fs.starfarer.api.util.Misc;
15import com.fs.starfarer.api.util.Misc.Token;
16
20public class SetStoryOption extends BaseCommandPlugin {
21
22// public static boolean set(InteractionDialogAPI dialog, int points,
23// String optionId, String bonusXPKey, String soundId) {
24// return set(null, dialog, null, optionId + " " + points + " " + bonusXPKey + " " + soundId);
25//
26// }
27
28 public static class StoryOptionParams {
29 public Object optionId;
30 public int numPoints;
31 public String bonusXPID;
32 public String soundId;
33 public String logText;
34 public StoryOptionParams(Object optionId, int numPoints, String bonusXPID, String soundId, String logText) {
35 this.optionId = optionId;
36 this.numPoints = numPoints;
37 this.bonusXPID = bonusXPID;
38 this.soundId = soundId;
39 this.logText = logText;
40 }
41
42 }
43
44 public static class BaseOptionStoryPointActionDelegate extends BaseStoryPointActionDelegate {
45 protected Object optionId;
46 protected float bonusXPFraction;
47 protected InteractionDialogAPI dialog;
48 protected int numPoints;
49 protected String soundId;
50 protected String logText;
51
52 public BaseOptionStoryPointActionDelegate(InteractionDialogAPI dialog, StoryOptionParams params) {
53 this.optionId = params.optionId;
54 this.bonusXPFraction = Global.getSettings().getBonusXP(params.bonusXPID);
55 this.dialog = dialog;
56 this.numPoints = params.numPoints;
57 this.soundId = params.soundId;
58 this.logText = params.logText;
59 }
60 @Override
61 public void preConfirm() {
62 if (dialog != null) dialog.addOptionSelectedText(optionId, true);
63 }
64 @Override
65 public void confirm() {
66 }
67 @Override
68 public void createDescription(TooltipMakerAPI info) {
69 //info.setParaSmallInsignia();
70 info.setParaInsigniaLarge();
71
72 addActionCostSection(info);
73
74 info.addSpacer(20f);
75 }
76
77 protected void addActionCostSection(TooltipMakerAPI info) {
78
79 int sp = Global.getSector().getPlayerStats().getStoryPoints();
80 float pad = -10f;
81 float opad = 10f;
82 int percent = Math.round(bonusXPFraction * 100f);
83
84 if (numPoints == 1) {
85 if (percent <= 0) {
86 info.addPara("This action requires a %s and does not grant any bonus experience.",
87 pad, Misc.getStoryOptionColor(), "" + Misc.STORY + " point");
88 } else {
89 info.addPara("This action requires a %s and grants %s bonus experience.",
90 pad, Misc.getStoryOptionColor(), "" + Misc.STORY + " point", "" + percent + "%");
91 }
92 } else {
93 if (percent <= 0) {
94 info.addPara("This action requires %s and does not grant any bonus experience.",
95 pad, Misc.getStoryOptionColor(), "" + numPoints + " " + Misc.STORY + " points");
96 } else {
97 info.addPara("This action requires %s and grants %s bonus experience for each point.",
98 pad, Misc.getStoryOptionColor(), "" + numPoints + " " + Misc.STORY + " points", "" + percent + "%");
99 }
100 }
101
102 if (sp <= 0) {
103 info.addPara("No " + Misc.STORY + " points available", Misc.getNegativeHighlightColor(), opad);
104 } else if (sp < numPoints) {
105 String points = "points";
106 if (sp == 1) points = "point";
107 info.addPara("Only %s " + Misc.STORY + " " + points + " available", opad, Misc.getNegativeHighlightColor(),
108 Misc.getNegativeHighlightColor(), "" + sp);
109 }
110 //info.addSpacer(opad);
111 }
112
113 @Override
114 public float getBonusXPFraction() {
115 return bonusXPFraction;
116 }
117 @Override
118 public String getConfirmSoundId() {
119 String soundId = this.soundId;
120 if ("leadership".equals(soundId)) soundId = "ui_char_spent_story_point_leadership";
121 if ("combat".equals(soundId)) soundId = "ui_char_spent_story_point_combat";
122 if ("industry".equals(soundId)) soundId = "ui_char_spent_story_point_industry";
123 if ("technology".equals(soundId)) soundId = "ui_char_spent_story_point_technology";
124 if ("general".equals(soundId)) soundId = "ui_char_spent_story_point_combat";
125 if ("generic".equals(soundId)) soundId = "ui_char_spent_story_point_combat";
126 return soundId;
127 }
128 @Override
129 public int getRequiredStoryPoints() {
130 return numPoints;
131 }
132 //@Override
133 public String getLogText() {
134 return logText;
135 }
136 @Override
137 public TextPanelAPI getTextPanel() {
138 if (dialog == null) return null;
139 return dialog.getTextPanel();
140 }
141 @Override
142 public String getTitle() {
143 return null;
144 //return "Confirm use of story points";
145 }
146 @Override
147 public boolean withSPInfo() {
148 return false;
149 }
150 }
151
152 public static boolean set(String ruleId, InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap, String params) {
153 return new SetStoryOption().execute(ruleId, dialog, Misc.tokenize(params), memoryMap);
154 }
155
156 public boolean execute(String ruleId, final InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
157 if (dialog == null) return false;
158
159 //SetStoryOption gaData_getAvoidCombat 1 gaData_avoidCombat general "Created a distraction"
160 //SetStoryOption gaData_getAvoidCombat general "Created a distraction"
161
162 String optionId = "";
163 String bonusXPID = "";
164 String soundId = "";
165 String logText = null;
166 int numPoints = 1;
167 if (params.size() == 3) {
168 optionId = params.get(0).string;
169 numPoints = 1;
170 bonusXPID = optionId;
171 soundId = params.get(1).string;
172 logText = params.get(2).getStringWithTokenReplacement(params.get(2).getString(memoryMap), dialog, memoryMap);
173 } else {
174 optionId = params.get(0).string;
175 numPoints = (int) params.get(1).getFloat(memoryMap);
176 bonusXPID = params.get(2).getString(memoryMap);
177 //final float bonusXPFraction = params.get(2).getFloat(memoryMap);
178
179 soundId = params.size() >= 4 ? params.get(3).string : null;
180 // if ("leadership".equals(soundId)) soundId = "ui_char_spent_story_point_leadership";
181 // if ("combat".equals(soundId)) soundId = "ui_char_spent_story_point_combat";
182 // if ("industry".equals(soundId)) soundId = "ui_char_spent_story_point_industry";
183 // if ("technology".equals(soundId)) soundId = "ui_char_spent_story_point_technology";
184 // if ("general".equals(soundId)) soundId = "ui_char_spent_story_point_combat";
185
186 if (params.size() >= 5) {
187 //logText = params.get(4).getString(memoryMap);
188 logText = params.get(4).getStringWithTokenReplacement(params.get(4).getString(memoryMap), dialog, memoryMap);
189 }
190 }
191
192 return set(dialog, numPoints, optionId, bonusXPID, soundId, logText);
193 }
194
195
196 public static boolean set(final InteractionDialogAPI dialog, final int numPoints,
197 final Object optionId, String bonusXPID, final String soundId, String logText) {
198 //final float bonusXPFraction = Global.getSettings().getBonusXP(bonusXPID);
199 StoryOptionParams params = new StoryOptionParams(optionId, numPoints, bonusXPID, soundId, logText);
200 return set(dialog, params, new BaseOptionStoryPointActionDelegate(dialog, params));
201 }
202 public static boolean set(final InteractionDialogAPI dialog, final StoryOptionParams params,
203 StoryPointActionDelegate delegate) {
204
205 final float bonusXPFraction = Global.getSettings().getBonusXP(params.bonusXPID);
206 dialog.makeStoryOption(params.optionId, params.numPoints, bonusXPFraction, params.soundId);
207
208 if (params.numPoints > Global.getSector().getPlayerStats().getStoryPoints()) {
209 dialog.getOptionPanel().setEnabled(params.optionId, false);
210 }
211
212 dialog.getOptionPanel().addOptionTooltipAppender(params.optionId, new OptionTooltipCreator() {
213 public void createTooltip(TooltipMakerAPI tooltip, boolean hadOtherText) {
214 float opad = 10f;
215 float initPad = 0f;
216 if (hadOtherText) initPad = opad;
217 tooltip.addStoryPointUseInfo(initPad, params.numPoints, bonusXPFraction, true);
218 int sp = Global.getSector().getPlayerStats().getStoryPoints();
219 String points = "points";
220 if (sp == 1) points = "point";
221 tooltip.addPara("You have %s " + Misc.STORY + " " + points + ".", opad,
222 Misc.getStoryOptionColor(), "" + sp);
223 }
224 });
225
226 dialog.getOptionPanel().addOptionConfirmation(params.optionId, delegate);
227
228 dialog.getOptionPanel().setStoryOptionParams(params.optionId, params, delegate);
229
230 return true;
231 }
232
233}
static SettingsAPI getSettings()
Definition Global.java:51
static SectorAPI getSector()
Definition Global.java:59
boolean execute(String ruleId, final InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)