Skip to content

Commit ddc6b56

Browse files
committed
Slight improvements to wepaon pickup but doesn't work ideally yet
1 parent cd46b19 commit ddc6b56

File tree

4 files changed

+17
-9
lines changed

4 files changed

+17
-9
lines changed

Data/Base.rte/AI/HumanBehaviors.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,7 @@ function HumanBehaviors.WeaponSearch(AI, Owner, Abort)
665665
local prevMoveTarget, prevSceneWaypoint;
666666
if Owner.MOMoveTarget and MovableMan:ValidMO(Owner.MOMoveTarget) then
667667
prevMoveTarget = Owner.MOMoveTarget;
668+
Owner.MOMoveTarget = nil;
668669
else
669670
prevSceneWaypoint = SceneMan:MovePointToGround(Owner:GetLastAIWaypoint(), Owner.Height/5, 4); -- last wpt or current pos
670671
end
@@ -780,6 +781,7 @@ function HumanBehaviors.ToolSearch(AI, Owner, Abort)
780781
local prevMoveTarget, prevSceneWaypoint;
781782
if Owner.MOMoveTarget and MovableMan:ValidMO(Owner.MOMoveTarget) then
782783
prevMoveTarget = Owner.MOMoveTarget;
784+
Owner.MOMoveTarget = nil;
783785
else
784786
prevSceneWaypoint = SceneMan:MovePointToGround(Owner:GetLastAIWaypoint(), Owner.Height/5, 4); -- last wpt or current pos
785787
end

Data/Base.rte/AI/NativeHumanAI.lua

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,12 @@ function NativeHumanAI:CreateGoldDigBehavior(Owner)
723723
end
724724

725725
function NativeHumanAI:CreateBrainSearchBehavior(Owner)
726+
if self.PickupHD then
727+
-- We're currently trying to pickup a weapon, do that instead
728+
self.Target = nil;
729+
return;
730+
end
731+
726732
self.NextBehavior = coroutine.create(SharedBehaviors.BrainSearch);
727733
self.NextCleanup = nil;
728734
self.NextBehaviorName = "BrainSearch";
@@ -760,8 +766,13 @@ function NativeHumanAI:CreateAttackBehavior(Owner)
760766
self.ReloadTimer:Reset();
761767
self.TargetLostTimer:Reset();
762768

769+
if self.PickupHD then
770+
-- We're currently trying to pickup a weapon, do that instead
771+
self.Target = nil;
772+
return;
773+
end
774+
763775
local dist = SceneMan:ShortestDistance(Owner.Pos, self.Target.Pos, false);
764-
765776
if IsADoor(self.Target) and Owner.AIMode ~= Actor.AIMODE_SQUAD then
766777
--TODO: Include other explosive weapons with varying effective ranges!
767778
if Owner:EquipDeviceInGroup("Tools - Breaching", true) then

Data/Base.rte/AI/SharedBehaviors.lua

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ function SharedBehaviors.FaceAlarm(AI, Owner, Abort)
120120
end
121121

122122
-- find the closest enemy brain
123-
function SharedBehaviors.BrainSearch(AI, Owner, Abort)
123+
function SharedBehaviors.BrainSearch(AI, Owner, Abort)
124124
if AI.PlayerPreferredHD then
125125
Owner:EquipNamedDevice(AI.PlayerPreferredHD, true);
126126
end
@@ -145,9 +145,6 @@ function SharedBehaviors.BrainSearch(AI, Owner, Abort)
145145
end
146146

147147
if #Brains > 0 then
148-
local _ai, _ownr, _abrt = coroutine.yield(); -- wait until next frame
149-
if _abrt then return true end
150-
151148
if #Brains == 1 then
152149
if MovableMan:IsActor(Brains[1]) then
153150
Owner:ClearAIWaypoints();
@@ -214,9 +211,6 @@ function SharedBehaviors.BrainSearch(AI, Owner, Abort)
214211
minDist = score;
215212
ClosestBrain = Act;
216213
end
217-
218-
local _ai, _ownr, _abrt = coroutine.yield(); -- wait until next frame
219-
if _abrt then return true end
220214
end
221215
end
222216

Source/Entities/Actor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,8 +655,9 @@ void Actor::RestDetection() {
655655
}
656656

657657
void Actor::AddAIMOWaypoint(const MovableObject* pMOWaypoint) {
658-
if (g_MovableMan.ValidMO(pMOWaypoint))
658+
if (g_MovableMan.ValidMO(pMOWaypoint) && (m_Waypoints.empty() || m_Waypoints.back().second != pMOWaypoint)) {
659659
m_Waypoints.push_back(std::pair<Vector, const MovableObject*>(pMOWaypoint->GetPos(), pMOWaypoint));
660+
}
660661
}
661662

662663
void Actor::AlarmPoint(const Vector& alarmPoint) {

0 commit comments

Comments
 (0)