28 public static class StoryOptionParams {
29 public Object optionId;
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;
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;
52 public BaseOptionStoryPointActionDelegate(InteractionDialogAPI dialog, StoryOptionParams params) {
53 this.optionId = params.optionId;
56 this.numPoints = params.numPoints;
57 this.soundId = params.soundId;
58 this.logText = params.logText;
61 public void preConfirm() {
62 if (dialog !=
null) dialog.addOptionSelectedText(optionId,
true);
65 public void confirm() {
68 public void createDescription(TooltipMakerAPI info) {
70 info.setParaInsigniaLarge();
72 addActionCostSection(info);
77 protected void addActionCostSection(TooltipMakerAPI info) {
82 int percent = Math.round(bonusXPFraction * 100f);
86 info.addPara(
"This action requires a %s and does not grant any bonus experience.",
87 pad, Misc.getStoryOptionColor(),
"" + Misc.STORY +
" point");
89 info.addPara(
"This action requires a %s and grants %s bonus experience.",
90 pad, Misc.getStoryOptionColor(),
"" + Misc.STORY +
" point",
"" + percent +
"%");
94 info.addPara(
"This action requires %s and does not grant any bonus experience.",
95 pad, Misc.getStoryOptionColor(),
"" + numPoints +
" " + Misc.STORY +
" points");
97 info.addPara(
"This action requires %s and grants %s bonus experience for each point.",
98 pad, Misc.getStoryOptionColor(),
"" + numPoints +
" " + Misc.STORY +
" points",
"" + percent +
"%");
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);
114 public float getBonusXPFraction() {
115 return bonusXPFraction;
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";
129 public int getRequiredStoryPoints() {
133 public String getLogText() {
137 public TextPanelAPI getTextPanel() {
138 if (dialog ==
null)
return null;
139 return dialog.getTextPanel();
142 public String getTitle() {
147 public boolean withSPInfo() {
152 public static boolean set(String ruleId, InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap, String params) {
156 public boolean execute(String ruleId,
final InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
157 if (dialog ==
null)
return false;
162 String optionId =
"";
163 String bonusXPID =
"";
165 String logText =
null;
167 if (params.size() == 3) {
168 optionId = params.get(0).string;
170 bonusXPID = optionId;
171 soundId = params.get(1).string;
172 logText = params.get(2).getStringWithTokenReplacement(params.get(2).getString(memoryMap), dialog, memoryMap);
174 optionId = params.get(0).string;
175 numPoints = (int) params.get(1).getFloat(memoryMap);
176 bonusXPID = params.get(2).getString(memoryMap);
179 soundId = params.size() >= 4 ? params.get(3).string :
null;
186 if (params.size() >= 5) {
188 logText = params.get(4).getStringWithTokenReplacement(params.get(4).getString(memoryMap), dialog, memoryMap);
192 return set(dialog, numPoints, optionId, bonusXPID, soundId, logText);
196 public static boolean set(
final InteractionDialogAPI dialog,
final int numPoints,
197 final Object optionId, String bonusXPID,
final String soundId, String logText) {
199 StoryOptionParams params =
new StoryOptionParams(optionId, numPoints, bonusXPID, soundId, logText);
200 return set(dialog, params,
new BaseOptionStoryPointActionDelegate(dialog, params));
202 public static boolean set(
final InteractionDialogAPI dialog,
final StoryOptionParams params,
203 StoryPointActionDelegate delegate) {
206 dialog.makeStoryOption(params.optionId, params.numPoints, bonusXPFraction, params.soundId);
208 if (params.numPoints >
Global.
getSector().getPlayerStats().getStoryPoints()) {
209 dialog.getOptionPanel().setEnabled(params.optionId,
false);
212 dialog.getOptionPanel().addOptionTooltipAppender(params.optionId,
new OptionTooltipCreator() {
213 public void createTooltip(TooltipMakerAPI tooltip,
boolean hadOtherText) {
216 if (hadOtherText) initPad = opad;
217 tooltip.addStoryPointUseInfo(initPad, params.numPoints, bonusXPFraction,
true);
219 String points =
"points";
220 if (sp == 1) points =
"point";
221 tooltip.addPara(
"You have %s " + Misc.STORY +
" " + points +
".", opad,
222 Misc.getStoryOptionColor(),
"" + sp);
226 dialog.getOptionPanel().addOptionConfirmation(params.optionId, delegate);
228 dialog.getOptionPanel().setStoryOptionParams(params.optionId, params, delegate);
boolean execute(String ruleId, final InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)