001package com.fs.starfarer.api.impl.campaign.tutorial;
002
003import java.util.Map;
004
005import com.fs.starfarer.api.Global;
006import com.fs.starfarer.api.campaign.CampaignFleetAPI;
007import com.fs.starfarer.api.campaign.InteractionDialogAPI;
008import com.fs.starfarer.api.campaign.InteractionDialogPlugin;
009import com.fs.starfarer.api.campaign.OptionPanelAPI;
010import com.fs.starfarer.api.campaign.TextPanelAPI;
011import com.fs.starfarer.api.campaign.VisualPanelAPI;
012import com.fs.starfarer.api.campaign.PersistentUIDataAPI.AbilitySlotsAPI;
013import com.fs.starfarer.api.campaign.econ.MarketAPI;
014import com.fs.starfarer.api.campaign.rules.MemoryAPI;
015import com.fs.starfarer.api.combat.EngagementResultAPI;
016import com.fs.starfarer.api.impl.campaign.ids.Abilities;
017import com.fs.starfarer.api.impl.campaign.rulecmd.AddRemoveCommodity;
018import com.fs.starfarer.api.loading.AbilitySpecAPI;
019import com.fs.starfarer.api.util.Misc;
020
021public class TutorialSustainedBurnDialogPluginImpl implements InteractionDialogPlugin {
022
023        public static enum OptionId {
024                INIT,
025                CONT1,
026                CONT2,
027                CONT3,
028                ;
029        }
030        
031        protected InteractionDialogAPI dialog;
032        protected TextPanelAPI textPanel;
033        protected OptionPanelAPI options;
034        protected VisualPanelAPI visual;
035        
036        protected CampaignFleetAPI playerFleet;
037        
038        protected MarketAPI ancyra;
039        
040        public TutorialSustainedBurnDialogPluginImpl(MarketAPI ancyra) {
041                this.ancyra = ancyra;
042        }
043
044        public void init(InteractionDialogAPI dialog) {
045                this.dialog = dialog;
046                textPanel = dialog.getTextPanel();
047                options = dialog.getOptionPanel();
048                visual = dialog.getVisualPanel();
049
050                playerFleet = Global.getSector().getPlayerFleet();
051                
052                //visual.showImagePortion("illustrations", "jump_point_hyper", 640, 400, 0, 0, 480, 300);
053                visual.showFleetInfo("Your fleet", playerFleet, null, null);
054        
055                //dialog.setOptionOnEscape("Leave", OptionId.LEAVE);
056                
057                optionSelected(null, OptionId.INIT);
058        }
059        
060        public Map<String, MemoryAPI> getMemoryMap() {
061                return null;
062        }
063        
064        public void backFromEngagement(EngagementResultAPI result) {
065                // no combat here, so this won't get called
066        }
067        
068        public void optionSelected(String text, Object optionData) {
069                if (optionData == null) return;
070                
071                OptionId option = (OptionId) optionData;
072                
073                if (text != null) {
074                        //textPanel.addParagraph(text, Global.getSettings().getColor("buttonText"));
075                        dialog.addOptionSelectedText(option);
076                }
077                
078                
079                String name = ancyra.getName();
080                
081                switch (option) {
082                case INIT:
083                        textPanel.addParagraph(name + " is pretty far away, and it'll take a while to get there at this rate.");
084                        
085                        options.clearOptions();
086                        options.addOption("Continue", OptionId.CONT1, null);
087                        break;
088                case CONT1:
089                        AbilitySpecAPI ability = Global.getSettings().getAbilitySpec(Abilities.SUSTAINED_BURN);
090                        textPanel.addPara("The %s ability is useful for long-distance travel. " +
091                                        "Activating it will briefly stop the fleet and reduce its acceleration to a minimum, " +
092                                        "but the maximum burn level will be much higher. A sustained burn can be interrupted " +
093                                        "by other fleets activating an interdiction pulse.",
094                                                          Misc.getHighlightColor(),
095                                                          "\"" + ability.getName() + "\"");
096                        
097                        Global.getSector().getCharacterData().addAbility(ability.getId());
098                        AbilitySlotsAPI slots = Global.getSector().getUIData().getAbilitySlotsAPI();
099                        slots.setCurrBarIndex(0);
100                        
101                        int slotIndex = 4;
102                        slots.getCurrSlotsCopy().get(slotIndex).setAbilityId(ability.getId());
103                        AddRemoveCommodity.addAbilityGainText(ability.getId(), textPanel);
104                        
105                        Global.getSector().getCharacterData().addAbility(Abilities.INTERDICTION_PULSE);
106                        slots.getCurrSlotsCopy().get(6).setAbilityId(Abilities.INTERDICTION_PULSE);
107                        AddRemoveCommodity.addAbilityGainText(Abilities.INTERDICTION_PULSE, textPanel);
108                        
109                        options.clearOptions();
110                        options.addOption("Continue", OptionId.CONT2, null);
111                        
112                        break;
113                case CONT2:
114                        ability = Global.getSettings().getAbilitySpec(Abilities.SUSTAINED_BURN);
115                        
116                        String control = Global.getSettings().getControlStringForEnumName("FAST_FORWARD");
117                        
118                        textPanel.addPara("Activate %s to get to " + name + " more quickly.",
119                                        Misc.getHighlightColor(),
120                                        "\"" + ability.getName() + "\"");
121                        
122                        textPanel.addPara("You can also press and hold %s to speed up time.",
123                                        Misc.getHighlightColor(),
124                                        "\"" + control + "\"");
125                        
126                        options.clearOptions();
127                        options.addOption("Finish", OptionId.CONT3, null);
128                        break;
129                case CONT3:                     
130                        Global.getSector().setPaused(false);
131                        dialog.dismiss();
132                        break;
133                }
134        }
135        
136
137        
138        
139        public void optionMousedOver(String optionText, Object optionData) {
140
141        }
142        
143        public void advance(float amount) {
144                
145        }
146        
147        public Object getContext() {
148                return null;
149        }
150}
151
152
153