This commit is contained in:
Frank
2020-03-03 00:20:08 +01:00
parent dc3350a1c8
commit 9ea52fce28
3 changed files with 52 additions and 23 deletions
+18 -5
View File
@@ -113,6 +113,7 @@ function AIRWING:New(warehousename, airwingname)
self:AddTransition("*", "MissionNew", "*") -- Add a new mission. self:AddTransition("*", "MissionNew", "*") -- Add a new mission.
self:AddTransition("*", "MissionRequest", "*") -- Add a (mission) request to the warehouse. self:AddTransition("*", "MissionRequest", "*") -- Add a (mission) request to the warehouse.
self:AddTransition("*", "MissionDone", "*") -- Mission is over. self:AddTransition("*", "MissionDone", "*") -- Mission is over.
self:AddTransition("*", "MissionCancel", "*") -- Mission is over.
------------------------ ------------------------
--- Pseudo Functions --- --- Pseudo Functions ---
@@ -507,7 +508,7 @@ end
--- Optimize chosen assets for the mission at hand. --- Optimize chosen assets for the mission at hand.
-- @param #AIRWING self -- @param #AIRWING self
-- @param #table assets Table of (unoptimized) assets. -- @param #table assets Table of (unoptimized) assets.
-- @param Ops.Auftrag#AUFTRAG Next mission or *nil*. -- @param Ops.Auftrag#AUFTRAG Mission Next mission or *nil*.
function AIRWING:_OptimizeAssetSelection(assets, Mission) function AIRWING:_OptimizeAssetSelection(assets, Mission)
local TargetCoordinate=Mission:GetTargetCoordinate() local TargetCoordinate=Mission:GetTargetCoordinate()
@@ -585,15 +586,27 @@ function AIRWING:onafterNewAsset(From, Event, To, asset, assignment)
end end
end end
--- On after "MissionNew" event. --- On after "MissionCancel" event.
-- @param #AIRWING self -- @param #AIRWING self
-- @param #string From From state. -- @param #string From From state.
-- @param #string Event Event. -- @param #string Event Event.
-- @param #string To To state. -- @param #string To To state.
-- @param Ops.Auftrag#AUFTRAG Mission -- @param Ops.Auftrag#AUFTRAG Mission The mission to be cancelled.
function AIRWING:onafterMissionNew(From, Event, To, Mission) function AIRWING:onafterMissionCancel(From, Event, To, Mission)
self:I(self.lid..string.format("Cancel mission %s", Mission.name))
for _,_asset in pairs(Mission.assets) do
local asset=_asset --#AIRWING.SquadronAsset
local flightgroup=asset.flightgroup
if flightgroup then
flightgroup:MissionCancel(Mission)
end
end
self:I(self.lid..string.format("New mission %s", Mission.name))
end end
+2 -1
View File
@@ -22,6 +22,7 @@
-- @field #string status Mission status. -- @field #string status Mission status.
-- @field #string name Mission name. -- @field #string name Mission name.
-- @field #number prio Mission priority. -- @field #number prio Mission priority.
-- @field #boolean urgent Mission is urgent. Running missions with lower prio might be cancelled.
-- @field #number Tstart Mission start time in seconds. -- @field #number Tstart Mission start time in seconds.
-- @field #number Tstop Mission stop time in seconds. -- @field #number Tstop Mission stop time in seconds.
-- @field #number duration Mission duration in seconds. -- @field #number duration Mission duration in seconds.
@@ -408,7 +409,7 @@ end
-- @return #AUFTRAG self -- @return #AUFTRAG self
function AUFTRAG:SetPriority(Prio, Urgent) function AUFTRAG:SetPriority(Prio, Urgent)
self.prio=Prio or 50 self.prio=Prio or 50
self.isurgent=Urgent self.urgent=Urgent
return self return self
end end
+32 -17
View File
@@ -1398,12 +1398,26 @@ function FLIGHTGROUP:onafterQueueUpdate(From, Event, To)
--- ---
-- First check if group is alive? Late activated groups are activated and uncontrolled units are started automatically. -- First check if group is alive? Late activated groups are activated and uncontrolled units are started automatically.
if self:IsAlive()~=nil and not self.currentmission then if self:IsAlive()~=nil then
local mission=self:_GetNextMission() local mission=self:_GetNextMission()
if mission then if mission then
self:MissionStart(mission)
local currentmission=self:GetMissionCurrent()
if currentmission then
-- Current mission but new mission is urgent with higher prio.
if mission.urgent and mission.prio<currentmission.prio then
self:MissionCancel(currentmission)
self:MissionStart(mission)
end
else
-- No current mission.
self:MissionStart(mission)
end
end end
end end
@@ -2260,24 +2274,21 @@ function FLIGHTGROUP:onafterUpdateRoute(From, Event, To, n)
--- ---
self:E(self.lid.."WARNING: No waypoints left. Dunno what to do!") self:E(self.lid.."WARNING: No waypoints left. Dunno what to do!")
--[[
-- Get destination or home airbase. -- Send flight to destination. NOTE that if there are still remaining tasks, the RTB call is delayed by 10 sec until all tasks are done.
local airbase=self.destbase or self.homebase if self.destbase then
self:__RTB(-1, self.destbase)
if self:IsAirborne() then elseif self.destzone then
self:__RTZ(-1, self.destzone)
-- TODO: check if no more scheduled tasks. else
self:__Wait(-1)
if airbase then self:E(self.lid.."ERROR: Reached final waypoint but no destination set! Don't know what to do?!")
-- Route flight to destination/home.
--self:RTB(airbase)
else
-- Let flight orbit.
--self:Orbit(self.group:GetCoordinate(), UTILS.FeetToMeters(20000), self.group:GetSpeedMax()*0.4)
end
end end
]]
end end
end end
@@ -2365,6 +2376,8 @@ function FLIGHTGROUP:onafterPassingWaypoint(From, Event, To, n, N)
--TODO: Find better way to RTB! --TODO: Find better way to RTB!
self:I(self.lid.."FF group passed final waypoint!") self:I(self.lid.."FF group passed final waypoint!")
--[[
-- Send flight to destination. NOTE that if there are still remaining tasks, the RTB call is delayed by 10 sec until all tasks are done. -- Send flight to destination. NOTE that if there are still remaining tasks, the RTB call is delayed by 10 sec until all tasks are done.
if self.destbase then if self.destbase then
self:__RTB(-1, self.destbase) self:__RTB(-1, self.destbase)
@@ -2374,6 +2387,8 @@ function FLIGHTGROUP:onafterPassingWaypoint(From, Event, To, n, N)
self:__Wait(-1) self:__Wait(-1)
self:E(self.lid.."ERROR: Reached final waypoint but no destination set! Don't know what to do?!") self:E(self.lid.."ERROR: Reached final waypoint but no destination set! Don't know what to do?!")
end end
]]
end end