Skip to content

Commit e21f99f

Browse files
committed
Fix duplicate boxes being added for internal reinforcements when you save and load
Remove flat range limit on internal reinforcements, it's not so slow when it doesn't need to do 1000+ calculatepath calls lol Fix a couple minor issues
1 parent 7ecb5a4 commit e21f99f

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

Data/Missions.rte/Activities/DecisionDay.lua

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,16 @@ function DecisionDay:SetupInternalReinforcementsData()
4242
for bunkerRegionName, bunkerRegionData in pairs(self.bunkerRegions) do
4343
if bunkerRegionData.internalReinforcementsArea then
4444
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
4655
end
4756
end
4857
end
@@ -777,8 +786,10 @@ function DecisionDay:ResumeLoadedGame()
777786
end
778787
end
779788

780-
self:UpdateLZAreas();
781-
self:UpdateAlliedAttackersWaypoint();
789+
if self.currentStage >= self.stages.frontBunkerCaptured then
790+
self:UpdateLZAreas();
791+
self:UpdateAlliedAttackersWaypoint();
792+
end
782793
end
783794

784795
function DecisionDay:DoGameOverCheck()
@@ -2071,7 +2082,7 @@ function DecisionDay:UpdateActivity()
20712082

20722083
self:UpdateCurrentStage();
20732084

2074-
if self.WinnerTeam == nil then
2085+
if self.WinnerTeam == -1 then
20752086
self:UpdateCamera();
20762087
end
20772088

@@ -2257,18 +2268,21 @@ function DecisionDay:CalculateInternalReinforcementPositionsToEnemyTargets(bunke
22572268
coroutine.yield(); -- Yield after initial setup, so we can set up our coroutines separately from running them.
22582269
end
22592270

2271+
local numberOfPathsCalculated = 0;
22602272
for _, enemyToTarget in ipairs(enemiesToTarget) do
22612273
if MovableMan:ValidMO(enemyToTarget) then
22622274
local internalReinforcementPositionForEnemy;
22632275
local pathLengthFromClosestInternalReinforcementPositionToEnemy = SceneMan.SceneWidth * SceneMan.SceneHeight;
22642276
local enemyToTargetPos = enemyToTarget.Pos;
22652277
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
22722286
coroutine.yield();
22732287
end
22742288
end

0 commit comments

Comments
 (0)