001package com.fs.starfarer.api.impl.campaign.missions;
002
003import java.util.List;
004import java.util.Random;
005
006import org.lwjgl.util.vector.Vector2f;
007
008import com.fs.starfarer.api.campaign.CampaignFleetAPI;
009import com.fs.starfarer.api.campaign.econ.MarketAPI;
010import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
011import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers;
012import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
013import com.fs.starfarer.api.util.Misc;
014
015public class FleetCreatorMission extends HubMissionWithTriggers {
016        
017        public static enum FleetStyle {
018                QUANTITY,
019                STANDARD,
020                QUALITY,
021        }
022        
023        protected static Object STAGE = new Object();
024        
025        protected String fleetTypeSmall = FleetTypes.PATROL_SMALL;
026        protected String fleetTypeMedium = FleetTypes.PATROL_MEDIUM;
027        protected String fleetTypeLarge = FleetTypes.PATROL_LARGE;
028        
029
030        public FleetCreatorMission(Random random) {
031                super();
032                setMissionId("fcm_" + Misc.genUID());
033                setGenRandom(random);
034        }
035        
036        public void beginFleet() {
037                beginStageTrigger(STAGE);
038                triggerMakeAllFleetFlagsPermanent();
039        }
040        
041        public CampaignFleetAPI createFleet() {
042                endTrigger();
043                
044                List<CampaignFleetAPI> fleets = runStageTriggersReturnFleets(STAGE);
045                if (fleets.isEmpty()) return null;
046                
047                CampaignFleetAPI fleet = fleets.get(0);
048                fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
049                return fleet;
050        }
051
052        @Override
053        protected boolean create(MarketAPI createdAt, boolean barEvent) {
054                return false;
055        }
056        
057        
058        public void createFleet(FleetStyle style, int difficulty, String factionId, Vector2f locInHyper) {
059                if (style == FleetStyle.STANDARD || style == null) {
060                        createStandardFleet(difficulty, factionId, locInHyper);
061                } else if (style == FleetStyle.QUANTITY) {
062                        createQuantityFleet(difficulty, factionId, locInHyper);
063                } else if (style == FleetStyle.QUALITY) {
064                        createQualityFleet(difficulty, factionId, locInHyper);
065                }
066        }
067        
068        
069        public void createStandardFleet(int difficulty, String factionId, Vector2f locInHyper) {
070                FleetSize size = FleetSize.MEDIUM;
071                FleetQuality quality = FleetQuality.DEFAULT;
072                String type = fleetTypeMedium;
073                OfficerQuality oQuality = OfficerQuality.DEFAULT;
074                OfficerNum oNum = OfficerNum.DEFAULT;
075                
076                //Global.getSector().getEconomy().getMarket("b07a");
077                
078                if (difficulty <= 0) {
079                        size = FleetSize.TINY;
080                        quality = FleetQuality.VERY_LOW;
081                        oQuality = OfficerQuality.LOWER;
082                        oNum = OfficerNum.FC_ONLY;
083                        type = fleetTypeSmall;
084                } else if (difficulty == 1) {
085                        size = FleetSize.VERY_SMALL;
086                        quality = FleetQuality.VERY_LOW;
087                        oQuality = OfficerQuality.LOWER;
088                        oNum = OfficerNum.FC_ONLY;
089                        type = fleetTypeSmall;
090                } else if (difficulty == 2) {
091                        size = FleetSize.SMALL;
092                        quality = FleetQuality.DEFAULT;
093                        oQuality = OfficerQuality.LOWER;
094                        oNum = OfficerNum.FEWER;
095                        type = fleetTypeSmall;
096                } else if (difficulty == 3) {
097                        size = FleetSize.SMALL;
098                        quality = FleetQuality.DEFAULT;
099                        oQuality = OfficerQuality.DEFAULT;
100                        oNum = OfficerNum.DEFAULT;
101                        type = fleetTypeMedium;
102                } else if (difficulty == 4) {
103                        size = FleetSize.MEDIUM;
104                        quality = FleetQuality.DEFAULT;
105                        oQuality = OfficerQuality.DEFAULT;
106                        oNum = OfficerNum.DEFAULT;
107                        type = fleetTypeMedium;
108                } else if (difficulty == 5) {
109                        size = FleetSize.LARGE;
110                        quality = FleetQuality.DEFAULT;
111                        oQuality = OfficerQuality.DEFAULT;
112                        oNum = OfficerNum.DEFAULT;
113                        type = fleetTypeLarge;
114                } else if (difficulty == 6) {
115                        size = FleetSize.LARGE;
116                        quality = FleetQuality.HIGHER;
117                        oQuality = OfficerQuality.DEFAULT;
118                        oNum = OfficerNum.MORE;
119                        type = fleetTypeLarge;
120                } else if (difficulty == 7) {
121                        size = FleetSize.LARGER;
122                        quality = FleetQuality.HIGHER;
123                        oQuality = OfficerQuality.DEFAULT;
124                        oNum = OfficerNum.MORE;
125                        type = fleetTypeLarge;
126                } else if (difficulty == 8) {
127                        size = FleetSize.VERY_LARGE;
128                        quality = FleetQuality.HIGHER;
129                        oQuality = OfficerQuality.DEFAULT;
130                        oNum = OfficerNum.MORE;
131                        type = fleetTypeLarge;
132                } else if (difficulty == 9) {
133                        size = FleetSize.VERY_LARGE;
134                        quality = FleetQuality.HIGHER;
135                        oQuality = OfficerQuality.HIGHER;
136                        oNum = OfficerNum.MORE;
137                        type = fleetTypeLarge;
138                } else {// if (difficulty == 10) {
139                        size = FleetSize.HUGE;
140                        quality = FleetQuality.HIGHER;
141                        oQuality = OfficerQuality.HIGHER;
142                        oNum = OfficerNum.MORE;
143                        //oNum = OfficerNum.ALL_SHIPS;
144                        type = fleetTypeLarge;
145                }
146                
147                triggerCreateFleet(size, quality, factionId, type, locInHyper);
148                triggerSetFleetOfficers(oNum, oQuality);
149                //triggerAutoAdjustFleetSize(size, size.next());
150        }
151        
152        
153        public void createQualityFleet(int difficulty, String factionId, Vector2f locInHyper) {
154                FleetSize size = FleetSize.MEDIUM;
155                FleetQuality quality = FleetQuality.DEFAULT;
156                String type = fleetTypeMedium;
157                OfficerQuality oQuality = OfficerQuality.DEFAULT;
158                OfficerNum oNum = OfficerNum.DEFAULT;
159                
160                if (difficulty <= 0) {
161                        size = FleetSize.TINY;
162                        quality = FleetQuality.VERY_HIGH;
163                        oQuality = OfficerQuality.DEFAULT;
164                        oNum = OfficerNum.FC_ONLY;
165                        type = fleetTypeSmall;
166                } else if (difficulty == 1) {
167                        size = FleetSize.VERY_SMALL;
168                        quality = FleetQuality.VERY_HIGH;
169                        oQuality = OfficerQuality.DEFAULT;
170                        oNum = OfficerNum.FC_ONLY;
171                        type = fleetTypeSmall;
172                } else if (difficulty == 2) {
173                        size = FleetSize.VERY_SMALL;
174                        quality = FleetQuality.VERY_HIGH;
175                        oQuality = OfficerQuality.DEFAULT;
176                        oNum = OfficerNum.DEFAULT;
177                        type = fleetTypeSmall;
178                } else if (difficulty == 3) {
179                        size = FleetSize.SMALL;
180                        quality = FleetQuality.VERY_HIGH;
181                        oQuality = OfficerQuality.DEFAULT;
182                        oNum = OfficerNum.DEFAULT;
183                        type = fleetTypeSmall;
184                } else if (difficulty == 4) {
185                        size = FleetSize.SMALL;
186                        quality = FleetQuality.VERY_HIGH;
187                        oQuality = OfficerQuality.HIGHER;
188                        oNum = OfficerNum.MORE;
189                        type = fleetTypeSmall;
190                } else if (difficulty == 5) {
191                        size = FleetSize.MEDIUM;
192                        quality = FleetQuality.SMOD_1;
193                        oQuality = OfficerQuality.DEFAULT;
194                        oNum = OfficerNum.DEFAULT;
195                        type = fleetTypeMedium;
196                } else if (difficulty == 6) {
197                        size = FleetSize.MEDIUM;
198                        quality = FleetQuality.SMOD_1;
199                        oQuality = OfficerQuality.DEFAULT;
200                        oNum = OfficerNum.MORE;
201                        type = fleetTypeMedium;
202                } else if (difficulty == 7) {
203                        size = FleetSize.LARGE;
204                        quality = FleetQuality.SMOD_1;
205                        oQuality = OfficerQuality.DEFAULT;
206                        oNum = OfficerNum.DEFAULT;
207                        type = fleetTypeMedium;
208                } else if (difficulty == 8) {
209                        size = FleetSize.LARGE;
210                        quality = FleetQuality.SMOD_1;
211                        oQuality = OfficerQuality.HIGHER;
212                        oNum = OfficerNum.MORE;
213                        type = fleetTypeLarge;
214                } else if (difficulty == 9) {
215                        size = FleetSize.VERY_LARGE;
216                        quality = FleetQuality.SMOD_1;
217                        oQuality = OfficerQuality.HIGHER;
218                        oNum = OfficerNum.MORE;
219                        type = fleetTypeLarge;
220                } else {// if (difficulty == 10) {
221                        size = FleetSize.VERY_LARGE;
222                        quality = FleetQuality.SMOD_2;
223                        oQuality = OfficerQuality.HIGHER;
224                        oNum = OfficerNum.MORE;
225                        type = fleetTypeLarge;
226                }
227                
228                triggerCreateFleet(size, quality, factionId, type, locInHyper);
229                triggerSetFleetOfficers(oNum, oQuality);
230                
231                // don't do this - quality is always 0 anyway, and it can mess up fleet type names
232                //triggerAutoAdjustFleetSize(size, size.next());
233        }
234        
235        
236        public void createQuantityFleet(int difficulty, String factionId, Vector2f locInHyper) {
237                FleetSize size = FleetSize.MEDIUM;
238                FleetQuality quality = FleetQuality.DEFAULT;
239                String type = fleetTypeMedium;
240                OfficerQuality oQuality = OfficerQuality.DEFAULT;
241                OfficerNum oNum = OfficerNum.DEFAULT;
242                
243                if (difficulty <= 0) {
244                        size = FleetSize.SMALL;
245                        quality = FleetQuality.LOWER;
246                        oQuality = OfficerQuality.LOWER;
247                        oNum = OfficerNum.FC_ONLY;
248                        type = fleetTypeSmall;
249                } else if (difficulty == 1) {
250                        size = FleetSize.SMALL;
251                        quality = FleetQuality.DEFAULT;
252                        oQuality = OfficerQuality.DEFAULT;
253                        oNum = OfficerNum.DEFAULT;
254                        type = fleetTypeSmall;
255                } else if (difficulty == 2) {
256                        size = FleetSize.MEDIUM;
257                        quality = FleetQuality.LOWER;
258                        oQuality = OfficerQuality.DEFAULT;
259                        oNum = OfficerNum.DEFAULT;
260                        type = fleetTypeMedium;
261                } else if (difficulty == 3) {
262                        size = FleetSize.MEDIUM;
263                        quality = FleetQuality.DEFAULT;
264                        oQuality = OfficerQuality.DEFAULT;
265                        oNum = OfficerNum.DEFAULT;
266                        type = fleetTypeMedium;
267                } else if (difficulty == 4) {
268                        size = FleetSize.LARGE;
269                        quality = FleetQuality.LOWER;
270                        oQuality = OfficerQuality.HIGHER;
271                        oNum = OfficerNum.DEFAULT;
272                        type = fleetTypeMedium;
273                } else if (difficulty == 5) {
274                        size = FleetSize.LARGE;
275                        quality = FleetQuality.DEFAULT;
276                        oQuality = OfficerQuality.DEFAULT;
277                        oNum = OfficerNum.DEFAULT;
278                        type = fleetTypeMedium;
279                } else if (difficulty == 6) {
280                        size = FleetSize.LARGER;
281                        quality = FleetQuality.LOWER;
282                        oQuality = OfficerQuality.DEFAULT;
283                        oNum = OfficerNum.DEFAULT;
284                        type = fleetTypeLarge;
285                } else if (difficulty == 7) {
286                        size = FleetSize.LARGER;
287                        quality = FleetQuality.DEFAULT;
288                        oQuality = OfficerQuality.DEFAULT;
289                        oNum = OfficerNum.DEFAULT;
290                        type = fleetTypeLarge;
291                } else if (difficulty == 8) {
292                        size = FleetSize.VERY_LARGE;
293                        quality = FleetQuality.DEFAULT;
294                        oQuality = OfficerQuality.DEFAULT;
295                        oNum = OfficerNum.DEFAULT;
296                        type = fleetTypeLarge;
297                } else if (difficulty == 9) {
298                        size = FleetSize.HUGE;
299                        quality = FleetQuality.DEFAULT;
300                        oQuality = OfficerQuality.DEFAULT;
301                        oNum = OfficerNum.DEFAULT;
302                        type = fleetTypeLarge;
303                } else {// if (difficulty == 10) {
304                        size = FleetSize.MAXIMUM;
305                        quality = FleetQuality.DEFAULT;
306                        oQuality = OfficerQuality.DEFAULT;
307                        oNum = OfficerNum.MORE;
308                        type = fleetTypeLarge;
309                }
310                
311                triggerCreateFleet(size, quality, factionId, type, locInHyper);
312                triggerSetFleetOfficers(oNum, oQuality);
313                //triggerAutoAdjustFleetSize(size, size.next());
314        }
315        
316        
317        public void setFleetTypes(String small, String medium, String large) {
318                fleetTypeSmall = small;
319                fleetTypeMedium = medium;
320                fleetTypeLarge = large;
321        }
322        
323        public String getFleetTypeSmall() {
324                return fleetTypeSmall;
325        }
326
327        public void setFleetTypeSmall(String fleetTypeSmall) {
328                this.fleetTypeSmall = fleetTypeSmall;
329        }
330
331        public String getFleetTypeMedium() {
332                return fleetTypeMedium;
333        }
334
335        public void setFleetTypeMedium(String fleetTypeMedium) {
336                this.fleetTypeMedium = fleetTypeMedium;
337        }
338
339        public String getFleetTypeLarge() {
340                return fleetTypeLarge;
341        }
342
343        public void setFleetTypeLarge(String fleetTypeLarge) {
344                this.fleetTypeLarge = fleetTypeLarge;
345        }
346}
347
348
349
350