diff --git a/Moose Development/Moose/Fsm/Assign.lua b/Moose Development/Moose/Fsm/Assign.lua index fd2366e75..7d5da4baf 100644 --- a/Moose Development/Moose/Fsm/Assign.lua +++ b/Moose Development/Moose/Fsm/Assign.lua @@ -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() ) local ProcessGroup = ProcessUnit:GetGroup() + 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.MenuRejectTask = MENU_GROUP_COMMAND:New( ProcessGroup, "Reject task " .. self.MenuText, self.Menu, self.MenuReject, 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.TaskName, self.Menu, self.MenuReject, self ) end --- Menu function. diff --git a/Moose Development/Moose/Fsm/Process.lua b/Moose Development/Moose/Fsm/Process.lua index 059c2a2dc..2429f58e1 100644 --- a/Moose Development/Moose/Fsm/Process.lua +++ b/Moose Development/Moose/Fsm/Process.lua @@ -16,20 +16,35 @@ PROCESS = { --- Instantiates a new TASK Base. Should never be used. Interface Class. -- @param #PROCESS self -- @param #string ProcessName --- @param Task#TASK_BASE Task -- @param Unit#UNIT ProcessUnit -- @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 ) ) self:F() - self.ProcessGroup = ProcessUnit:GetGroup() + if ProcessUnit then + self.ProcessGroup = ProcessUnit:GetGroup() + end + --self.MissionMenu = Task.Mission:GetMissionMenu( self.ProcessGroup ) self.ProcessName = ProcessName return self 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. -- @param #PROCESS self -- @param Task#TASK_BASE Task The task for which the process needs to account score. diff --git a/Moose Development/Moose/Tasking/Task.lua b/Moose Development/Moose/Tasking/Task.lua index 976932395..686e92c3d 100644 --- a/Moose Development/Moose/Tasking/Task.lua +++ b/Moose Development/Moose/Tasking/Task.lua @@ -414,11 +414,12 @@ function TASK_BASE:AssignProcess( ProcessUnit, ProcessName ) local ProcessUnitName = ProcessUnit:GetName() -- Create the Process instance base on the ProcessClasses collection assigned to the Task - local ProcessClass, ProcessArguments - ProcessClass, ProcessArguments = self:GetProcessClass( ProcessName ) + local ProcessTemplate, ProcessArguments + ProcessTemplate = self:GetProcessTemplate( ProcessName ) - local Process = ProcessClass:New( unpack( ProcessArguments ) ) -- Process#PROCESS - Process:SetControllable( ProcessUnit ) + self:E( "Deepcopy" ) + local Process = UTILS.DeepCopy( ProcessTemplate ) -- Process#PROCESS + Process:Assign( ProcessUnit ) self.Processes = self.Processes or {} self.Processes[ProcessUnitName] = self.Processes[ProcessUnitName] or {} @@ -429,33 +430,28 @@ function TASK_BASE:AssignProcess( ProcessUnit, ProcessName ) 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 #string ProcessName -- @return Process#PROCESS --- @return #table -function TASK_BASE:GetProcessClass( ProcessName ) +function TASK_BASE:GetProcessTemplate( ProcessName ) - local ProcessClass = self.ProcessClasses[ProcessName].Class - local ProcessArguments = self.ProcessClasses[ProcessName].Arguments + local ProcessTemplate = self.ProcessClasses[ProcessName] - return ProcessClass, ProcessArguments + return ProcessTemplate 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 #string ProcessName --- @param Process#PROCESS ProcessClass --- @param #table ... The parameters for the New() constructor of the ProcessClass, when the Task is assigning a new Process to the Unit. +-- @param Process#PROCESS ProcessTemplate -- @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].Class = ProcessClass - self.ProcessClasses[ProcessName].Arguments = ... + self.ProcessClasses[ProcessName] = ProcessTemplate - return ProcessClass + return ProcessTemplate end diff --git a/Moose Development/Moose/Tasking/Task_SEAD.lua b/Moose Development/Moose/Tasking/Task_SEAD.lua index 301a7be40..8cd4fce1b 100644 --- a/Moose Development/Moose/Tasking/Task_SEAD.lua +++ b/Moose Development/Moose/Tasking/Task_SEAD.lua @@ -45,14 +45,9 @@ do -- TASK_SEAD self.TargetSetUnit = TargetSetUnit self.TargetZone = TargetZone - -- ASSIGN_ACCEPT:New(TaskBriefing) - self:SetProcessClass( "ASSIGN", ASSIGN_ACCEPT, self.TaskBriefing ) - - -- ROUTE_ZONE:New(TargetZone) - self:SetProcessClass( "ROUTE", ROUTE_ZONE, self.TargetZone ) - - -- ACCOUNT_DEADS:New(TargetSetUnit,TaskName) - self:SetProcessClass( "ACCOUNT", ACCOUNT_DEADS, self.TargetSetUnit, "SEAD" ) + self:SetProcessTemplate( "ASSIGN", ASSIGN_ACCEPT:New( self.TaskBriefing ) ) + self:SetProcessTemplate( "ROUTE", ROUTE_ZONE:New( self.TargetZone ) ) + self:SetProcessTemplate( "ACCOUNT", ACCOUNT_DEADS:New( self.TargetSetUnit, "SEAD" ) ) -- SMOKE_TARGETS_ZONE:New( self.TargetSetUnit, self.TargetZone ) --self:SetProcessClass( "SMOKE", SMOKE_TARGETS_ZONE, self.TargetSetUnit, self.TargetZone ) diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index 833a726be..cfe4aebcd 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160902_0901' ) +env.info( 'Moose Generation Timestamp: 20161102_0903' ) local base = _G diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 833a726be..cfe4aebcd 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE DYNAMIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160902_0901' ) +env.info( 'Moose Generation Timestamp: 20161102_0903' ) local base = _G diff --git a/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua index c35d1b7c2..3bfb57142 100644 --- a/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua +++ b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.lua @@ -16,11 +16,12 @@ TaskSEAD:AddScore( "Success", "Destroyed all target radars", 250 ) TaskSEAD:AddScore( "Failed", "Failed to destroy all target radars", -100 ) -- 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 ) -- 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, "Failed", "failed to destroy a radar", -100 ) diff --git a/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz index b6e9631e9..7e044d377 100644 Binary files a/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz and b/Moose Test Missions/Moose_Test_Tasking/Moose_Test_Task_SEAD/Moose_Test_Task_SEAD.miz differ diff --git a/Moose Training/Presentations/DCS World - MOOSE - Tasking - SEAD.pptx b/Moose Training/Presentations/DCS World - MOOSE - Tasking - SEAD.pptx index 191650f02..9faf97025 100644 Binary files a/Moose Training/Presentations/DCS World - MOOSE - Tasking - SEAD.pptx and b/Moose Training/Presentations/DCS World - MOOSE - Tasking - SEAD.pptx differ