From 83ed29a90ad5d05e3d319baf12aa38ed40c16310 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 17 Mar 2017 11:29:23 +0100 Subject: [PATCH] OK. Menu is working again ... --- Moose Development/Moose/Core/Menu.lua | 75 +++++++------- .../Moose/Tasking/CommandCenter.lua | 9 +- Moose Development/Moose/Tasking/Task.lua | 96 ++++++++++-------- ...- A2G Task Dispatching DETECTION_UNITS.miz | Bin 54553 -> 54571 bytes 4 files changed, 102 insertions(+), 78 deletions(-) diff --git a/Moose Development/Moose/Core/Menu.lua b/Moose Development/Moose/Core/Menu.lua index c43010386..25ea2989e 100644 --- a/Moose Development/Moose/Core/Menu.lua +++ b/Moose Development/Moose/Core/Menu.lua @@ -153,8 +153,9 @@ do -- MENU_BASE self.MenuText = MenuText self.MenuParentPath = MenuParentPath self.Menus = {} + self.MenuCount = 0 + self.MenuRemoveParent = false self.MenuTime = timer.getTime() - return self end @@ -168,6 +169,16 @@ do -- MENU_BASE return self.Menus[MenuText] end + --- Sets a @{Menu} to remove automatically the parent menu when the menu removed is the last child menu of that parent @{Menu}. + -- @param #MENU_BASE self + -- @param #boolean RemoveParent If true, the parent menu is automatically removed when this menu is the last child menu of that parent @{Menu}. + -- @return #MENU_BASE + function MENU_BASE:SetRemoveParent( RemoveParent ) + self:F( { RemoveParent } ) + self.MenuRemoveParent = RemoveParent + return self + end + --- Sets a time stamp for later prevention of menu removal. -- @param #MENU_BASE self @@ -804,9 +815,10 @@ do self:T( { "Adding Menu ", MenuText, self.MenuParentPath } ) self.MenuPath = missionCommands.addSubMenuForGroup( self.MenuGroupID, MenuText, self.MenuParentPath ) - if ParentMenu and ParentMenu.Menus then - ParentMenu.Menus[MenuText] = self - self:F( { ParentMenu.Menus, MenuText } ) + if self.ParentMenu and self.ParentMenu.Menus then + self.ParentMenu.Menus[MenuText] = self + self:F( { self.ParentMenu.Menus, MenuText } ) + self.ParentMenu.MenuCount = self.ParentMenu.MenuCount + 1 end end @@ -829,13 +841,16 @@ do end - --- Removes the main menu of this MENU_GROUP. + + --- Removes the main menu and sub menus recursively of this MENU_GROUP. -- @param #MENU_GROUP self -- @param MenuTime -- @return #nil - function MENU_GROUP:RemoveTop( MenuTime ) + function MENU_GROUP:Remove( MenuTime ) self:F( { self.MenuGroupID, self.MenuPath, MenuTime, self.MenuTime } ) + self:RemoveSubMenus( MenuTime ) + if not MenuTime or self.MenuTime ~= MenuTime then if self.MenuGroup._Menus[self.Path] then self = self.MenuGroup._Menus[self.Path] @@ -843,25 +858,19 @@ do missionCommands.removeItemForGroup( self.MenuGroupID, self.MenuPath ) if self.ParentMenu then self.ParentMenu.Menus[self.MenuText] = nil + self.ParentMenu.MenuCount = self.ParentMenu.MenuCount - 1 + if self.ParentMenu.MenuCount == 0 then + if self.MenuRemoveParent == true then + self:T( "Removing Parent Menu " ) + self.ParentMenu:Remove() + end + end end self:T( { "Removing Group Menu:", self.MenuGroup:GetName(), self.MenuGroup._Menus[self.Path].Path } ) self.MenuGroup._Menus[self.Path] = nil self = nil end end - return nil - end - - --- Removes the main menu and sub menus recursively of this MENU_GROUP. - -- @param #MENU_GROUP self - -- @param MenuTime - -- @return #nil - function MENU_GROUP:Remove( MenuTime ) - self:F( { self.MenuGroupID, self.MenuPath } ) - - self:RemoveSubMenus( MenuTime ) - - self:RemoveTop( MenuTime ) return nil end @@ -902,14 +911,13 @@ do self:T( { "Adding Group Command Menu:", MenuGroup:GetName(), MenuText, self.MenuParentPath } ) self.MenuPath = missionCommands.addCommandForGroup( self.MenuGroupID, MenuText, self.MenuParentPath, self.MenuCallHandler, arg ) - if ParentMenu and ParentMenu.Menus then - ParentMenu.Menus[MenuText] = self + if self.ParentMenu and self.ParentMenu.Menus then + self.ParentMenu.Menus[MenuText] = self + self.ParentMenu.MenuCount = self.ParentMenu.MenuCount + 1 self:F( { ParentMenu.Menus, MenuText } ) end end - --self:F( { MenuGroup:GetName(), MenuText, ParentMenu.MenuPath } ) - return self end @@ -926,7 +934,16 @@ do missionCommands.removeItemForGroup( self.MenuGroupID, self.MenuPath ) self:T( { "Removing Group Command Menu:", self.MenuGroup:GetName(), self.MenuText, self.Path, self.MenuGroup._Menus[self.Path].Path } ) + self.ParentMenu.Menus[self.MenuText] = nil + self.ParentMenu.MenuCount = self.ParentMenu.MenuCount - 1 + if self.ParentMenu.MenuCount == 0 then + if self.MenuRemoveParent == true then + self:T( "Removing Parent Menu " ) + self.ParentMenu:Remove() + end + end + self.MenuGroup._Menus[self.Path] = nil self = nil end @@ -935,17 +952,5 @@ do return nil end - --- Removes a menu for a group. - -- @param #MENU_GROUP_COMMAND self - -- @param MenuTime - -- @return #nil - function MENU_GROUP_COMMAND:RemoveTop( MenuTime ) - self:F( { self.MenuGroupID, self.MenuPath, MenuTime, self.MenuTime } ) - - self:Remove( MenuTime ) - - return nil - end - end diff --git a/Moose Development/Moose/Tasking/CommandCenter.lua b/Moose Development/Moose/Tasking/CommandCenter.lua index 92d1c09cb..705c9b7ab 100644 --- a/Moose Development/Moose/Tasking/CommandCenter.lua +++ b/Moose Development/Moose/Tasking/CommandCenter.lua @@ -20,7 +20,9 @@ function REPORT:New( Title ) local self = BASE:Inherit( self, BASE:New() ) self.Report = {} - self.Report[#self.Report+1] = Title + if Title then + self.Report[#self.Report+1] = Title + end return self end @@ -31,7 +33,7 @@ end -- @return #REPORT function REPORT:Add( Text ) self.Report[#self.Report+1] = Text - return self.Report[#self.Report+1] + return self.Report[#self.Report] end function REPORT:Text() @@ -249,7 +251,8 @@ end -- @param #sring Name (optional) The name of the Group used as a prefix for the message to the Group. If not provided, there will be nothing shown. function COMMANDCENTER:MessageToGroup( Message, TaskGroup, Name ) - local Prefix = Name and "@ Group (" .. Name .. "): " or '' + local Prefix = "@ Group" + Prefix = Prefix .. ( Name and " (" .. Name .. "): " or '' ) Message = Prefix .. Message self:GetPositionable():MessageToGroup( Message , 20, TaskGroup, self:GetName() ) diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index 9bad1abe0..06cbbe6ed 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -343,7 +343,7 @@ end ---- Assign the @{Task}to a @{Group}. +--- Assign the @{Task} to a @{Group}. -- @param #TASK self -- @param Wrapper.Group#GROUP TaskGroup -- @return #TASK @@ -355,12 +355,11 @@ function TASK:AssignToGroup( TaskGroup ) TaskGroup:SetState( TaskGroup, "Assigned", self ) local Mission = self:GetMission() - local CommandCenter = Mission:GetCommandCenter() - - CommandCenter:SetMenu() + local MissionMenu = Mission:GetMenu( TaskGroup ) + MissionMenu:RemoveSubMenus() --self:RemoveMenuForGroup( TaskGroup ) - --self:SetAssignedMenuForGroup( TaskGroup ) + self:SetAssignedMenuForGroup( TaskGroup ) local TaskUnits = TaskGroup:GetUnits() for UnitID, UnitData in pairs( TaskUnits ) do @@ -474,7 +473,7 @@ function TASK:UnAssignFromGroup( TaskGroup ) TaskGroup:SetState( TaskGroup, "Assigned", nil ) - self:RemoveMenuForGroup( TaskGroup ) + self:RemoveAssignedMenuForGroup( TaskGroup ) local TaskUnits = TaskGroup:GetUnits() for UnitID, UnitData in pairs( TaskUnits ) do @@ -549,21 +548,6 @@ function TASK:SetMenu( MenuTime ) end ---- Remove the menu options of the @{Task} to all the groups in the SetGroup. --- @param #TASK self --- @param #number MenuTime --- @return #TASK -function TASK:RemoveMenu( MenuTime ) - self:F() - - for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do - local TaskGroup = TaskGroup -- Wrapper.Group#GROUP - if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then - self:RemoveMenuForGroup( TaskGroup, MenuTime ) - end - end -end - --- Set the Menu for a Group -- @param #TASK self @@ -602,7 +586,7 @@ function TASK:SetPlannedMenuForGroup( TaskGroup, MenuText, MenuTime ) local TaskType = self:GetType() local TaskTypeMenu = MENU_GROUP:New( TaskGroup, TaskType, MissionMenu ):SetTime( MenuTime ) - local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, MenuText, TaskTypeMenu, self.MenuAssignToGroup, { self = self, TaskGroup = TaskGroup } ):SetTime( MenuTime ) + local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, MenuText, TaskTypeMenu, self.MenuAssignToGroup, { self = self, TaskGroup = TaskGroup } ):SetTime( MenuTime ):SetRemoveParent( true ) return self end @@ -626,12 +610,30 @@ function TASK:SetAssignedMenuForGroup( TaskGroup, MenuTime ) return self end +--- Remove the menu options of the @{Task} to all the groups in the SetGroup. +-- @param #TASK self +-- @param #number MenuTime +-- @return #TASK +function TASK:RemoveMenu( MenuTime ) + self:F() + + for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do + local TaskGroup = TaskGroup -- Wrapper.Group#GROUP + if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then + if not self:IsAssignedToGroup( TaskGroup ) then + self:RemovePlannedMenuForGroup( TaskGroup, MenuTime ) + end + end + end +end + + --- Remove the menu option of the @{Task} for a @{Group}. -- @param #TASK self -- @param Wrapper.Group#GROUP TaskGroup -- @param #number MenuTime -- @return #TASK self -function TASK:RemoveMenuForGroup( TaskGroup, MenuTime ) +function TASK:RemovePlannedMenuForGroup( TaskGroup, MenuTime ) self:F() local Mission = self:GetMission() @@ -646,12 +648,28 @@ function TASK:RemoveMenuForGroup( TaskGroup, MenuTime ) if TypeMenu then local TaskMenu = TypeMenu:GetMenu( self:GetTaskName() ) if TaskMenu then - TaskMenu:RemoveTop( MenuTime ) + TaskMenu:Remove( MenuTime ) end - TypeMenu:RemoveTop( MenuTime ) end - - MissionMenu:RemoveTop( MenuTime ) + end + +end + +--- Remove the assigned menu option of the @{Task} for a @{Group}. +-- @param #TASK self +-- @param Wrapper.Group#GROUP TaskGroup +-- @param #number MenuTime +-- @return #TASK self +function TASK:RemoveAssignedMenuForGroup( TaskGroup ) + self:F() + + local Mission = self:GetMission() + local MissionName = Mission:GetName() + + local MissionMenu = Mission:GetMenu( TaskGroup ) + + if MissionMenu then + MissionMenu:RemoveSubMenus() end end @@ -670,7 +688,10 @@ end -- @param #TASK self function TASK:MenuTaskStatus( TaskGroup ) - self:ReportDetails() + local ReportText = self:ReportDetails() + + self:T( ReportText ) + self:GetMission():GetCommandCenter():MessageToGroup( ReportText, TaskGroup ) end @@ -1112,24 +1133,19 @@ function TASK:ReportDetails() -- Determine the status of the Task. local State = self:GetState() - -- Loop each Unit active in the Task, and find Player Names. local PlayerNames = {} - for PlayerGroupID, PlayerGroup in pairs( self:GetGroups():GetSet() ) do - local Player = PlayerGroup -- Wrapper.Group#GROUP - for PlayerUnitID, PlayerUnit in pairs( PlayerGroup:GetUnits() ) do - local PlayerUnit = PlayerUnit -- Wrapper.Unit#UNIT - if PlayerUnit and PlayerUnit:IsAlive() then - local PlayerName = PlayerUnit:GetPlayerName() - PlayerNames[#PlayerNames+1] = PlayerName - end + local PlayerReport = REPORT:New( " - Players:" ) + for PlayerGroupID, PlayerGroupData in pairs( self:GetGroups():GetSet() ) do + local PlayerGroup = PlayerGroupData -- Wrapper.Group#GROUP + PlayerNames = PlayerGroup:GetPlayerNames() + if PlayerNames then + PlayerReport:Add( " -- Group " .. PlayerGroup:GetCallsign() .. ": " .. table.concat( PlayerNames, ", " ) ) end - local PlayerNameText = table.concat( PlayerNames, ", " ) - Report:Add( "Task " .. Name .. " - State '" .. State .. "' - Players " .. PlayerNameText ) end -- Loop each Process in the Task, and find Reporting Details. - + Report:Add( string.format( " - Task %s\n -- State '%s'\n%s", Name, State, PlayerReport:Text() ) ) return Report:Text() end diff --git a/Moose Test Missions/TAD - Task Dispatching/TAD-120 - A2G Task Dispatching DETECTION_UNITS/TAD-120 - A2G Task Dispatching DETECTION_UNITS.miz b/Moose Test Missions/TAD - Task Dispatching/TAD-120 - A2G Task Dispatching DETECTION_UNITS/TAD-120 - A2G Task Dispatching DETECTION_UNITS.miz index 0b0f1d27e8d0e963c6a0ea34640870103450ba14..1f3af78bbf10e5b1b6f436accbff99c89e2d3cff 100644 GIT binary patch delta 12938 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 AUH||9 delta 12889 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 DR-Xuk