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 #AI_A2A self
|
||||||
-- @param #number Delay The delay in seconds.
|
-- @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.
|
--- OnBefore Transition Handler for Event RTB.
|
||||||
-- @function [parent=#AI_A2A] OnBeforeRTB
|
-- @function [parent=#AI_A2A] OnBeforeRTB
|
||||||
@ -219,6 +219,11 @@ function AI_A2A:New( AIGroup )
|
|||||||
-- @param #string Event The Event string.
|
-- @param #string Event The Event string.
|
||||||
-- @param #string To The To State 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( "*", "Eject", "*" )
|
||||||
self:AddTransition( "*", "Crash", "Crashed" )
|
self:AddTransition( "*", "Crash", "Crashed" )
|
||||||
self:AddTransition( "*", "PilotDead", "*" )
|
self:AddTransition( "*", "PilotDead", "*" )
|
||||||
@ -234,6 +239,21 @@ function AI_A2A:GetDispatcher()
|
|||||||
return self.Dispatcher
|
return self.Dispatcher
|
||||||
end
|
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.
|
--- Sets (modifies) the minimum and maximum speed of the patrol.
|
||||||
-- @param #AI_A2A self
|
-- @param #AI_A2A self
|
||||||
@ -356,7 +376,7 @@ function AI_A2A:onafterStatus()
|
|||||||
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
local Fuel = self.Controllable:GetUnit(1):GetFuel()
|
||||||
self:F({Fuel=Fuel})
|
self:F({Fuel=Fuel})
|
||||||
if Fuel < self.PatrolFuelTresholdPercentage then
|
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 OldAIControllable = self.Controllable
|
||||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
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 ) )
|
local TimedOrbitTask = OldAIControllable:TaskControlled( OrbitTask, OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) )
|
||||||
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
||||||
|
|
||||||
|
self:Fuel()
|
||||||
RTB = true
|
RTB = true
|
||||||
else
|
else
|
||||||
end
|
end
|
||||||
@ -373,9 +394,23 @@ function AI_A2A:onafterStatus()
|
|||||||
local InitialLife = self.Controllable:GetLife0()
|
local InitialLife = self.Controllable:GetLife0()
|
||||||
self:F( { Damage = Damage, InitialLife = InitialLife, DamageTreshold = self.PatrolDamageTreshold } )
|
self:F( { Damage = Damage, InitialLife = InitialLife, DamageTreshold = self.PatrolDamageTreshold } )
|
||||||
if ( Damage / InitialLife ) < self.PatrolDamageTreshold then
|
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
|
RTB = true
|
||||||
end
|
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
|
if RTB == true then
|
||||||
self:RTB()
|
self:RTB()
|
||||||
@ -403,6 +438,8 @@ function AI_A2A:onafterRTB( AIGroup, From, Event, To )
|
|||||||
|
|
||||||
self.CheckStatus = false
|
self.CheckStatus = false
|
||||||
|
|
||||||
|
self:ClearTargetDistance()
|
||||||
|
|
||||||
local EngageRoute = {}
|
local EngageRoute = {}
|
||||||
|
|
||||||
--- Calculate the target route point.
|
--- Calculate the target route point.
|
||||||
|
|||||||
@ -404,17 +404,27 @@ do -- AI_A2A_DISPATCHER
|
|||||||
---
|
---
|
||||||
-- @param #AI_A2A_DISPATCHER self
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
function AI_A2A_DISPATCHER:ClearDefenderTaskTarget( AIGroup )
|
function AI_A2A_DISPATCHER:ClearDefenderTaskTarget( AIGroup )
|
||||||
if AIGroup:IsAlive() and self.DefenderTasks[AIGroup] then
|
|
||||||
local Target = self.DefenderTasks[AIGroup].Target
|
local DefenderTask = self:GetDefenderTask( AIGroup )
|
||||||
local Message = "Clearing (" .. self.DefenderTasks[AIGroup].Type .. ") "
|
|
||||||
|
if AIGroup:IsAlive() and DefenderTask then
|
||||||
|
local Target = DefenderTask.Target
|
||||||
|
local Message = "Clearing (" .. DefenderTask.Type .. ") "
|
||||||
Message = Message .. AIGroup:GetName()
|
Message = Message .. AIGroup:GetName()
|
||||||
if Target then
|
if Target then
|
||||||
Message = Message .. ( Target and ( " from " .. Target.Index .. " [" .. Target.Set:Count() .. "]" ) ) or ""
|
Message = Message .. ( Target and ( " from " .. Target.Index .. " [" .. Target.Set:Count() .. "]" ) ) or ""
|
||||||
end
|
end
|
||||||
self:F( { Target = Message } )
|
self:F( { Target = Message } )
|
||||||
end
|
end
|
||||||
if AIGroup and self.DefenderTasks[AIGroup] and self.DefenderTasks[AIGroup].Target then
|
if AIGroup and DefenderTask and DefenderTask.Target then
|
||||||
self.DefenderTasks[AIGroup].Target = nil
|
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
|
end
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@ -829,8 +839,6 @@ do -- AI_A2A_DISPATCHER
|
|||||||
-- @param #AI_A2A_DISPATCHER self
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
function AI_A2A_DISPATCHER:onafterENGAGE( From, Event, To, Target, AIGroups )
|
function AI_A2A_DISPATCHER:onafterENGAGE( From, Event, To, Target, AIGroups )
|
||||||
|
|
||||||
self:F( { AIGroups = AIGroups } )
|
|
||||||
|
|
||||||
if AIGroups then
|
if AIGroups then
|
||||||
|
|
||||||
for AIGroupID, AIGroup in pairs( AIGroups ) do
|
for AIGroupID, AIGroup in pairs( AIGroups ) do
|
||||||
@ -1010,7 +1018,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
self:ClearDefenderTaskTarget( AIGroup )
|
self:ClearDefenderTaskTarget( AIGroup )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -335,7 +335,8 @@ end
|
|||||||
-- @param #string To The To State string.
|
-- @param #string To The To State string.
|
||||||
function AI_A2A_INTERCEPT:onafterAbort( AIGroup, From, Event, To )
|
function AI_A2A_INTERCEPT:onafterAbort( AIGroup, From, Event, To )
|
||||||
AIGroup:ClearTasks()
|
AIGroup:ClearTasks()
|
||||||
self:__Route( 1 )
|
self:Return()
|
||||||
|
self:__RTB( 1 )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -361,7 +362,10 @@ function AI_A2A_INTERCEPT:onafterEngage( AIGroup, From, Event, To, AttackSetUnit
|
|||||||
--- Calculate the target route point.
|
--- Calculate the target route point.
|
||||||
|
|
||||||
local CurrentCoord = AIGroup:GetCoordinate()
|
local CurrentCoord = AIGroup:GetCoordinate()
|
||||||
|
|
||||||
local ToTargetCoord = self.AttackSetUnit:GetFirst():GetCoordinate()
|
local ToTargetCoord = self.AttackSetUnit:GetFirst():GetCoordinate()
|
||||||
|
self:SetTargetDistance( ToTargetCoord ) -- For RTB status check
|
||||||
|
|
||||||
local ToTargetSpeed = math.random( self.MinSpeed, self.MaxSpeed )
|
local ToTargetSpeed = math.random( self.MinSpeed, self.MaxSpeed )
|
||||||
local ToInterceptAngle = CurrentCoord:GetAngleDegrees( CurrentCoord:GetDirectionVec3( ToTargetCoord ) )
|
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
|
if #AttackTasks == 0 then
|
||||||
self:E("No targets found -> Going RTB")
|
self:E("No targets found -> Going RTB")
|
||||||
|
self:Return()
|
||||||
self:__RTB( 1 )
|
self:__RTB( 1 )
|
||||||
else
|
else
|
||||||
AttackTasks[#AttackTasks+1] = AIGroup:TaskFunction( 1, #AttackTasks, "AI_A2A_INTERCEPT.InterceptRoute" )
|
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
|
end
|
||||||
else
|
else
|
||||||
self:E("No targets found -> Going RTB")
|
self:E("No targets found -> Going RTB")
|
||||||
|
self:Return()
|
||||||
self:__RTB( 1 )
|
self:__RTB( 1 )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -297,6 +297,8 @@ end
|
|||||||
function AI_A2A_PATROL:onafterPatrol( Controllable, From, Event, To )
|
function AI_A2A_PATROL:onafterPatrol( Controllable, From, Event, To )
|
||||||
self:F2()
|
self:F2()
|
||||||
|
|
||||||
|
self:ClearTargetDistance()
|
||||||
|
|
||||||
self:__Route( 1 )
|
self:__Route( 1 )
|
||||||
|
|
||||||
self.Controllable:OnReSpawn(
|
self.Controllable:OnReSpawn(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user