diff --git a/Moose Development/Moose/AI/AI_A2A_Cap.lua b/Moose Development/Moose/AI/AI_A2A_Cap.lua index 64846ae01..88e7c9932 100644 --- a/Moose Development/Moose/AI/AI_A2A_Cap.lua +++ b/Moose Development/Moose/AI/AI_A2A_Cap.lua @@ -414,11 +414,9 @@ function AI_A2A_CAP:onafterEngage( AIGroup, From, Event, To, AttackSetUnit ) self:F( { Angle = ToInterceptAngle, ToTargetSpeed = ToTargetSpeed } ) self:T2( { self.MinSpeed, self.MaxSpeed, ToTargetSpeed } ) + EngageRoute[#EngageRoute+1] = ToPatrolRoutePoint EngageRoute[#EngageRoute+1] = ToPatrolRoutePoint - AIGroup:OptionROEOpenFire() - AIGroup:OptionROTPassiveDefense() - local AttackTasks = {} for AttackUnitID, AttackUnit in pairs( self.AttackSetUnit:GetSet() ) do @@ -437,10 +435,13 @@ function AI_A2A_CAP:onafterEngage( AIGroup, From, Event, To, AttackSetUnit ) self:E("No targets found -> Going back to Patrolling") self:__Abort( 0.5 ) else + AIGroup:OptionROEOpenFire() + AIGroup:OptionROTPassiveDefense() + AttackTasks[#AttackTasks+1] = AIGroup:TaskFunction( 1, #AttackTasks, "AI_A2A_CAP.AttackRoute" ) AttackTasks[#AttackTasks+1] = AIGroup:TaskOrbitCircle( 4000, self.PatrolMinSpeed ) - EngageRoute[1].task = AIGroup:TaskCombo( AttackTasks ) + EngageRoute[#EngageRoute].task = AIGroup:TaskCombo( AttackTasks ) --- Do a trick, link the NewEngageRoute function of the object to the AIControllable in a temporary variable ... AIGroup:SetState( AIGroup, "AI_A2A_CAP", self ) diff --git a/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua b/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua index a82b3876f..f3926e824 100644 --- a/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua @@ -1,3 +1,6 @@ +--BASE:TraceClass("AI_A2A_DISPATCHER") +BASE:TraceClass("AI_A2A_GCICAP") + --- **AI** - The AI_A2A_DISPATCHER creates an automatic A2A defense system based on an EWR network targets and coordinating CAP and GCI. -- -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia1.JPG) @@ -155,7 +158,7 @@ -- -- @module AI_A2A_Dispatcher ---BASE:TraceClass("AI_A2A_DISPATCHER") + do -- AI_A2A_DISPATCHER @@ -2255,7 +2258,7 @@ do -- AI_A2A_DISPATCHER Fsm:SetDispatcher( self ) Fsm:SetHomeAirbase( DefenderSquadron.Airbase ) Fsm:Start() - Fsm:__Engage( 1, Target.Set ) -- Engage on the TargetSetUnit + Fsm:__Engage( 5, Target.Set ) -- Engage on the TargetSetUnit self:SetDefenderTask( DefenderGCI, "GCI", Fsm, Target ) diff --git a/Moose Development/Moose/AI/AI_A2A_Gci.lua b/Moose Development/Moose/AI/AI_A2A_Gci.lua index 60da2645c..fba269e4c 100644 --- a/Moose Development/Moose/AI/AI_A2A_Gci.lua +++ b/Moose Development/Moose/AI/AI_A2A_Gci.lua @@ -1,3 +1,5 @@ +BASE:TraceClass( "AI_A2A_GCI" ) + --- **AI** -- **Execute Ground Controlled Interception (GCI).** -- -- ![Banner Image](..\Presentations\AI_GCI\Dia1.JPG) @@ -313,8 +315,8 @@ end --- @param Wrapper.Group#GROUP AIControllable function AI_A2A_GCI.InterceptRoute( AIControllable ) - AIControllable:T( "NewEngageRoute" ) local EngageZone = AIControllable:GetState( AIControllable, "EngageZone" ) -- AI.AI_Cap#AI_A2A_GCI + EngageZone:E( "NewEngageRoute" ) EngageZone:__Engage( 0.5 ) end @@ -360,6 +362,9 @@ function AI_A2A_GCI:onafterEngage( AIGroup, From, Event, To, AttackSetUnit ) if AIGroup:IsAlive() then local EngageRoute = {} + + local CurrentCoord = AIGroup:GetCoordinate() + --- Calculate the target route point. @@ -372,7 +377,7 @@ function AI_A2A_GCI:onafterEngage( AIGroup, From, Event, To, AttackSetUnit ) local ToInterceptAngle = CurrentCoord:GetAngleDegrees( CurrentCoord:GetDirectionVec3( ToTargetCoord ) ) --- Create a route point of type air. - local ToPatrolRoutePoint = CurrentCoord:Translate( 5000, ToInterceptAngle ):RoutePointAir( + local ToPatrolRoutePoint = CurrentCoord:Translate( 10000, ToInterceptAngle ):RoutePointAir( self.PatrolAltType, POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, @@ -381,19 +386,17 @@ function AI_A2A_GCI:onafterEngage( AIGroup, From, Event, To, AttackSetUnit ) ) self:F( { Angle = ToInterceptAngle, ToTargetSpeed = ToTargetSpeed } ) - self:T2( { self.EngageMinSpeed, self.EngageMaxSpeed, ToTargetSpeed } ) + self:F( { self.EngageMinSpeed, self.EngageMaxSpeed, ToTargetSpeed } ) + EngageRoute[#EngageRoute+1] = ToPatrolRoutePoint EngageRoute[#EngageRoute+1] = ToPatrolRoutePoint - AIGroup:OptionROEOpenFire() - AIGroup:OptionROTPassiveDefense() - local AttackTasks = {} for AttackUnitID, AttackUnit in pairs( self.AttackSetUnit:GetSet() ) do local AttackUnit = AttackUnit -- Wrapper.Unit#UNIT - self:T( { "Intercepting Unit:", AttackUnit:GetName(), AttackUnit:IsAlive(), AttackUnit:IsAir() } ) if AttackUnit:IsAlive() and AttackUnit:IsAir() then + self:T( { "Intercepting Unit:", AttackUnit:GetName(), AttackUnit:IsAlive(), AttackUnit:IsAir() } ) AttackTasks[#AttackTasks+1] = AIGroup:TaskAttackUnit( AttackUnit ) end end @@ -407,9 +410,12 @@ function AI_A2A_GCI:onafterEngage( AIGroup, From, Event, To, AttackSetUnit ) self:Return() self:__RTB( 0.5 ) else + AIGroup:OptionROEOpenFire() + AIGroup:OptionROTPassiveDefense() + AttackTasks[#AttackTasks+1] = AIGroup:TaskFunction( 1, #AttackTasks, "AI_A2A_GCI.InterceptRoute" ) AttackTasks[#AttackTasks+1] = AIGroup:TaskOrbitCircle( 4000, self.EngageMinSpeed ) - EngageRoute[1].task = AIGroup:TaskCombo( AttackTasks ) + EngageRoute[#EngageRoute].task = AIGroup:TaskCombo( AttackTasks ) --- Do a trick, link the NewEngageRoute function of the object to the AIControllable in a temporary variable ... AIGroup:SetState( AIGroup, "EngageZone", self ) diff --git a/Moose Development/Moose/AI/AI_A2A_Patrol.lua b/Moose Development/Moose/AI/AI_A2A_Patrol.lua index 0b280265b..12b59918f 100644 --- a/Moose Development/Moose/AI/AI_A2A_Patrol.lua +++ b/Moose Development/Moose/AI/AI_A2A_Patrol.lua @@ -361,6 +361,7 @@ function AI_A2A_PATROL:onafterRoute( AIGroup, From, Event, To ) true ) + PatrolRoute[#PatrolRoute+1] = ToPatrolRoutePoint PatrolRoute[#PatrolRoute+1] = ToPatrolRoutePoint --- Now we're going to do something special, we're going to call a function from a waypoint action at the AIControllable... @@ -369,7 +370,7 @@ function AI_A2A_PATROL:onafterRoute( AIGroup, From, Event, To ) local Tasks = {} Tasks[#Tasks+1] = AIGroup:TaskFunction( 1, 1, "AI_A2A_PATROL.PatrolRoute" ) - PatrolRoute[1].task = AIGroup:TaskCombo( Tasks ) + PatrolRoute[#PatrolRoute].task = AIGroup:TaskCombo( Tasks ) --- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the AIControllable in a temporary variable ... AIGroup:SetState( AIGroup, "AI_A2A_PATROL", self )