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