mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Updated to CARGO TASKING model. Now capture from the dispatcher the CargoPickedUp and CargoDeployed events.
This commit is contained in:
@@ -261,6 +261,97 @@ do -- TASK_CARGO_DISPATCHER
|
||||
-- Use the @{#TASK_CARGO_DISPATCHER.SetCSARDeployZone}() to setup one deployment zone, and @{#TASK_CARGO_DISPATCHER.SetCSARDeployZones}() to setup multiple default deployment zones in one call.
|
||||
--
|
||||
--
|
||||
-- # 5) Handle cargo task events.
|
||||
--
|
||||
-- When a player is picking up and deploying cargo using his carrier, events are generated by the dispatcher. These events can be captured and tailored with your own code.
|
||||
--
|
||||
-- In order to properly capture the events and avoid mistakes using the documentation, it is advised that you execute the following actions:
|
||||
--
|
||||
-- * **Copy / Paste** the code section into your script.
|
||||
-- * **Change** the CLASS literal to the task object name you have in your script.
|
||||
-- * Within the function, you can now **write your own code**!
|
||||
-- * **IntelliSense** will recognize the type of the variables provided by the function. Note: the From, Event and To variables can be safely ignored,
|
||||
-- but you need to declare them as they are automatically provided by the event handling system of MOOSE.
|
||||
--
|
||||
-- You can send messages or fire off any other events within the code section. The sky is the limit!
|
||||
--
|
||||
-- First, we need to create a TASK_CARGO_DISPATCHER object.
|
||||
--
|
||||
-- TaskDispatcher = TASK_CARGO_DISPATCHER:New( Mission, PilotGroupSet )
|
||||
--
|
||||
-- Second, we create a new cargo transport task for the transportation of workmaterials.
|
||||
--
|
||||
-- TaskDispatcher:AddTransportTask(
|
||||
-- "Transport workmaterials",
|
||||
-- WorkmaterialsCargoSet,
|
||||
-- "Transport the workers, engineers and the equipment near the Workplace." )
|
||||
--
|
||||
-- Note that we don't really need to keep the resulting task, it is kept internally also in the dispatcher.
|
||||
--
|
||||
-- Using the `TaskDispatcher` object, we can now cpature the CargoPickedUp and CargoDeployed events.
|
||||
--
|
||||
-- ## 5.1) Handle the **CargoPickedUp** event.
|
||||
--
|
||||
-- Find below an example how to tailor the **CargoPickedUp** event, generated by the `TaskDispatcher`:
|
||||
--
|
||||
-- function TaskDispatcher:OnAfterCargoPickedUp( From, Event, To, Task, TaskPrefix, TaskUnit, Cargo )
|
||||
--
|
||||
-- MESSAGE:NewType( "Unit " .. TaskUnit:GetName().. " has picked up cargo for task " .. Task:GetName() .. ".", MESSAGE.Type.Information ):ToAll()
|
||||
--
|
||||
-- end
|
||||
--
|
||||
-- If you want to code your own event handler, use this code fragment to tailor the event when a player carrier has picked up a cargo object in the CarrierGroup.
|
||||
-- You can use this event handler to post messages to players, or provide status updates etc.
|
||||
--
|
||||
-- --- CargoPickedUp event handler OnAfter for CLASS.
|
||||
-- -- @param #CLASS self
|
||||
-- -- @param #string From A string that contains the "*from state name*" when the event was triggered.
|
||||
-- -- @param #string Event A string that contains the "*event name*" when the event was triggered.
|
||||
-- -- @param #string To A string that contains the "*to state name*" when the event was triggered.
|
||||
-- -- @param Tasking.Task_Cargo#TASK_CARGO Task The cargo task for which the cargo has been picked up. Note that this will be a derived TAKS_CARGO object!
|
||||
-- -- @param #string TaskPrefix The prefix of the task that was provided when the task was created.
|
||||
-- -- @param Wrapper.Unit#UNIT TaskUnit The unit (client) of the player that has picked up the cargo.
|
||||
-- -- @param Cargo.Cargo#CARGO Cargo The cargo object that has been picked up. Note that this can be a CARGO_GROUP, CARGO_CRATE or CARGO_SLINGLOAD object!
|
||||
-- function CLASS:OnAfterCargoPickedUp( From, Event, To, Task, TaskPrefix, TaskUnit, Cargo )
|
||||
--
|
||||
-- -- Write here your own code.
|
||||
--
|
||||
-- end
|
||||
--
|
||||
--
|
||||
-- ## 5.2) Handle the **CargoDeployed** event.
|
||||
--
|
||||
-- Find below an example how to tailor the **CargoDeployed** event, generated by the `TaskDispatcher`:
|
||||
--
|
||||
-- function WorkplaceTask:OnAfterCargoDeployed( From, Event, To, Task, TaskPrefix, TaskUnit, Cargo, DeployZone )
|
||||
--
|
||||
-- MESSAGE:NewType( "Unit " .. TaskUnit:GetName().. " has deployed cargo at zone " .. DeployZone:GetName() .. " for task " .. Task:GetName() .. ".", MESSAGE.Type.Information ):ToAll()
|
||||
--
|
||||
-- Helos[ math.random(1,#Helos) ]:Spawn()
|
||||
-- EnemyHelos[ math.random(1,#EnemyHelos) ]:Spawn()
|
||||
-- end
|
||||
--
|
||||
-- If you want to code your own event handler, use this code fragment to tailor the event when a player carrier has deployed a cargo object from the CarrierGroup.
|
||||
-- You can use this event handler to post messages to players, or provide status updates etc.
|
||||
--
|
||||
--
|
||||
-- --- CargoDeployed event handler OnAfter for CLASS.
|
||||
-- -- @param #CLASS self
|
||||
-- -- @param #string From A string that contains the "*from state name*" when the event was triggered.
|
||||
-- -- @param #string Event A string that contains the "*event name*" when the event was triggered.
|
||||
-- -- @param #string To A string that contains the "*to state name*" when the event was triggered.
|
||||
-- -- @param Tasking.Task_Cargo#TASK_CARGO Task The cargo task for which the cargo has been deployed. Note that this will be a derived TAKS_CARGO object!
|
||||
-- -- @param #string TaskPrefix The prefix of the task that was provided when the task was created.
|
||||
-- -- @param Wrapper.Unit#UNIT TaskUnit The unit (client) of the player that has deployed the cargo.
|
||||
-- -- @param Cargo.Cargo#CARGO Cargo The cargo object that has been deployed. Note that this can be a CARGO_GROUP, CARGO_CRATE or CARGO_SLINGLOAD object!
|
||||
-- -- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
|
||||
-- function CLASS:OnAfterCargoDeployed( From, Event, To, Task, TaskPrefix, TaskUnit, Cargo, DeployZone )
|
||||
--
|
||||
-- -- Write here your own code.
|
||||
--
|
||||
-- end
|
||||
--
|
||||
--
|
||||
--
|
||||
-- @field #TASK_CARGO_DISPATCHER
|
||||
TASK_CARGO_DISPATCHER = {
|
||||
@@ -288,6 +379,8 @@ do -- TASK_CARGO_DISPATCHER
|
||||
self.Mission = Mission
|
||||
|
||||
self:AddTransition( "Started", "Assign", "Started" )
|
||||
self:AddTransition( "Started", "CargoPickedUp", "Started" )
|
||||
self:AddTransition( "Started", "CargoDeployed", "Started" )
|
||||
|
||||
--- OnAfter Transition Handler for Event Assign.
|
||||
-- @function [parent=#TASK_CARGO_DISPATCHER] OnAfterAssign
|
||||
@@ -462,6 +555,7 @@ do -- TASK_CARGO_DISPATCHER
|
||||
self.CSAR[CSARTaskName].PilotGroup = CSARGroup
|
||||
self.CSAR[CSARTaskName].Briefing = CSARBriefing
|
||||
self.CSAR[CSARTaskName].Task = nil
|
||||
self.CSAR[CSARTaskName].TaskPrefix = CSARTaskPrefix
|
||||
|
||||
return CSARTaskName
|
||||
end
|
||||
@@ -547,16 +641,17 @@ do -- TASK_CARGO_DISPATCHER
|
||||
-- -- Here we set a TransportDeployZone. We use the WorkplaceTask as the reference, and provide a ZONE object.
|
||||
-- TaskDispatcher:SetTransportDeployZone( WorkplaceTask, ZONE:New( "Workplace" ) )
|
||||
--
|
||||
function TASK_CARGO_DISPATCHER:AddTransportTask( TaskName, SetCargo, Briefing )
|
||||
function TASK_CARGO_DISPATCHER:AddTransportTask( TaskPrefix, SetCargo, Briefing )
|
||||
|
||||
self.TransportCount = self.TransportCount + 1
|
||||
|
||||
local TaskName = string.format( ( TaskName or "Transport" ) .. ".%03d", self.TransportCount )
|
||||
local TaskName = string.format( ( TaskPrefix or "Transport" ) .. ".%03d", self.TransportCount )
|
||||
|
||||
self.Transport[TaskName] = {}
|
||||
self.Transport[TaskName].SetCargo = SetCargo
|
||||
self.Transport[TaskName].Briefing = Briefing
|
||||
self.Transport[TaskName].Task = nil
|
||||
self.Transport[TaskName].TaskPrefix = TaskPrefix
|
||||
|
||||
self:ManageTasks()
|
||||
|
||||
@@ -663,6 +758,7 @@ do -- TASK_CARGO_DISPATCHER
|
||||
-- New CSAR Task
|
||||
local SetCargo = self:EvaluateCSAR( CSAR.PilotGroup )
|
||||
CSAR.Task = TASK_CARGO_CSAR:New( Mission, self.SetGroup, CSARName, SetCargo, CSAR.Briefing )
|
||||
CSAR.Task.TaskPrefix = CSAR.TaskPrefix -- We keep the TaskPrefix for further reference!
|
||||
Mission:AddTask( CSAR.Task )
|
||||
TaskReport:Add( CSARName )
|
||||
if CSAR.DeployZones then
|
||||
@@ -670,6 +766,17 @@ do -- TASK_CARGO_DISPATCHER
|
||||
else
|
||||
CSAR.Task:SetDeployZones( self.DefaultDeployZones or {} )
|
||||
end
|
||||
|
||||
-- Now broadcast the onafterCargoPickedUp event to the Task Cargo Dispatcher.
|
||||
function CSAR.Task.OnAfterCargoPickedUp( Task, From, Event, To, TaskUnit, Cargo )
|
||||
self:CargoPickedUp( Task, Task.TaskPrefix, TaskUnit, Cargo )
|
||||
end
|
||||
|
||||
-- Now broadcast the onafterCargoDeployed event to the Task Cargo Dispatcher.
|
||||
function CSAR.Task.OnAfterCargoDeployed( Task, From, Event, To, TaskUnit, Cargo, DeployZone )
|
||||
self:CargoDeployed( Task, Task.TaskPrefix, TaskUnit, Cargo, DeployZone )
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -680,6 +787,7 @@ do -- TASK_CARGO_DISPATCHER
|
||||
if not Transport.Task then
|
||||
-- New Transport Task
|
||||
Transport.Task = TASK_CARGO_TRANSPORT:New( Mission, self.SetGroup, TransportName, Transport.SetCargo, Transport.Briefing )
|
||||
Transport.Task.TaskPrefix = Transport.TaskPrefix -- We keep the TaskPrefix for further reference!
|
||||
Mission:AddTask( Transport.Task )
|
||||
TaskReport:Add( TransportName )
|
||||
function Transport.Task.OnEnterSuccess( Task, From, Event, To )
|
||||
@@ -697,6 +805,17 @@ do -- TASK_CARGO_DISPATCHER
|
||||
function Transport.Task.OnEnterAborted( Task, From, Event, To )
|
||||
self:Aborted( Task )
|
||||
end
|
||||
|
||||
-- Now broadcast the onafterCargoPickedUp event to the Task Cargo Dispatcher.
|
||||
function Transport.Task.OnAfterCargoPickedUp( Task, From, Event, To, TaskUnit, Cargo )
|
||||
self:CargoPickedUp( Task, Task.TaskPrefix, TaskUnit, Cargo )
|
||||
end
|
||||
|
||||
-- Now broadcast the onafterCargoDeployed event to the Task Cargo Dispatcher.
|
||||
function Transport.Task.OnAfterCargoDeployed( Task, From, Event, To, TaskUnit, Cargo, DeployZone )
|
||||
self:CargoDeployed( Task, Task.TaskPrefix, TaskUnit, Cargo, DeployZone )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if Transport.DeployZones then
|
||||
|
||||
Reference in New Issue
Block a user