mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-12 16:57:50 +00:00
Refactoring
This commit is contained in:
@@ -257,6 +257,12 @@ function FLIGHTGROUP:New(groupname, autostart)
|
|||||||
-- Holding flag.
|
-- Holding flag.
|
||||||
self.flaghold=USERFLAG:New(string.format("%s_FlagHold", self.groupname))
|
self.flaghold=USERFLAG:New(string.format("%s_FlagHold", self.groupname))
|
||||||
self.flaghold:Set(0)
|
self.flaghold:Set(0)
|
||||||
|
|
||||||
|
-- Init waypoints.
|
||||||
|
self:InitWaypoints()
|
||||||
|
|
||||||
|
-- Initialize group.
|
||||||
|
self:_InitGroup()
|
||||||
|
|
||||||
-- Add FSM transitions.
|
-- Add FSM transitions.
|
||||||
-- From State --> Event --> To State
|
-- From State --> Event --> To State
|
||||||
@@ -308,15 +314,6 @@ function FLIGHTGROUP:New(groupname, autostart)
|
|||||||
--- Pseudo Functions ---
|
--- Pseudo Functions ---
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
--- Triggers the FSM event "Start". Starts the FLIGHTGROUP. Initializes parameters and starts event handlers.
|
|
||||||
-- @function [parent=#FLIGHTGROUP] Start
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Start" after a delay. Starts the FLIGHTGROUP. Initializes parameters and starts event handlers.
|
|
||||||
-- @function [parent=#FLIGHTGROUP] __Start
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
-- @param #number delay Delay in seconds.
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Stop". Stops the FLIGHTGROUP and all its event handlers.
|
--- Triggers the FSM event "Stop". Stops the FLIGHTGROUP and all its event handlers.
|
||||||
-- @param #FLIGHTGROUP self
|
-- @param #FLIGHTGROUP self
|
||||||
|
|
||||||
@@ -325,15 +322,7 @@ function FLIGHTGROUP:New(groupname, autostart)
|
|||||||
-- @param #FLIGHTGROUP self
|
-- @param #FLIGHTGROUP self
|
||||||
-- @param #number delay Delay in seconds.
|
-- @param #number delay Delay in seconds.
|
||||||
|
|
||||||
--- Triggers the FSM event "FlightStatus".
|
-- TODO: Add pseudo functions.
|
||||||
-- @function [parent=#FLIGHTGROUP] FlightStatus
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
|
|
||||||
--- Triggers the FSM event "FlightStatus" after a delay.
|
|
||||||
-- @function [parent=#FLIGHTGROUP] __FlightStatus
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
-- @param #number delay Delay in seconds.
|
|
||||||
|
|
||||||
|
|
||||||
-- Debug trace.
|
-- Debug trace.
|
||||||
if false then
|
if false then
|
||||||
@@ -687,105 +676,9 @@ function FLIGHTGROUP:GetFuelMin()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- Start & Status
|
-- Status
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
--- On after Start event. Starts the FLIGHTGROUP FSM and event handlers.
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
-- @param #string From From state.
|
|
||||||
-- @param #string Event Event.
|
|
||||||
-- @param #string To To state.
|
|
||||||
function FLIGHTGROUP:onafterStart(From, Event, To)
|
|
||||||
|
|
||||||
-- Short info.
|
|
||||||
local text=string.format("Starting flight group v%s", FLIGHTGROUP.version)
|
|
||||||
self:I(self.lid..text)
|
|
||||||
|
|
||||||
-- Set current waypoint. Counting starts a one.
|
|
||||||
self.currentwp=1
|
|
||||||
|
|
||||||
-- Check if the group is already alive and if so, add its elements.
|
|
||||||
local group=GROUP:FindByName(self.groupname)
|
|
||||||
|
|
||||||
if group then
|
|
||||||
|
|
||||||
-- Set group object.
|
|
||||||
self.group=group
|
|
||||||
|
|
||||||
-- Get units of group.
|
|
||||||
local units=group:GetUnits() or {}
|
|
||||||
|
|
||||||
-- Add elemets.
|
|
||||||
for _,unit in pairs(units) do
|
|
||||||
local element=self:AddElementByName(unit:GetName())
|
|
||||||
end
|
|
||||||
|
|
||||||
if not self.groupinitialized then
|
|
||||||
self:_InitGroup()
|
|
||||||
end
|
|
||||||
|
|
||||||
if group:IsAlive() then
|
|
||||||
|
|
||||||
-- Debug info.
|
|
||||||
self:T(self.lid..string.format("Found EXISTING and ALIVE group %s at start with %d/%d units/elements", group:GetName(), #units, #self.elements))
|
|
||||||
|
|
||||||
-- Trigger spawned event for all elements.
|
|
||||||
for _,element in pairs(self.elements) do
|
|
||||||
-- Add a little delay or the OnAfterSpawned function is not even initialized and will not be called.
|
|
||||||
self:__ElementSpawned(0.1, element)
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
|
||||||
-- Debug info.
|
|
||||||
self:T(self.lid..string.format("Found EXISTING but LATE ACTIVATED group %s at start with %d/%d units/elements", group:GetName(), #units, #self.elements))
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--- On after Start event. Starts the FLIGHTGROUP FSM and event handlers.
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
-- @param #string From From state.
|
|
||||||
-- @param #string Event Event.
|
|
||||||
-- @param #string To To state.
|
|
||||||
function FLIGHTGROUP:onafterStop(From, Event, To)
|
|
||||||
|
|
||||||
-- Check if group is still alive.
|
|
||||||
if self:IsAlive() then
|
|
||||||
|
|
||||||
-- Set element parking spot to FREE (after arrived for example).
|
|
||||||
if self.flightcontrol then
|
|
||||||
for _,_element in pairs(self.elements) do
|
|
||||||
local element=_element --#FLIGHTGROUP.Element
|
|
||||||
self:_SetElementParkingFree(element)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Destroy group. No event is generated.
|
|
||||||
self.group:Destroy(false)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Handle events:
|
|
||||||
self:UnHandleEvent(EVENTS.Birth)
|
|
||||||
self:UnHandleEvent(EVENTS.EngineStartup)
|
|
||||||
self:UnHandleEvent(EVENTS.Takeoff)
|
|
||||||
self:UnHandleEvent(EVENTS.Land)
|
|
||||||
self:UnHandleEvent(EVENTS.EngineShutdown)
|
|
||||||
self:UnHandleEvent(EVENTS.PilotDead)
|
|
||||||
self:UnHandleEvent(EVENTS.Ejection)
|
|
||||||
self:UnHandleEvent(EVENTS.Crash)
|
|
||||||
self:UnHandleEvent(EVENTS.RemoveUnit)
|
|
||||||
|
|
||||||
self.CallScheduler:Clear()
|
|
||||||
|
|
||||||
_DATABASE.FLIGHTGROUPS[self.groupname]=nil
|
|
||||||
|
|
||||||
self:I(self.lid.."STOPPED! Unhandled events, cleared scheduler and removed from database.")
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
--- On after "Status" event.
|
--- On after "Status" event.
|
||||||
-- @param #FLIGHTGROUP self
|
-- @param #FLIGHTGROUP self
|
||||||
-- @param #string From From state.
|
-- @param #string From From state.
|
||||||
@@ -1841,77 +1734,6 @@ function FLIGHTGROUP:onafterRespawn(From, Event, To, Template)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "PassingWaypoint" event.
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
-- @param #string From From state.
|
|
||||||
-- @param #string Event Event.
|
|
||||||
-- @param #string To To state.
|
|
||||||
-- @param #number n Waypoint number passed.
|
|
||||||
-- @param #number N Final waypoint number.
|
|
||||||
function FLIGHTGROUP:onafterPassingWaypoint(From, Event, To, n, N)
|
|
||||||
local text=string.format("Flight passed waypoint %d/%d", n, N)
|
|
||||||
self:T(self.lid..text)
|
|
||||||
MESSAGE:New(text, 30, "DEBUG"):ToAllIf(self.Debug)
|
|
||||||
|
|
||||||
-- Get all waypoint tasks.
|
|
||||||
local tasks=self:GetTasksWaypoint(n)
|
|
||||||
|
|
||||||
-- Debug info.
|
|
||||||
local text=string.format("WP %d/%d tasks:", n, N)
|
|
||||||
if #tasks>0 then
|
|
||||||
for i,_task in pairs(tasks) do
|
|
||||||
local task=_task --#FLIGHTGROUP.Task
|
|
||||||
text=text..string.format("\n[%d] %s", i, task.description)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
text=text.." None"
|
|
||||||
end
|
|
||||||
self:T(self.lid..text)
|
|
||||||
|
|
||||||
|
|
||||||
-- Tasks at this waypoints.
|
|
||||||
local taskswp={}
|
|
||||||
|
|
||||||
-- TODO: maybe set waypoint enroute tasks?
|
|
||||||
|
|
||||||
for _,task in pairs(tasks) do
|
|
||||||
local Task=task --#FLIGHTGROUP.Task
|
|
||||||
|
|
||||||
-- Task execute.
|
|
||||||
table.insert(taskswp, self.group:TaskFunction("FLIGHTGROUP._TaskExecute", self, Task))
|
|
||||||
|
|
||||||
-- Stop condition if userflag is set to 1 or task duration over.
|
|
||||||
local TaskCondition=self.group:TaskCondition(nil, Task.stopflag:GetName(), 1, nil, Task.duration)
|
|
||||||
|
|
||||||
-- Controlled task.
|
|
||||||
table.insert(taskswp, self.group:TaskControlled(Task.dcstask, TaskCondition))
|
|
||||||
|
|
||||||
-- Task done.
|
|
||||||
table.insert(taskswp, self.group:TaskFunction("FLIGHTGROUP._TaskDone", self, Task))
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Execute waypoint tasks.
|
|
||||||
if #taskswp>0 then
|
|
||||||
self:SetTask(self.group:TaskCombo(taskswp))
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Final AIR waypoint reached?
|
|
||||||
if n==N then
|
|
||||||
|
|
||||||
-- Set switch to true.
|
|
||||||
self.passedfinalwp=true
|
|
||||||
|
|
||||||
-- Check if all tasks/mission are done? If so, RTB or WAIT.
|
|
||||||
-- Note, we delay it for a second to let the OnAfterPassingwaypoint function to be executed in case someone wants to add another waypoint there.
|
|
||||||
if #taskswp==0 then
|
|
||||||
self:_CheckGroupDone(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Check if flight is done, i.e.
|
--- Check if flight is done, i.e.
|
||||||
--
|
--
|
||||||
-- * passed the final waypoint,
|
-- * passed the final waypoint,
|
||||||
@@ -1982,33 +1804,6 @@ function FLIGHTGROUP:_CheckGroupDone(delay)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "GotoWaypoint" event. Group will got to the given waypoint and execute its route from there.
|
|
||||||
-- @param #FLIGHTGROUP self
|
|
||||||
-- @param #string From From state.
|
|
||||||
-- @param #string Event Event.
|
|
||||||
-- @param #string To To state.
|
|
||||||
-- @param #number n The goto waypoint number.
|
|
||||||
function FLIGHTGROUP:onafterGotoWaypoint(From, Event, To, n)
|
|
||||||
|
|
||||||
-- The last waypoint passed was n-1
|
|
||||||
self.currentwp=n-1
|
|
||||||
|
|
||||||
-- TODO: switch to re-enable waypoint tasks.
|
|
||||||
if false then
|
|
||||||
local tasks=self:GetTasksWaypoint(n)
|
|
||||||
|
|
||||||
for _,_task in pairs(tasks) do
|
|
||||||
local task=_task --#FLIGHTGROUP.Task
|
|
||||||
task.status=FLIGHTGROUP.TaskStatus.SCHEDULED
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Update the route.
|
|
||||||
self:UpdateRoute()
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
--- On before "RTB" event.
|
--- On before "RTB" event.
|
||||||
-- @param #FLIGHTGROUP self
|
-- @param #FLIGHTGROUP self
|
||||||
-- @param #string From From state.
|
-- @param #string From From state.
|
||||||
@@ -2559,6 +2354,45 @@ function FLIGHTGROUP:onafterFuelCritical(From, Event, To)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- On after Start event. Starts the FLIGHTGROUP FSM and event handlers.
|
||||||
|
-- @param #FLIGHTGROUP self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
function FLIGHTGROUP:onafterStop(From, Event, To)
|
||||||
|
|
||||||
|
-- Check if group is still alive.
|
||||||
|
if self:IsAlive() then
|
||||||
|
|
||||||
|
-- Set element parking spot to FREE (after arrived for example).
|
||||||
|
if self.flightcontrol then
|
||||||
|
for _,_element in pairs(self.elements) do
|
||||||
|
local element=_element --#FLIGHTGROUP.Element
|
||||||
|
self:_SetElementParkingFree(element)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Destroy group. No event is generated.
|
||||||
|
self.group:Destroy(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle events:
|
||||||
|
self:UnHandleEvent(EVENTS.Birth)
|
||||||
|
self:UnHandleEvent(EVENTS.EngineStartup)
|
||||||
|
self:UnHandleEvent(EVENTS.Takeoff)
|
||||||
|
self:UnHandleEvent(EVENTS.Land)
|
||||||
|
self:UnHandleEvent(EVENTS.EngineShutdown)
|
||||||
|
self:UnHandleEvent(EVENTS.PilotDead)
|
||||||
|
self:UnHandleEvent(EVENTS.Ejection)
|
||||||
|
self:UnHandleEvent(EVENTS.Crash)
|
||||||
|
self:UnHandleEvent(EVENTS.RemoveUnit)
|
||||||
|
|
||||||
|
self.CallScheduler:Clear()
|
||||||
|
|
||||||
|
_DATABASE.FLIGHTGROUPS[self.groupname]=nil
|
||||||
|
|
||||||
|
self:I(self.lid.."STOPPED! Unhandled events, cleared scheduler and removed from database.")
|
||||||
|
end
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- Task functions
|
-- Task functions
|
||||||
@@ -2624,6 +2458,11 @@ function FLIGHTGROUP:_InitGroup()
|
|||||||
-- Get template of group.
|
-- Get template of group.
|
||||||
self.template=self.group:GetTemplate()
|
self.template=self.group:GetTemplate()
|
||||||
|
|
||||||
|
-- Define category.
|
||||||
|
self.isAircraft=true
|
||||||
|
self.isNaval=false
|
||||||
|
self.isGround=false
|
||||||
|
|
||||||
-- Helo group.
|
-- Helo group.
|
||||||
self.ishelo=self.group:IsHelicopter()
|
self.ishelo=self.group:IsHelicopter()
|
||||||
|
|
||||||
@@ -2703,11 +2542,6 @@ function FLIGHTGROUP:_InitGroup()
|
|||||||
|
|
||||||
self.tankertype=select(2, unit:IsTanker())
|
self.tankertype=select(2, unit:IsTanker())
|
||||||
self.refueltype=select(2, unit:IsRefuelable())
|
self.refueltype=select(2, unit:IsRefuelable())
|
||||||
|
|
||||||
-- Init waypoints.
|
|
||||||
if not self.waypoints then
|
|
||||||
self:InitWaypoints()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Debug info.
|
-- Debug info.
|
||||||
local text=string.format("Initialized Flight Group %s:\n", self.groupname)
|
local text=string.format("Initialized Flight Group %s:\n", self.groupname)
|
||||||
|
|||||||
@@ -66,6 +66,16 @@ function NAVYGROUP:New(GroupName)
|
|||||||
|
|
||||||
-- Set some string id for output to DCS.log file.
|
-- Set some string id for output to DCS.log file.
|
||||||
self.lid=string.format("NAVYGROUP %s | ", self.groupname)
|
self.lid=string.format("NAVYGROUP %s | ", self.groupname)
|
||||||
|
|
||||||
|
-- Init waypoints.
|
||||||
|
self:InitWaypoints()
|
||||||
|
|
||||||
|
-- Initialize the group.
|
||||||
|
self:_InitGroup()
|
||||||
|
|
||||||
|
-- Defaults
|
||||||
|
self:SetDefaultROE()
|
||||||
|
self:SetDetection()
|
||||||
|
|
||||||
-- Add FSM transitions.
|
-- Add FSM transitions.
|
||||||
-- From State --> Event --> To State
|
-- From State --> Event --> To State
|
||||||
@@ -80,15 +90,6 @@ function NAVYGROUP:New(GroupName)
|
|||||||
--- Pseudo Functions ---
|
--- Pseudo Functions ---
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
--- Triggers the FSM event "Start". Starts the NAVYGROUP. Initializes parameters and starts event handlers.
|
|
||||||
-- @function [parent=#NAVYGROUP] Start
|
|
||||||
-- @param #NAVYGROUP self
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Start" after a delay. Starts the NAVYGROUP. Initializes parameters and starts event handlers.
|
|
||||||
-- @function [parent=#NAVYGROUP] __Start
|
|
||||||
-- @param #NAVYGROUP self
|
|
||||||
-- @param #number delay Delay in seconds.
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Stop". Stops the NAVYGROUP and all its event handlers.
|
--- Triggers the FSM event "Stop". Stops the NAVYGROUP and all its event handlers.
|
||||||
-- @param #NAVYGROUP self
|
-- @param #NAVYGROUP self
|
||||||
|
|
||||||
@@ -96,15 +97,8 @@ function NAVYGROUP:New(GroupName)
|
|||||||
-- @function [parent=#NAVYGROUP] __Stop
|
-- @function [parent=#NAVYGROUP] __Stop
|
||||||
-- @param #NAVYGROUP self
|
-- @param #NAVYGROUP self
|
||||||
-- @param #number delay Delay in seconds.
|
-- @param #number delay Delay in seconds.
|
||||||
|
|
||||||
--- Triggers the FSM event "Status".
|
-- TODO: Add pseudo functions.
|
||||||
-- @function [parent=#NAVYGROUP] Status
|
|
||||||
-- @param #NAVYGROUP self
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Status" after a delay.
|
|
||||||
-- @function [parent=#NAVYGROUP] __Status
|
|
||||||
-- @param #NAVYGROUP self
|
|
||||||
-- @param #number delay Delay in seconds.
|
|
||||||
|
|
||||||
-- Debug trace.
|
-- Debug trace.
|
||||||
if false then
|
if false then
|
||||||
@@ -119,13 +113,6 @@ function NAVYGROUP:New(GroupName)
|
|||||||
self:HandleEvent(EVENTS.Dead, self.OnEventDead)
|
self:HandleEvent(EVENTS.Dead, self.OnEventDead)
|
||||||
self:HandleEvent(EVENTS.RemoveUnit, self.OnEventRemoveUnit)
|
self:HandleEvent(EVENTS.RemoveUnit, self.OnEventRemoveUnit)
|
||||||
|
|
||||||
-- Initialize the group.
|
|
||||||
self:_InitGroup()
|
|
||||||
|
|
||||||
-- Defaults
|
|
||||||
self:SetDefaultROE()
|
|
||||||
self:SetDetection()
|
|
||||||
|
|
||||||
-- Start the status monitoring.
|
-- Start the status monitoring.
|
||||||
self:__CheckZone(-1)
|
self:__CheckZone(-1)
|
||||||
self:__Status(-2)
|
self:__Status(-2)
|
||||||
@@ -454,17 +441,6 @@ function NAVYGROUP:onafterSurface(From, Event, To)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "PassingWaypoint" event.
|
|
||||||
-- @param #NAVYGROUP self
|
|
||||||
-- @param #string From From state.
|
|
||||||
-- @param #string Event Event.
|
|
||||||
-- @param #string To To state.
|
|
||||||
-- @param #number n Waypoint passed.
|
|
||||||
-- @param #number N Total number of waypoints.
|
|
||||||
function NAVYGROUP:onafterPassingWaypoint(From, Event, To, n, N)
|
|
||||||
self:I(self.lid..string.format("Passed waypoint %d of %d", n, N))
|
|
||||||
end
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
-- Events DCS
|
-- Events DCS
|
||||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -523,6 +499,12 @@ function NAVYGROUP:_InitGroup()
|
|||||||
-- Get template of group.
|
-- Get template of group.
|
||||||
self.template=self.group:GetTemplate()
|
self.template=self.group:GetTemplate()
|
||||||
|
|
||||||
|
-- Define category.
|
||||||
|
self.isAircraft=false
|
||||||
|
self.isNaval=true
|
||||||
|
self.isGround=false
|
||||||
|
|
||||||
|
|
||||||
-- Helo group.
|
-- Helo group.
|
||||||
--self.isSubmarine=self.group:IsSubmarine()
|
--self.isSubmarine=self.group:IsSubmarine()
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,9 @@
|
|||||||
-- @field #boolean isLateActivated Is the group late activated.
|
-- @field #boolean isLateActivated Is the group late activated.
|
||||||
-- @field #table elements Table of elements, i.e. units of the group.
|
-- @field #table elements Table of elements, i.e. units of the group.
|
||||||
-- @field #boolean ai If true, group is purely AI.
|
-- @field #boolean ai If true, group is purely AI.
|
||||||
|
-- @field #boolean isAircraft If true, group is airplane or helicopter.
|
||||||
|
-- @field #boolean isNaval If true, group is ships or submarine.
|
||||||
|
-- @field #boolean isGround If true, group is some ground unit.
|
||||||
-- @field #table waypoints Table of waypoints.
|
-- @field #table waypoints Table of waypoints.
|
||||||
-- @field #table waypoints0 Table of initial waypoints.
|
-- @field #table waypoints0 Table of initial waypoints.
|
||||||
-- @field #number currentwp Current waypoint.
|
-- @field #number currentwp Current waypoint.
|
||||||
@@ -294,21 +297,10 @@ function OPSGROUP:New(Group)
|
|||||||
self:AddTransition("*", "ElementSpawned", "*") -- An element was spawned.
|
self:AddTransition("*", "ElementSpawned", "*") -- An element was spawned.
|
||||||
self:AddTransition("*", "ElementDead", "*") -- An element is dead.
|
self:AddTransition("*", "ElementDead", "*") -- An element is dead.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
--- Pseudo Functions ---
|
--- Pseudo Functions ---
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
--- Triggers the FSM event "Start". Starts the OPSGROUP. Initializes parameters and starts event handlers.
|
|
||||||
-- @function [parent=#OPSGROUP] Start
|
|
||||||
-- @param #OPSGROUP self
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Start" after a delay. Starts the OPSGROUP. Initializes parameters and starts event handlers.
|
|
||||||
-- @function [parent=#OPSGROUP] __Start
|
|
||||||
-- @param #OPSGROUP self
|
|
||||||
-- @param #number delay Delay in seconds.
|
|
||||||
|
|
||||||
--- Triggers the FSM event "Stop". Stops the OPSGROUP and all its event handlers.
|
--- Triggers the FSM event "Stop". Stops the OPSGROUP and all its event handlers.
|
||||||
-- @param #OPSGROUP self
|
-- @param #OPSGROUP self
|
||||||
|
|
||||||
@@ -324,18 +316,10 @@ function OPSGROUP:New(Group)
|
|||||||
--- Triggers the FSM event "Status" after a delay.
|
--- Triggers the FSM event "Status" after a delay.
|
||||||
-- @function [parent=#OPSGROUP] __Status
|
-- @function [parent=#OPSGROUP] __Status
|
||||||
-- @param #OPSGROUP self
|
-- @param #OPSGROUP self
|
||||||
-- @param #number delay Delay in seconds.
|
-- @param #number delay Delay in seconds.
|
||||||
|
|
||||||
|
-- TODO: Add pseudo functions.
|
||||||
|
|
||||||
-- Debug trace.
|
|
||||||
if false then
|
|
||||||
self.Debug=true
|
|
||||||
BASE:TraceOnOff(true)
|
|
||||||
BASE:TraceClass(self.ClassName)
|
|
||||||
BASE:TraceLevel(1)
|
|
||||||
end
|
|
||||||
|
|
||||||
self:InitWaypoints()
|
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1764,8 +1748,10 @@ function OPSGROUP:onafterQueueUpdate(From, Event, To)
|
|||||||
|
|
||||||
local ready=true
|
local ready=true
|
||||||
|
|
||||||
--TODO: For aircraft check airborne.
|
-- For aircraft check airborne.
|
||||||
-- self:IsAirborne()
|
if self.isAircraft then
|
||||||
|
ready=self:IsAirborne()
|
||||||
|
end
|
||||||
|
|
||||||
-- Check no current task.
|
-- Check no current task.
|
||||||
if ready and self.taskcurrent<=0 then
|
if ready and self.taskcurrent<=0 then
|
||||||
@@ -1798,7 +1784,93 @@ end
|
|||||||
-- @param #number n Waypoint passed.
|
-- @param #number n Waypoint passed.
|
||||||
-- @param #number N Total number of waypoints.
|
-- @param #number N Total number of waypoints.
|
||||||
function OPSGROUP:onafterPassingWaypoint(From, Event, To, n, N)
|
function OPSGROUP:onafterPassingWaypoint(From, Event, To, n, N)
|
||||||
self:I(self.lid..string.format("Passed waypoint %d of %d", n, N))
|
local text=string.format("Group passed waypoint %d/%d", n, N)
|
||||||
|
self:T(self.lid..text)
|
||||||
|
MESSAGE:New(text, 30, "DEBUG"):ToAllIf(self.Debug)
|
||||||
|
|
||||||
|
-- Get all waypoint tasks.
|
||||||
|
local tasks=self:GetTasksWaypoint(n)
|
||||||
|
|
||||||
|
-- Debug info.
|
||||||
|
local text=string.format("WP %d/%d tasks:", n, N)
|
||||||
|
if #tasks>0 then
|
||||||
|
for i,_task in pairs(tasks) do
|
||||||
|
local task=_task --#OPSGROUP.Task
|
||||||
|
text=text..string.format("\n[%d] %s", i, task.description)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
text=text.." None"
|
||||||
|
end
|
||||||
|
self:T(self.lid..text)
|
||||||
|
|
||||||
|
|
||||||
|
-- Tasks at this waypoints.
|
||||||
|
local taskswp={}
|
||||||
|
|
||||||
|
-- TODO: maybe set waypoint enroute tasks?
|
||||||
|
|
||||||
|
for _,task in pairs(tasks) do
|
||||||
|
local Task=task --#FLIGHTGROUP.Task
|
||||||
|
|
||||||
|
-- Task execute.
|
||||||
|
table.insert(taskswp, self.group:TaskFunction("OPSGROUP._TaskExecute", self, Task))
|
||||||
|
|
||||||
|
-- Stop condition if userflag is set to 1 or task duration over.
|
||||||
|
local TaskCondition=self.group:TaskCondition(nil, Task.stopflag:GetName(), 1, nil, Task.duration)
|
||||||
|
|
||||||
|
-- Controlled task.
|
||||||
|
table.insert(taskswp, self.group:TaskControlled(Task.dcstask, TaskCondition))
|
||||||
|
|
||||||
|
-- Task done.
|
||||||
|
table.insert(taskswp, self.group:TaskFunction("OPSGROUP._TaskDone", self, Task))
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Execute waypoint tasks.
|
||||||
|
if #taskswp>0 then
|
||||||
|
self:SetTask(self.group:TaskCombo(taskswp))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Final AIR waypoint reached?
|
||||||
|
if n==N then
|
||||||
|
|
||||||
|
-- Set switch to true.
|
||||||
|
self.passedfinalwp=true
|
||||||
|
|
||||||
|
-- Check if all tasks/mission are done? If so, RTB or WAIT.
|
||||||
|
-- Note, we delay it for a second to let the OnAfterPassingwaypoint function to be executed in case someone wants to add another waypoint there.
|
||||||
|
if #taskswp==0 then
|
||||||
|
self:_CheckGroupDone(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- On after "GotoWaypoint" event. Group will got to the given waypoint and execute its route from there.
|
||||||
|
-- @param #OPSGROUP self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param #number n The goto waypoint number.
|
||||||
|
function OPSGROUP:onafterGotoWaypoint(From, Event, To, n)
|
||||||
|
|
||||||
|
-- The last waypoint passed was n-1
|
||||||
|
self.currentwp=n-1
|
||||||
|
|
||||||
|
-- TODO: switch to re-enable waypoint tasks.
|
||||||
|
if false then
|
||||||
|
local tasks=self:GetTasksWaypoint(n)
|
||||||
|
|
||||||
|
for _,_task in pairs(tasks) do
|
||||||
|
local task=_task --#OPSGROUP.Task
|
||||||
|
task.status=OPSGROUP.TaskStatus.SCHEDULED
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Update the route.
|
||||||
|
self:UpdateRoute()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--- On after "DetectedUnit" event. Add newly detected unit to detected units set.
|
--- On after "DetectedUnit" event. Add newly detected unit to detected units set.
|
||||||
|
|||||||
Reference in New Issue
Block a user