001package com.fs.starfarer.api.impl.campaign;
002
003import java.awt.Color;
004import java.util.HashSet;
005import java.util.List;
006import java.util.Set;
007
008import org.lwjgl.input.Keyboard;
009
010import com.fs.starfarer.api.Global;
011import com.fs.starfarer.api.campaign.InteractionDialogAPI;
012import com.fs.starfarer.api.campaign.RepLevel;
013import com.fs.starfarer.api.campaign.SectorEntityToken;
014import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
015import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
016import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
017import com.fs.starfarer.api.impl.campaign.ids.Factions;
018import com.fs.starfarer.api.impl.campaign.rulecmd.DumpMemory;
019import com.fs.starfarer.api.util.Misc;
020
021public class DevMenuOptions {
022        
023        public static String TOP_MENU = "DMO_top";
024        
025        public static String REP_MENU = "DMO_rep";
026        public static String MUSIC_MENU = "DMO_music";
027        public static String BACK_TO_OPTIONS = "DMO_top_back";
028        public static String BACK_TO_TOP = "DMO_rep_back";
029        
030        public static String INCREASE_REP = "DMO_increase_rep";
031        public static String REDUCE_REP = "DMO_reduce_rep";
032        public static String PRINT_REP = "DMO_print_rep";
033        
034        public static String MUSIC_PRINT = "DMO_print_current";
035        public static String MUSIC_RESTART = "DMO_music_restart";
036        
037        public static Set<String> options = new HashSet<String>();
038        
039        static {
040                options.add(TOP_MENU);
041                options.add(REP_MENU);
042                options.add(MUSIC_MENU);
043                options.add(BACK_TO_OPTIONS);
044                options.add(BACK_TO_TOP);
045                
046                options.add(INCREASE_REP);
047                options.add(REDUCE_REP);
048                options.add(PRINT_REP);
049                
050                options.add(MUSIC_PRINT);
051                options.add(MUSIC_RESTART);
052        }
053        
054        public static boolean isDevOption(Object optionData) {
055                return options.contains(optionData);
056        }
057        
058        public static void addOptions(InteractionDialogAPI dialog) {
059                DumpMemory.addOption(dialog);
060                dialog.getOptionPanel().addOption(">> (dev) options", TOP_MENU, Misc.getGrayColor(), null);
061                
062                savedOptions = dialog.getOptionPanel().getSavedOptionList();
063        }
064        
065        
066        public static List savedOptions = null;
067        
068        public static void execute(InteractionDialogAPI dialog, String option) {
069                SectorEntityToken entity = dialog.getInteractionTarget();
070                Color g = Misc.getGrayColor();
071                if (option == TOP_MENU) {
072                        dialog.getOptionPanel().clearOptions();
073                        dialog.getOptionPanel().addOption(">>> (dev) reputation", REP_MENU, g, null);
074                        dialog.getOptionPanel().addOption(">>> (dev) music", MUSIC_MENU, g, null);
075                        dialog.getOptionPanel().addOption(">>> (dev) back", BACK_TO_OPTIONS, g, null);
076                        dialog.getOptionPanel().setShortcut(BACK_TO_OPTIONS, Keyboard.KEY_ESCAPE, false, false, false, true);
077                } else if (option == REP_MENU) {
078                        
079                        //System.out.println("Go dark active: " +dialog.getInteractionTarget().getAbility(Abilities.GO_DARK).isActive());
080                        
081                        dialog.getOptionPanel().clearOptions();
082                        dialog.getOptionPanel().addOption(">>>> (dev) print", PRINT_REP, g, null);
083                        dialog.getOptionPanel().addOption(">>>> (dev) increase", INCREASE_REP, g, null);
084                        dialog.getOptionPanel().addOption(">>>> (dev) decrease", REDUCE_REP, g, null);
085                        dialog.getOptionPanel().addOption(">>>> (dev) back", BACK_TO_TOP, g, null);
086                        dialog.getOptionPanel().setShortcut(BACK_TO_TOP, Keyboard.KEY_ESCAPE, false, false, false, true);
087                } else if (option == MUSIC_MENU) {
088                        dialog.getOptionPanel().clearOptions();
089                        dialog.getOptionPanel().addOption(">>>> (dev) print current music", MUSIC_PRINT, g, null);
090                        dialog.getOptionPanel().addOption(">>>> (dev) restart music", MUSIC_RESTART, g, null);
091                        dialog.getOptionPanel().addOption(">>>> (dev) back", BACK_TO_TOP, g, null);
092                        dialog.getOptionPanel().setShortcut(BACK_TO_TOP, Keyboard.KEY_ESCAPE, false, false, false, true);
093                }
094                
095                if (entity != null && entity.getFaction() != null) {
096                        if (option == PRINT_REP) {
097                                if (entity.getActivePerson() != null) {
098                                        dialog.getTextPanel().addParagraph("Reputation with " + entity.getActivePerson().getNameString() + ": " + 
099                                                        entity.getActivePerson().getRelToPlayer().getRel());
100                                } else {
101                                        dialog.getTextPanel().addParagraph("Reputation with " + entity.getFaction().getDisplayName() + ": " + 
102                                                                entity.getFaction().getRelationship(Factions.PLAYER));
103                                }
104                        } else if (option == INCREASE_REP) {
105                                if (entity.getActivePerson() != null) {
106                                        CustomRepImpact impact = new CustomRepImpact();
107                                        impact.limit = RepLevel.COOPERATIVE;
108                                        impact.delta = 0.1f;
109                                        Global.getSector().adjustPlayerReputation(
110                                                        new RepActionEnvelope(RepActions.CUSTOM, impact,
111                                                                                                  null, null, false), entity.getActivePerson());
112                                        dialog.getTextPanel().addParagraph("Reputation with " + entity.getActivePerson().getNameString() + ": " + 
113                                                        entity.getActivePerson().getRelToPlayer().getRel());
114                                } else {
115                                        entity.getFaction().adjustRelationship(Factions.PLAYER, 0.1f);
116                                        dialog.getTextPanel().addParagraph("Reputation with " + entity.getFaction().getDisplayName() + ": " + 
117                                                        entity.getFaction().getRelationship(Factions.PLAYER));
118                                }
119                        } else if (option == REDUCE_REP) {
120                                if (entity.getActivePerson() != null) {
121                                        CustomRepImpact impact = new CustomRepImpact();
122                                        impact.limit = RepLevel.VENGEFUL;
123                                        impact.delta = -0.1f;
124                                        Global.getSector().adjustPlayerReputation(
125                                                        new RepActionEnvelope(RepActions.CUSTOM, impact,
126                                                                                                  null, null, false), entity.getActivePerson());
127                                        dialog.getTextPanel().addParagraph("Reputation with " + entity.getActivePerson().getNameString() + ": " + 
128                                                        entity.getActivePerson().getRelToPlayer().getRel());
129                                } else {
130                                        entity.getFaction().adjustRelationship(Factions.PLAYER, -0.1f);
131                                        dialog.getTextPanel().addParagraph("Reputation with " + entity.getFaction().getDisplayName() + ": " + 
132                                                        entity.getFaction().getRelationship(Factions.PLAYER));
133                                }
134                        }
135                }
136                
137                if (option == MUSIC_RESTART) {
138                        Global.getSoundPlayer().restartCurrentMusic();
139                } else if (option == MUSIC_PRINT) {
140                        dialog.getTextPanel().addParagraph("Now playing: " + Global.getSoundPlayer().getCurrentMusicId());
141                }
142                
143                
144                
145                if (option == BACK_TO_OPTIONS) {
146                        if (savedOptions != null) {
147                                dialog.getOptionPanel().restoreSavedOptions(savedOptions);
148                                return;
149                        }
150                }
151                if (option == BACK_TO_TOP) {
152                        execute(dialog, TOP_MENU);
153                }
154        }
155
156}
157
158
159
160
161