From 89371378b7168dfb01a0bb3db922b00eba6d95c1 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Wed, 24 May 2017 11:49:03 +0200 Subject: [PATCH] Fixed non removal of Planned Tasks --- .../Moose/Functional/Detection.lua | 22 +++++++--- .../Moose/Tasking/Task_A2A_Dispatcher.lua | 43 ++++++++++++------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index d7c8bec7d..8ece18ed5 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -512,7 +512,7 @@ do -- DETECTION_BASE -- @param #string Event The Event string. -- @param #string To The To State string. function DETECTION_BASE:onafterDetect(From,Event,To) - self:E( {From,Event,To}) + self:E( { From, Event, To } ) local DetectDelay = 0.1 self.DetectionCount = 0 @@ -520,7 +520,7 @@ do -- DETECTION_BASE self:UnIdentifyAllDetectedObjects() -- Resets the DetectedObjectsIdentified table for DetectionGroupID, DetectionGroupData in pairs( self.DetectionSetGroup:GetSet() ) do - self:E( {DetectionGroupData}) + --self:E( { DetectionGroupData } ) self:__DetectionGroup( DetectDelay, DetectionGroupData ) -- Process each detection asynchronously. self.DetectionCount = self.DetectionCount + 1 DetectDelay = DetectDelay + 0.1 @@ -533,7 +533,7 @@ do -- DETECTION_BASE -- @param #string To The To State string. -- @param Wrapper.Group#GROUP DetectionGroup The Group detecting. function DETECTION_BASE:onafterDetectionGroup( From, Event, To, DetectionGroup ) - self:E( {From,Event,To}) + self:E( { From, Event, To } ) self.DetectionRun = self.DetectionRun + 1 @@ -1563,7 +1563,7 @@ do -- DETECTION_UNITS local DetectedUnit = DetectedUnitData -- Wrapper.Unit#UNIT local DetectedObject = nil - self:E( DetectedUnit ) + --self:E( DetectedUnit ) if DetectedUnit:IsAlive() then --self:E(DetectedUnit:GetName()) DetectedObject = self:GetDetectedObject( DetectedUnit:GetName() ) @@ -1924,8 +1924,8 @@ do -- DETECTION_TYPES local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate() local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup ) - self:E( { DetectedItemID, - DetectedItemCoordText } ) + --self:E( { DetectedItemID, + -- DetectedItemCoordText } ) local ReportSummary = string.format( "%s - %s", @@ -2374,6 +2374,9 @@ do -- DETECTION_AREAS -- We don't need to add the DetectedObject to the area set, because it is already there ... break + else + DetectedSet:Remove( DetectedUnitName ) + self:AddChangeUnit( DetectedItem, "RU", DetectedUnit:GetTypeName() ) end end end @@ -2425,6 +2428,8 @@ do -- DETECTION_AREAS end end + + -- We iterated through the existing detection areas and: -- - We checked which units are still detected in each detection area. Those units were flagged as Identified. -- - We recentered the detection area to new center units where it was needed. @@ -2488,11 +2493,14 @@ do -- DETECTION_AREAS if DETECTION_AREAS._SmokeDetectedUnits or self._SmokeDetectedUnits then DetectedZone.ZoneUNIT:SmokeRed() end + + --DetectedSet:Flush() + DetectedSet:ForEachUnit( --- @param Wrapper.Unit#UNIT DetectedUnit function( DetectedUnit ) if DetectedUnit:IsAlive() then - self:T( "Detected Set #" .. DetectedItem.ItemID .. ":" .. DetectedUnit:GetName() ) + --self:T( "Detected Set #" .. DetectedItem.ItemID .. ":" .. DetectedUnit:GetName() ) if DETECTION_AREAS._FlareDetectedUnits or self._FlareDetectedUnits then DetectedUnit:FlareGreen() end diff --git a/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua b/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua index 427dd7a46..2790bbc36 100644 --- a/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua +++ b/Moose Development/Moose/Tasking/Task_A2A_Dispatcher.lua @@ -157,7 +157,7 @@ do -- TASK_A2A_DISPATCHER -- @param #boolean DetectedItemID -- @param #boolean DetectedItemChange -- @return Tasking.Task#TASK - function TASK_A2A_DISPATCHER:EvaluateRemoveTask( Mission, Task, Detection, DetectedItem, DetectedItemID, DetectedItemChanged ) + function TASK_A2A_DISPATCHER:EvaluateRemoveTask( Mission, Task, Detection, DetectedItem, DetectedItemIndex, DetectedItemChanged ) if Task then @@ -183,16 +183,16 @@ do -- TASK_A2A_DISPATCHER end local DetectedSet = DetectedItem.Set -- Core.Set#SET_UNIT - DetectedSet:Flush() - self:E( { DetectedSetCount = DetectedSet:Count() } ) + --DetectedSet:Flush() + --self:E( { DetectedSetCount = DetectedSet:Count() } ) if DetectedSet:Count() == 0 then Remove = true end if DetectedItemChanged == true or Remove then - self:E( "Removing Tasking: " .. Task:GetTaskName() ) + --self:E( "Removing Tasking: " .. Task:GetTaskName() ) Mission:RemoveTask( Task ) - self.Tasks[DetectedItemID] = nil + self.Tasks[DetectedItemIndex] = nil end end end @@ -228,7 +228,7 @@ do -- TASK_A2A_DISPATCHER end - self:E( { FriendliesCount = FriendliesCount } ) + --self:E( { FriendliesCount = FriendliesCount } ) local FriendlyTypesReport = REPORT:New() @@ -261,7 +261,7 @@ do -- TASK_A2A_DISPATCHER for PlayerUnitName, PlayerUnitData in pairs( PlayersNearBy ) do local PlayerUnit = PlayerUnitData -- Wrapper.Unit#UNIT local PlayerName = PlayerUnit:GetPlayerName() - self:E( { PlayerName = PlayerName, PlayerUnit = PlayerUnit } ) + --self:E( { PlayerName = PlayerName, PlayerUnit = PlayerUnit } ) if PlayerUnit:IsAirPlane() and PlayerName ~= nil then local FriendlyUnitThreatLevel = PlayerUnit:GetThreatLevel() PlayersCount = PlayersCount + 1 @@ -274,7 +274,7 @@ do -- TASK_A2A_DISPATCHER end - self:E( { PlayersCount = PlayersCount } ) + --self:E( { PlayersCount = PlayersCount } ) local PlayerTypesReport = REPORT:New() @@ -307,23 +307,36 @@ do -- TASK_A2A_DISPATCHER if Mission:IsIDLE() or Mission:IsENGAGED() then local TaskReport = REPORT:New() + + -- Checking the task queue for the dispatcher, and removing any obsolete task! + for TaskIndex, Task in pairs( self.Tasks ) do + local DetectedItem = Detection:GetDetectedItem( TaskIndex ) + if not DetectedItem then + local TaskText = Task:GetName() + for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do + Mission:GetCommandCenter():MessageToGroup( string.format( "Obsolete A2A task %s for %s removed.", TaskText, Mission:GetName() ), TaskGroup ) + end + Mission:RemoveTask( Task ) + self.Tasks[TaskIndex] = nil + end + end - --- First we need to the detected targets. + -- Now that all obsolete tasks are removed, loop through the detected targets. for DetectedItemID, DetectedItem in pairs( Detection:GetDetectedItems() ) do local DetectedItem = DetectedItem -- Functional.Detection#DETECTION_BASE.DetectedItem local DetectedSet = DetectedItem.Set -- Core.Set#SET_UNIT local DetectedCount = DetectedSet:Count() local DetectedZone = DetectedItem.Zone - self:E( { "Targets in DetectedItem", DetectedItem.ItemID, DetectedSet:Count(), tostring( DetectedItem ) } ) - DetectedSet:Flush() + --self:E( { "Targets in DetectedItem", DetectedItem.ItemID, DetectedSet:Count(), tostring( DetectedItem ) } ) + --DetectedSet:Flush() local DetectedID = DetectedItem.ID - local DetectedIndex = DetectedItem.Index + local TaskIndex = DetectedItem.Index local DetectedItemChanged = DetectedItem.Changed - local Task = self.Tasks[DetectedID] - Task = self:EvaluateRemoveTask( Mission, Task, Detection, DetectedItem, DetectedID, DetectedItemChanged ) -- Task will be removed if it is planned and changed. + local Task = self.Tasks[TaskIndex] + Task = self:EvaluateRemoveTask( Mission, Task, Detection, DetectedItem, TaskIndex, DetectedItemChanged ) -- Task will be removed if it is planned and changed. -- Evaluate INTERCEPT if not Task and DetectedCount > 0 then @@ -338,7 +351,7 @@ do -- TASK_A2A_DISPATCHER end if Task then - self.Tasks[DetectedID] = Task + self.Tasks[TaskIndex] = Task Task:SetTargetZone( DetectedZone, DetectedSet:GetFirst():GetAltitude(), DetectedSet:GetFirst():GetHeading() ) Task:SetDispatcher( self ) Mission:AddTask( Task )