001package com.fs.starfarer.api.impl.campaign.missions; 002 003import java.awt.Color; 004import java.util.List; 005import java.util.Map; 006 007import com.fs.starfarer.api.EveryFrameScript; 008import com.fs.starfarer.api.Global; 009import com.fs.starfarer.api.campaign.InteractionDialogAPI; 010import com.fs.starfarer.api.campaign.TextPanelAPI; 011import com.fs.starfarer.api.campaign.econ.MarketAPI; 012import com.fs.starfarer.api.campaign.rules.MemoryAPI; 013import com.fs.starfarer.api.characters.PersonAPI; 014import com.fs.starfarer.api.impl.campaign.eventide.DuelDialogDelegate; 015import com.fs.starfarer.api.impl.campaign.eventide.DuelPanel; 016import com.fs.starfarer.api.impl.campaign.ids.People; 017import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithSearch; 018import com.fs.starfarer.api.ui.TooltipMakerAPI; 019import com.fs.starfarer.api.util.Misc; 020import com.fs.starfarer.api.util.Misc.Token; 021 022public class SwordOfEventide extends HubMissionWithSearch { 023 024// public void init(CustomPanelAPI panel, DialogCallbacks callbacks) { 025// this.callbacks = callbacks; 026// callbacks.getPanelFader().setDurationOut(2f); 027// duelPanel.init(panel, callbacks, dialog); 028// if (musicId != null && !musicId.isEmpty()) { 029// Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true); 030// Global.getSoundPlayer().playCustomMusic(1, 1, musicId); 031// } else { 032// Global.getSoundPlayer().pauseMusic(); 033// Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true); 034// } 035// } 036// public void reportDismissed(int option) { 037// Global.getSoundPlayer().setSuspendDefaultMusicPlayback(false); 038// Global.getSoundPlayer().restartCurrentMusic(); 039 040 public static String SOE_MUSIC_STATE = "$soe_musicState"; 041 public static String SOE_STATE_PARTY = "party"; 042 public static String SOE_STATE_PRE_DUEL = "pre_duel"; 043 public static String SOE_STATE_DUEL = "duel"; 044 public static String SOE_STATE_POST_DUEL = "post_duel"; 045 046 public static String PARTY_CHATTER = "soe_party_chatter"; 047 public static String PARTY_MUSIC = "music_soe_party"; 048 public static String DUEL_MUSIC = "music_soe_fight"; 049 050 public static class SOEMusicPlayer implements EveryFrameScript { 051 public boolean done = false; 052 public String currState = null; 053 054 public SOEMusicPlayer() { 055 } 056 public void advance(float amount) { 057 String state = Global.getSector().getMemoryWithoutUpdate().getString(SOE_MUSIC_STATE); 058 if (state != null && !state.equals(currState)) { 059 if (SOE_STATE_PARTY.equals(state)) { 060 Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true); 061 Global.getSoundPlayer().playCustomMusic(1, 1, PARTY_MUSIC, true); 062 } else if (SOE_STATE_PRE_DUEL.equals(state)) { 063 Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true); 064 Global.getSoundPlayer().pauseCustomMusic(); 065 } else if (SOE_STATE_DUEL.equals(state)) { 066 Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true); 067 Global.getSoundPlayer().playCustomMusic(1, 1, DUEL_MUSIC, true); 068 } else if (SOE_STATE_POST_DUEL.equals(state)) { 069 Global.getSoundPlayer().setSuspendDefaultMusicPlayback(true); 070 Global.getSoundPlayer().pauseCustomMusic(); 071 } 072 currState = state; 073 } 074 075 if (SOE_STATE_PARTY.equals(state)) { 076 Global.getSoundPlayer().playUILoop(PARTY_CHATTER, 1f, 1f); 077 } else if (SOE_STATE_PRE_DUEL.equals(state)) { 078 Global.getSoundPlayer().playUILoop(PARTY_CHATTER, 1f, 0.5f); 079 } 080 081 if (!Global.getSector().isPaused()) { 082 stop(); 083 } 084 } 085 public boolean isDone() { 086 return done; 087 } 088 public boolean runWhilePaused() { 089 return true; 090 } 091 public void stop() { 092 done = true; 093 Global.getSoundPlayer().setSuspendDefaultMusicPlayback(false); 094 Global.getSoundPlayer().restartCurrentMusic(); 095 } 096 } 097 098 099 public static enum Stage { 100 GO_TO_EVENTIDE, 101 COMPLETED, 102 } 103 104 protected PersonAPI neriene_rao; // neriene rao 105 protected PersonAPI caspian_sang; // caspian sang 106 protected PersonAPI orcus_rao; // orcus rao 107 108 protected MarketAPI eventide; 109 //protected MarketAPI chicomoztoc; 110 111 public static float MISSION_DAYS = 120f; 112 113 @Override 114 protected boolean create(MarketAPI createdAt, boolean barEvent) { 115 // if already accepted by the player, abort 116 if (!setGlobalReference("$soe_ref","$soe_inProgress")) { 117 return false; 118 } 119 120 neriene_rao = getImportantPerson(People.NERIENE_RAO); 121 if (neriene_rao == null) return false; 122 caspian_sang = getImportantPerson(People.CASPIAN); 123 if (caspian_sang == null) return false; 124 orcus_rao = getImportantPerson(People.RAO); 125 if (orcus_rao == null) return false; 126 127 eventide = Global.getSector().getEconomy().getMarket("eventide"); 128 if (eventide == null) return false; 129 130 setStartingStage(Stage.GO_TO_EVENTIDE); 131 addSuccessStages(Stage.COMPLETED); 132 133 setStoryMission(); 134 135 makeImportant(eventide, "$soe_invitedToBall", Stage.GO_TO_EVENTIDE); 136 //setStageOnMemoryFlag(Stage.COMPLETED, baird.getMarket(), "$gaTTB_completed"); 137 138 setStageOnGlobalFlag(Stage.COMPLETED, "$soe_completed"); 139 140 setRepFactionChangesNone(); 141 setRepPersonChangesNone(); 142 143 beginStageTrigger(Stage.GO_TO_EVENTIDE); 144 triggerSetGlobalMemoryValuePermanent("$didEventideRaoBall", true); 145 endTrigger(); 146 147 return true; 148 } 149 150 protected void updateInteractionDataImpl() { 151 152 } 153 154 protected SOEMusicPlayer player = null; 155 @Override 156 protected boolean callAction(String action, String ruleId, final InteractionDialogAPI dialog, 157 List<Token> params, final Map<String, MemoryAPI> memoryMap) { 158 if ("THEDUEL".equals(action)) { 159 TextPanelAPI text = dialog.getTextPanel(); 160// text.setFontOrbitronUnnecessarilyLarge(); 161// Color color = Misc.getBasePlayerColor(); 162// color = Global.getSector().getFaction(Factions.HEGEMONY).getBaseUIColor(); 163// text.addPara("THE DUEL", color); 164// text.setFontInsignia(); 165 text.addImage("misc", "THEDUEL"); 166 return true; 167 } else if ("addMusicPlayer".equals(action)) { 168 if (!Global.getSector().hasTransientScript(SOEMusicPlayer.class)) { 169 player = new SOEMusicPlayer(); 170 Global.getSector().addTransientScript(player); 171 Global.getSector().getMemoryWithoutUpdate().set(SOE_MUSIC_STATE, SOE_STATE_PARTY); 172 } 173 return true; 174 } else if ("cleanUpMusicPlayer".equals(action)) { 175 if (player != null) { 176 player.stop();; 177 } 178 return true; 179 } else if ("crowdGasp".equals(action)) { 180 Global.getSoundPlayer().playUISound("soe_crowd_gasp", 1f, 1f); 181 Global.getSector().getMemoryWithoutUpdate().set(SOE_MUSIC_STATE, SOE_STATE_PRE_DUEL); 182 return true; 183 } else if ("postDuel".equals(action)) { 184 Global.getSector().getMemoryWithoutUpdate().set(SOE_MUSIC_STATE, SOE_STATE_POST_DUEL); 185 return true; 186 } else if ("beginDuel".equals(action)) { 187 Global.getSector().getMemoryWithoutUpdate().set(SOE_MUSIC_STATE, SOE_STATE_DUEL); 188 189 boolean playerSkilled = false; 190 if (params.size() >= 2) { 191 playerSkilled = params.get(1).getBoolean(memoryMap); 192 } 193 final DuelPanel duelPanel = DuelPanel.createDefault(playerSkilled, true, "soe_ambience"); 194 dialog.showCustomVisualDialog(1024, 700, new DuelDialogDelegate(null, duelPanel, dialog, memoryMap, false)); 195 return true; 196 } else if ("beginTutorial".equals(action)) { 197 boolean playerSkilled = false; 198 if (params.size() >= 2) { 199 playerSkilled = params.get(1).getBoolean(memoryMap); 200 } 201 final DuelPanel duelPanel = DuelPanel.createTutorial(playerSkilled, "soe_ambience"); 202 dialog.showCustomVisualDialog(1024, 700, new DuelDialogDelegate(null, duelPanel, dialog, memoryMap, true)); 203 return true; 204 } 205 return super.callAction(action, ruleId, dialog, params, memoryMap); 206 } 207 208 @Override 209 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) { 210 float opad = 10f; 211 Color h = Misc.getHighlightColor(); 212 if (currentStage == Stage.GO_TO_EVENTIDE) { 213 info.addPara("Go to Eventide in the Samarra system.", opad); 214 } 215 } 216 217 @Override 218 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) { 219 Color h = Misc.getHighlightColor(); 220 if (currentStage == Stage.GO_TO_EVENTIDE) { 221 info.addPara("Go to Eventide in the Samarra system", tc, pad); 222 return true; 223 } 224 return false; 225 } 226 227 @Override 228 public String getBaseName() { 229 return "Princess of Persea"; 230 } 231 232 @Override 233 public String getPostfixForState() { 234 if (startingStage != null) { 235 return ""; 236 } 237 return super.getPostfixForState(); 238 } 239} 240 241 242 243 244