001package com.fs.starfarer.api.impl.campaign.missions.academy;
002
003import java.awt.Color;
004
005import com.fs.starfarer.api.campaign.PlanetAPI;
006import com.fs.starfarer.api.campaign.StarSystemAPI;
007import com.fs.starfarer.api.campaign.econ.MarketAPI;
008import com.fs.starfarer.api.impl.campaign.ids.Conditions;
009import com.fs.starfarer.api.impl.campaign.ids.Factions;
010import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
011import com.fs.starfarer.api.impl.campaign.ids.Tags;
012import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
013import com.fs.starfarer.api.ui.TooltipMakerAPI;
014import com.fs.starfarer.api.util.Misc;
015
016public class GADataFromRuins extends GABaseMission {
017
018//      public static class GADataFromRuinsCreator extends BaseHubMissionCreator {
019//              @Override
020//              public HubMission createHubMission(MissionHub hub) {
021//                      return new GADataFromRuins();
022//              }
023//      }
024        
025        public static float PIRATE_PROB = 0.5f;
026        public static float MISSION_DAYS = 120f;
027        public static int RAID_DIFFICULTY = 100;
028        public static int MARINES_REQUIRED = RAID_DIFFICULTY / 2;
029        
030        
031        public static enum Stage {
032                GO_TO_RUINS,
033                GET_IN_COMMS_RANGE,
034                COMPLETED,
035                FAILED,
036        }
037        
038        public static enum Variation {
039                BASIC,
040                REMNANTS,
041                PULSAR,
042                DECIV,
043        }
044        
045        protected PlanetAPI planet;
046        protected String targetWithArticle;
047        protected String target;
048        protected Variation variation;
049        protected int piratePayment;
050        
051        @Override
052        protected boolean create(MarketAPI createdAt, boolean barEvent) {
053                // if this mission type was already accepted by the player, abort
054                if (!setGlobalReference("$gaData_ref")) {
055                        return false;
056                }
057                
058                pickDepartment(GADepartments.INDUSTRIAL, GADepartments.SOCIAL);
059                targetWithArticle = pickOne("a library", "a datavault", "an archive", "a laboratory");
060                target = targetWithArticle.substring(targetWithArticle.indexOf(" ") + 1);
061                
062                resetSearch();
063                requireSystemTags(ReqMode.ANY, Tags.THEME_REMNANT_RESURGENT, Tags.THEME_REMNANT_SUPPRESSED,
064                                                                           Tags.THEME_DERELICT, Tags.THEME_MISC, Tags.THEME_RUINS);
065                requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_REMNANT_SECONDARY); // remove not-very-dangerous remnant systems
066                //requireSystemInInnerSector();
067                //requireSystemHasPulsar();
068                //requireSystemIsDense();
069                //requirePlanetIsGasGiant();
070                //requirePlanetConditions(ReqMode.ALL, Conditions.DECIVILIZED);
071                requirePlanetUnpopulated();
072                requirePlanetWithRuins();
073                preferPlanetNotFullySurveyed();
074                preferPlanetUnexploredRuins();
075                preferPlanetInDirectionOfOtherMissions();
076                planet = pickPlanet();
077                
078//              spawnEntity(Entities.INACTIVE_GATE, "$gaData_test", EntityLocationType.ORBITING_PARAM, 
079//                                      planet, planet.getStarSystem(), false);
080//              spawnMissionNode("$gaData_test", EntityLocationType.ORBITING_PARAM, planet, planet.getStarSystem());
081                
082                if (planet == null) {
083                        return false;
084                }
085                
086                setStartingStage(Stage.GO_TO_RUINS);
087                addSuccessStages(Stage.COMPLETED);
088                addFailureStages(Stage.FAILED);
089                
090                makeImportant(planet, "$gaData_targetPlanet", Stage.GO_TO_RUINS);
091                
092                connectWithGlobalFlag(Stage.GO_TO_RUINS, Stage.GET_IN_COMMS_RANGE, "$gaData_gotData");
093                connectWithInRangeOfCommRelay(Stage.GET_IN_COMMS_RANGE, Stage.COMPLETED);
094                
095                setStageOnGlobalFlag(Stage.FAILED, "$gaData_gaveCoordsToPirates");
096                if (WITH_TIME_LIMIT) {
097                        setTimeLimit(Stage.FAILED, MISSION_DAYS, planet.getStarSystem(), Stage.GET_IN_COMMS_RANGE);
098                }
099                //setCreditReward(30000, 40000);
100                setCreditReward(CreditReward.AVERAGE);
101                setDefaultGARepRewards();
102                
103//              spawnEntity(Entities.FUSION_LAMP, "$gaData_test", EntityLocationType.ORBITING_PARAM,
104//                                              planet, planet.getStarSystem(), false);
105                
106//              beginStageTrigger(Stage.GET_IN_COMMS_RANGE);
107//              triggerSpawnEntity(Entities.INACTIVE_GATE, "$gaData_test", EntityLocationType.ORBITING_PARAM,
108//                                                 planet, planet.getStarSystem(), false);
109//              triggerEntityMakeImportant();
110//              endTrigger();
111                
112                StarSystemAPI system = planet.getStarSystem();
113                if (system.hasTag(Tags.THEME_REMNANT)) {
114                        variation = Variation.REMNANTS;
115                        //setCreditReward(50000, 60000);
116                        setCreditReward(CreditReward.HIGH);
117                } else if (Misc.hasPulsar(system)) {
118                        variation = Variation.PULSAR;
119                } else if (planet.hasCondition(Conditions.DECIVILIZED)) {
120                        variation = Variation.DECIV;
121                } else {
122                        variation = Variation.BASIC;
123                }
124                
125                //PIRATE_PROB = 1f;
126                if ((variation == Variation.BASIC || variation == Variation.DECIV) && rollProbability(PIRATE_PROB)) {
127                        beginWithinHyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS);
128                        triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_MEDIUM, planet);
129                        triggerAutoAdjustFleetStrengthMajor();
130                        triggerSetStandardAggroPirateFlags();
131                        //triggerFleetAllowLongPursuit();
132                        //triggerPickLocationAroundEntity(planet, 3000f);
133                        triggerPickLocationAtInSystemJumpPoint(planet.getStarSystem());
134                        triggerSpawnFleetAtPickedLocation("$gaData_pirate", null);
135                        triggerOrderFleetPatrol(planet);
136                        triggerFleetMakeImportant(null, Stage.GO_TO_RUINS);
137                        endTrigger();
138                        
139                        piratePayment = genRoundNumber(5000, 15000);
140                }
141                
142                return true;
143        }
144        
145        protected void updateInteractionDataImpl() {
146                set("$gaData_department", department);
147                set("$gaData_target", target);
148                set("$gaData_planetId", planet.getId());
149                set("$gaData_planetName", planet.getName());
150                set("$gaData_systemName", planet.getStarSystem().getNameWithNoType());
151                set("$gaData_dist", getDistanceLY(planet));
152                set("$gaData_reward", Misc.getWithDGS(getCreditsReward()));
153                set("$gaData_piratePayment", Misc.getWithDGS(piratePayment));
154                //variation = Variation.BASIC;
155                set("$gaData_variation", variation);
156                if (variation == Variation.DECIV) {
157                        set("$gaData_marinesReq", MARINES_REQUIRED);
158                        set("$gaData_raidDifficulty", RAID_DIFFICULTY);
159                } else if (variation == Variation.PULSAR) {
160                        PlanetAPI pulsar = Misc.getPulsarInSystem(planet.getStarSystem());
161                        if (pulsar != null) {
162                                set("$gaData_pulsarName", planet.getStarSystem().getNameWithNoType());
163                        }
164                }
165        }
166        
167        @Override
168        public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) {
169                float opad = 10f;
170                Color h = Misc.getHighlightColor();
171                if (currentStage == Stage.GO_TO_RUINS) {
172                        if (variation == Variation.DECIV) {
173                                info.addPara(getGoToPlanetTextPre(planet) +
174                                                        ", and retrieve the data from " + targetWithArticle + " found in the ruins there. Around %s " +
175                                                         "marines will be needed to perform the recovery.", opad, h, Misc.getWithDGS(MARINES_REQUIRED));
176                        } else {
177                                String extra = "";
178                                if (variation == Variation.REMNANTS) extra = " 'Autonomous weapon systems' may pose a danger.";
179                                if (variation == Variation.PULSAR) extra = " Rapidly spinning jets of high energy charged particles are a once-in-a-lifetime sight.";
180                                info.addPara(getGoToPlanetTextPre(planet) + 
181                                                         ", and retrieve the data from " + targetWithArticle + " found in the ruins there." + extra, opad);
182                        }
183                } else if (currentStage == Stage.GET_IN_COMMS_RANGE) {
184                        info.addPara(getGetWithinCommsRangeText(), opad);
185                }
186//              else {
187//                      super.addDescriptionForCurrentStage(info, width, height); // shows the completed/failed/abandoned text, if needed
188//              }
189        }
190
191        @Override
192        public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) {
193                Color h = Misc.getHighlightColor();
194                if (currentStage == Stage.GO_TO_RUINS) {
195                        //info.addPara("Go to " + planet.getName() + " in the " + planet.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad);
196                        info.addPara(getGoToPlanetTextShort(planet), tc, pad);
197                        return true;
198                } else if (currentStage == Stage.GET_IN_COMMS_RANGE) {
199                        info.addPara(getGetWithinCommsRangeTextShort(), tc, pad);
200                        return true;
201                }
202                return false;
203        }
204
205        @Override
206        public String getBaseName() {
207                return "Ruins Data Recovery";
208        }
209        
210        @Override
211        public String getBlurbText() {
212                return null; // moved this to rules.csv
213        }
214
215}
216
217