PLAYERTASK - added a couple of FSM events so task events bubble up to the controller

This commit is contained in:
Applevangelist 2022-07-29 14:53:23 +02:00
parent 5eb134f7b5
commit d060c7535a

View File

@ -29,6 +29,15 @@
-- @field Ops.Auftrag#AUFTRAG.Type Type The type of the task -- @field Ops.Auftrag#AUFTRAG.Type Type The type of the task
-- @field Ops.Target#TARGET Target The target for this Task -- @field Ops.Target#TARGET Target The target for this Task
-- @field Utilities.FiFo#FIFO Clients Table of Wrapper.Client#CLIENT planes executing this task -- @field Utilities.FiFo#FIFO Clients Table of Wrapper.Client#CLIENT planes executing this task
-- @field #boolean Repeat
-- @field #number repeats
-- @field #number RepeatNo
-- @field Wrapper.Marker#MARKER TargetMarker
-- @field #number SmokeColor
-- @field #number FlareColor
-- @field #table conditionSuccess = {},
-- @field #table conditionFailure = {},
-- @field Ops.PlayerTask#PLAYERTASKCONTROLLER TaskController
-- --
-- @extends Core.Fsm#FSM -- @extends Core.Fsm#FSM
@ -51,13 +60,14 @@ PLAYERTASK = {
TargetMarker = nil, TargetMarker = nil,
SmokeColor = nil, SmokeColor = nil,
FlareColor = nil, FlareColor = nil,
conditionSuccess = {}, conditionSuccess = {},
conditionFailure = {}, conditionFailure = {},
TaskController = nil,
} }
--- PLAYERTASK class version. --- PLAYERTASK class version.
-- @field #string version -- @field #string version
PLAYERTASK.version="0.0.3" PLAYERTASK.version="0.0.5"
--- Generic task condition. --- Generic task condition.
-- @type PLAYERTASK.Condition -- @type PLAYERTASK.Condition
@ -86,6 +96,7 @@ function PLAYERTASK:New(Type, Target, Repeat, Times)
self.SmokeColor = SMOKECOLOR.Red self.SmokeColor = SMOKECOLOR.Red
self.conditionSuccess = {} self.conditionSuccess = {}
self.conditionFailure = {} self.conditionFailure = {}
self.TaskController = nil -- Ops.PlayerTask#PLAYERTASKCONTROLLER
if Repeat then if Repeat then
self.Repeat = true self.Repeat = true
@ -121,7 +132,7 @@ function PLAYERTASK:New(Type, Target, Repeat, Times)
self:AddTransition("*", "Done", "Done") -- All clients have reported that Task is done. self:AddTransition("*", "Done", "Done") -- All clients have reported that Task is done.
self:AddTransition("*", "Cancel", "Done") -- Command to cancel the Task. self:AddTransition("*", "Cancel", "Done") -- Command to cancel the Task.
self:AddTransition("*", "Success", "Done") self:AddTransition("*", "Success", "Done")
self:AddTransition("*", "ClientAborted", "*") self:AddTransition("*", "ClientAborted", "*")
self:AddTransition("*", "Failed", "*") -- Done or repeat --> PLANNED self:AddTransition("*", "Failed", "*") -- Done or repeat --> PLANNED
self:AddTransition("*", "Status", "*") self:AddTransition("*", "Status", "*")
self:AddTransition("*", "Stop", "Stopped") self:AddTransition("*", "Stop", "Stopped")
@ -130,7 +141,17 @@ function PLAYERTASK:New(Type, Target, Repeat, Times)
return self return self
end end
--- (User) Check is task is done --- [Internal] Add a PLAYERTASKCONTROLLER for this task
-- @param #PLAYERTASK self
-- @param Ops.PlayerTask#PLAYERTASKCONTROLLER Controller
-- @return #PLAYERTASK self
function PLAYERTASK:_SetController(Controller)
self:I(self.lid.."_SetController")
self.TaskController = Controller
return self
end
--- [User] Check is task is done
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @return #boolean done -- @return #boolean done
function PLAYERTASK:IsDone() function PLAYERTASK:IsDone()
@ -143,7 +164,7 @@ function PLAYERTASK:IsDone()
return IsDone return IsDone
end end
--- (User) Add a client to this task --- [User] Add a client to this task
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
@ -157,7 +178,7 @@ function PLAYERTASK:AddClient(Client)
return self return self
end end
--- (User) Remove a client from this task --- [User] Remove a client from this task
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
@ -168,13 +189,13 @@ function PLAYERTASK:RemoveClient(Client)
self.Clients:PullByID(name) self.Clients:PullByID(name)
self:__ClientRemoved(-2,Client) self:__ClientRemoved(-2,Client)
if self.Clients:Count() == 0 then if self.Clients:Count() == 0 then
self:__Planned(-1) self:__Failed(-1)
end end
end end
return self return self
end end
--- (User) Client has aborted task this task --- [User] Client has aborted task this task
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param Wrapper.Client#CLIENT Client (optional) -- @param Wrapper.Client#CLIENT Client (optional)
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
@ -188,14 +209,14 @@ function PLAYERTASK:ClientAbort(Client)
else else
-- no client given, abort whole task if no one else is assigned -- no client given, abort whole task if no one else is assigned
if self.Clients:Count() == 0 then if self.Clients:Count() == 0 then
-- return to planned state -- return to planned state if repeat
self:__Planned(-1) self:__Failed(-1)
end end
end end
return self return self
end end
--- (User) Create target mark on F10 map --- [User] Create target mark on F10 map
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
function PLAYERTASK:MarkTargetOnF10Map() function PLAYERTASK:MarkTargetOnF10Map()
@ -215,7 +236,7 @@ function PLAYERTASK:MarkTargetOnF10Map()
return self return self
end end
--- (User) Smoke Target --- [User] Smoke Target
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #number Color, defaults to SMOKECOLOR.Red -- @param #number Color, defaults to SMOKECOLOR.Red
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
@ -231,7 +252,7 @@ function PLAYERTASK:SmokeTarget(Color)
return self return self
end end
--- (User) Flare Target --- [User] Flare Target
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #number Color, defaults to FLARECOLOR.Red -- @param #number Color, defaults to FLARECOLOR.Red
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
@ -313,7 +334,7 @@ function PLAYERTASK:_EvalConditionsAny(Conditions)
return false return false
end end
--- [internal] On after status call --- [Internal] On after status call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -381,7 +402,7 @@ function PLAYERTASK:onafterStatus(From, Event, To)
end end
--- [internal] On after planned call --- [Internal] On after planned call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -392,7 +413,7 @@ function PLAYERTASK:onafterPlanned(From, Event, To)
return self return self
end end
--- [internal] On after requested call --- [Internal] On after requested call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -403,7 +424,7 @@ function PLAYERTASK:onafterRequested(From, Event, To)
return self return self
end end
--- [internal] On after executing call --- [Internal] On after executing call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -414,7 +435,7 @@ function PLAYERTASK:onafterExecuting(From, Event, To)
return self return self
end end
--- [internal] On after status call --- [Internal] On after status call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -425,7 +446,7 @@ function PLAYERTASK:onafterStop(From, Event, To)
return self return self
end end
--- [internal] On after client added call --- [Internal] On after client added call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -441,7 +462,7 @@ function PLAYERTASK:onafterClientAdded(From, Event, To, Client)
return self return self
end end
--- [internal] On after done call --- [Internal] On after done call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -449,11 +470,14 @@ end
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
function PLAYERTASK:onafterDone(From, Event, To) function PLAYERTASK:onafterDone(From, Event, To)
self:I({From, Event, To}) self:I({From, Event, To})
if self.TaskController then
self.TaskController:__TaskDone(-1,self)
end
self:__Stop(-1) self:__Stop(-1)
return self return self
end end
--- [internal] On after cancel call --- [Internal] On after cancel call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -461,11 +485,14 @@ end
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
function PLAYERTASK:onafterCancel(From, Event, To) function PLAYERTASK:onafterCancel(From, Event, To)
self:I({From, Event, To}) self:I({From, Event, To})
if self.TaskController then
self.TaskController:__TaskCancelled(-1,self)
end
self:__Done(-1) self:__Done(-1)
return self return self
end end
--- [internal] On after success call --- [Internal] On after success call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -473,6 +500,9 @@ end
-- @return #PLAYERTASK self -- @return #PLAYERTASK self
function PLAYERTASK:onafterSuccess(From, Event, To) function PLAYERTASK:onafterSuccess(From, Event, To)
self:I({From, Event, To}) self:I({From, Event, To})
if self.TaskController then
self.TaskController:__TaskSuccess(-1,self)
end
if self.TargetMarker then if self.TargetMarker then
self.TargetMarker:Remove() self.TargetMarker:Remove()
end end
@ -480,7 +510,7 @@ function PLAYERTASK:onafterSuccess(From, Event, To)
return self return self
end end
--- [internal] On after failed call --- [Internal] On after failed call
-- @param #PLAYERTASK self -- @param #PLAYERTASK self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -491,12 +521,18 @@ function PLAYERTASK:onafterFailed(From, Event, To)
self.repeats = self.repeats + 1 self.repeats = self.repeats + 1
-- repeat on failed? -- repeat on failed?
if self.Repeat and (self.repeats <= self.RepeatNo) then if self.Repeat and (self.repeats <= self.RepeatNo) then
if self.TaskController then
self.TaskController:__TaskRepeatOnFailed(-1,self)
end
self:__Planned(-1) self:__Planned(-1)
return self return self
else else
if self.TargetMarker then if self.TargetMarker then
self.TargetMarker:Remove() self.TargetMarker:Remove()
end end
if self.TaskController then
self.TaskController:__TaskFailed(-1,self)
end
self:__Done(-1) self:__Done(-1)
end end
return self return self
@ -544,7 +580,7 @@ PLAYERTASKCONTROLLER.Type = {
--- PLAYERTASK class version. --- PLAYERTASK class version.
-- @field #string version -- @field #string version
PLAYERTASKCONTROLLER.version="0.0.2" PLAYERTASKCONTROLLER.version="0.0.3"
--- Constructor --- Constructor
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
@ -583,9 +619,14 @@ function PLAYERTASKCONTROLLER:New(Name, Coalition, Type, ClientFilter)
-- FSM start state is STOPPED. -- FSM start state is STOPPED.
self:SetStartState("Stopped") self:SetStartState("Stopped")
self:AddTransition("Stopped", "Start", "Running") self:AddTransition("Stopped", "Start", "Running")
self:AddTransition("*", "Status", "*") self:AddTransition("*", "Status", "*")
self:AddTransition("*", "Stop", "Stopped") self:AddTransition("*", "TaskDone", "*")
self:AddTransition("*", "TaskCancelled", "*")
self:AddTransition("*", "TaskSuccess", "*")
self:AddTransition("*", "TaskFailed", "*")
self:AddTransition("*", "TaskRepeatOnFailed", "*")
self:AddTransition("*", "Stop", "Stopped")
self:__Start(-1) self:__Start(-1)
self:__Status(-2) self:__Status(-2)
@ -614,7 +655,7 @@ function PLAYERTASKCONTROLLER:SwitchUseGroupNames(OnOff)
return self return self
end end
--- [internal] Get task types for the menu --- [Internal] Get task types for the menu
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @return #table TaskTypes -- @return #table TaskTypes
function PLAYERTASKCONTROLLER:_GetAvailableTaskTypes() function PLAYERTASKCONTROLLER:_GetAvailableTaskTypes()
@ -630,7 +671,7 @@ function PLAYERTASKCONTROLLER:_GetAvailableTaskTypes()
return tasktypes return tasktypes
end end
--- [internal] Get task per type for the menu --- [Internal] Get task per type for the menu
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @return #table TasksPerTypes -- @return #table TasksPerTypes
function PLAYERTASKCONTROLLER:_GetTasksPerType() function PLAYERTASKCONTROLLER:_GetTasksPerType()
@ -652,7 +693,7 @@ function PLAYERTASKCONTROLLER:_GetTasksPerType()
return tasktypes return tasktypes
end end
--- [internal] Check target queue --- [Internal] Check target queue
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @return #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:_CheckTargetQueue() function PLAYERTASKCONTROLLER:_CheckTargetQueue()
@ -665,7 +706,7 @@ function PLAYERTASKCONTROLLER:_CheckTargetQueue()
return self return self
end end
--- [internal] Check task queue --- [Internal] Check task queue
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @return #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:_CheckTaskQueue() function PLAYERTASKCONTROLLER:_CheckTaskQueue()
@ -700,7 +741,7 @@ function PLAYERTASKCONTROLLER:AddTarget(Target)
return self return self
end end
--- [internal] Add a task to the task queue --- [Internal] Add a task to the task queue
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Ops.Target#TARGET Target -- @param Ops.Target#TARGET Target
-- @return #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self
@ -770,12 +811,12 @@ function PLAYERTASKCONTROLLER:_AddTask(Target)
end end
local task = PLAYERTASK:New(type,Target,self.repeatonfailed,self.repeattimes) local task = PLAYERTASK:New(type,Target,self.repeatonfailed,self.repeattimes)
task:_SetController(self)
self.TaskQueue:Push(task) self.TaskQueue:Push(task)
return self return self
end end
--- [internal] Join a player to a task --- [Internal] Join a player to a task
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
@ -804,7 +845,7 @@ function PLAYERTASKCONTROLLER:_JoinTask(Group, Client, Task)
return self return self
end end
--- [internal] Show active task info --- [Internal] Show active task info
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
@ -831,7 +872,7 @@ function PLAYERTASKCONTROLLER:_ActiveTaskInfo(Group, Client)
return self return self
end end
--- [internal] Mark task on F10 map --- [Internal] Mark task on F10 map
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
@ -851,7 +892,7 @@ function PLAYERTASKCONTROLLER:_MarkTask(Group, Client)
return self return self
end end
--- [internal] Smoke task location --- [Internal] Smoke task location
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
@ -871,7 +912,7 @@ function PLAYERTASKCONTROLLER:_SmokeTask(Group, Client)
return self return self
end end
--- [internal] Flare task location --- [Internal] Flare task location
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
@ -891,7 +932,7 @@ function PLAYERTASKCONTROLLER:_FlareTask(Group, Client)
return self return self
end end
--- [internal] Abort Task --- [Internal] Abort Task
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param Wrapper.Group#GROUP Group -- @param Wrapper.Group#GROUP Group
-- @param Wrapper.Client#CLIENT Client -- @param Wrapper.Client#CLIENT Client
@ -911,7 +952,7 @@ function PLAYERTASKCONTROLLER:_AbortTask(Group, Client)
return self return self
end end
--- [internal] Build client menus --- [Internal] Build client menus
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @return #PLAYERTASKCONTROLLER self -- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:_BuildMenus() function PLAYERTASKCONTROLLER:_BuildMenus()
@ -960,7 +1001,7 @@ function PLAYERTASKCONTROLLER:_BuildMenus()
return self return self
end end
--- [internal] On after Status call --- [Internal] On after Status call
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event
@ -987,7 +1028,78 @@ function PLAYERTASKCONTROLLER:onafterStatus(From, Event, To)
return self return self
end end
--- [internal] On after Stop call --- [Internal] On after task done
-- @param #PLAYERTASKCONTROLLER self
-- @param #string From
-- @param #string Event
-- @param #string To
-- @param Ops.PlayerTask#PLAYERTASK Task
-- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:onafterTaskDone(From, Event, To, Task)
self:I({From, Event, To})
self:I(self.lid.."TaskDone")
return self
end
--- [Internal] On after task cancelled
-- @param #PLAYERTASKCONTROLLER self
-- @param #string From
-- @param #string Event
-- @param #string To
-- @param Ops.PlayerTask#PLAYERTASK Task
-- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:onafterTaskCancelled(From, Event, To, Task)
self:I({From, Event, To})
self:I(self.lid.."TaskCancelled")
return self
end
--- [Internal] On after task success
-- @param #PLAYERTASKCONTROLLER self
-- @param #string From
-- @param #string Event
-- @param #string To
-- @param Ops.PlayerTask#PLAYERTASK Task
-- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:onafterTaskSuccess(From, Event, To, Task)
self:I({From, Event, To})
self:I(self.lid.."TaskSuccess")
local taskname = string.format("Task #%d %s Success!", Task.PlayerTaskNr, tostring(Task.Type))
local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition)
return self
end
--- [Internal] On after task failed
-- @param #PLAYERTASKCONTROLLER self
-- @param #string From
-- @param #string Event
-- @param #string To
-- @param Ops.PlayerTask#PLAYERTASK Task
-- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:onafterTaskFailed(From, Event, To, Task)
self:I({From, Event, To})
self:I(self.lid.."TaskFailed")
local taskname = string.format("Task #%d %s Failed!", Task.PlayerTaskNr, tostring(Task.Type))
local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition)
return self
end
--- [Internal] On after task failed, repeat planned
-- @param #PLAYERTASKCONTROLLER self
-- @param #string From
-- @param #string Event
-- @param #string To
-- @param Ops.PlayerTask#PLAYERTASK Task
-- @return #PLAYERTASKCONTROLLER self
function PLAYERTASKCONTROLLER:onafterTaskRepeatOnFailed(From, Event, To, Task)
self:I({From, Event, To})
self:I(self.lid.."RepeatOnFailed")
local taskname = string.format("Task #%d %s Failed! Replanning!", Task.PlayerTaskNr, tostring(Task.Type))
local m = MESSAGE:New(taskname,15,"Tasking"):ToCoalition(self.Coalition)
return self
end
--- [Internal] On after Stop call
-- @param #PLAYERTASKCONTROLLER self -- @param #PLAYERTASKCONTROLLER self
-- @param #string From -- @param #string From
-- @param #string Event -- @param #string Event