Progress on tasking, processes to use templates ...

This commit is contained in:
FlightControl 2016-11-02 10:00:21 +01:00
parent cd4d4af559
commit 6239b6263c
9 changed files with 43 additions and 35 deletions

View File

@ -207,9 +207,10 @@ do -- ASSIGN_MENU_ACCEPT
MESSAGE:New( self.TaskBriefing .. "\nAccess the radio menu to accept the task. You have 30 seconds or the assignment will be cancelled.", 30, "Task Assignment" ):ToGroup( ProcessUnit:GetGroup() ) MESSAGE:New( self.TaskBriefing .. "\nAccess the radio menu to accept the task. You have 30 seconds or the assignment will be cancelled.", 30, "Task Assignment" ):ToGroup( ProcessUnit:GetGroup() )
local ProcessGroup = ProcessUnit:GetGroup() local ProcessGroup = ProcessUnit:GetGroup()
self.Menu = MENU_GROUP:New( ProcessGroup, "Task " .. self.TaskName .. " acceptance" ) self.Menu = MENU_GROUP:New( ProcessGroup, "Task " .. self.TaskName .. " acceptance" )
self.MenuAcceptTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Accept task " .. self.MenuText, self.Menu, self.MenuAssign, self ) self.MenuAcceptTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Accept task " .. self.TaskName, self.Menu, self.MenuAssign, self )
self.MenuRejectTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Reject task " .. self.MenuText, self.Menu, self.MenuReject, self ) self.MenuRejectTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Reject task " .. self.TaskName, self.Menu, self.MenuReject, self )
end end
--- Menu function. --- Menu function.

View File

@ -16,20 +16,35 @@ PROCESS = {
--- Instantiates a new TASK Base. Should never be used. Interface Class. --- Instantiates a new TASK Base. Should never be used. Interface Class.
-- @param #PROCESS self -- @param #PROCESS self
-- @param #string ProcessName -- @param #string ProcessName
-- @param Task#TASK_BASE Task
-- @param Unit#UNIT ProcessUnit -- @param Unit#UNIT ProcessUnit
-- @return #PROCESS self -- @return #PROCESS self
function PROCESS:New( FSMT, ProcessUnit, ProcessName ) function PROCESS:New( FSMT, ProcessName, ProcessUnit )
local self = BASE:Inherit( self, STATEMACHINE_CONTROLLABLE:New( FSMT, ProcessUnit ) ) local self = BASE:Inherit( self, STATEMACHINE_CONTROLLABLE:New( FSMT, ProcessUnit ) )
self:F() self:F()
self.ProcessGroup = ProcessUnit:GetGroup() if ProcessUnit then
self.ProcessGroup = ProcessUnit:GetGroup()
end
--self.MissionMenu = Task.Mission:GetMissionMenu( self.ProcessGroup ) --self.MissionMenu = Task.Mission:GetMissionMenu( self.ProcessGroup )
self.ProcessName = ProcessName self.ProcessName = ProcessName
return self return self
end end
--- Assign the process to a @{Unit} and activate the process.
-- @param #PROCESS self
-- @param Unit#UNIT ProcessUnit
-- @return #PROCESS self
function PROCESS:Assign( ProcessUnit )
self:SetControllable( ProcessUnit )
self.ProcessGroup = ProcessUnit:GetGroup()
--self:Activate()
return self
end
--- Adds a score for the PROCESS to be achieved. --- Adds a score for the PROCESS to be achieved.
-- @param #PROCESS self -- @param #PROCESS self
-- @param Task#TASK_BASE Task The task for which the process needs to account score. -- @param Task#TASK_BASE Task The task for which the process needs to account score.

View File

@ -414,11 +414,12 @@ function TASK_BASE:AssignProcess( ProcessUnit, ProcessName )
local ProcessUnitName = ProcessUnit:GetName() local ProcessUnitName = ProcessUnit:GetName()
-- Create the Process instance base on the ProcessClasses collection assigned to the Task -- Create the Process instance base on the ProcessClasses collection assigned to the Task
local ProcessClass, ProcessArguments local ProcessTemplate, ProcessArguments
ProcessClass, ProcessArguments = self:GetProcessClass( ProcessName ) ProcessTemplate = self:GetProcessTemplate( ProcessName )
local Process = ProcessClass:New( unpack( ProcessArguments ) ) -- Process#PROCESS self:E( "Deepcopy" )
Process:SetControllable( ProcessUnit ) local Process = UTILS.DeepCopy( ProcessTemplate ) -- Process#PROCESS
Process:Assign( ProcessUnit )
self.Processes = self.Processes or {} self.Processes = self.Processes or {}
self.Processes[ProcessUnitName] = self.Processes[ProcessUnitName] or {} self.Processes[ProcessUnitName] = self.Processes[ProcessUnitName] or {}
@ -429,33 +430,28 @@ function TASK_BASE:AssignProcess( ProcessUnit, ProcessName )
end end
--- Get the default or currently assigned @{Process} class with key ProcessName. --- Get the default or currently assigned @{Process} template with key ProcessName.
-- @param #TASK_BASE self -- @param #TASK_BASE self
-- @param #string ProcessName -- @param #string ProcessName
-- @return Process#PROCESS -- @return Process#PROCESS
-- @return #table function TASK_BASE:GetProcessTemplate( ProcessName )
function TASK_BASE:GetProcessClass( ProcessName )
local ProcessClass = self.ProcessClasses[ProcessName].Class local ProcessTemplate = self.ProcessClasses[ProcessName]
local ProcessArguments = self.ProcessClasses[ProcessName].Arguments
return ProcessClass, ProcessArguments return ProcessTemplate
end end
--- Set the Process default class with key ProcessName providing the ProcessClass and the constructor initialization parameters when it is assigned to a Unit by the task. --- Set the default @{Process} template with key ProcessName providing the ProcessClass and the process object when it is assigned to a @{Controllable} by the task.
-- @param #TASK_BASE self -- @param #TASK_BASE self
-- @param #string ProcessName -- @param #string ProcessName
-- @param Process#PROCESS ProcessClass -- @param Process#PROCESS ProcessTemplate
-- @param #table ... The parameters for the New() constructor of the ProcessClass, when the Task is assigning a new Process to the Unit.
-- @return Process#PROCESS -- @return Process#PROCESS
function TASK_BASE:SetProcessClass( ProcessName, ProcessClass, ... ) function TASK_BASE:SetProcessTemplate( ProcessName, ProcessTemplate )
self.ProcessClasses[ProcessName] = self.ProcessClasses[ProcessName] or {} self.ProcessClasses[ProcessName] = ProcessTemplate
self.ProcessClasses[ProcessName].Class = ProcessClass
self.ProcessClasses[ProcessName].Arguments = ...
return ProcessClass return ProcessTemplate
end end

View File

@ -45,14 +45,9 @@ do -- TASK_SEAD
self.TargetSetUnit = TargetSetUnit self.TargetSetUnit = TargetSetUnit
self.TargetZone = TargetZone self.TargetZone = TargetZone
-- ASSIGN_ACCEPT:New(TaskBriefing) self:SetProcessTemplate( "ASSIGN", ASSIGN_ACCEPT:New( self.TaskBriefing ) )
self:SetProcessClass( "ASSIGN", ASSIGN_ACCEPT, self.TaskBriefing ) self:SetProcessTemplate( "ROUTE", ROUTE_ZONE:New( self.TargetZone ) )
self:SetProcessTemplate( "ACCOUNT", ACCOUNT_DEADS:New( self.TargetSetUnit, "SEAD" ) )
-- ROUTE_ZONE:New(TargetZone)
self:SetProcessClass( "ROUTE", ROUTE_ZONE, self.TargetZone )
-- ACCOUNT_DEADS:New(TargetSetUnit,TaskName)
self:SetProcessClass( "ACCOUNT", ACCOUNT_DEADS, self.TargetSetUnit, "SEAD" )
-- SMOKE_TARGETS_ZONE:New( self.TargetSetUnit, self.TargetZone ) -- SMOKE_TARGETS_ZONE:New( self.TargetSetUnit, self.TargetZone )
--self:SetProcessClass( "SMOKE", SMOKE_TARGETS_ZONE, self.TargetSetUnit, self.TargetZone ) --self:SetProcessClass( "SMOKE", SMOKE_TARGETS_ZONE, self.TargetSetUnit, self.TargetZone )

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20160902_0901' ) env.info( 'Moose Generation Timestamp: 20161102_0903' )
local base = _G local base = _G

View File

@ -1,5 +1,5 @@
env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' )
env.info( 'Moose Generation Timestamp: 20160902_0901' ) env.info( 'Moose Generation Timestamp: 20161102_0903' )
local base = _G local base = _G

View File

@ -16,11 +16,12 @@ TaskSEAD:AddScore( "Success", "Destroyed all target radars", 250 )
TaskSEAD:AddScore( "Failed", "Failed to destroy all target radars", -100 ) TaskSEAD:AddScore( "Failed", "Failed to destroy all target radars", -100 )
-- ASSIGN_MENU_ACCEPT:New(TaskName,TaskBriefing) -- ASSIGN_MENU_ACCEPT:New(TaskName,TaskBriefing)
local AssignProcess = TaskSEAD:SetProcessClass( "ASSIGN", ASSIGN_MENU_ACCEPT, "SEAD", "Hello World" ) local AssignProcess = TaskSEAD:SetProcessTemplate( "ASSIGN", ASSIGN_MENU_ACCEPT:New( "SEAD", "Hello World" ) )
--local AssignProcess = TaskSEAD:SetProcessClass( "ASSIGN", ASSIGN_MENU_ACCEPT, "SEAD", "Hello World" )
AssignProcess:AddScore( TaskSEAD, "Assign", "You are assigned to the task", 10 ) AssignProcess:AddScore( TaskSEAD, "Assign", "You are assigned to the task", 10 )
-- ACCOUNT_DEADS:New(ProcessUnit,TargetSetUnit,TaskName) -- ACCOUNT_DEADS:New(ProcessUnit,TargetSetUnit,TaskName)
local AccountProcess = TaskSEAD:SetProcessClass( "ACCOUNT", ACCOUNT_DEADS, TargetSet, "SEAD" ) local AccountProcess = TaskSEAD:SetProcessTemplate( "ACCOUNT", ACCOUNT_DEADS:New( TargetSet, "SEAD" ) )
AccountProcess:AddScore( TaskSEAD, "Account", "destroyed a radar", 25 ) AccountProcess:AddScore( TaskSEAD, "Account", "destroyed a radar", 25 )
AccountProcess:AddScore( TaskSEAD, "Failed", "failed to destroy a radar", -100 ) AccountProcess:AddScore( TaskSEAD, "Failed", "failed to destroy a radar", -100 )