diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index 6ea88c0cb..9d58528fe 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -1088,7 +1088,7 @@ do -- DETECTION_BASE -- @return #boolean trhe if there are friendlies nearby function DETECTION_BASE:IsPlayersNearBy( DetectedItem ) - return DetectedItem.PlayersNearBy ~= nil or false + return DetectedItem.PlayersNearBy ~= nil end --- Returns friendly units nearby the FAC units ... @@ -1154,7 +1154,6 @@ do -- DETECTION_BASE world.searchObjects( Object.Category.UNIT, SphereSearch, FindNearByFriendlies, ReportGroupData ) DetectedItem.PlayersNearBy = nil - DetectedItem.PlayersNearBy = DetectedItem.PlayersNearBy or {} local DetectionZone = ZONE_UNIT:New( "DetectionPlayers", DetectedUnit, self.FriendliesRange ) _DATABASE:ForEachPlayer( @@ -1164,7 +1163,10 @@ do -- DETECTION_BASE if PlayerUnit:IsInZone(DetectionZone) then DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} local PlayerUnitName = PlayerUnit:GetName() + DetectedItem.PlayersNearBy = DetectedItem.PlayersNearBy or {} DetectedItem.PlayersNearBy[PlayerUnitName] = PlayerUnit + DetectedItem.FriendliesNearBy = DetectedItem.FriendliesNearBy or {} + DetectedItem.FriendliesNearBy[PlayerUnitName] = PlayerUnit end end ) diff --git a/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua b/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua index d4bf117dc..865189a69 100644 --- a/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua +++ b/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua @@ -153,19 +153,40 @@ do -- TASK_A2A_DISPATCHER -- @param #TASK_A2A_DISPATCHER self -- @param Tasking.Mission#MISSION Mission -- @param Tasking.Task#TASK Task + -- @param Functional.Detection#DETECTION_BASE Detection The detection created by the @{Detection#DETECTION_BASE} derived object. -- @param #boolean DetectedItemID -- @param #boolean DetectedItemChange -- @return Tasking.Task#TASK - function TASK_A2A_DISPATCHER:EvaluateRemoveTask( Mission, Task, DetectedItem, DetectedItemID, DetectedItemChanged ) - + function TASK_A2A_DISPATCHER:EvaluateRemoveTask( Mission, Task, Detection, DetectedItem, DetectedItemID, DetectedItemChanged ) if Task then - local TaskName = Task:GetName() - if Task:IsStatePlanned() and DetectedItemChanged == true then - self:E( "Removing Tasking: " .. Task:GetTaskName() ) - Mission:RemoveTask( Task ) - self.Tasks[DetectedItemID] = nil + if Task:IsStatePlanned() then + local TaskName = Task:GetName() + local TaskType = TaskName:match( "(%u+)%.%d+" ) + + self:E( { TaskType = TaskType } ) + + local Remove = false + + local IsPlayers = Detection:IsPlayersNearBy( DetectedItem ) + if TaskType == "ENGAGE" then + if IsPlayers == false then + Remove = true + end + end + + if TaskType == "INTERCEPT" then + if IsPlayers == true then + Remove = true + end + end + + if DetectedItemChanged == true or Remove then + self:E( "Removing Tasking: " .. Task:GetTaskName() ) + Mission:RemoveTask( Task ) + self.Tasks[DetectedItemID] = nil + end end end @@ -294,7 +315,7 @@ do -- TASK_A2A_DISPATCHER local DetectedItemChanged = DetectedItem.Changed local Task = self.Tasks[DetectedID] - Task = self:EvaluateRemoveTask( Mission, Task, DetectedItem, DetectedID, DetectedItemChanged ) -- Task will be removed if it is planned and changed. + Task = self:EvaluateRemoveTask( Mission, Task, Detection, DetectedItem, DetectedID, DetectedItemChanged ) -- Task will be removed if it is planned and changed. -- Evaluate INTERCEPT if not Task then