mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Planes remaining at airfield fixed
* AI_A2A_DISPATCHER: Planes remaining on the airfield is now fixed. The issue was with planes out of fuel doing CAP, which would return to a different airbase because they were out of control. At the landing, these weren't despawned.
This commit is contained in:
parent
e1a730bbe3
commit
ea96a5e0a3
@ -440,7 +440,7 @@ function AI_A2A:onafterStatus()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if self:Is( "Damaged" ) or self:Is( "LostControl" ) then
|
if self:Is( "Fuel" ) or self:Is( "Damaged" ) or self:Is( "LostControl" ) then
|
||||||
if DistanceFromHomeBase < 5000 then
|
if DistanceFromHomeBase < 5000 then
|
||||||
self:E( self.Controllable:GetName() .. " is too far from home base, RTB!" )
|
self:E( self.Controllable:GetName() .. " is too far from home base, RTB!" )
|
||||||
self:Home( "Destroy" )
|
self:Home( "Destroy" )
|
||||||
@ -448,25 +448,27 @@ function AI_A2A:onafterStatus()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local Fuel = self.Controllable:GetFuel()
|
if not self:Is( "Fuel" ) and not self:Is( "Home" ) then
|
||||||
self:F({Fuel=Fuel})
|
local Fuel = self.Controllable:GetFuel()
|
||||||
if Fuel < self.PatrolFuelThresholdPercentage then
|
self:F({Fuel=Fuel})
|
||||||
if self.TankerName then
|
if Fuel < self.PatrolFuelThresholdPercentage then
|
||||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... Refuelling at Tanker!" )
|
if self.TankerName then
|
||||||
self:Refuel()
|
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... Refuelling at Tanker!" )
|
||||||
|
self:Refuel()
|
||||||
|
else
|
||||||
|
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... RTB!" )
|
||||||
|
local OldAIControllable = self.Controllable
|
||||||
|
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||||
|
|
||||||
|
local OrbitTask = OldAIControllable:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed )
|
||||||
|
local TimedOrbitTask = OldAIControllable:TaskControlled( OrbitTask, OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) )
|
||||||
|
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
||||||
|
|
||||||
|
self:Fuel()
|
||||||
|
RTB = true
|
||||||
|
end
|
||||||
else
|
else
|
||||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... RTB!" )
|
|
||||||
local OldAIControllable = self.Controllable
|
|
||||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
|
||||||
|
|
||||||
local OrbitTask = OldAIControllable:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed )
|
|
||||||
local TimedOrbitTask = OldAIControllable:TaskControlled( OrbitTask, OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) )
|
|
||||||
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
|
||||||
|
|
||||||
self:Fuel()
|
|
||||||
RTB = true
|
|
||||||
end
|
end
|
||||||
else
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- TODO: Check GROUP damage function.
|
-- TODO: Check GROUP damage function.
|
||||||
@ -477,6 +479,7 @@ function AI_A2A:onafterStatus()
|
|||||||
self:E( self.Controllable:GetName() .. " is damaged: " .. Damage .. " ... RTB!" )
|
self:E( self.Controllable:GetName() .. " is damaged: " .. Damage .. " ... RTB!" )
|
||||||
self:Damaged()
|
self:Damaged()
|
||||||
RTB = true
|
RTB = true
|
||||||
|
self:SetStatusOff()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Check if planes went RTB and are out of control.
|
-- Check if planes went RTB and are out of control.
|
||||||
|
|||||||
@ -1000,7 +1000,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
--- @param #AI_A2A_DISPATCHER self
|
--- @param #AI_A2A_DISPATCHER self
|
||||||
-- @param Core.Event#EVENTDATA EventData
|
-- @param Core.Event#EVENTDATA EventData
|
||||||
function AI_A2A_DISPATCHER:OnEventLand( EventData )
|
function AI_A2A_DISPATCHER:OnEventLand( EventData )
|
||||||
self:F( "Landed" )
|
self:E( "Landed" )
|
||||||
local DefenderUnit = EventData.IniUnit
|
local DefenderUnit = EventData.IniUnit
|
||||||
local Defender = EventData.IniGroup
|
local Defender = EventData.IniGroup
|
||||||
local Squadron = self:GetSquadronFromDefender( Defender )
|
local Squadron = self:GetSquadronFromDefender( Defender )
|
||||||
@ -1019,7 +1019,11 @@ do -- AI_A2A_DISPATCHER
|
|||||||
-- Damaged units cannot be repaired anymore.
|
-- Damaged units cannot be repaired anymore.
|
||||||
DefenderUnit:Destroy()
|
DefenderUnit:Destroy()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if DefenderUnit:GetFuel() <= self.DefenderDefault.FuelThreshold then
|
||||||
|
DefenderUnit:Destroy()
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2597,6 +2601,33 @@ do -- AI_A2A_DISPATCHER
|
|||||||
Fsm:__Patrol( 2 )
|
Fsm:__Patrol( 2 )
|
||||||
|
|
||||||
self:SetDefenderTask( SquadronName, DefenderCAP, "CAP", Fsm )
|
self:SetDefenderTask( SquadronName, DefenderCAP, "CAP", Fsm )
|
||||||
|
|
||||||
|
function Fsm:onafterRTB( Defender, From, Event, To )
|
||||||
|
self:F({"CAP RTB", Defender:GetName()})
|
||||||
|
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
||||||
|
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
|
Dispatcher:ClearDefenderTaskTarget( Defender )
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @param #AI_A2A_DISPATCHER self
|
||||||
|
function Fsm:onafterHome( Defender, From, Event, To, Action )
|
||||||
|
self:E({"CAP Home", Defender:GetName()})
|
||||||
|
self:GetParent(self).onafterHome( self, Defender, From, Event, To )
|
||||||
|
|
||||||
|
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||||
|
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||||
|
|
||||||
|
if Action and Action == "Destroy" then
|
||||||
|
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
|
Defender:Destroy()
|
||||||
|
end
|
||||||
|
|
||||||
|
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
||||||
|
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||||
|
Defender:Destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -2617,32 +2648,6 @@ do -- AI_A2A_DISPATCHER
|
|||||||
|
|
||||||
self:SetDefenderTaskTarget( Defender, Target )
|
self:SetDefenderTaskTarget( Defender, Target )
|
||||||
|
|
||||||
function Fsm:onafterRTB( Defender, From, Event, To )
|
|
||||||
self:F({"CAP RTB", Defender:GetName()})
|
|
||||||
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
|
||||||
Dispatcher:ClearDefenderTaskTarget( Defender )
|
|
||||||
end
|
|
||||||
|
|
||||||
--- @param #AI_A2A_DISPATCHER self
|
|
||||||
function Fsm:onafterHome( Defender, From, Event, To, Action )
|
|
||||||
self:F({"CAP Home", Defender:GetName()})
|
|
||||||
self:GetParent(self).onafterHome( self, Defender, From, Event, To )
|
|
||||||
|
|
||||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
|
||||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
|
||||||
|
|
||||||
if Action and Action == "Destroy" then
|
|
||||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
|
||||||
Defender:Destroy()
|
|
||||||
end
|
|
||||||
|
|
||||||
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
|
||||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
|
||||||
Defender:Destroy()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user