001package com.fs.starfarer.api.impl.campaign.rulecmd.missions; 002 003import java.util.List; 004import java.util.Map; 005 006import com.fs.starfarer.api.EveryFrameScript; 007import com.fs.starfarer.api.Global; 008import com.fs.starfarer.api.campaign.InteractionDialogAPI; 009import com.fs.starfarer.api.campaign.PlanetAPI; 010import com.fs.starfarer.api.campaign.SectorEntityToken; 011import com.fs.starfarer.api.campaign.rules.MemoryAPI; 012import com.fs.starfarer.api.impl.campaign.intel.misc.LuddicShrineIntel; 013import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 014import com.fs.starfarer.api.util.Misc.Token; 015 016/** 017 * ShrineCMD <command> <parameters> 018 * 019 * <optional id - either market, or entity> 020 */ 021public class ShrineCMD extends BaseCommandPlugin { 022 023 024 public static class ShrineMusicStopFailsafe implements EveryFrameScript { 025 public boolean done = false; 026 public String musicId; 027 028 public ShrineMusicStopFailsafe(String musicId) { 029 this.musicId = musicId; 030 } 031 public void advance(float amount) { 032 if (!Global.getSector().isPaused()) { 033 if (musicId.equals(Global.getSoundPlayer().getCurrentMusicId())) { 034 Global.getSoundPlayer().restartCurrentMusic(); 035 } 036 done = true; 037 } 038 } 039 public boolean isDone() { 040 return done; 041 } 042 public boolean runWhilePaused() { 043 return false; 044 } 045 } 046 047 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 048 if (dialog == null) return false; 049 050 String command = params.get(0).getString(memoryMap); 051 if (command == null) return false; 052 053 SectorEntityToken entity = dialog.getInteractionTarget(); 054 if (entity.getMarket() != null && !entity.getMarket().isPlanetConditionMarketOnly()) { 055 PlanetAPI planet = entity.getMarket().getPlanetEntity(); 056 if (planet != null) { 057 entity = planet; 058 } 059 } 060 if ("addIntel".equals(command)) { 061 if (params.size() > 1) { 062 String id = params.get(1).getString(memoryMap); 063 entity = LuddicShrineIntel.getEntity(id); 064 } 065 LuddicShrineIntel.addShrineIntelIfNeeded(entity, dialog.getTextPanel()); 066 return true; 067 } else if ("setVisited".equals(command)) { 068 if (params.size() > 1) { 069 String id = params.get(1).getString(memoryMap); 070 entity = LuddicShrineIntel.getEntity(id); 071 } 072 LuddicShrineIntel.addShrineIntelIfNeeded(entity, dialog.getTextPanel(), true); 073 LuddicShrineIntel.setVisited(entity, dialog.getTextPanel()); 074 return true; 075 } else if ("playMusic".equals(command)) { 076 String shrineMusic = "music_luddite_shrine"; 077 Global.getSoundPlayer().playCustomMusic(1, 1, shrineMusic, true); 078 // failsafe is not actually necessary; leaving the entity will give the music player a kick anyway 079// if (!Global.getSector().hasScript(ShrineMusicStopFailsafe.class)) { 080// Global.getSector().addScript(new ShrineMusicStopFailsafe(shrineMusic)); 081// } 082 } else if ("endMusic".equals(command)) { 083 Global.getSoundPlayer().restartCurrentMusic(); 084 } 085 086 return false; 087 } 088} 089 090 091 092 093 094 095 096 097 098