From 02c671bd6309851687435d80092e074eb20d2593 Mon Sep 17 00:00:00 2001 From: FlightControl_Master Date: Mon, 11 Dec 2017 11:08:15 +0100 Subject: [PATCH] Ensuring that only alive groups are handled, trying to solve the menu issues. Optimizing the threatlevel boxes. --- Moose Development/Moose/Core/Set.lua | 44 ++++++++++++------- .../Moose/Functional/Designate.lua | 12 ++--- .../Moose/Functional/Detection.lua | 6 +-- Moose Development/Moose/Tasking/Task.lua | 16 +++---- Moose Development/Moose/Tasking/Task_A2A.lua | 9 ++-- Moose Development/Moose/Tasking/Task_A2G.lua | 2 +- 6 files changed, 53 insertions(+), 36 deletions(-) diff --git a/Moose Development/Moose/Core/Set.lua b/Moose Development/Moose/Core/Set.lua index e98007512..9ac57f7f5 100644 --- a/Moose Development/Moose/Core/Set.lua +++ b/Moose Development/Moose/Core/Set.lua @@ -719,20 +719,22 @@ end --- Gets the Set. -- @param #SET_GROUP self -- @return #SET_GROUP self ---function SET_BASE:GetSet() --- self:F2() --- --- -- Clean the Set before returning with only the alive Groups. --- for GroupName, GroupObject in pairs( self.Set ) do --- if GroupObject then --- if not GroupObject:IsAlive() then --- self:Remove( GroupName ) --- end --- end --- end --- --- return self.Set ---end +function SET_GROUP:GetAliveSet() + self:F2() + + local AliveSet = SET_GROUP:New() + + -- Clean the Set before returning with only the alive Groups. + for GroupName, GroupObject in pairs( self.Set ) do + if GroupObject then + if GroupObject:IsAlive() then + AliveSet:Add( GroupName, GroupObject ) + end + end + end + + return AliveSet +end --- Add GROUP(s) to SET_GROUP. @@ -984,7 +986,7 @@ function SET_GROUP:FindInDatabase( Event ) return Event.IniDCSGroupName, self.Database[Event.IniDCSGroupName] end ---- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP, providing the GROUP and optional parameters. +--- Iterate the SET_GROUP and call an iterator function for each GROUP object, providing the GROUP and optional parameters. -- @param #SET_GROUP self -- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. -- @return #SET_GROUP self @@ -996,6 +998,18 @@ function SET_GROUP:ForEachGroup( IteratorFunction, ... ) return self end +--- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP object, providing the GROUP and optional parameters. +-- @param #SET_GROUP self +-- @param #function IteratorFunction The function that will be called when there is an alive GROUP in the SET_GROUP. The function needs to accept a GROUP parameter. +-- @return #SET_GROUP self +function SET_GROUP:ForEachGroupAlive( IteratorFunction, ... ) + self:F2( arg ) + + self:ForEach( IteratorFunction, arg, self:GetAliveSet() ) + + return self +end + --- Iterate the SET_GROUP and call an iterator function for each **alive** GROUP presence completely in a @{Zone}, providing the GROUP and optional parameters to the called function. -- @param #SET_GROUP self -- @param Core.Zone#ZONE ZoneObject The Zone to be tested for. diff --git a/Moose Development/Moose/Functional/Designate.lua b/Moose Development/Moose/Functional/Designate.lua index feba29486..7cd970b53 100644 --- a/Moose Development/Moose/Functional/Designate.lua +++ b/Moose Development/Moose/Functional/Designate.lua @@ -424,7 +424,7 @@ do -- DESIGNATE self.FlashStatusMenu = {} - self.AttackSet:ForEachGroup( + self.AttackSet:ForEachGroupAlive( --- @param Wrapper.Group#GROUP GroupReport function( AttackGroup ) @@ -688,7 +688,7 @@ do -- DESIGNATE self:F("Removing") -- This Detection is obsolete, remove from the designate scope self.Designating[DesignateIndex] = nil - self.AttackSet:ForEachGroup( + self.AttackSet:ForEachGroupAlive( --- @param Wrapper.Group#GROUP AttackGroup function( AttackGroup ) if AttackGroup:IsAlive() == true then @@ -714,7 +714,7 @@ do -- DESIGNATE if DetectedItem.DistanceRecce <= self.MaximumDistanceDesignations then if self.Designating[DesignateIndex] == nil then -- ok, we added one item to the designate scope. - self.AttackSet:ForEachGroup( + self.AttackSet:ForEachGroupAlive( function( AttackGroup ) local DetectionText = self.Detection:DetectedItemReportSummary( DesignateIndex, AttackGroup ):Text( ", " ) self.CC:GetPositionable():MessageToGroup( "Targets detected at \n" .. DetectionText, 10, AttackGroup, self.DesignateName ) @@ -760,7 +760,7 @@ do -- DESIGNATE Duration = Duration or 10 - self.AttackSet:ForEachGroup( + self.AttackSet:ForEachGroupAlive( --- @param Wrapper.Group#GROUP GroupReport function( AttackGroup ) @@ -785,7 +785,7 @@ do -- DESIGNATE local DesignationReport = REPORT:New( "Marking Targets:\n" ) - self.RecceSet:ForEachGroup( + self.RecceSet:ForEachGroupAlive( function( RecceGroup ) local RecceUnits = RecceGroup:GetUnits() for UnitID, RecceData in pairs( RecceUnits ) do @@ -812,7 +812,7 @@ do -- DESIGNATE self.AttackSet:Flush() - self.AttackSet:ForEachGroup( + self.AttackSet:ForEachGroupAlive( --- @param Wrapper.Group#GROUP GroupReport function( AttackGroup ) diff --git a/Moose Development/Moose/Functional/Detection.lua b/Moose Development/Moose/Functional/Detection.lua index 6ae914ccf..c507ac8b0 100644 --- a/Moose Development/Moose/Functional/Detection.lua +++ b/Moose Development/Moose/Functional/Detection.lua @@ -2004,7 +2004,7 @@ do -- DETECTION_UNITS local Report = REPORT:New() Report:Add(DetectedItemID .. ", " .. DetectedItemCoordText) - Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ) ) ) + Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ), string.rep( "□", 10-ThreatLevelA2G ) ) ) Report:Add( string.format("Type: %s%s", UnitCategoryText, UnitDistanceText ) ) return Report end @@ -2236,7 +2236,7 @@ do -- DETECTION_TYPES local Report = REPORT:New() Report:Add(DetectedItemID .. ", " .. DetectedItemCoordText) - Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ) ) ) + Report:Add( string.format( "Threat: [%s%s]", string.rep( "■", ThreatLevelA2G ), string.rep( "□", 10-ThreatLevelA2G ) ) ) Report:Add( string.format("Type: %2d of %s", DetectedItemsCount, DetectedItemType ) ) return Report end @@ -2387,7 +2387,7 @@ do -- DETECTION_AREAS local Report = REPORT:New() Report:Add(DetectedItemID .. ", " .. DetectedItemCoordText) - Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ) ) ) + Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ), string.rep( "□", 10-ThreatLevelA2G ) ) ) Report:Add( string.format("Type: %2d of %s", DetectedItemsCount, DetectedItemsTypes ) ) return Report diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index f952db24a..7a0d9475b 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -619,7 +619,7 @@ function TASK:MessageToGroups( Message ) local Mission = self:GetMission() local CC = Mission:GetCommandCenter() - for TaskGroupName, TaskGroup in pairs( self.SetGroup:GetSet() ) do + for TaskGroupName, TaskGroup in pairs( self.SetGroup:GetAliveSet() ) do local TaskGroup = TaskGroup -- Wrapper.Group#GROUP CC:MessageToGroup( Message, TaskGroup, TaskGroup:GetName() ) end @@ -631,7 +631,7 @@ end function TASK:SendBriefingToAssignedGroups() self:F2() - for TaskGroupName, TaskGroup in pairs( self.SetGroup:GetSet() ) do + for TaskGroupName, TaskGroup in pairs( self.SetGroup:GetAliveSet() ) do if self:IsGroupAssigned( TaskGroup ) then TaskGroup:Message( self.TaskBriefing, 60 ) @@ -645,7 +645,7 @@ end function TASK:UnAssignFromGroups() self:F2() - for TaskGroupName, TaskGroup in pairs( self.SetGroup:GetSet() ) do + for TaskGroupName, TaskGroup in pairs( self.SetGroup:GetAliveSet() ) do if self:IsGroupAssigned(TaskGroup) then self:UnAssignFromGroup( TaskGroup ) end @@ -660,7 +660,7 @@ end function TASK:HasAliveUnits() self:F() - for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do + for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetAliveSet() ) do if self:IsStateAssigned() then if self:IsGroupAssigned( TaskGroup ) then for TaskUnitID, TaskUnit in pairs( TaskGroup:GetUnits() ) do @@ -685,7 +685,7 @@ function TASK:SetMenu( MenuTime ) --R2.1 Mission Reports and Task Reports added. self:F( { self:GetName(), MenuTime } ) --self.SetGroup:Flush() - for TaskGroupID, TaskGroupData in pairs( self.SetGroup:GetSet() ) do + for TaskGroupID, TaskGroupData in pairs( self.SetGroup:GetAliveSet() ) do local TaskGroup = TaskGroupData -- Wrapper.Group#GROUP if TaskGroup:IsAlive() == true and TaskGroup:GetPlayerNames() then @@ -799,7 +799,7 @@ end function TASK:RemoveMenu( MenuTime ) self:F( { self:GetName(), MenuTime } ) - for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do + for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetAliveSet() ) do local TaskGroup = TaskGroup -- Wrapper.Group#GROUP if TaskGroup:IsAlive() == true and TaskGroup:GetPlayerNames() then self:RefreshMenus( TaskGroup, MenuTime ) @@ -1508,7 +1508,7 @@ function TASK:GetPlayerCount() --R2.1 Get a count of the players. local PlayerCount = 0 -- Loop each Unit active in the Task, and find Player Names. - for TaskGroupID, PlayerGroup in pairs( self:GetGroups():GetSet() ) do + for TaskGroupID, PlayerGroup in pairs( self:GetGroups():GetAliveSet() ) do local PlayerGroup = PlayerGroup -- Wrapper.Group#GROUP if self:IsGroupAssigned( PlayerGroup ) then local PlayerNames = PlayerGroup:GetPlayerNames() @@ -1528,7 +1528,7 @@ function TASK:GetPlayerNames() --R2.1 Get a map of the players. local PlayerNameMap = {} -- Loop each Unit active in the Task, and find Player Names. - for TaskGroupID, PlayerGroup in pairs( self:GetGroups():GetSet() ) do + for TaskGroupID, PlayerGroup in pairs( self:GetGroups():GetAliveSet() ) do local PlayerGroup = PlayerGroup -- Wrapper.Group#GROUP if self:IsGroupAssigned( PlayerGroup ) then local PlayerNames = PlayerGroup:GetPlayerNames() diff --git a/Moose Development/Moose/Tasking/Task_A2A.lua b/Moose Development/Moose/Tasking/Task_A2A.lua index 44687a2fb..dc4acd62c 100644 --- a/Moose Development/Moose/Tasking/Task_A2A.lua +++ b/Moose Development/Moose/Tasking/Task_A2A.lua @@ -367,7 +367,8 @@ do -- TASK_A2A_INTERCEPT local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate() self:SetInfo( "Coordinate", TargetCoordinate, 0 ) - self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 ) + local ThreatLevel = self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() + self:SetInfo( "Threat", "[" .. string.rep( "■", ThreatLevel ) .. string.rep( "□", 10 - ThreatLevel ) .. "]", 11 ) if self.Detection then local DetectedItemsCount = self.TargetSetUnit:Count() @@ -523,7 +524,8 @@ do -- TASK_A2A_SWEEP local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate() self:SetInfo( "Coordinate", TargetCoordinate, 0 ) - self:SetInfo( "Assumed Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 ) + local ThreatLevel = self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() + self:SetInfo( "Assumed Threat", "[" .. string.rep( "■", ThreatLevel ) .. string.rep( "□", 10 - ThreatLevel ) .. "]", 11 ) if self.Detection then local DetectedItemsCount = self.TargetSetUnit:Count() @@ -672,7 +674,8 @@ do -- TASK_A2A_ENGAGE local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate() self:SetInfo( "Coordinate", TargetCoordinate, 0 ) - self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 ) + local ThreatLevel = self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() + self:SetInfo( "Threat", "[" .. string.rep( "■", ThreatLevel ) .. string.rep( "□", 10 - ThreatLevel ) .. "]", 11 ) if self.Detection then local DetectedItemsCount = self.TargetSetUnit:Count() diff --git a/Moose Development/Moose/Tasking/Task_A2G.lua b/Moose Development/Moose/Tasking/Task_A2G.lua index c2344e83e..5473231cc 100644 --- a/Moose Development/Moose/Tasking/Task_A2G.lua +++ b/Moose Development/Moose/Tasking/Task_A2G.lua @@ -353,7 +353,7 @@ do -- TASK_A2G else ThreatLevel, ThreatText = self.TargetSetUnit:CalculateThreatLevelA2G() end - self:SetInfo( "Threat", ThreatText .. " [" .. string.rep( "■", ThreatLevel ) .. "]", 11 ) + self:SetInfo( "Threat", ThreatText .. " [" .. string.rep( "■", ThreatLevel ) .. string.rep( "□", 10 - ThreatLevel ) .. "]", 11 ) if self.Detection then local DetectedItemsCount = self.TargetSetUnit:Count()