mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Finish this feature.
This commit is contained in:
@@ -220,29 +220,29 @@ do -- ACT_ASSIGN_MENU_ACCEPT
|
|||||||
-- @param #string To
|
-- @param #string To
|
||||||
function ACT_ASSIGN_MENU_ACCEPT:onafterStart( ProcessUnit, Task, From, Event, To )
|
function ACT_ASSIGN_MENU_ACCEPT:onafterStart( ProcessUnit, Task, From, Event, To )
|
||||||
|
|
||||||
self:GetCommandCenter():MessageToGroup( "Task " .. self.Task:GetName() .. " has been assigned to you and your group!\nRead the briefing and use the Radio Menu (F10) to accept the task.\nYou have 2 minutes to accept, or the task assignment will be cancelled!", ProcessUnit:GetGroup(), 120 )
|
self:GetCommandCenter():MessageToGroup( "Task " .. self.Task:GetName() .. " has been assigned to you and your group!\nRead the briefing and use the Radio Menu (F10) / Task ... CONFIRMATION menu to accept or reject the task.\nYou have 2 minutes to accept, or the task assignment will be cancelled!", ProcessUnit:GetGroup(), 120 )
|
||||||
|
|
||||||
local ProcessGroup = ProcessUnit:GetGroup()
|
local TaskGroup = ProcessUnit:GetGroup()
|
||||||
|
|
||||||
self.Menu = MENU_GROUP:New( ProcessGroup, "Accept task " .. self.Task:GetName() )
|
self.Menu = MENU_GROUP:New( TaskGroup, "Task " .. self.Task:GetName() .. " CONFIRMATION" )
|
||||||
self.MenuAcceptTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Accept task " .. self.Task:GetName(), self.Menu, self.MenuAssign, self )
|
self.MenuAcceptTask = MENU_GROUP_COMMAND:New( TaskGroup, "Accept task " .. self.Task:GetName(), self.Menu, self.MenuAssign, self, TaskGroup )
|
||||||
self.MenuRejectTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Reject task " .. self.Task:GetName(), self.Menu, self.MenuReject, self )
|
self.MenuRejectTask = MENU_GROUP_COMMAND:New( TaskGroup, "Reject task " .. self.Task:GetName(), self.Menu, self.MenuReject, self, TaskGroup )
|
||||||
|
|
||||||
self:__Reject( 120, ProcessUnit )
|
self:__Reject( 120, TaskGroup )
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Menu function.
|
--- Menu function.
|
||||||
-- @param #ACT_ASSIGN_MENU_ACCEPT self
|
-- @param #ACT_ASSIGN_MENU_ACCEPT self
|
||||||
function ACT_ASSIGN_MENU_ACCEPT:MenuAssign( ProcessUnit, Task, From, Event, To )
|
function ACT_ASSIGN_MENU_ACCEPT:MenuAssign( TaskGroup )
|
||||||
|
|
||||||
self:__Assign( -1 )
|
self:__Assign( -1, TaskGroup )
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Menu function.
|
--- Menu function.
|
||||||
-- @param #ACT_ASSIGN_MENU_ACCEPT self
|
-- @param #ACT_ASSIGN_MENU_ACCEPT self
|
||||||
function ACT_ASSIGN_MENU_ACCEPT:MenuReject( ProcessUnit, Task, From, Event, To )
|
function ACT_ASSIGN_MENU_ACCEPT:MenuReject( TaskGroup )
|
||||||
|
|
||||||
self:__Reject( -1 )
|
self:__Reject( -1, TaskGroup )
|
||||||
end
|
end
|
||||||
|
|
||||||
--- StateMachine callback function
|
--- StateMachine callback function
|
||||||
@@ -251,7 +251,7 @@ do -- ACT_ASSIGN_MENU_ACCEPT
|
|||||||
-- @param #string Event
|
-- @param #string Event
|
||||||
-- @param #string From
|
-- @param #string From
|
||||||
-- @param #string To
|
-- @param #string To
|
||||||
function ACT_ASSIGN_MENU_ACCEPT:onafterAssign( ProcessUnit, Task, From, Event, To )
|
function ACT_ASSIGN_MENU_ACCEPT:onafterAssign( ProcessUnit, Task, From, Event, To, TaskGroup )
|
||||||
|
|
||||||
self.Menu:Remove()
|
self.Menu:Remove()
|
||||||
end
|
end
|
||||||
@@ -262,13 +262,13 @@ do -- ACT_ASSIGN_MENU_ACCEPT
|
|||||||
-- @param #string Event
|
-- @param #string Event
|
||||||
-- @param #string From
|
-- @param #string From
|
||||||
-- @param #string To
|
-- @param #string To
|
||||||
function ACT_ASSIGN_MENU_ACCEPT:onafterReject( ProcessUnit, From, Event, To )
|
function ACT_ASSIGN_MENU_ACCEPT:onafterReject( ProcessUnit, Task, From, Event, To, TaskGroup )
|
||||||
self:F( { ProcessUnit.UnitName, From, Event, To } )
|
self:F( { TaskGroup = TaskGroup } )
|
||||||
|
|
||||||
self.Menu:Remove()
|
self.Menu:Remove()
|
||||||
--TODO: need to resolve this problem ... it has to do with the events ...
|
--TODO: need to resolve this problem ... it has to do with the events ...
|
||||||
--self.Task:UnAssignFromUnit( ProcessUnit )needs to become a callback funtion call upon the event
|
--self.Task:UnAssignFromUnit( ProcessUnit )needs to become a callback funtion call upon the event
|
||||||
self.Task:Abort()
|
self.Task:RejectGroup( TaskGroup )
|
||||||
end
|
end
|
||||||
|
|
||||||
--- StateMachine callback function
|
--- StateMachine callback function
|
||||||
@@ -277,8 +277,9 @@ do -- ACT_ASSIGN_MENU_ACCEPT
|
|||||||
-- @param #string Event
|
-- @param #string Event
|
||||||
-- @param #string From
|
-- @param #string From
|
||||||
-- @param #string To
|
-- @param #string To
|
||||||
function ACT_ASSIGN_MENU_ACCEPT:onenterAssigned( ProcessUnit, Task, From, Event, To )
|
function ACT_ASSIGN_MENU_ACCEPT:onenterAssigned( ProcessUnit, Task, From, Event, To, TaskGroup )
|
||||||
|
|
||||||
|
--self.Task:AssignToGroup( TaskGroup )
|
||||||
self.Task:Assign( ProcessUnit, ProcessUnit:GetPlayerName() )
|
self.Task:Assign( ProcessUnit, ProcessUnit:GetPlayerName() )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -917,8 +917,8 @@ do
|
|||||||
self:RemoveSubMenus( MenuTime, MenuTag )
|
self:RemoveSubMenus( MenuTime, MenuTag )
|
||||||
if not MenuTime or self.MenuTime ~= MenuTime then
|
if not MenuTime or self.MenuTime ~= MenuTime then
|
||||||
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
||||||
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
|
||||||
if self.MenuPath ~= nil then
|
if self.MenuPath ~= nil then
|
||||||
|
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
||||||
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
||||||
end
|
end
|
||||||
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
||||||
@@ -1009,8 +1009,8 @@ do
|
|||||||
if GroupMenu == self then
|
if GroupMenu == self then
|
||||||
if not MenuTime or self.MenuTime ~= MenuTime then
|
if not MenuTime or self.MenuTime ~= MenuTime then
|
||||||
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
||||||
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
|
||||||
if self.MenuPath ~= nil then
|
if self.MenuPath ~= nil then
|
||||||
|
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
||||||
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
||||||
end
|
end
|
||||||
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
||||||
@@ -1150,8 +1150,8 @@ do
|
|||||||
self:RemoveSubMenus( MenuTime, MenuTag )
|
self:RemoveSubMenus( MenuTime, MenuTag )
|
||||||
if not MenuTime or self.MenuTime ~= MenuTime then
|
if not MenuTime or self.MenuTime ~= MenuTime then
|
||||||
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
||||||
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
|
||||||
if self.MenuPath ~= nil then
|
if self.MenuPath ~= nil then
|
||||||
|
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
||||||
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
||||||
end
|
end
|
||||||
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
||||||
@@ -1261,8 +1261,8 @@ do
|
|||||||
if GroupMenu == self then
|
if GroupMenu == self then
|
||||||
if not MenuTime or self.MenuTime ~= MenuTime then
|
if not MenuTime or self.MenuTime ~= MenuTime then
|
||||||
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
if ( not MenuTag ) or ( MenuTag and self.MenuTag and MenuTag == self.MenuTag ) then
|
||||||
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
|
||||||
if self.MenuPath ~= nil then
|
if self.MenuPath ~= nil then
|
||||||
|
self:F( { Group = self.GroupID, Text = self.MenuText, Path = self.MenuPath } )
|
||||||
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
missionCommands.removeItemForGroup( self.GroupID, self.MenuPath )
|
||||||
end
|
end
|
||||||
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
MENU_INDEX:ClearGroupMenu( self.Group, Path )
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ function COMMANDCENTER:New( CommandCenterPositionable, CommandCenterName )
|
|||||||
self.CommandCenterPositionable = CommandCenterPositionable
|
self.CommandCenterPositionable = CommandCenterPositionable
|
||||||
self.CommandCenterName = CommandCenterName or CommandCenterPositionable:GetName()
|
self.CommandCenterName = CommandCenterName or CommandCenterPositionable:GetName()
|
||||||
self.CommandCenterCoalition = CommandCenterPositionable:GetCoalition()
|
self.CommandCenterCoalition = CommandCenterPositionable:GetCoalition()
|
||||||
|
|
||||||
|
self.AutoAssignTasks = false
|
||||||
|
|
||||||
self.Missions = {}
|
self.Missions = {}
|
||||||
|
|
||||||
@@ -350,13 +352,23 @@ end
|
|||||||
-- @return Core.Menu#MENU_COALITION
|
-- @return Core.Menu#MENU_COALITION
|
||||||
function COMMANDCENTER:GetMenu( TaskGroup )
|
function COMMANDCENTER:GetMenu( TaskGroup )
|
||||||
|
|
||||||
|
local MenuTime = timer.getTime()
|
||||||
|
|
||||||
self.CommandCenterMenus = self.CommandCenterMenus or {}
|
self.CommandCenterMenus = self.CommandCenterMenus or {}
|
||||||
if not self.CommandCenterMenus[TaskGroup] then
|
local CommandCenterMenu
|
||||||
local CommandCenterText = self:GetText()
|
|
||||||
local CommandCenterMenu = MENU_GROUP:New( TaskGroup, CommandCenterText )
|
local CommandCenterText = self:GetText()
|
||||||
self.CommandCenterMenus[TaskGroup] = CommandCenterMenu
|
CommandCenterMenu = MENU_GROUP:New( TaskGroup, CommandCenterText ):SetTime(MenuTime)
|
||||||
local AssignTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Assign Task", CommandCenterMenu, self.AssignRandomTask, self, TaskGroup )
|
self.CommandCenterMenus[TaskGroup] = CommandCenterMenu
|
||||||
|
|
||||||
|
if self.AutoAssignTasks == false then
|
||||||
|
local AutoAssignTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Assign Task On", CommandCenterMenu, self.SetAutoAssignTasks, self, true ):SetTime(MenuTime):SetTag("AutoTask")
|
||||||
|
local AssignTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Assign Task", CommandCenterMenu, self.AssignRandomTask, self, TaskGroup ):SetTime(MenuTime):SetTag("AutoTask")
|
||||||
|
else
|
||||||
|
local AutoAssignTaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, "Assign Task Off", CommandCenterMenu, self.SetAutoAssignTasks, self, false ):SetTime(MenuTime):SetTag("AutoTask")
|
||||||
end
|
end
|
||||||
|
CommandCenterMenu:Remove( MenuTime, "AutoTask" )
|
||||||
|
|
||||||
return self.CommandCenterMenus[TaskGroup]
|
return self.CommandCenterMenus[TaskGroup]
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -385,6 +397,86 @@ function COMMANDCENTER:AssignRandomTask( TaskGroup )
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Automatically assigns tasks to all TaskGroups.
|
||||||
|
-- @param #COMMANDCENTER self
|
||||||
|
-- @param #boolean AutoAssign true for ON and false or nil for OFF.
|
||||||
|
-- @return #COMMANDCENTER
|
||||||
|
function COMMANDCENTER:SetAutoAssignTasks( AutoAssign )
|
||||||
|
|
||||||
|
self.AutoAssignTasks = AutoAssign or false
|
||||||
|
|
||||||
|
local GroupSet = self:AddGroups()
|
||||||
|
|
||||||
|
for GroupID, TaskGroup in pairs( GroupSet:GetSet() ) do
|
||||||
|
local TaskGroup = TaskGroup -- Wrapper.Group#GROUP
|
||||||
|
self:GetMenu( TaskGroup )
|
||||||
|
end
|
||||||
|
|
||||||
|
if self.AutoAssignTasks == true then
|
||||||
|
self:ScheduleRepeat( 10, 30, 0, nil, self.AssignTasks, self )
|
||||||
|
else
|
||||||
|
self:ScheduleStop( self.AssignTasks )
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Automatically assigns tasks to all TaskGroups.
|
||||||
|
-- @param #COMMANDCENTER self
|
||||||
|
function COMMANDCENTER:AssignTasks()
|
||||||
|
|
||||||
|
local GroupSet = self:AddGroups()
|
||||||
|
|
||||||
|
for GroupID, TaskGroup in pairs( GroupSet:GetSet() ) do
|
||||||
|
local TaskGroup = TaskGroup -- Wrapper.Group#GROUP
|
||||||
|
|
||||||
|
if self:IsGroupAssigned( TaskGroup ) then
|
||||||
|
else
|
||||||
|
-- Only groups with planes or helicopters will receive automatic tasks.
|
||||||
|
-- TODO Workaround DCS-BUG-3 - https://github.com/FlightControl-Master/MOOSE/issues/696
|
||||||
|
if TaskGroup:IsAir() then
|
||||||
|
self:AssignRandomTask( TaskGroup )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Get all the Groups active within the command center.
|
||||||
|
-- @param #COMMANDCENTER self
|
||||||
|
-- @return Core.Set#SET_GROUP
|
||||||
|
function COMMANDCENTER:AddGroups()
|
||||||
|
|
||||||
|
local GroupSet = SET_GROUP:New()
|
||||||
|
|
||||||
|
for MissionID, Mission in pairs( self.Missions ) do
|
||||||
|
local Mission = Mission -- Tasking.Mission#MISSION
|
||||||
|
GroupSet = Mission:AddGroups( GroupSet )
|
||||||
|
end
|
||||||
|
|
||||||
|
return GroupSet
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Checks of the TaskGroup has a Task.
|
||||||
|
-- @param #COMMANDCENTER self
|
||||||
|
-- @return #boolean
|
||||||
|
function COMMANDCENTER:IsGroupAssigned( TaskGroup )
|
||||||
|
|
||||||
|
local Assigned = false
|
||||||
|
|
||||||
|
for MissionID, Mission in pairs( self.Missions ) do
|
||||||
|
local Mission = Mission -- Tasking.Mission#MISSION
|
||||||
|
if Mission:IsGroupAssigned( TaskGroup ) then
|
||||||
|
Assigned = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return Assigned
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--- Checks of the COMMANDCENTER has a GROUP.
|
--- Checks of the COMMANDCENTER has a GROUP.
|
||||||
-- @param #COMMANDCENTER self
|
-- @param #COMMANDCENTER self
|
||||||
-- @param Wrapper.Group#GROUP
|
-- @param Wrapper.Group#GROUP
|
||||||
|
|||||||
@@ -377,24 +377,30 @@ function MISSION:GetScoring()
|
|||||||
return self.Scoring
|
return self.Scoring
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Get the groups for which TASKS are given in the mission
|
--- Gets the groups for which TASKS are given in the mission
|
||||||
-- @param #MISSION self
|
-- @param #MISSION self
|
||||||
|
-- @param Core.Set#SET_GROUP GroupSet
|
||||||
-- @return Core.Set#SET_GROUP
|
-- @return Core.Set#SET_GROUP
|
||||||
function MISSION:GetGroups()
|
function MISSION:GetGroups()
|
||||||
|
|
||||||
local SetGroup = SET_GROUP:New()
|
return self:AddGroups()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Adds the groups for which TASKS are given in the mission
|
||||||
|
-- @param #MISSION self
|
||||||
|
-- @param Core.Set#SET_GROUP GroupSet
|
||||||
|
-- @return Core.Set#SET_GROUP
|
||||||
|
function MISSION:AddGroups( GroupSet )
|
||||||
|
|
||||||
|
GroupSet = GroupSet or SET_GROUP:New()
|
||||||
|
|
||||||
for TaskID, Task in pairs( self:GetTasks() ) do
|
for TaskID, Task in pairs( self:GetTasks() ) do
|
||||||
local Task = Task -- Tasking.Task#TASK
|
local Task = Task -- Tasking.Task#TASK
|
||||||
local GroupSet = Task:GetGroups()
|
GroupSet = Task:AddGroups( GroupSet )
|
||||||
GroupSet:ForEachGroup(
|
|
||||||
function( TaskGroup )
|
|
||||||
SetGroup:Add( TaskGroup, TaskGroup )
|
|
||||||
end
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return SetGroup
|
return GroupSet
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ function TASK:New( Mission, SetGroupAssign, TaskName, TaskType, TaskBriefing )
|
|||||||
|
|
||||||
self:AddTransition( "*", "PlayerCrashed", "*" )
|
self:AddTransition( "*", "PlayerCrashed", "*" )
|
||||||
self:AddTransition( "*", "PlayerAborted", "*" )
|
self:AddTransition( "*", "PlayerAborted", "*" )
|
||||||
|
self:AddTransition( "*", "PlayerRejected", "*" )
|
||||||
self:AddTransition( "*", "PlayerDead", "*" )
|
self:AddTransition( "*", "PlayerDead", "*" )
|
||||||
self:AddTransition( { "Failed", "Aborted", "Cancelled" }, "Replan", "Planned" )
|
self:AddTransition( { "Failed", "Aborted", "Cancelled" }, "Replan", "Planned" )
|
||||||
self:AddTransition( "*", "TimeOut", "Cancelled" )
|
self:AddTransition( "*", "TimeOut", "Cancelled" )
|
||||||
@@ -300,34 +301,61 @@ function TASK:JoinUnit( PlayerUnit, PlayerGroup )
|
|||||||
return PlayerUnitAdded
|
return PlayerUnitAdded
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Abort a PlayerUnit from a Task.
|
--- A group rejecting a planned task.
|
||||||
-- If the Unit was not part of the Task, false is returned.
|
|
||||||
-- If the Unit is part of the Task, true is returned.
|
|
||||||
-- @param #TASK self
|
-- @param #TASK self
|
||||||
-- @param Wrapper.Unit#UNIT PlayerUnit The CLIENT or UNIT of the Player aborting the Task.
|
-- @param Wrapper.Group#GROUP PlayerGroup The group rejecting the task.
|
||||||
-- @return #TASK
|
-- @return #TASK
|
||||||
function TASK:AbortGroup( PlayerGroup )
|
function TASK:RejectGroup( PlayerGroup )
|
||||||
self:F( { PlayerGroup = PlayerGroup } )
|
|
||||||
|
|
||||||
local PlayerGroups = self:GetGroups()
|
local PlayerGroups = self:GetGroups()
|
||||||
|
|
||||||
-- Is the PlayerGroup part of the PlayerGroups?
|
-- Is the PlayerGroup part of the PlayerGroups?
|
||||||
if PlayerGroups:IsIncludeObject( PlayerGroup ) then
|
if PlayerGroups:IsIncludeObject( PlayerGroup ) then
|
||||||
|
|
||||||
-- Check if the PlayerGroup is already assigned to the Task. If yes, the PlayerGroup is aborted from the Task.
|
-- Check if the PlayerGroup is already assigned or is planned to be assigned to the Task.
|
||||||
|
-- If yes, the PlayerGroup is aborted from the Task.
|
||||||
-- If the PlayerUnit was the last unit of the PlayerGroup, the menu needs to be removed from the Group.
|
-- If the PlayerUnit was the last unit of the PlayerGroup, the menu needs to be removed from the Group.
|
||||||
if self:IsStateAssigned() then
|
if self:IsStatePlanned() then
|
||||||
|
|
||||||
|
local IsGroupAssigned = self:IsGroupAssigned( PlayerGroup )
|
||||||
|
if IsGroupAssigned then
|
||||||
|
local PlayerName = PlayerGroup:GetUnit(1):GetPlayerName()
|
||||||
|
self:GetMission():GetCommandCenter():MessageToGroup( "Task " .. self:GetName() .. " has been rejected! We will select another task.", PlayerGroup )
|
||||||
|
self:UnAssignFromGroup( PlayerGroup )
|
||||||
|
|
||||||
|
self:PlayerRejected( PlayerGroup:GetUnit(1) )
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- A group aborting the task.
|
||||||
|
-- @param #TASK self
|
||||||
|
-- @param Wrapper.Group#GROUP PlayerGroup The group aborting the task.
|
||||||
|
-- @return #TASK
|
||||||
|
function TASK:AbortGroup( PlayerGroup )
|
||||||
|
|
||||||
|
local PlayerGroups = self:GetGroups()
|
||||||
|
|
||||||
|
-- Is the PlayerGroup part of the PlayerGroups?
|
||||||
|
if PlayerGroups:IsIncludeObject( PlayerGroup ) then
|
||||||
|
|
||||||
|
-- Check if the PlayerGroup is already assigned or is planned to be assigned to the Task.
|
||||||
|
-- If yes, the PlayerGroup is aborted from the Task.
|
||||||
|
-- If the PlayerUnit was the last unit of the PlayerGroup, the menu needs to be removed from the Group.
|
||||||
|
if self:IsStateAssigned() then
|
||||||
|
|
||||||
local IsGroupAssigned = self:IsGroupAssigned( PlayerGroup )
|
local IsGroupAssigned = self:IsGroupAssigned( PlayerGroup )
|
||||||
self:F( { IsGroupAssigned = IsGroupAssigned } )
|
|
||||||
if IsGroupAssigned then
|
if IsGroupAssigned then
|
||||||
local PlayerName = PlayerGroup:GetUnit(1):GetPlayerName()
|
local PlayerName = PlayerGroup:GetUnit(1):GetPlayerName()
|
||||||
--self:MessageToGroups( PlayerName .. " aborted Task " .. self:GetName() )
|
|
||||||
self:UnAssignFromGroup( PlayerGroup )
|
self:UnAssignFromGroup( PlayerGroup )
|
||||||
--self:Abort()
|
|
||||||
|
|
||||||
-- Now check if the task needs to go to hold...
|
-- Now check if the task needs to go to hold...
|
||||||
-- It will go to hold, if there are no players in the mission...
|
-- It will go to hold, if there are no players in the mission...
|
||||||
|
|
||||||
PlayerGroups:Flush( self )
|
PlayerGroups:Flush( self )
|
||||||
local IsRemaining = false
|
local IsRemaining = false
|
||||||
for GroupName, AssignedGroup in pairs( PlayerGroups:GetSet() or {} ) do
|
for GroupName, AssignedGroup in pairs( PlayerGroups:GetSet() or {} ) do
|
||||||
@@ -352,11 +380,10 @@ function TASK:AbortGroup( PlayerGroup )
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
--- A PlayerUnit crashed in a Task. Abort the Player.
|
|
||||||
-- If the Unit was not part of the Task, false is returned.
|
--- A group crashing and thus aborting from the task.
|
||||||
-- If the Unit is part of the Task, true is returned.
|
|
||||||
-- @param #TASK self
|
-- @param #TASK self
|
||||||
-- @param Wrapper.Unit#UNIT PlayerUnit The CLIENT or UNIT of the Player aborting the Task.
|
-- @param Wrapper.Group#GROUP PlayerGroup The group aborting the task.
|
||||||
-- @return #TASK
|
-- @return #TASK
|
||||||
function TASK:CrashGroup( PlayerGroup )
|
function TASK:CrashGroup( PlayerGroup )
|
||||||
self:F( { PlayerGroup = PlayerGroup } )
|
self:F( { PlayerGroup = PlayerGroup } )
|
||||||
@@ -418,9 +445,29 @@ end
|
|||||||
-- @param #TASK self
|
-- @param #TASK self
|
||||||
-- @return Core.Set#SET_GROUP
|
-- @return Core.Set#SET_GROUP
|
||||||
function TASK:GetGroups()
|
function TASK:GetGroups()
|
||||||
|
|
||||||
return self.SetGroup
|
return self.SetGroup
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Gets the SET_GROUP assigned to the TASK.
|
||||||
|
-- @param #TASK self
|
||||||
|
-- @param Core.Set#SET_GROUP GroupSet
|
||||||
|
-- @return Core.Set#SET_GROUP
|
||||||
|
function TASK:AddGroups( GroupSet )
|
||||||
|
|
||||||
|
GroupSet = GroupSet or SET_GROUP:New()
|
||||||
|
|
||||||
|
self.SetGroup:ForEachGroup(
|
||||||
|
--- @param Wrapper.Group#GROUP GroupSet
|
||||||
|
function( GroupItem )
|
||||||
|
GroupSet:Add( GroupItem:GetName(), GroupItem)
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
return GroupSet
|
||||||
|
end
|
||||||
|
|
||||||
do -- Group Assignment
|
do -- Group Assignment
|
||||||
|
|
||||||
--- Returns if the @{Task} is assigned to the Group.
|
--- Returns if the @{Task} is assigned to the Group.
|
||||||
@@ -797,7 +844,9 @@ function TASK:SetAssignedMenuForGroup( TaskGroup, MenuTime )
|
|||||||
if TaskUnit then
|
if TaskUnit then
|
||||||
local MenuControl = self:GetTaskControlMenu( TaskUnit )
|
local MenuControl = self:GetTaskControlMenu( TaskUnit )
|
||||||
local TaskControl = MENU_GROUP:New( TaskGroup, "Control Task", MenuControl ):SetTime( MenuTime ):SetTag( "Tasking" )
|
local TaskControl = MENU_GROUP:New( TaskGroup, "Control Task", MenuControl ):SetTime( MenuTime ):SetTag( "Tasking" )
|
||||||
local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Abort Task" ), TaskControl, self.MenuTaskAbort, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
|
if self:IsStateAssigned() then
|
||||||
|
local TaskMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Abort Task" ), TaskControl, self.MenuTaskAbort, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
|
||||||
|
end
|
||||||
local MarkMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Mark Task Location on Map" ), TaskControl, self.MenuMarkToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
|
local MarkMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Mark Task Location on Map" ), TaskControl, self.MenuMarkToGroup, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
|
||||||
local TaskTypeMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Report Task Details" ), TaskControl, self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
|
local TaskTypeMenu = MENU_GROUP_COMMAND:New( TaskGroup, string.format( "Report Task Details" ), TaskControl, self.MenuTaskStatus, self, TaskGroup ):SetTime( MenuTime ):SetTag( "Tasking" )
|
||||||
end
|
end
|
||||||
@@ -1289,6 +1338,7 @@ function TASK:onenterAborted( From, Event, To )
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--- FSM function for a TASK
|
--- FSM function for a TASK
|
||||||
-- @param #TASK self
|
-- @param #TASK self
|
||||||
-- @param #string From
|
-- @param #string From
|
||||||
@@ -1641,7 +1691,14 @@ do -- Task Control Menu
|
|||||||
|
|
||||||
TaskName = TaskName or ""
|
TaskName = TaskName or ""
|
||||||
|
|
||||||
self.TaskControlMenu = MENU_GROUP:New( TaskUnit:GetGroup(), "Assigned Task " .. TaskUnit:GetPlayerName() .. " - " .. self:GetName() .. " " .. TaskName ):SetTime( self.TaskControlMenuTime )
|
local TaskGroup = TaskUnit:GetGroup()
|
||||||
|
local TaskPlayerCount = TaskGroup:GetPlayerCount()
|
||||||
|
|
||||||
|
if TaskPlayerCount <= 1 then
|
||||||
|
self.TaskControlMenu = MENU_GROUP:New( TaskUnit:GetGroup(), "Task " .. self:GetName() .. " control" ):SetTime( self.TaskControlMenuTime )
|
||||||
|
else
|
||||||
|
self.TaskControlMenu = MENU_GROUP:New( TaskUnit:GetGroup(), "Task " .. self:GetName() .. " control for " .. TaskUnit:GetPlayerName() ):SetTime( self.TaskControlMenuTime )
|
||||||
|
end
|
||||||
|
|
||||||
return self.TaskControlMenu
|
return self.TaskControlMenu
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1430,6 +1430,26 @@ do -- Players
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Get the active player count in the group.
|
||||||
|
-- @param #GROUP self
|
||||||
|
-- @return #number The amount of players.
|
||||||
|
function GROUP:GetPlayerCount()
|
||||||
|
|
||||||
|
local PlayerCount = 0
|
||||||
|
|
||||||
|
local Units = self:GetUnits()
|
||||||
|
for UnitID, UnitData in pairs( Units or {} ) do
|
||||||
|
local Unit = UnitData -- Wrapper.Unit#UNIT
|
||||||
|
local PlayerName = Unit:GetPlayerName()
|
||||||
|
if PlayerName and PlayerName ~= "" then
|
||||||
|
PlayerCount = PlayerCount + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return PlayerCount
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -349,7 +349,7 @@ function UNIT:GetPlayerName()
|
|||||||
if DCSUnit then
|
if DCSUnit then
|
||||||
|
|
||||||
local PlayerName = DCSUnit:getPlayerName()
|
local PlayerName = DCSUnit:getPlayerName()
|
||||||
-- TODO - Workaround for DCS-BUG-3
|
-- TODO Workaround DCS-BUG-3 - https://github.com/FlightControl-Master/MOOSE/issues/696
|
||||||
if PlayerName == nil or PlayerName == "" then
|
if PlayerName == nil or PlayerName == "" then
|
||||||
local PlayerCategory = DCSUnit:getDesc().category
|
local PlayerCategory = DCSUnit:getDesc().category
|
||||||
if PlayerCategory == Unit.Category.GROUND_UNIT or PlayerCategory == Unit.Category.SHIP then
|
if PlayerCategory == Unit.Category.GROUND_UNIT or PlayerCategory == Unit.Category.SHIP then
|
||||||
|
|||||||
Reference in New Issue
Block a user