1package com.fs.starfarer.api.impl.campaign.intel.punitive;
6import org.lwjgl.input.Keyboard;
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CampaignFleetAPI;
10import com.fs.starfarer.api.campaign.FactionAPI;
11import com.fs.starfarer.api.campaign.InteractionDialogAPI;
12import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
13import com.fs.starfarer.api.campaign.OptionPanelAPI;
14import com.fs.starfarer.api.campaign.RepLevel;
15import com.fs.starfarer.api.campaign.TextPanelAPI;
16import com.fs.starfarer.api.campaign.VisualPanelAPI;
17import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin.ReputationAdjustmentResult;
18import com.fs.starfarer.api.campaign.rules.MemoryAPI;
19import com.fs.starfarer.api.combat.EngagementResultAPI;
20import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin;
21import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
22import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
23import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
24import com.fs.starfarer.api.impl.campaign.ids.Factions;
25import com.fs.starfarer.api.impl.campaign.ids.Sounds;
26import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionIntel.PunExOutcome;
27import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager.PunExData;
28import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
29import com.fs.starfarer.api.impl.campaign.rulecmd.SetStoryOption;
30import com.fs.starfarer.api.ui.IntelUIAPI;
31import com.fs.starfarer.api.ui.TooltipMakerAPI;
32import com.fs.starfarer.api.util.Misc;
36 private static enum OptionId {
50 public static RepLevel
MIN_REP = RepLevel.WELCOMING;
53 protected InteractionDialogAPI
dialog;
61 protected IntelUIAPI
ui;
76 visual.setVisualFade(0.25f, 0.25f);
80 dialog.setOptionOnEscape(
"Leave", OptionId.LEAVE);
96 if (data !=
null) numAttempts = data.numAttempts;
98 int bribe = (int) (Math.pow(2, numAttempts) *
BRIBE_MULT);
106 Color tc = Misc.getTextColor();
107 FactionAPI faction =
intel.getFaction();
112 textPanel.addPara(
"Sufficient funding allocated to proper official and unofficial actors should " +
113 "ensure that the expedition does not go beyond the planning stages.");
115 int credits = (int)
playerFleet.getCargo().getCredits().get();
116 Color costColor = Misc.getHighlightColor();
117 if (bribe > credits) costColor = Misc.getNegativeHighlightColor();
119 textPanel.addPara(
"A total of %s should be enough to get the job done, and will also " +
120 "ensure that your standing with " + faction.getDisplayNameWithArticle() +
123 Misc.getDGSCredits(bribe));
125 textPanel.addPara(
"You have %s available.", Misc.getHighlightColor(),
126 Misc.getDGSCredits(credits));
129 case USE_CONNECTIONS:
130 boolean canUseConnections = faction.isAtWorst(Factions.PLAYER,
MIN_REP);
131 if (canUseConnections) {
132 textPanel.addPara(
"You can use your connections to pull a few strings and ensure the operation " +
133 "never gets beyond the planning stages.");
135 textPanel.addPara(
"You do not have sufficient connections with " + faction.getPersonNamePrefix() +
136 " officials to stall out this kind of an operation.");
142 if (canUseConnections) {
143 textPanel.addPara(
"Calling in these favors will reduce your " +
144 "standing with " + faction.getDisplayNameWithArticle() +
" by %s points.",
145 Misc.getHighlightColor(),
"" + (int) Math.round(
REP_COST * 100f));
155 options.addOption(
"Allocate sufficient funds for bribes and other means of disrupting the planning", OptionId.BRIBE,
null);
156 options.addOption(
"Use your connections to disrupt the planning", OptionId.USE_CONNECTIONS,
null);
158 dialog.setOptionColor(OptionId.BRIBE, Misc.getStoryOptionColor());
160 options.addOption(
"Dismiss", OptionId.LEAVE,
null);
161 options.setShortcut(OptionId.LEAVE, Keyboard.KEY_ESCAPE,
false,
false,
false,
true);
166 options.addOption(
"Dismiss", OptionId.LEAVE,
null);
167 options.setShortcut(OptionId.LEAVE, Keyboard.KEY_ESCAPE,
false,
false,
false,
true);
178 options.addOption(
"Take the necessary actions", OptionId.CONFIRM,
null);
179 options.addOption(
"Never mind", OptionId.CANCEL,
null);
180 options.setShortcut(OptionId.CANCEL, Keyboard.KEY_ESCAPE,
false,
false,
false,
true);
184 SetStoryOption.set(
dialog, 1, OptionId.CONFIRM,
"bribePunitiveExpedition", Sounds.STORY_POINT_SPEND_INDUSTRY,
185 "Issued bribe to avert " +
intel.getFaction().getDisplayName() +
" punitive expedition");
188 if (bribe >
playerFleet.getCargo().getCredits().get()) {
189 options.setEnabled(OptionId.CONFIRM,
false);
190 options.setTooltip(OptionId.CONFIRM,
"Not enough credits.");
193 FactionAPI faction =
intel.getFaction();
194 boolean canUseConnections = faction.isAtWorst(Factions.PLAYER,
MIN_REP);
195 if (!canUseConnections) {
196 options.setEnabled(OptionId.CONFIRM,
false);
197 options.setTooltip(OptionId.CONFIRM,
"Standing not high enough.");
204 TooltipMakerAPI info =
textPanel.beginTooltip();
205 info.setParaSmallInsignia();
209 textPanel.addPara(
"The operation is still in the planning stages, " +
210 "and you have several options at your disposal to ensure it never gets off the ground.");
214 if (optionData ==
null)
return;
216 OptionId option = (OptionId) optionData;
220 dialog.addOptionSelectedText(option);
232 case USE_CONNECTIONS:
239 AddRemoveCommodity.addCreditsLossText(bribe,
textPanel);
240 playerFleet.getCargo().getCredits().subtract(bribe);
242 CustomRepImpact impact =
new CustomRepImpact();
244 ReputationAdjustmentResult repResult =
Global.
getSector().adjustPlayerReputation(
245 new RepActionEnvelope(RepActions.CUSTOM,
247 intel.getFaction().getId());
249 intel.getOrganizeStage().abort();
251 intel.forceFail(
false);
static SectorAPI getSector()
static void addRequiredStanding(FactionAPI faction, RepLevel req, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad, boolean orBetter)
static void addCurrentStanding(FactionAPI faction, PersonAPI person, TextPanelAPI panel, TooltipMakerAPI info, Color tc, float pad)
void optionMousedOver(String optionText, Object optionData)
void backFromEngagement(EngagementResultAPI result)
void printOptionDesc(OptionId option)
PEAvertInteractionDialogPluginImpl(PunitiveExpeditionIntel intel, IntelUIAPI ui)
PunitiveExpeditionIntel intel
void init(InteractionDialogAPI dialog)
void advance(float amount)
CampaignFleetAPI playerFleet
void optionSelected(String text, Object optionData)
InteractionDialogAPI dialog
Map< String, MemoryAPI > getMemoryMap()
void addInitialDescSection(TooltipMakerAPI info, float initPad)
static final Object OUTCOME_UPDATE
void setOutcome(PunExOutcome outcome)
PunExData getDataFor(FactionAPI faction)
static PunitiveExpeditionManager getInstance()