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