mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Heavy rework of the menus and now it is much better
This commit is contained in:
@@ -82,7 +82,7 @@ do -- MENU_BASE
|
|||||||
-- @param #string MenuText The text of the child menu.
|
-- @param #string MenuText The text of the child menu.
|
||||||
-- @return #MENU_BASE
|
-- @return #MENU_BASE
|
||||||
function MENU_BASE:GetMenu( MenuText )
|
function MENU_BASE:GetMenu( MenuText )
|
||||||
self:F( { self.Menus, MenuText } )
|
self:F2( { Menu = self.Menus[MenuText] } )
|
||||||
return self.Menus[MenuText]
|
return self.Menus[MenuText]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -269,7 +269,6 @@ end
|
|||||||
-- @param #COMMANDCENTER self
|
-- @param #COMMANDCENTER self
|
||||||
-- @return Core.Menu#MENU_COALITION
|
-- @return Core.Menu#MENU_COALITION
|
||||||
function COMMANDCENTER:GetMenu()
|
function COMMANDCENTER:GetMenu()
|
||||||
self:F()
|
|
||||||
return self.CommandCenterMenu
|
return self.CommandCenterMenu
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ MISSION = {
|
|||||||
ClassName = "MISSION",
|
ClassName = "MISSION",
|
||||||
Name = "",
|
Name = "",
|
||||||
MissionStatus = "PENDING",
|
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.
|
--- 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 #MISSION self
|
||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
function MISSION:SetMenu( MenuTime )
|
function MISSION:SetMenu( MenuTime )
|
||||||
self:F()
|
self:F( { self:GetName(), MenuTime } )
|
||||||
|
|
||||||
for _, TaskData in pairs( self:GetTasks() ) do
|
for _, TaskData in pairs( self:GetTasks() ) do
|
||||||
local Task = TaskData -- Tasking.Task#TASK
|
local Task = TaskData -- Tasking.Task#TASK
|
||||||
@@ -378,7 +379,7 @@ end
|
|||||||
-- @param #MISSION self
|
-- @param #MISSION self
|
||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
function MISSION:RemoveMenu( MenuTime )
|
function MISSION:RemoveMenu( MenuTime )
|
||||||
self:F()
|
self:F( { self:GetName(), MenuTime } )
|
||||||
|
|
||||||
for _, Task in pairs( self:GetTasks() ) do
|
for _, Task in pairs( self:GetTasks() ) do
|
||||||
local Task = Task -- Tasking.Task#TASK
|
local Task = Task -- Tasking.Task#TASK
|
||||||
@@ -387,6 +388,58 @@ function MISSION:RemoveMenu( MenuTime )
|
|||||||
end
|
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.
|
--- Gets the COMMANDCENTER.
|
||||||
-- @param #MISSION self
|
-- @param #MISSION self
|
||||||
-- @return Tasking.CommandCenter#COMMANDCENTER
|
-- @return Tasking.CommandCenter#COMMANDCENTER
|
||||||
@@ -642,7 +695,6 @@ end
|
|||||||
-- Tasks = Mission:GetTasks()
|
-- Tasks = Mission:GetTasks()
|
||||||
-- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" )
|
-- env.info( "Task 2 Completion = " .. Tasks[2]:GetGoalPercentage() .. "%" )
|
||||||
function MISSION:GetTasks()
|
function MISSION:GetTasks()
|
||||||
self:F()
|
|
||||||
|
|
||||||
return self.Tasks
|
return self.Tasks
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -391,6 +391,9 @@ do -- Group Assignment
|
|||||||
self.AssignedGroups[TaskGroupName] = TaskGroup
|
self.AssignedGroups[TaskGroupName] = TaskGroup
|
||||||
self:E( string.format( "Task %s is assigned to %s", TaskName, TaskGroupName ) )
|
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()
|
local SetAssignedGroups = self:GetGroups()
|
||||||
|
|
||||||
SetAssignedGroups:ForEachGroup(
|
SetAssignedGroups:ForEachGroup(
|
||||||
@@ -417,6 +420,9 @@ do -- Group Assignment
|
|||||||
|
|
||||||
self.AssignedGroups[TaskGroupName] = nil
|
self.AssignedGroups[TaskGroupName] = nil
|
||||||
self:E( string.format( "Task %s is unassigned to %s", TaskName, TaskGroupName ) )
|
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()
|
local SetAssignedGroups = self:GetGroups()
|
||||||
|
|
||||||
@@ -448,12 +454,6 @@ do -- Group Assignment
|
|||||||
|
|
||||||
self:SetGroupAssigned( TaskGroup )
|
self:SetGroupAssigned( TaskGroup )
|
||||||
|
|
||||||
local Mission = self:GetMission()
|
|
||||||
local MissionMenu = Mission:GetMenu( TaskGroup )
|
|
||||||
MissionMenu:RemoveSubMenus()
|
|
||||||
|
|
||||||
self:SetAssignedMenuForGroup( TaskGroup )
|
|
||||||
|
|
||||||
local TaskUnits = TaskGroup:GetUnits()
|
local TaskUnits = TaskGroup:GetUnits()
|
||||||
for UnitID, UnitData in pairs( TaskUnits ) do
|
for UnitID, UnitData in pairs( TaskUnits ) do
|
||||||
local TaskUnit = UnitData -- Wrapper.Unit#UNIT
|
local TaskUnit = UnitData -- Wrapper.Unit#UNIT
|
||||||
@@ -463,6 +463,10 @@ do -- Group Assignment
|
|||||||
self:AssignToUnit( TaskUnit )
|
self:AssignToUnit( TaskUnit )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local Mission = self:GetMission()
|
||||||
|
local CommandCenter = Mission:GetCommandCenter()
|
||||||
|
CommandCenter:SetMenu()
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@@ -474,8 +478,6 @@ do -- Group Assignment
|
|||||||
|
|
||||||
self:ClearGroupAssignment( TaskGroup )
|
self:ClearGroupAssignment( TaskGroup )
|
||||||
|
|
||||||
self:RemoveAssignedMenuForGroup( TaskGroup )
|
|
||||||
|
|
||||||
local TaskUnits = TaskGroup:GetUnits()
|
local TaskUnits = TaskGroup:GetUnits()
|
||||||
for UnitID, UnitData in pairs( TaskUnits ) do
|
for UnitID, UnitData in pairs( TaskUnits ) do
|
||||||
local TaskUnit = UnitData -- Wrapper.Unit#UNIT
|
local TaskUnit = UnitData -- Wrapper.Unit#UNIT
|
||||||
@@ -484,8 +486,11 @@ do -- Group Assignment
|
|||||||
self:UnAssignFromUnit( TaskUnit )
|
self:UnAssignFromUnit( TaskUnit )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local Mission = self:GetMission()
|
||||||
|
local CommandCenter = Mission:GetCommandCenter()
|
||||||
|
CommandCenter:SetMenu()
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -611,9 +616,9 @@ end
|
|||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
-- @return #TASK
|
-- @return #TASK
|
||||||
function TASK:SetMenu( MenuTime ) --R2.1 Mission Reports and Task Reports added. Fixes issue #424.
|
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
|
for TaskGroupID, TaskGroupData in pairs( self.SetGroup:GetSet() ) do
|
||||||
local TaskGroup = TaskGroupData -- Wrapper.Group#GROUP
|
local TaskGroup = TaskGroupData -- Wrapper.Group#GROUP
|
||||||
if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then
|
if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then
|
||||||
@@ -647,10 +652,9 @@ end
|
|||||||
-- @return #TASK
|
-- @return #TASK
|
||||||
function TASK:SetMenuForGroup( TaskGroup, MenuTime )
|
function TASK:SetMenuForGroup( TaskGroup, MenuTime )
|
||||||
|
|
||||||
|
self:SetPlannedMenuForGroup( TaskGroup, MenuTime )
|
||||||
if self:IsGroupAssigned( TaskGroup ) then
|
if self:IsGroupAssigned( TaskGroup ) then
|
||||||
self:SetAssignedMenuForGroup( TaskGroup, MenuTime )
|
self:SetAssignedMenuForGroup( TaskGroup, MenuTime )
|
||||||
else
|
|
||||||
self:SetPlannedMenuForGroup( TaskGroup, self:GetTaskName(), MenuTime )
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -661,7 +665,7 @@ end
|
|||||||
-- @param #string MenuText The menu text.
|
-- @param #string MenuText The menu text.
|
||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
-- @return #TASK self
|
-- @return #TASK self
|
||||||
function TASK:SetPlannedMenuForGroup( TaskGroup, MenuText, MenuTime )
|
function TASK:SetPlannedMenuForGroup( TaskGroup, MenuTime )
|
||||||
self:E( TaskGroup:GetName() )
|
self:E( TaskGroup:GetName() )
|
||||||
|
|
||||||
local Mission = self:GetMission()
|
local Mission = self:GetMission()
|
||||||
@@ -669,14 +673,21 @@ function TASK:SetPlannedMenuForGroup( TaskGroup, MenuText, MenuTime )
|
|||||||
local CommandCenter = Mission:GetCommandCenter()
|
local CommandCenter = Mission:GetCommandCenter()
|
||||||
local CommandCenterMenu = CommandCenter:GetMenu()
|
local CommandCenterMenu = CommandCenter:GetMenu()
|
||||||
|
|
||||||
|
local TaskType = self:GetType()
|
||||||
|
local TaskText = self:GetName()
|
||||||
|
|
||||||
local MissionMenu = MENU_GROUP:New( TaskGroup, MissionName, CommandCenterMenu ):SetTime( MenuTime )
|
local MissionMenu = MENU_GROUP:New( TaskGroup, MissionName, CommandCenterMenu ):SetTime( MenuTime )
|
||||||
|
|
||||||
|
|
||||||
local MissionMenu = Mission:GetMenu( TaskGroup )
|
local MissionMenu = Mission:GetMenu( TaskGroup )
|
||||||
|
|
||||||
local TaskType = self:GetType()
|
local TaskPlannedMenu = MENU_GROUP:New( TaskGroup, "Planned Tasks", MissionMenu ):SetTime( MenuTime )
|
||||||
local TaskTypeMenu = MENU_GROUP:New( TaskGroup, TaskType, MissionMenu ):SetTime( MenuTime )
|
local TaskTypeMenu = MENU_GROUP:New( TaskGroup, TaskType, TaskPlannedMenu ):SetTime( MenuTime ):SetRemoveParent( true )
|
||||||
local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, MenuText, TaskTypeMenu, self.MenuAssignToGroup, { self = self, TaskGroup = TaskGroup } ):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
|
return self
|
||||||
end
|
end
|
||||||
@@ -687,15 +698,23 @@ end
|
|||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
-- @return #TASK self
|
-- @return #TASK self
|
||||||
function TASK:SetAssignedMenuForGroup( TaskGroup, MenuTime )
|
function TASK:SetAssignedMenuForGroup( TaskGroup, MenuTime )
|
||||||
self:E( TaskGroup:GetName() )
|
self:F( { TaskGroup:GetName(), MenuTime } )
|
||||||
|
|
||||||
local Mission = self:GetMission()
|
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 )
|
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 TaskAssignedMenu = MENU_GROUP:New( TaskGroup, string.format( "Assigned Task %s", TaskText ), MissionMenu ):SetTime( MenuTime )
|
||||||
local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Abort Task", MissionMenu, self.MenuTaskAbort, self, TaskGroup ):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
|
return self
|
||||||
end
|
end
|
||||||
@@ -705,14 +724,12 @@ end
|
|||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
-- @return #TASK
|
-- @return #TASK
|
||||||
function TASK:RemoveMenu( MenuTime )
|
function TASK:RemoveMenu( MenuTime )
|
||||||
self:F()
|
self:F( { self:GetName(), MenuTime } )
|
||||||
|
|
||||||
for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do
|
for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do
|
||||||
local TaskGroup = TaskGroup -- Wrapper.Group#GROUP
|
local TaskGroup = TaskGroup -- Wrapper.Group#GROUP
|
||||||
if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then
|
if TaskGroup:IsAlive() and TaskGroup:GetPlayerNames() then
|
||||||
if not self:IsGroupAssigned( TaskGroup ) then
|
self:RefreshMenus( TaskGroup, MenuTime )
|
||||||
self:RemovePlannedMenuForGroup( TaskGroup, MenuTime )
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -723,24 +740,26 @@ end
|
|||||||
-- @param Wrapper.Group#GROUP TaskGroup
|
-- @param Wrapper.Group#GROUP TaskGroup
|
||||||
-- @param #number MenuTime
|
-- @param #number MenuTime
|
||||||
-- @return #TASK self
|
-- @return #TASK self
|
||||||
function TASK:RemovePlannedMenuForGroup( TaskGroup, MenuTime )
|
function TASK:RefreshMenus( TaskGroup, MenuTime )
|
||||||
self:F()
|
self:F( { TaskGroup:GetName(), MenuTime } )
|
||||||
|
|
||||||
local Mission = self:GetMission()
|
local Mission = self:GetMission()
|
||||||
local MissionName = Mission:GetName()
|
local MissionName = Mission:GetName()
|
||||||
|
local CommandCenter = Mission:GetCommandCenter()
|
||||||
|
local CommandCenterMenu = CommandCenter:GetMenu()
|
||||||
|
|
||||||
local MissionMenu = Mission:GetMenu( TaskGroup )
|
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
|
if PlannedMenu then
|
||||||
local TaskType = self:GetType()
|
PlannedMenu:Remove( MenuTime )
|
||||||
local TypeMenu = MissionMenu:GetMenu( TaskType )
|
end
|
||||||
|
|
||||||
if TypeMenu then
|
if AssignedMenu then
|
||||||
local TaskMenu = TypeMenu:GetMenu( self:GetTaskName() )
|
AssignedMenu:Remove( MenuTime )
|
||||||
if TaskMenu then
|
|
||||||
TaskMenu:Remove( MenuTime )
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1141,7 +1141,7 @@ do -- Players
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self:F( PlayerNames )
|
self:F2( PlayerNames )
|
||||||
return PlayerNames
|
return PlayerNames
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user