mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
106 lines
3.4 KiB
Lua
106 lines
3.4 KiB
Lua
--- @module Task_SEAD
|
|
|
|
--- The TASK_SEAD class
|
|
-- @type TASK_SEAD
|
|
-- @extends Task#TASK_BASE
|
|
TASK_SEAD = {
|
|
ClassName = "TASK_SEAD",
|
|
}
|
|
|
|
--- Instantiates a new TASK_SEAD. Should never be used. Interface Class.
|
|
-- @param #TASK_SEAD self
|
|
-- @param Mission#MISSION Mission
|
|
-- @param Set#SET_UNIT UnitSetTargets
|
|
-- @param Zone#ZONE_BASE TargetZone
|
|
-- @return #TASK_SEAD self
|
|
function TASK_SEAD:New( Mission, TargetSetUnit, TargetZone )
|
|
local self = BASE:Inherit( self, TASK_BASE:New( Mission, "SEAD" ) )
|
|
self:F()
|
|
|
|
self.TargetSetUnit = TargetSetUnit
|
|
self.TargetZone = TargetZone
|
|
|
|
_EVENTDISPATCHER:OnBirth( self._EventAssignUnit, self )
|
|
_EVENTDISPATCHER:OnPlayerEnterUnit(self._EventAssignUnit, self )
|
|
_EVENTDISPATCHER:OnPlayerLeaveUnit(self._EventUnAssignUnit, self )
|
|
_EVENTDISPATCHER:OnCrash(self._EventUnAssignUnit, self )
|
|
_EVENTDISPATCHER:OnDead(self._EventUnAssignUnit, self )
|
|
_EVENTDISPATCHER:OnPilotDead(self._EventUnAssignUnit, self )
|
|
|
|
return self
|
|
end
|
|
|
|
--- Assign the @{Task} to a @{Unit}.
|
|
-- @param #TASK_SEAD self
|
|
-- @param Unit#UNIT TaskUnit
|
|
-- @return #TASK_SEAD self
|
|
function TASK_SEAD:AssignToUnit( TaskUnit )
|
|
self:F( TaskUnit:GetName() )
|
|
|
|
local ProcessAssign = self:AddProcess( TaskUnit, PROCESS_ASSIGN:New( self, TaskUnit, self.TaskBriefing ) )
|
|
local ProcessRoute = self:AddProcess( TaskUnit, PROCESS_ROUTE:New( self, TaskUnit, self.TargetZone ) )
|
|
local ProcessSEAD = self:AddProcess( TaskUnit, PROCESS_SEAD:New( self, TaskUnit, self.TargetSetUnit ) )
|
|
|
|
local Process = self:AddStateMachine( TaskUnit, STATEMACHINE_TASK:New( self, {
|
|
initial = 'None',
|
|
events = {
|
|
{ name = 'Next', from = 'None', to = 'Planned' },
|
|
{ name = 'Next', from = 'Planned', to = 'Assigned' },
|
|
{ name = 'Reject', from = 'Planned', to = 'Rejected' },
|
|
{ name = 'Next', from = 'Assigned', to = 'Success' },
|
|
{ name = 'Fail', from = 'Assigned', to = 'Failed' },
|
|
{ name = 'Fail', from = 'Arrived', to = 'Failed' }
|
|
},
|
|
callbacks = {
|
|
onNext = self.OnNext,
|
|
onRemove = self.OnRemove,
|
|
},
|
|
subs = {
|
|
Assign = { onstateparent = 'Planned', oneventparent = 'Next', fsm = ProcessAssign.Fsm, event = 'Menu', returnevents = { 'Next', 'Reject' } },
|
|
Route = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessRoute.Fsm, event = 'Route' },
|
|
Sead = { onstateparent = 'Assigned', oneventparent = 'Next', fsm = ProcessSEAD.Fsm, event = 'Await', returnevents = { 'Next' } }
|
|
}
|
|
} ) )
|
|
|
|
ProcessRoute:AddScore( "Failed", "failed to destroy a radar", -100 )
|
|
ProcessSEAD:AddScore( "Destroy", "destroyed a radar", 25 )
|
|
ProcessSEAD:AddScore( "Failed", "failed to destroy a radar", -100 )
|
|
|
|
Process:Next()
|
|
|
|
return self
|
|
end
|
|
|
|
--- StateMachine callback function for a TASK
|
|
-- @param #TASK_SEAD self
|
|
-- @param StateMachine#STATEMACHINE_TASK Fsm
|
|
-- @param #string Event
|
|
-- @param #string From
|
|
-- @param #string To
|
|
-- @param Event#EVENTDATA Event
|
|
function TASK_SEAD:OnNext( Fsm, Event, From, To, Event )
|
|
|
|
self:SetState( self, "State", To )
|
|
|
|
end
|
|
|
|
--- @param #TASK_SEAD self
|
|
function TASK_SEAD:_Schedule()
|
|
self:F2()
|
|
|
|
self.TaskScheduler = SCHEDULER:New( self, _Scheduler, {}, 15, 15 )
|
|
return self
|
|
end
|
|
|
|
|
|
--- @param #TASK_SEAD self
|
|
function TASK_SEAD._Scheduler()
|
|
self:F2()
|
|
|
|
return true
|
|
end
|
|
|
|
|
|
|
|
|