mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Progress
This commit is contained in:
parent
ce24d2b4a6
commit
0f9f615313
@ -174,7 +174,7 @@ function AI_A2A:New( AIGroup )
|
||||
-- @param #AI_A2A self
|
||||
-- @param #number Delay The delay in seconds.
|
||||
|
||||
self:AddTransition( "*", "RTB", "Returning" ) -- FSM_CONTROLLABLE Transition for type #AI_A2A.
|
||||
self:AddTransition( "*", "RTB", "*" ) -- FSM_CONTROLLABLE Transition for type #AI_A2A.
|
||||
|
||||
--- OnBefore Transition Handler for Event RTB.
|
||||
-- @function [parent=#AI_A2A] OnBeforeRTB
|
||||
@ -219,6 +219,11 @@ function AI_A2A:New( AIGroup )
|
||||
-- @param #string Event The Event string.
|
||||
-- @param #string To The To State string.
|
||||
|
||||
|
||||
self:AddTransition( "*", "Return", "Returning" )
|
||||
self:AddTransition( "*", "LostControl", "LostControl" )
|
||||
self:AddTransition( "*", "Fuel", "Fuel" )
|
||||
self:AddTransition( "*", "Damaged", "Damaged" )
|
||||
self:AddTransition( "*", "Eject", "*" )
|
||||
self:AddTransition( "*", "Crash", "Crashed" )
|
||||
self:AddTransition( "*", "PilotDead", "*" )
|
||||
@ -234,6 +239,21 @@ function AI_A2A:GetDispatcher()
|
||||
return self.Dispatcher
|
||||
end
|
||||
|
||||
function AI_A2A:SetTargetDistance( Coordinate )
|
||||
|
||||
local CurrentCoord = self.Controllable:GetCoordinate()
|
||||
self.TargetDistance = CurrentCoord:Get2DDistance( Coordinate )
|
||||
|
||||
self.ClosestTargetDistance = ( not self.ClosestTargetDistance or self.ClosestTargetDistance > self.TargetDistance ) and self.TargetDistance or self.ClosestTargetDistance
|
||||
end
|
||||
|
||||
|
||||
function AI_A2A:ClearTargetDistance()
|
||||
|
||||
self.TargetDistance = nil
|
||||
self.ClosestTargetDistance = nil
|
||||
end
|
||||
|
||||
|
||||
--- Sets (modifies) the minimum and maximum speed of the patrol.
|
||||
-- @param #AI_A2A self
|
||||
@ -356,7 +376,7 @@ function AI_A2A:onafterStatus()
|
||||
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
||||
self:F({Fuel=Fuel})
|
||||
if Fuel < self.PatrolFuelTresholdPercentage then
|
||||
self:E( self.Controllable:GetName() .. " is out of fuel:" .. Fuel .. ", RTB!" )
|
||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... RTB!" )
|
||||
local OldAIControllable = self.Controllable
|
||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||
|
||||
@ -364,6 +384,7 @@ function AI_A2A:onafterStatus()
|
||||
local TimedOrbitTask = OldAIControllable:TaskControlled( OrbitTask, OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) )
|
||||
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
||||
|
||||
self:Fuel()
|
||||
RTB = true
|
||||
else
|
||||
end
|
||||
@ -373,9 +394,23 @@ function AI_A2A:onafterStatus()
|
||||
local InitialLife = self.Controllable:GetLife0()
|
||||
self:F( { Damage = Damage, InitialLife = InitialLife, DamageTreshold = self.PatrolDamageTreshold } )
|
||||
if ( Damage / InitialLife ) < self.PatrolDamageTreshold then
|
||||
self:E( self.Controllable:GetName() .. " is damaged:" .. Damage .. ", RTB!" )
|
||||
self:E( self.Controllable:GetName() .. " is damaged: " .. Damage .. " ... RTB!" )
|
||||
self:Damaged()
|
||||
RTB = true
|
||||
end
|
||||
|
||||
-- Check if planes went RTB
|
||||
local TargetDistance = self.TargetDistance
|
||||
local ClosestTargetDistance = self.ClosestTargetDistance
|
||||
if TargetDistance then
|
||||
if ClosestTargetDistance <= 40000 then
|
||||
if TargetDistance > 40000 then
|
||||
self:E( "Lost control of group " .. self.Controllable:GetName() .. " ... RTB!" )
|
||||
self:LostControl()
|
||||
RTB = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if RTB == true then
|
||||
self:RTB()
|
||||
@ -403,6 +438,8 @@ function AI_A2A:onafterRTB( AIGroup, From, Event, To )
|
||||
|
||||
self.CheckStatus = false
|
||||
|
||||
self:ClearTargetDistance()
|
||||
|
||||
local EngageRoute = {}
|
||||
|
||||
--- Calculate the target route point.
|
||||
|
||||
@ -404,17 +404,27 @@ do -- AI_A2A_DISPATCHER
|
||||
---
|
||||
-- @param #AI_A2A_DISPATCHER self
|
||||
function AI_A2A_DISPATCHER:ClearDefenderTaskTarget( AIGroup )
|
||||
if AIGroup:IsAlive() and self.DefenderTasks[AIGroup] then
|
||||
local Target = self.DefenderTasks[AIGroup].Target
|
||||
local Message = "Clearing (" .. self.DefenderTasks[AIGroup].Type .. ") "
|
||||
|
||||
local DefenderTask = self:GetDefenderTask( AIGroup )
|
||||
|
||||
if AIGroup:IsAlive() and DefenderTask then
|
||||
local Target = DefenderTask.Target
|
||||
local Message = "Clearing (" .. DefenderTask.Type .. ") "
|
||||
Message = Message .. AIGroup:GetName()
|
||||
if Target then
|
||||
Message = Message .. ( Target and ( " from " .. Target.Index .. " [" .. Target.Set:Count() .. "]" ) ) or ""
|
||||
end
|
||||
self:F( { Target = Message } )
|
||||
end
|
||||
if AIGroup and self.DefenderTasks[AIGroup] and self.DefenderTasks[AIGroup].Target then
|
||||
self.DefenderTasks[AIGroup].Target = nil
|
||||
if AIGroup and DefenderTask and DefenderTask.Target then
|
||||
DefenderTask.Target = nil
|
||||
end
|
||||
if AIGroup and DefenderTask then
|
||||
if DefenderTask.Fsm:Is( "Fuel" )
|
||||
or DefenderTask.Fsm:Is( "LostControl")
|
||||
or DefenderTask.Fsm:Is( "Damaged" ) then
|
||||
self:ClearDefenderTask( AIGroup )
|
||||
end
|
||||
end
|
||||
return self
|
||||
end
|
||||
@ -829,8 +839,6 @@ do -- AI_A2A_DISPATCHER
|
||||
-- @param #AI_A2A_DISPATCHER self
|
||||
function AI_A2A_DISPATCHER:onafterENGAGE( From, Event, To, Target, AIGroups )
|
||||
|
||||
self:F( { AIGroups = AIGroups } )
|
||||
|
||||
if AIGroups then
|
||||
|
||||
for AIGroupID, AIGroup in pairs( AIGroups ) do
|
||||
@ -1010,7 +1018,7 @@ do -- AI_A2A_DISPATCHER
|
||||
self:ClearDefenderTaskTarget( AIGroup )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -335,7 +335,8 @@ end
|
||||
-- @param #string To The To State string.
|
||||
function AI_A2A_INTERCEPT:onafterAbort( AIGroup, From, Event, To )
|
||||
AIGroup:ClearTasks()
|
||||
self:__Route( 1 )
|
||||
self:Return()
|
||||
self:__RTB( 1 )
|
||||
end
|
||||
|
||||
|
||||
@ -361,7 +362,10 @@ function AI_A2A_INTERCEPT:onafterEngage( AIGroup, From, Event, To, AttackSetUnit
|
||||
--- Calculate the target route point.
|
||||
|
||||
local CurrentCoord = AIGroup:GetCoordinate()
|
||||
|
||||
local ToTargetCoord = self.AttackSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetTargetDistance( ToTargetCoord ) -- For RTB status check
|
||||
|
||||
local ToTargetSpeed = math.random( self.MinSpeed, self.MaxSpeed )
|
||||
local ToInterceptAngle = CurrentCoord:GetAngleDegrees( CurrentCoord:GetDirectionVec3( ToTargetCoord ) )
|
||||
|
||||
@ -398,6 +402,7 @@ function AI_A2A_INTERCEPT:onafterEngage( AIGroup, From, Event, To, AttackSetUnit
|
||||
|
||||
if #AttackTasks == 0 then
|
||||
self:E("No targets found -> Going RTB")
|
||||
self:Return()
|
||||
self:__RTB( 1 )
|
||||
else
|
||||
AttackTasks[#AttackTasks+1] = AIGroup:TaskFunction( 1, #AttackTasks, "AI_A2A_INTERCEPT.InterceptRoute" )
|
||||
@ -413,6 +418,7 @@ function AI_A2A_INTERCEPT:onafterEngage( AIGroup, From, Event, To, AttackSetUnit
|
||||
end
|
||||
else
|
||||
self:E("No targets found -> Going RTB")
|
||||
self:Return()
|
||||
self:__RTB( 1 )
|
||||
end
|
||||
end
|
||||
|
||||
@ -297,6 +297,8 @@ end
|
||||
function AI_A2A_PATROL:onafterPatrol( Controllable, From, Event, To )
|
||||
self:F2()
|
||||
|
||||
self:ClearTargetDistance()
|
||||
|
||||
self:__Route( 1 )
|
||||
|
||||
self.Controllable:OnReSpawn(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user