From 99cbe0c8bb901ed205ab256e74ac968fcc652463 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Fri, 5 May 2017 10:50:12 +0200 Subject: [PATCH] Heavy rework of the menus and now it is much better --- Moose Development/Moose/Core/Menu.lua | 2 +- .../Moose/Tasking/CommandCenter.lua | 1 - Moose Development/Moose/Tasking/Mission.lua | 58 ++++++++++- Moose Development/Moose/Tasking/Task.lua | 97 +++++++++++-------- Moose Development/Moose/Wrapper/Group.lua | 2 +- 5 files changed, 115 insertions(+), 45 deletions(-) diff --git a/Moose Development/Moose/Core/Menu.lua b/Moose Development/Moose/Core/Menu.lua index c38f763d4..70028b829 100644 --- a/Moose Development/Moose/Core/Menu.lua +++ b/Moose Development/Moose/Core/Menu.lua @@ -82,7 +82,7 @@ do -- MENU_BASE -- @param #string MenuText The text of the child menu. -- @return #MENU_BASE function MENU_BASE:GetMenu( MenuText ) - self:F( { self.Menus, MenuText } ) + self:F2( { Menu = self.Menus[MenuText] } ) return self.Menus[MenuText] end diff --git a/Moose Development/Moose/Tasking/CommandCenter.lua b/Moose Development/Moose/Tasking/CommandCenter.lua index 7b05761b1..2a696ead2 100644 --- a/Moose Development/Moose/Tasking/CommandCenter.lua +++ b/Moose Development/Moose/Tasking/CommandCenter.lua @@ -269,7 +269,6 @@ end -- @param #COMMANDCENTER self -- @return Core.Menu#MENU_COALITION function COMMANDCENTER:GetMenu() - self:F() return self.CommandCenterMenu end diff --git a/Moose Development/Moose/Tasking/Mission.lua b/Moose Development/Moose/Tasking/Mission.lua index 00451544a..54032cda1 100644 --- a/Moose Development/Moose/Tasking/Mission.lua +++ b/Moose Development/Moose/Tasking/Mission.lua @@ -12,6 +12,7 @@ MISSION = { ClassName = "MISSION", Name = "", MissionStatus = "PENDING", + AssignedGroups = {}, } --- This is the main MISSION declaration method. Each Mission is like the master or a Mission orchestration between, Clients, Tasks, Stages etc. @@ -366,7 +367,7 @@ end -- @param #MISSION self -- @param #number MenuTime function MISSION:SetMenu( MenuTime ) - self:F() + self:F( { self:GetName(), MenuTime } ) for _, TaskData in pairs( self:GetTasks() ) do local Task = TaskData -- Tasking.Task#TASK @@ -378,7 +379,7 @@ end -- @param #MISSION self -- @param #number MenuTime function MISSION:RemoveMenu( MenuTime ) - self:F() + self:F( { self:GetName(), MenuTime } ) for _, Task in pairs( self:GetTasks() ) do local Task = Task -- Tasking.Task#TASK @@ -387,6 +388,58 @@ function MISSION:RemoveMenu( MenuTime ) end +do -- Group Assignment + + --- Returns if the @{Mission} is assigned to the Group. + -- @param #MISSION self + -- @param Wrapper.Group#GROUP MissionGroup + -- @return #boolean + function MISSION:IsGroupAssigned( MissionGroup ) + + local MissionGroupName = MissionGroup:GetName() + + if self.AssignedGroups[MissionGroupName] == MissionGroup then + self:T( { "Mission is assigned to:", MissionGroup:GetName() } ) + return true + end + + self:T( { "Mission is not assigned to:", MissionGroup:GetName() } ) + return false + end + + + --- Set @{Group} assigned to the @{Mission}. + -- @param #MISSION self + -- @param Wrapper.Group#GROUP MissionGroup + -- @return #MISSION + function MISSION:SetGroupAssigned( MissionGroup ) + + local MissionName = self:GetName() + local MissionGroupName = MissionGroup:GetName() + + self.AssignedGroups[MissionGroupName] = MissionGroup + self:E( string.format( "Mission %s is assigned to %s", MissionName, MissionGroupName ) ) + + return self + end + + --- Clear the @{Group} assignment from the @{Mission}. + -- @param #MISSION self + -- @param Wrapper.Group#GROUP MissionGroup + -- @return #MISSION + function MISSION:ClearGroupAssignment( MissionGroup ) + + local MissionName = self:GetName() + local MissionGroupName = MissionGroup:GetName() + + self.AssignedGroups[MissionGroupName] = nil + self:E( string.format( "Mission %s is unassigned to %s", MissionName, MissionGroupName ) ) + + return self + end + +end + --- Gets the COMMANDCENTER. -- @param #MISSION self -- @return Tasking.CommandCenter#COMMANDCENTER @@ -642,7 +695,6 @@ end -- Tasks = Mission:GetTasks() -- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" ) function MISSION:GetTasks() - self:F() return self.Tasks end diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index 07fa7ee00..be5fb9b0d 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -391,6 +391,9 @@ do -- Group Assignment self.AssignedGroups[TaskGroupName] = TaskGroup self:E( string.format( "Task %s is assigned to %s", TaskName, TaskGroupName ) ) + -- Set the group to be assigned at mission level. This allows to decide the menu options on mission level for this group. + self:GetMission():SetGroupAssigned( TaskGroup ) + local SetAssignedGroups = self:GetGroups() SetAssignedGroups:ForEachGroup( @@ -417,6 +420,9 @@ do -- Group Assignment self.AssignedGroups[TaskGroupName] = nil self:E( string.format( "Task %s is unassigned to %s", TaskName, TaskGroupName ) ) + + -- Set the group to be assigned at mission level. This allows to decide the menu options on mission level for this group. + self:GetMission():ClearGroupAssignment( TaskGroup ) local SetAssignedGroups = self:GetGroups() @@ -448,12 +454,6 @@ do -- Group Assignment self:SetGroupAssigned( TaskGroup ) - local Mission = self:GetMission() - local MissionMenu = Mission:GetMenu( TaskGroup ) - MissionMenu:RemoveSubMenus() - - self:SetAssignedMenuForGroup( TaskGroup ) - local TaskUnits = TaskGroup:GetUnits() for UnitID, UnitData in pairs( TaskUnits ) do local TaskUnit = UnitData -- Wrapper.Unit#UNIT @@ -463,6 +463,10 @@ do -- Group Assignment self:AssignToUnit( TaskUnit ) end end + + local Mission = self:GetMission() + local CommandCenter = Mission:GetCommandCenter() + CommandCenter:SetMenu() return self end @@ -474,8 +478,6 @@ do -- Group Assignment self:ClearGroupAssignment( TaskGroup ) - self:RemoveAssignedMenuForGroup( TaskGroup ) - local TaskUnits = TaskGroup:GetUnits() for UnitID, UnitData in pairs( TaskUnits ) do local TaskUnit = UnitData -- Wrapper.Unit#UNIT @@ -484,8 +486,11 @@ do -- Group Assignment self:UnAssignFromUnit( TaskUnit ) end end + + local Mission = self:GetMission() + local CommandCenter = Mission:GetCommandCenter() + CommandCenter:SetMenu() end - end @@ -611,9 +616,9 @@ end -- @param #number MenuTime -- @return #TASK function TASK:SetMenu( MenuTime ) --R2.1 Mission Reports and Task Reports added. Fixes issue #424. - self:F() + self:F( { self:GetName(), MenuTime } ) - self.SetGroup:Flush() + --self.SetGroup:Flush() for TaskGroupID, TaskGroupData in pairs( self.SetGroup:GetSet() ) do local TaskGroup = TaskGroupData -- Wrapper.Group#GROUP if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then @@ -647,10 +652,9 @@ end -- @return #TASK function TASK:SetMenuForGroup( TaskGroup, MenuTime ) + self:SetPlannedMenuForGroup( TaskGroup, MenuTime ) if self:IsGroupAssigned( TaskGroup ) then self:SetAssignedMenuForGroup( TaskGroup, MenuTime ) - else - self:SetPlannedMenuForGroup( TaskGroup, self:GetTaskName(), MenuTime ) end end @@ -661,7 +665,7 @@ end -- @param #string MenuText The menu text. -- @param #number MenuTime -- @return #TASK self -function TASK:SetPlannedMenuForGroup( TaskGroup, MenuText, MenuTime ) +function TASK:SetPlannedMenuForGroup( TaskGroup, MenuTime ) self:E( TaskGroup:GetName() ) local Mission = self:GetMission() @@ -669,14 +673,21 @@ function TASK:SetPlannedMenuForGroup( TaskGroup, MenuText, MenuTime ) local CommandCenter = Mission:GetCommandCenter() local CommandCenterMenu = CommandCenter:GetMenu() + local TaskType = self:GetType() + local TaskText = self:GetName() + local MissionMenu = MENU_GROUP:New( TaskGroup, MissionName, CommandCenterMenu ):SetTime( MenuTime ) - local MissionMenu = Mission:GetMenu( TaskGroup ) - 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 ):SetRemoveParent( true ) + local TaskPlannedMenu = MENU_GROUP:New( TaskGroup, "Planned Tasks", MissionMenu ):SetTime( MenuTime ) + local TaskTypeMenu = MENU_GROUP:New( TaskGroup, TaskType, TaskPlannedMenu ):SetTime( MenuTime ):SetRemoveParent( true ) + local TaskTypeMenu = MENU_GROUP:New( TaskGroup, TaskText, TaskTypeMenu ):SetTime( MenuTime ):SetRemoveParent( true ) + local ReportTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Report Task %s Status", TaskText ), TaskTypeMenu, self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ):SetRemoveParent( true ) + + if not Mission:IsGroupAssigned( TaskGroup ) then + local JoinTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Join Task %s", TaskText ), TaskTypeMenu, self.MenuAssignToGroup, { self = self, TaskGroup = TaskGroup } ):SetTime( MenuTime ):SetRemoveParent( true ) + end return self end @@ -687,15 +698,23 @@ end -- @param #number MenuTime -- @return #TASK self function TASK:SetAssignedMenuForGroup( TaskGroup, MenuTime ) - self:E( TaskGroup:GetName() ) + self:F( { TaskGroup:GetName(), MenuTime } ) local Mission = self:GetMission() + local MissionName = Mission:GetName() + local CommandCenter = Mission:GetCommandCenter() + local CommandCenterMenu = CommandCenter:GetMenu() + + local TaskType = self:GetType() + local TaskText = self:GetName() + + local MissionMenu = MENU_GROUP:New( TaskGroup, MissionName, CommandCenterMenu ):SetTime( MenuTime ) local MissionMenu = Mission:GetMenu( TaskGroup ) - self:E( { MissionMenu = MissionMenu } ) - local TaskTypeMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Task Status", MissionMenu, self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ) - local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Abort Task", MissionMenu, self.MenuTaskAbort, self, TaskGroup ):SetTime( MenuTime ) + local TaskAssignedMenu = MENU_GROUP:New( TaskGroup, string.format( "Assigned Task %s", TaskText ), MissionMenu ):SetTime( MenuTime ) + local TaskTypeMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Report Task %s Status", TaskText ), TaskAssignedMenu, self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ):SetRemoveParent( true ) + local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Abort Group from Task %s", TaskText ), TaskAssignedMenu, self.MenuTaskAbort, self, TaskGroup ):SetTime( MenuTime ):SetRemoveParent( true ) return self end @@ -705,14 +724,12 @@ end -- @param #number MenuTime -- @return #TASK function TASK:RemoveMenu( MenuTime ) - self:F() + self:F( { self:GetName(), MenuTime } ) 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:IsGroupAssigned( TaskGroup ) then - self:RemovePlannedMenuForGroup( TaskGroup, MenuTime ) - end + self:RefreshMenus( TaskGroup, MenuTime ) end end end @@ -723,24 +740,26 @@ end -- @param Wrapper.Group#GROUP TaskGroup -- @param #number MenuTime -- @return #TASK self -function TASK:RemovePlannedMenuForGroup( TaskGroup, MenuTime ) - self:F() +function TASK:RefreshMenus( TaskGroup, MenuTime ) + self:F( { TaskGroup:GetName(), MenuTime } ) local Mission = self:GetMission() local MissionName = Mission:GetName() - + local CommandCenter = Mission:GetCommandCenter() + local CommandCenterMenu = CommandCenter:GetMenu() + local MissionMenu = Mission:GetMenu( TaskGroup ) + + local TaskText = self:GetName() + local PlannedMenu = MissionMenu:GetMenu( string.format( "Planned Tasks", TaskText ) ) + local AssignedMenu = MissionMenu:GetMenu( string.format( "Assigned Task %s", TaskText ) ) - if MissionMenu then - local TaskType = self:GetType() - local TypeMenu = MissionMenu:GetMenu( TaskType ) - - if TypeMenu then - local TaskMenu = TypeMenu:GetMenu( self:GetTaskName() ) - if TaskMenu then - TaskMenu:Remove( MenuTime ) - end - end + if PlannedMenu then + PlannedMenu:Remove( MenuTime ) + end + + if AssignedMenu then + AssignedMenu:Remove( MenuTime ) end end diff --git a/Moose Development/Moose/Wrapper/Group.lua b/Moose Development/Moose/Wrapper/Group.lua index 02bbd7722..3be9bc187 100644 --- a/Moose Development/Moose/Wrapper/Group.lua +++ b/Moose Development/Moose/Wrapper/Group.lua @@ -1141,7 +1141,7 @@ do -- Players end end - self:F( PlayerNames ) + self:F2( PlayerNames ) return PlayerNames end