001package com.fs.starfarer.api.impl.campaign.missions;
002
003import java.awt.Color;
004import java.util.ArrayList;
005import java.util.List;
006
007import com.fs.starfarer.api.Global;
008import com.fs.starfarer.api.campaign.econ.MarketAPI;
009import com.fs.starfarer.api.characters.PersonAPI;
010import com.fs.starfarer.api.impl.campaign.ids.Factions;
011import com.fs.starfarer.api.impl.campaign.ids.Ranks;
012import com.fs.starfarer.api.impl.campaign.ids.Voices;
013import com.fs.starfarer.api.impl.campaign.missions.academy.GACelestialObject.Variation;
014import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
015import com.fs.starfarer.api.ui.TooltipMakerAPI;
016import com.fs.starfarer.api.util.Misc;
017
018public class AngryVIPTransport extends HubMissionWithBarEvent {
019
020        public static float MISSION_DAYS = 75f;
021        public static int MIN_VALUE = 24000;
022        public static int MAX_VALUE = 36000;
023        
024        public static enum Stage {
025                TRANSPORT,
026                COMPLETED,
027                FAILED,
028        }
029        
030        protected MarketAPI sourceMarket;
031        //protected StarSystemAPI destination_system;
032        protected MarketAPI destination_market;
033        protected int quantity;
034        protected String destinationId;
035        protected Variation variation;
036        protected PersonAPI person;
037                
038        @Override
039        protected boolean create(MarketAPI createdAt, boolean barEvent) {
040                // if already accepted by the player, abort
041                if (!setGlobalReference("$avipt_ref", "$avipt_inProgress")) {
042                        return false;
043                }
044                
045                if (createdAt == null) return false;
046                
047                if (Factions.PIRATES.equals(createdAt.getFaction().getId())) return false; // I guess?
048                
049                sourceMarket = createdAt;
050                
051                // whitelist of aristocrat-plausible core worlds.
052                String[] planet_whitelist = new String[] {
053                                "eventide",
054                                "kazeron",
055                                "fikenhild", 
056                                "culann_starforge",
057                                "eochu_bres",
058                                "eldfell",
059                                "salamanca",
060                                "yesod", 
061                                "olinadu",
062                                "station_tse_enterprise",
063                                "coatl" };
064                
065                List<String> withoutSource = new ArrayList<String>();
066                for (String curr : planet_whitelist) withoutSource.add(curr);
067                
068                // if the source market isn't one of these, bail out
069                if (!withoutSource.remove(sourceMarket.getId())) {
070                        return false;
071                }
072                
073                destinationId = pickOne(withoutSource);
074                if (destinationId == null) {
075                        System.out.print("AVIPT failed on destinationId");
076                        return false;
077                }
078                
079                //sourceMarket.getFaction().createRandomPerson();
080                //PersonAPI person = sourceMarket.getFaction().createRandomPerson();
081                setGiverRank(Ranks.CITIZEN);
082                setGiverPost(Ranks.ARISTOCRAT);
083                findOrCreateGiver(createdAt, false, false);
084                
085                
086                person = getPerson();
087                if (person == null) {
088                        return false;
089                }
090                
091                //person.setRankId(Ranks.CITIZEN);
092                person.setVoice(Voices.ARISTO);
093                //person.setPostId(Ranks.POST_ARISTOCRAT);
094                
095                //if (person == null) return false;
096                
097                //setPersonOverride(person);
098                
099                if (!setPersonMissionRef(person, "$avipt_ref")) {
100                        return false;
101                }
102                
103                setRepFactionChangesNone();
104                setIconName("campaignMissions", "shuttle_vip");
105                
106                destination_market = Global.getSector().getEconomy().getMarket(destinationId);
107                
108                if (!setMarketMissionRef(destination_market, "$avipt_ref")) {
109                        return false;
110                }
111                
112                makeImportant(destination_market, "$avipt_target", Stage.TRANSPORT);
113                addSuccessStages(Stage.COMPLETED);
114                
115                setStartingStage(Stage.TRANSPORT);
116                setSuccessStage(Stage.COMPLETED);
117                setFailureStage(Stage.FAILED);
118                
119                setStageOnMemoryFlag(Stage.COMPLETED, destination_market, "$avipt_completed");
120                setNoAbandon();
121                setTimeLimit(Stage.FAILED, MISSION_DAYS, null);
122                
123                
124                setCreditReward(MIN_VALUE, MAX_VALUE);
125                
126                return true;
127        }
128        
129        protected void updateInteractionDataImpl() {
130
131                set("$avipt_barEvent", isBarEvent());
132                set("$avipt_reward", Misc.getWithDGS(getCreditsReward()));
133                set("$avipt_timelimit", Misc.getWithDGS(MISSION_DAYS));
134                set("$avipt_manOrWoman", getPerson().getManOrWoman());
135                set("$avipt_heOrShe", getPerson().getHeOrShe());
136                set("$avipt_hisOrHer", getPerson().getHisOrHer());
137                set("$avipt_himOrHer", getPerson().getHimOrHer());
138                set("$avipt_HeOrShe", getPerson().getHeOrShe().substring(0, 1).toUpperCase() + getPerson().getHeOrShe().substring(1));
139                set("$avipt_HisOrHer", getPerson().getHisOrHer().substring(0, 1).toUpperCase() + getPerson().getHisOrHer().substring(1));
140                set("$avipt_HimOrHer", getPerson().getHimOrHer().substring(0, 1).toUpperCase() + getPerson().getHimOrHer().substring(1));
141                
142                set("$avipt_personName", getPerson().getNameString());
143                set("$avipt_systemName", destination_market.getStarSystem().getNameWithLowercaseTypeShort());
144                set("$avipt_marketName", destination_market.getName());
145                set("$avipt_sourceName", sourceMarket.getName());
146                
147                //if (destination_entity.m)
148                //set("$lpt_marketOnOrAt", destination_entity.getOnOrAt());
149                
150                set("$avipt_dist", getDistanceLY(destination_market));
151        }
152        
153        @Override
154        public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
155                float opad = 10f;
156                Color h = Misc.getHighlightColor();
157                if (currentStage == Stage.TRANSPORT) {
158                        info.addPara("Transport an angry, yet wealthy, VIP to " + destination_market.getName() + 
159                                        " in the " +  destination_market.getStarSystem().getNameWithLowercaseTypeShort() + ".", opad,
160                                        h, Misc.getWithDGS(quantity));
161                        
162                        info.addPara("The VIP has made it clear that " + getPerson().getHeOrShe() + " is to arrive within " + MISSION_DAYS + " days.", opad);
163                }
164        }
165
166        @Override
167        public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
168                Color h = Misc.getHighlightColor();
169                if (currentStage == Stage.TRANSPORT) {
170                        info.addPara("Transport an angry, yet wealthy, VIP to " + destination_market.getName() + 
171                                        " in the " +  destination_market.getStarSystem().getNameWithLowercaseTypeShort(), pad, tc,
172                                        h, Misc.getWithDGS(quantity));
173                        return true;
174                }
175                return false;
176        }       
177        
178        @Override
179        public String getBaseName() {
180                return "Angry VIP Transport";
181        }
182        
183}
184