@@ -42,7 +42,16 @@ function DecisionDay:SetupInternalReinforcementsData()
42
42
for bunkerRegionName , bunkerRegionData in pairs (self .bunkerRegions ) do
43
43
if bunkerRegionData .internalReinforcementsArea then
44
44
for box in bunkerRegionData .internalReinforcementsArea .Boxes do
45
- self .internalReinforcementsData [bunkerRegionData .bunkerId ].area :AddBox (box );
45
+ local shouldAddBox = true ;
46
+ for internalReinforcementsAreaBox in self .internalReinforcementsData [bunkerRegionData .bunkerId ].area .Boxes do
47
+ if internalReinforcementsAreaBox :IsWithinBox (box .Center ) then
48
+ shouldAddBox = false ;
49
+ break ;
50
+ end
51
+ end
52
+ if shouldAddBox then
53
+ self .internalReinforcementsData [bunkerRegionData .bunkerId ].area :AddBox (box );
54
+ end
46
55
end
47
56
end
48
57
end
@@ -777,8 +786,10 @@ function DecisionDay:ResumeLoadedGame()
777
786
end
778
787
end
779
788
780
- self :UpdateLZAreas ();
781
- self :UpdateAlliedAttackersWaypoint ();
789
+ if self .currentStage >= self .stages .frontBunkerCaptured then
790
+ self :UpdateLZAreas ();
791
+ self :UpdateAlliedAttackersWaypoint ();
792
+ end
782
793
end
783
794
784
795
function DecisionDay :DoGameOverCheck ()
@@ -2071,7 +2082,7 @@ function DecisionDay:UpdateActivity()
2071
2082
2072
2083
self :UpdateCurrentStage ();
2073
2084
2074
- if self .WinnerTeam == nil then
2085
+ if self .WinnerTeam == - 1 then
2075
2086
self :UpdateCamera ();
2076
2087
end
2077
2088
@@ -2257,18 +2268,21 @@ function DecisionDay:CalculateInternalReinforcementPositionsToEnemyTargets(bunke
2257
2268
coroutine.yield (); -- Yield after initial setup, so we can set up our coroutines separately from running them.
2258
2269
end
2259
2270
2271
+ local numberOfPathsCalculated = 0 ;
2260
2272
for _ , enemyToTarget in ipairs (enemiesToTarget ) do
2261
2273
if MovableMan :ValidMO (enemyToTarget ) then
2262
2274
local internalReinforcementPositionForEnemy ;
2263
2275
local pathLengthFromClosestInternalReinforcementPositionToEnemy = SceneMan .SceneWidth * SceneMan .SceneHeight ;
2264
2276
local enemyToTargetPos = enemyToTarget .Pos ;
2265
2277
for _ , internalReinforcementPosition in pairs (self .internalReinforcementsData [bunkerId ].positions ) do
2266
- if SceneMan :ShortestDistance (internalReinforcementPosition , enemyToTargetPos , false ):MagnitudeIsLessThan (500 ) then
2267
- local pathLengthFromInternalReinforcementPositionToEnemy = SceneMan .Scene :CalculatePath (internalReinforcementPosition , enemyToTargetPos , false , GetPathFindingDefaultDigStrength (), self .aiTeam );
2268
- if pathLengthFromInternalReinforcementPositionToEnemy < pathLengthFromClosestInternalReinforcementPositionToEnemy then
2269
- internalReinforcementPositionForEnemy = internalReinforcementPosition ;
2270
- pathLengthFromClosestInternalReinforcementPositionToEnemy = pathLengthFromInternalReinforcementPositionToEnemy ;
2271
- end
2278
+ print (" Calculating path from internalReinforcementPosition at " .. tostring (internalReinforcementPosition ) .. " to enemy target at " .. tostring (enemyToTargetPos ).. " . Shortest distance magnitude is " .. tostring (SceneMan :ShortestDistance (internalReinforcementPosition , enemyToTargetPos , false ).Magnitude ));
2279
+ local pathLengthFromInternalReinforcementPositionToEnemy = SceneMan .Scene :CalculatePath (internalReinforcementPosition , enemyToTargetPos , false , GetPathFindingDefaultDigStrength (), self .aiTeam );
2280
+ if pathLengthFromInternalReinforcementPositionToEnemy < pathLengthFromClosestInternalReinforcementPositionToEnemy then
2281
+ internalReinforcementPositionForEnemy = internalReinforcementPosition ;
2282
+ pathLengthFromClosestInternalReinforcementPositionToEnemy = pathLengthFromInternalReinforcementPositionToEnemy ;
2283
+ end
2284
+ numberOfPathsCalculated = numberOfPathsCalculated + 1 ;
2285
+ if numberOfPathsCalculated % 3 == 0 and coroutine.running () then
2272
2286
coroutine.yield ();
2273
2287
end
2274
2288
end
0 commit comments