diff --git a/Moose Development/Moose/AI/AI_A2A_Cap.lua b/Moose Development/Moose/AI/AI_A2A_Cap.lua index 49b87b3c0..ba41a3bab 100644 --- a/Moose Development/Moose/AI/AI_A2A_Cap.lua +++ b/Moose Development/Moose/AI/AI_A2A_Cap.lua @@ -278,6 +278,8 @@ function AI_A2A_CAP:New( AICap, PatrolZone, PatrolFloorAltitude, PatrolCeilingAl -- @param #AI_A2A_CAP self -- @param #number Delay The delay in seconds. + self:AddTransition( { "Patrolling", "Engaging" }, "Refuel", "Refuelling" ) + return self end diff --git a/Moose Development/Moose/AI/AI_A2A_Gci.lua b/Moose Development/Moose/AI/AI_A2A_Gci.lua index 53b7141ab..a6642a9ce 100644 --- a/Moose Development/Moose/AI/AI_A2A_Gci.lua +++ b/Moose Development/Moose/AI/AI_A2A_Gci.lua @@ -279,6 +279,8 @@ function AI_A2A_GCI:New( AIIntercept, EngageMinSpeed, EngageMaxSpeed ) -- @param #AI_A2A_GCI self -- @param #number Delay The delay in seconds. + self:AddTransition( { "Patrolling", "Engaging" }, "Refuel", "Refuelling" ) + return self end diff --git a/Moose Development/Moose/AI/AI_A2G_BAI.lua b/Moose Development/Moose/AI/AI_A2G_BAI.lua index d572347ba..140199efe 100644 --- a/Moose Development/Moose/AI/AI_A2G_BAI.lua +++ b/Moose Development/Moose/AI/AI_A2G_BAI.lua @@ -62,12 +62,14 @@ end -- @param #string To The To State string. function AI_A2G_BAI:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit ) - self:F( { DefenderGroup, From, Event, To, AttackSetUnit} ) + self:I( { DefenderGroup, From, Event, To, AttackSetUnit} ) local DefenderGroupName = DefenderGroup:GetName() local AttackCount = AttackSetUnit:Count() + self.AttackSetUnit = AttackSetUnit -- Kept in memory in case of resume from refuel in air! + if AttackCount > 0 then if DefenderGroup:IsAlive() then @@ -151,3 +153,14 @@ function AI_A2G_BAI:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit self:__RTB( self.TaskDelay ) end end + +--- @param Wrapper.Group#GROUP AIEngage +function AI_A2G_BAI.Resume( AIEngage, Fsm ) + + AIEngage:F( { "AI_A2G_BAI.Resume:", AIEngage:GetName() } ) + if AIEngage:IsAlive() then + Fsm:__Reset( Fsm.TaskDelay ) + Fsm:__EngageRoute( Fsm.TaskDelay, Fsm.AttackSetUnit ) + end + +end \ No newline at end of file diff --git a/Moose Development/Moose/AI/AI_A2G_CAS.lua b/Moose Development/Moose/AI/AI_A2G_CAS.lua index c8773b3f5..7caecae02 100644 --- a/Moose Development/Moose/AI/AI_A2G_CAS.lua +++ b/Moose Development/Moose/AI/AI_A2G_CAS.lua @@ -66,6 +66,8 @@ function AI_A2G_CAS:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit local DefenderGroupName = DefenderGroup:GetName() + self.AttackSetUnit = AttackSetUnit -- Kept in memory in case of resume from refuel in air! + local AttackCount = AttackSetUnit:Count() if AttackCount > 0 then @@ -148,3 +150,13 @@ function AI_A2G_CAS:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit end end +--- @param Wrapper.Group#GROUP AIEngage +function AI_A2G_CAS.Resume( AIEngage, Fsm ) + + AIEngage:F( { "AI_A2G_CAS.Resume:", AIEngage:GetName() } ) + if AIEngage:IsAlive() then + Fsm:__Reset( Fsm.TaskDelay ) + Fsm:__EngageRoute( Fsm.TaskDelay, Fsm.AttackSetUnit ) + end + +end \ No newline at end of file diff --git a/Moose Development/Moose/AI/AI_A2G_Engage.lua b/Moose Development/Moose/AI/AI_A2G_Engage.lua index 71a2eae6f..53ac7d21b 100644 --- a/Moose Development/Moose/AI/AI_A2G_Engage.lua +++ b/Moose Development/Moose/AI/AI_A2G_Engage.lua @@ -304,6 +304,8 @@ function AI_A2G_ENGAGE:New( AIGroup, EngageMinSpeed, EngageMaxSpeed, EngageFloor -- @param #AI_A2G_ENGAGE self -- @param #number Delay The delay in seconds. + self:AddTransition( { "Patrolling", "Engaging" }, "Refuel", "Refuelling" ) + return self end @@ -389,17 +391,6 @@ function AI_A2G_ENGAGE:onafterAbort( AIGroup, From, Event, To ) end ---- @param #AI_A2G_ENGAGE self --- @param Wrapper.Group#GROUP DefenderGroup The GroupGroup managed by the FSM. --- @param #string From The From State string. --- @param #string Event The Event string. --- @param #string To The To State string. -function AI_A2G_ENGAGE:onafterEngageRoute( DefenderGroup, From, Event, To, AttackSetUnit ) - - self:F( { DefenderGroup, From, Event, To, AttackSetUnit} ) - -end - --- @param #AI_A2G_ENGAGE self -- @param Wrapper.Group#GROUP AIGroup The Group Object managed by the FSM. -- @param #string From The From State string. @@ -446,6 +437,8 @@ function AI_A2G_ENGAGE:onafterEngageRoute( DefenderGroup, From, Event, To, Attac local DefenderGroupName = DefenderGroup:GetName() + self.AttackSetUnit = AttackSetUnit -- Kept in memory in case of resume from refuel in air! + local AttackCount = AttackSetUnit:Count() if AttackCount > 0 then @@ -517,4 +510,5 @@ function AI_A2G_ENGAGE:onafterEngageRoute( DefenderGroup, From, Event, To, Attac self:Return() self:__RTB( self.TaskDelay ) end -end \ No newline at end of file +end + diff --git a/Moose Development/Moose/AI/AI_A2G_Patrol.lua b/Moose Development/Moose/AI/AI_A2G_Patrol.lua index 86b5d49dc..8c7ae67a9 100644 --- a/Moose Development/Moose/AI/AI_A2G_Patrol.lua +++ b/Moose Development/Moose/AI/AI_A2G_Patrol.lua @@ -316,8 +316,8 @@ function AI_A2G_PATROL.Resume( AIPatrol, Fsm ) AIPatrol:F( { "AI_A2G_PATROL.Resume:", AIPatrol:GetName() } ) if AIPatrol:IsAlive() then - Fsm:__Reset( self.TaskDelay ) - Fsm:__PatrolRoute( self.TaskDelay ) + Fsm:__Reset( Fsm.TaskDelay ) + Fsm:__PatrolRoute( Fsm.TaskDelay ) end end diff --git a/Moose Development/Moose/AI/AI_A2G_SEAD.lua b/Moose Development/Moose/AI/AI_A2G_SEAD.lua index ae2f2dad1..8923e7917 100644 --- a/Moose Development/Moose/AI/AI_A2G_SEAD.lua +++ b/Moose Development/Moose/AI/AI_A2G_SEAD.lua @@ -117,6 +117,8 @@ function AI_A2G_SEAD:onafterEngage( DefenderGroup, From, Event, To, AttackSetUni local DefenderGroupName = DefenderGroup:GetName() + self.AttackSetUnit = AttackSetUnit -- Kept in memory in case of resume from refuel in air! + local AttackCount = AttackSetUnit:Count() if AttackCount > 0 then @@ -206,3 +208,13 @@ function AI_A2G_SEAD:onafterEngage( DefenderGroup, From, Event, To, AttackSetUni end end +--- @param Wrapper.Group#GROUP AIEngage +function AI_A2G_SEAD.Resume( AIEngage, Fsm ) + + AIEngage:F( { "AI_A2G_SEAD.Resume:", AIEngage:GetName() } ) + if AIEngage:IsAlive() then + Fsm:__Reset( Fsm.TaskDelay ) + Fsm:__EngageRoute( Fsm.TaskDelay, Fsm.AttackSetUnit ) + end + +end \ No newline at end of file diff --git a/Moose Development/Moose/AI/AI_Air.lua b/Moose Development/Moose/AI/AI_Air.lua index 0bee1f1ab..6259e105c 100644 --- a/Moose Development/Moose/AI/AI_Air.lua +++ b/Moose Development/Moose/AI/AI_Air.lua @@ -461,7 +461,7 @@ function AI_AIR:onafterStatus() -- end - if not self:Is( "Fuel" ) and not self:Is( "Home" ) then + if not self:Is( "Fuel" ) and not self:Is( "Home" ) and not self:is( "Refuelling" )then local Fuel = self.Controllable:GetFuelMin() @@ -680,12 +680,14 @@ end function AI_AIR:onafterRefuel( AIGroup, From, Event, To ) self:F( { AIGroup, From, Event, To } ) - self:E( "Group " .. self.Controllable:GetName() .. " ... Refuelling! ( " .. self:GetState() .. " )" ) if AIGroup and AIGroup:IsAlive() then local Tanker = GROUP:FindByName( self.TankerName ) + if Tanker:IsAlive() and Tanker:IsAirPlane() then + self:E( "Group " .. self.Controllable:GetName() .. " ... Refuelling! ( " .. self:GetState() .. "), at tanker " .. self.TankerName ) + local RefuelRoute = {} --- Calculate the target route point.