@@ -12,12 +12,26 @@ public static class SpawnAmbushHelper
1212 {
1313 public static void SpawnAmbush ( Vector3 ambushOrigin , AmbushType ambushType )
1414 {
15- if ( ambushType == AmbushType . Mech && ! Mod . Config . MechAmbush . Enabled ) return ;
16- if ( ambushType == AmbushType . Vehicle && ! Mod . Config . VehicleAmbush . Enabled ) return ;
17-
1815 // Determine how many units we're spawning
19- int minSpawns = ambushType == AmbushType . Mech ? ModState . MechAmbushDefForContract . MinSpawns : ModState . VehicleAmbushDefForContract . MinSpawns ;
20- int maxSpawns = ambushType == AmbushType . Mech ? ModState . MechAmbushDefForContract . MaxSpawns : ModState . VehicleAmbushDefForContract . MaxSpawns ;
16+ int minSpawns = 0 , maxSpawns = 0 ;
17+ if ( ambushType == AmbushType . BattleArmor )
18+ {
19+ if ( ! Mod . Config . BattleArmorAmbush . Enabled ) return ;
20+ minSpawns = ModState . BattleArmorAmbushDefForContract . MinSpawns ;
21+ maxSpawns = ModState . BattleArmorAmbushDefForContract . MaxSpawns ;
22+ }
23+ else if ( ambushType == AmbushType . Mech )
24+ {
25+ if ( ! Mod . Config . MechAmbush . Enabled ) return ;
26+ minSpawns = ModState . MechAmbushDefForContract . MinSpawns ;
27+ maxSpawns = ModState . MechAmbushDefForContract . MaxSpawns ;
28+ }
29+ else if ( ambushType == AmbushType . Vehicle )
30+ {
31+ if ( ! Mod . Config . VehicleAmbush . Enabled ) return ;
32+ minSpawns = ModState . VehicleAmbushDefForContract . MinSpawns ;
33+ maxSpawns = ModState . VehicleAmbushDefForContract . MaxSpawns ;
34+ }
2135
2236 int actorsToSpawn = Mod . Random . Next ( minSpawns , maxSpawns ) ;
2337 Mod . Log . Debug ? . Write ( $ "Spawning { actorsToSpawn } actors as part of this ambush.") ;
@@ -44,16 +58,16 @@ public static void SpawnAmbush(Vector3 ambushOrigin, AmbushType ambushType)
4458 // Spawn one unit at the origin of the building
4559 buildingsToLevel . Add ( building ) ;
4660 Mod . Log . Debug ? . Write ( "Spawning actor at building origin." ) ;
47- if ( ambushType == AmbushType . Mech )
48- {
49- AbstractActor spawnedActor = SpawnAmbushMech ( ModState . AmbushTeam , ambushLance , ambushOrigin , building . CurrentPosition , building . CurrentRotation ) ;
50- spawnedActors . Add ( spawnedActor ) ;
51- }
52- else
53- {
54- AbstractActor spawnedActor = SpawnAmbushVehicle ( ModState . AmbushTeam , ambushLance , ambushOrigin , building . CurrentPosition , building . CurrentRotation ) ;
55- spawnedActors . Add ( spawnedActor ) ;
56- }
61+
62+ AbstractActor spawnedActor = null ;
63+ if ( ambushType == AmbushType . BattleArmor )
64+ spawnedActor = SpawnAmbushMech ( ModState . AmbushTeam , ambushLance , ambushOrigin , building . CurrentPosition , building . CurrentRotation , ModState . BattleArmorAmbushDefForContract . SpawnPool ) ;
65+ else if ( ambushType == AmbushType . Mech )
66+ spawnedActor = SpawnAmbushMech ( ModState . AmbushTeam , ambushLance , ambushOrigin , building . CurrentPosition , building . CurrentRotation , ModState . MechAmbushDefForContract . SpawnPool ) ;
67+ else if ( ambushType == AmbushType . Vehicle )
68+ spawnedActor = SpawnAmbushVehicle ( ModState . AmbushTeam , ambushLance , ambushOrigin , building . CurrentPosition , building . CurrentRotation ) ;
69+
70+ spawnedActors . Add ( spawnedActor ) ;
5771 actorsToSpawn -- ;
5872
5973 // Iterate through adjacent hexes to see if we can spawn more units in the building
@@ -67,16 +81,15 @@ public static void SpawnAmbush(Vector3 ambushOrigin, AmbushType ambushType)
6781 if ( encounterLayerData . mapEncounterLayerDataCells [ cellPoint . Z , cellPoint . X ] . HasSpecifiedBuilding ( building . GUID ) )
6882 {
6983 Mod . Log . Debug ? . Write ( $ "Spawning actor at adjacent hex at position: { adjacentHex } ") ;
70- if ( ambushType == AmbushType . Mech )
71- {
72- AbstractActor spawnedActor = SpawnAmbushMech ( ModState . AmbushTeam , ambushLance , ambushOrigin , adjacentHex , building . CurrentRotation ) ;
73- spawnedActors . Add ( spawnedActor ) ;
74- }
75- else
76- {
77- AbstractActor spawnedActor = SpawnAmbushVehicle ( ModState . AmbushTeam , ambushLance , ambushOrigin , adjacentHex , building . CurrentRotation ) ;
78- spawnedActors . Add ( spawnedActor ) ;
79- }
84+ AbstractActor additionalSpawn = null ;
85+ if ( ambushType == AmbushType . BattleArmor )
86+ additionalSpawn = SpawnAmbushMech ( ModState . AmbushTeam , ambushLance , ambushOrigin , adjacentHex , building . CurrentRotation , ModState . BattleArmorAmbushDefForContract . SpawnPool ) ;
87+ else if ( ambushType == AmbushType . Mech )
88+ additionalSpawn = SpawnAmbushMech ( ModState . AmbushTeam , ambushLance , ambushOrigin , adjacentHex , building . CurrentRotation , ModState . MechAmbushDefForContract . SpawnPool ) ;
89+ else if ( ambushType == AmbushType . Vehicle )
90+ additionalSpawn = SpawnAmbushVehicle ( ModState . AmbushTeam , ambushLance , ambushOrigin , adjacentHex , building . CurrentRotation ) ;
91+
92+ spawnedActors . Add ( additionalSpawn ) ;
8093 actorsToSpawn -- ;
8194 }
8295 else
@@ -104,7 +117,11 @@ public static void SpawnAmbush(Vector3 ambushOrigin, AmbushType ambushType)
104117 }
105118 }
106119
107- bool applyAttacks = ambushType == AmbushType . Mech ? Mod . Config . MechAmbush . FreeAttackEnabled : Mod . Config . VehicleAmbush . FreeAttackEnabled ;
120+ bool applyAttacks = false ;
121+ if ( ambushType == AmbushType . BattleArmor && Mod . Config . BattleArmorAmbush . FreeAttackEnabled ) applyAttacks = true ;
122+ if ( ambushType == AmbushType . Mech && Mod . Config . MechAmbush . FreeAttackEnabled ) applyAttacks = true ;
123+ if ( ambushType == AmbushType . Vehicle && Mod . Config . VehicleAmbush . FreeAttackEnabled ) applyAttacks = true ;
124+
108125 Mod . Log . Info ? . Write ( $ "Adding SpawnAmbushSequence for { spawnedActors . Count } actors and { buildingsToLevel . Count } buildings to be leveled.") ;
109126 try
110127 {
@@ -158,12 +175,12 @@ public static AbstractActor SpawnAmbushVehicle(Team team, Lance ambushLance, Vec
158175 return vehicle ;
159176 }
160177
161- public static AbstractActor SpawnAmbushMech ( Team team , Lance ambushLance , Vector3 ambushOrigin , Vector3 spawnPos , Quaternion spawnRot )
178+ public static AbstractActor SpawnAmbushMech ( Team team , Lance ambushLance , Vector3 ambushOrigin , Vector3 spawnPos , Quaternion spawnRot , List < MechAndPilotDef > spawnPool )
162179 {
163180
164181 // Randomly determine one of the spawnpairs from the current ambushdef
165182 List < MechAndPilotDef > shuffledSpawns = new List < MechAndPilotDef > ( ) ;
166- shuffledSpawns . AddRange ( ModState . MechAmbushDefForContract . SpawnPool ) ;
183+ shuffledSpawns . AddRange ( spawnPool ) ;
167184 shuffledSpawns . Shuffle ( ) ;
168185
169186 MechAndPilotDef ambushDef = shuffledSpawns [ 0 ] ;
0 commit comments