From 1c063ca3088862150b1eda5084828d7e013b77eb Mon Sep 17 00:00:00 2001 From: FlightControl Date: Tue, 22 Jan 2019 08:51:17 +0100 Subject: [PATCH] Optimizations --- Moose Development/Moose/AI/AI_A2A_Patrol.lua | 2 +- Moose Development/Moose/AI/AI_A2G_BAI.lua | 6 +-- Moose Development/Moose/AI/AI_A2G_CAS.lua | 6 +-- Moose Development/Moose/AI/AI_A2G_Engage.lua | 8 ++-- Moose Development/Moose/AI/AI_A2G_Patrol.lua | 14 +++--- Moose Development/Moose/AI/AI_A2G_SEAD.lua | 6 +-- Moose Development/Moose/AI/AI_Air.lua | 43 +++++++++++-------- .../Moose/Wrapper/Controllable.lua | 5 ++- 8 files changed, 50 insertions(+), 40 deletions(-) diff --git a/Moose Development/Moose/AI/AI_A2A_Patrol.lua b/Moose Development/Moose/AI/AI_A2A_Patrol.lua index 7b44c14fb..7e57c24d0 100644 --- a/Moose Development/Moose/AI/AI_A2A_Patrol.lua +++ b/Moose Development/Moose/AI/AI_A2A_Patrol.lua @@ -345,7 +345,7 @@ function AI_A2A_PATROL:onafterRoute( AIPatrol, From, Event, To ) AIPatrol:OptionROEReturnFire() AIPatrol:OptionROTEvadeFire() - AIPatrol:Route( PatrolRoute, 0.5 ) + AIPatrol:Route( PatrolRoute, 0.5) end end diff --git a/Moose Development/Moose/AI/AI_A2G_BAI.lua b/Moose Development/Moose/AI/AI_A2G_BAI.lua index 5431a042e..e761e0b70 100644 --- a/Moose Development/Moose/AI/AI_A2G_BAI.lua +++ b/Moose Development/Moose/AI/AI_A2G_BAI.lua @@ -135,7 +135,7 @@ function AI_A2G_BAI:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit if #AttackTasks == 0 then self:E( DefenderGroupName .. ": No targets found -> Going RTB") self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) else DefenderGroup:OptionROEOpenFire() DefenderGroup:OptionROTEvadeFire() @@ -144,11 +144,11 @@ function AI_A2G_BAI:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit EngageRoute[#EngageRoute].task = DefenderGroup:TaskCombo( AttackTasks ) end - DefenderGroup:Route( EngageRoute, 0.5 ) + DefenderGroup:Route( EngageRoute, self.TaskDelay ) end else self:E( DefenderGroupName .. ": No targets found -> Going RTB") self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) end end diff --git a/Moose Development/Moose/AI/AI_A2G_CAS.lua b/Moose Development/Moose/AI/AI_A2G_CAS.lua index d3f565ce1..6ed78a5eb 100644 --- a/Moose Development/Moose/AI/AI_A2G_CAS.lua +++ b/Moose Development/Moose/AI/AI_A2G_CAS.lua @@ -133,7 +133,7 @@ function AI_A2G_CAS:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit if #AttackTasks == 0 then self:E( DefenderGroupName .. ": No targets found -> Going RTB") self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) else DefenderGroup:OptionROEOpenFire() DefenderGroup:OptionROTEvadeFire() @@ -142,12 +142,12 @@ function AI_A2G_CAS:onafterEngage( DefenderGroup, From, Event, To, AttackSetUnit EngageRoute[#EngageRoute].task = DefenderGroup:TaskCombo( AttackTasks ) end - DefenderGroup:Route( EngageRoute, 0.5 ) + DefenderGroup:Route( EngageRoute, self.TaskDelay ) end else self:E( DefenderGroupName .. ": No targets found -> Going RTB") self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) end end diff --git a/Moose Development/Moose/AI/AI_A2G_Engage.lua b/Moose Development/Moose/AI/AI_A2G_Engage.lua index e6be845c3..b71da1dce 100644 --- a/Moose Development/Moose/AI/AI_A2G_Engage.lua +++ b/Moose Development/Moose/AI/AI_A2G_Engage.lua @@ -295,10 +295,10 @@ end --- @param Wrapper.Group#GROUP AIControllable function AI_A2G_ENGAGE.EngageRoute( AIGroup, Fsm ) - AIGroup:F( { "AI_A2G_ENGAGE.EngageRoute:", AIGroup:GetName() } ) + AIGroup:I( { "AI_A2G_ENGAGE.EngageRoute:", AIGroup:GetName() } ) if AIGroup:IsAlive() then - Fsm:__Engage( 0.5 ) + Fsm:__Engage( Fsm.TaskDelay ) --local Task = AIGroup:TaskOrbitCircle( 4000, 400 ) --AIGroup:SetTask( Task ) @@ -327,7 +327,7 @@ end function AI_A2G_ENGAGE:onafterAbort( AIGroup, From, Event, To ) AIGroup:ClearTasks() self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) end @@ -372,7 +372,7 @@ function AI_A2G_ENGAGE:OnEventDead( EventData ) if EventData.IniDCSUnit then if self.AttackUnits and self.AttackUnits[EventData.IniUnit] then - self:__Destroy( 1, EventData ) + self:__Destroy( self.TaskDelay, EventData ) end end end diff --git a/Moose Development/Moose/AI/AI_A2G_Patrol.lua b/Moose Development/Moose/AI/AI_A2G_Patrol.lua index dd9e0342a..4e8a6e953 100644 --- a/Moose Development/Moose/AI/AI_A2G_Patrol.lua +++ b/Moose Development/Moose/AI/AI_A2G_Patrol.lua @@ -234,12 +234,12 @@ function AI_A2G_PATROL:onafterPatrol( AIPatrol, From, Event, To ) self:ClearTargetDistance() - self:__Route( 1 ) + self:__Route( self.TaskDelay ) AIPatrol:OnReSpawn( function( PatrolGroup ) - self:__Reset( 1 ) - self:__Route( 5 ) + self:__Reset( self.TaskDelay ) + self:__Route( self.TaskDelay ) end ) end @@ -306,7 +306,7 @@ function AI_A2G_PATROL:onafterRoute( AIPatrol, From, Event, To ) AIPatrol:OptionROEReturnFire() AIPatrol:OptionROTEvadeFire() - AIPatrol:Route( PatrolRoute, 0.5 ) + AIPatrol:Route( PatrolRoute, self.TaskDelay ) end end @@ -314,10 +314,10 @@ end --- @param Wrapper.Group#GROUP AIPatrol function AI_A2G_PATROL.Resume( AIPatrol, Fsm ) - AIPatrol:I( { "AI_A2G_PATROL.Resume:", AIPatrol:GetName() } ) + AIPatrol:F( { "AI_A2G_PATROL.Resume:", AIPatrol:GetName() } ) if AIPatrol:IsAlive() then - Fsm:__Reset( 1 ) - Fsm:__Route( 5 ) + Fsm:__Reset( self.TaskDelay ) + Fsm:__Route( self.TaskDelay ) end end diff --git a/Moose Development/Moose/AI/AI_A2G_SEAD.lua b/Moose Development/Moose/AI/AI_A2G_SEAD.lua index f6d1e5d93..72d22577c 100644 --- a/Moose Development/Moose/AI/AI_A2G_SEAD.lua +++ b/Moose Development/Moose/AI/AI_A2G_SEAD.lua @@ -191,7 +191,7 @@ function AI_A2G_SEAD:onafterEngage( DefenderGroup, From, Event, To, AttackSetUni if #AttackTasks == 0 then self:E( DefenderGroupName .. ": No targets found -> Going RTB") self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) else DefenderGroup:OptionROEOpenFire() DefenderGroup:OptionROTVertical() @@ -202,7 +202,7 @@ function AI_A2G_SEAD:onafterEngage( DefenderGroup, From, Event, To, AttackSetUni EngageRoute[#EngageRoute].task = DefenderGroup:TaskCombo( AttackTasks ) end - DefenderGroup:Route( EngageRoute, 2 ) + DefenderGroup:Route( EngageRoute, self.TaskDelay ) -- else -- local AttackTasks = {} @@ -230,7 +230,7 @@ function AI_A2G_SEAD:onafterEngage( DefenderGroup, From, Event, To, AttackSetUni else self:E( DefenderGroupName .. ": No targets found -> Going RTB") self:Return() - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) end end diff --git a/Moose Development/Moose/AI/AI_Air.lua b/Moose Development/Moose/AI/AI_Air.lua index 8bac73d1c..149834022 100644 --- a/Moose Development/Moose/AI/AI_Air.lua +++ b/Moose Development/Moose/AI/AI_Air.lua @@ -51,6 +51,8 @@ AI_AIR = { ClassName = "AI_AIR", } +AI_AIR.TaskDelay = 0.5 -- The delay of each task given to the AI. + --- Creates a new AI_AIR process. -- @param #AI_AIR self -- @param Wrapper.Group#GROUP AIGroup The group object to receive the A2G Process. @@ -524,7 +526,7 @@ function AI_AIR:onafterStatus() end if RTB == true then - self:__RTB( 0.5 ) + self:__RTB( self.TaskDelay ) end if not self:Is("Home") then @@ -551,7 +553,7 @@ function AI_AIR.RTBHold( AIGroup, Fsm ) AIGroup:F( { "AI_AIR.RTBHold:", AIGroup:GetName() } ) if AIGroup:IsAlive() then - Fsm:__RTB( 0.5 ) + Fsm:__RTB( Fsm.TaskDelay ) Fsm:Return() local Task = AIGroup:TaskOrbitCircle( 4000, 400 ) AIGroup:SetTask( Task ) @@ -612,18 +614,16 @@ function AI_AIR:onafterRTB( AIGroup, From, Event, To ) EngageRoute[#EngageRoute+1] = FromRTBRoutePoint EngageRoute[#EngageRoute+1] = ToRTBRoutePoint + local Tasks = {} + Tasks[#Tasks+1] = AIGroup:TaskFunction( "AI_A2G_ENGAGE.RTBRoute", self ) + + EngageRoute[#EngageRoute].task = AIGroup:TaskCombo( Tasks ) + AIGroup:OptionROEHoldFire() AIGroup:OptionROTEvadeFire() - --- Now we're going to do something special, we're going to call a function from a waypoint action at the AIControllable... - AIGroup:WayPointInitialize( EngageRoute ) - - local Tasks = {} - Tasks[#Tasks+1] = AIGroup:TaskFunction( "AI_AIR.RTBRoute", self ) - EngageRoute[#EngageRoute].task = AIGroup:TaskCombo( Tasks ) - --- NOW ROUTE THE GROUP! - AIGroup:Route( EngageRoute, 0 ) + AIGroup:Route( EngageRoute, self.TaskDelay ) end @@ -670,7 +670,7 @@ function AI_AIR.Resume( AIGroup, Fsm ) AIGroup:I( { "AI_AIR.Resume:", AIGroup:GetName() } ) if AIGroup:IsAlive() then - Fsm:__RTB( 0.5 ) + Fsm:__RTB( Fsm.TaskDelay ) end end @@ -690,10 +690,19 @@ function AI_AIR:onafterRefuel( AIGroup, From, Event, To ) --- Calculate the target route point. - local CurrentCoord = AIGroup:GetCoordinate() + local FromRefuelCoord = AIGroup:GetCoordinate() local ToRefuelCoord = Tanker:GetCoordinate() local ToRefuelSpeed = math.random( self.PatrolMinSpeed, self.PatrolMaxSpeed ) + --- Create a route point of type air. + local FromRefuelRoutePoint = FromRefuelCoord:WaypointAir( + self.PatrolAltType, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToRefuelSpeed, + true + ) + --- Create a route point of type air. local ToRefuelRoutePoint = ToRefuelCoord:WaypointAir( self.PatrolAltType, @@ -705,7 +714,7 @@ function AI_AIR:onafterRefuel( AIGroup, From, Event, To ) self:F( { ToRefuelSpeed = ToRefuelSpeed } ) - RefuelRoute[#RefuelRoute+1] = ToRefuelRoutePoint + RefuelRoute[#RefuelRoute+1] = FromRefuelRoutePoint RefuelRoute[#RefuelRoute+1] = ToRefuelRoutePoint AIGroup:OptionROEHoldFire() @@ -716,7 +725,7 @@ function AI_AIR:onafterRefuel( AIGroup, From, Event, To ) Tasks[#Tasks+1] = AIGroup:TaskFunction( self:GetClassName() .. ".Resume", self ) RefuelRoute[#RefuelRoute].task = AIGroup:TaskCombo( Tasks ) - AIGroup:Route( RefuelRoute, 0.5 ) + AIGroup:Route( RefuelRoute, self.TaskDelay ) else self:RTB() end @@ -739,7 +748,7 @@ function AI_AIR:OnCrash( EventData ) if self.Controllable:IsAlive() and EventData.IniDCSGroupName == self.Controllable:GetName() then self:E( self.Controllable:GetUnits() ) if #self.Controllable:GetUnits() == 1 then - self:__Crash( 1, EventData ) + self:__Crash( self.TaskDelay, EventData ) end end end @@ -749,7 +758,7 @@ end function AI_AIR:OnEjection( EventData ) if self.Controllable:IsAlive() and EventData.IniDCSGroupName == self.Controllable:GetName() then - self:__Eject( 1, EventData ) + self:__Eject( self.TaskDelay, EventData ) end end @@ -758,6 +767,6 @@ end function AI_AIR:OnPilotDead( EventData ) if self.Controllable:IsAlive() and EventData.IniDCSGroupName == self.Controllable:GetName() then - self:__PilotDead( 1, EventData ) + self:__PilotDead( self.TaskDelay, EventData ) end end diff --git a/Moose Development/Moose/Wrapper/Controllable.lua b/Moose Development/Moose/Wrapper/Controllable.lua index 0353c42f9..96455d007 100644 --- a/Moose Development/Moose/Wrapper/Controllable.lua +++ b/Moose Development/Moose/Wrapper/Controllable.lua @@ -400,7 +400,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime ) local Controller = self:_GetController() --self:I( "Before SetTask" ) Controller:setTask( DCSTask ) - --self:I( "After SetTask" ) + self:F( { DCSTask = DCSTask } ) else BASE:E( { DCSControllableName .. " is not alive anymore.", DCSTask = DCSTask } ) end @@ -408,6 +408,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime ) if not WaitTime or WaitTime == 0 then SetTask( self, DCSTask ) + self:F( { DCSTask = DCSTask } ) else self.TaskScheduler:Schedule( self, SetTask, { DCSTask }, WaitTime ) end @@ -1036,7 +1037,7 @@ end -- @param #CONTROLLABLE self -- @param #number Altitude The altitude [m] to hold the position. -- @param #number Speed The speed [m/s] flying when holding the position. --- @param Core.Point#COORDINATE Coordinate The coordinate where to orbit. +-- @param Core.Point#COORDINATE Coordinate (optional) The coordinate where to orbit. If the coordinate is not given, then the current position of the controllable is used. -- @return #CONTROLLABLE self function CONTROLLABLE:TaskOrbitCircle( Altitude, Speed, Coordinate ) self:F2( { self.ControllableName, Altitude, Speed } )