From 6991550d1bf4d181d77a6f6ccf30d84e88f7c4af Mon Sep 17 00:00:00 2001 From: funkyfranky <> Date: Sat, 21 Jul 2018 16:32:25 +0200 Subject: [PATCH] AI_CARGO_DISPATCHER APCs and helos will now obey speeds set by SetPickupSpeed() and SetDeploySpeed(). --- Moose Development/Moose/AI/AI_Cargo_APC.lua | 25 ++++++++---- .../Moose/AI/AI_Cargo_Airplane.lua | 1 - .../AI/AI_Cargo_Dispatcher_Helicopter.lua | 2 +- .../Moose/AI/AI_Cargo_Helicopter.lua | 39 +++++++++++-------- 4 files changed, 40 insertions(+), 27 deletions(-) diff --git a/Moose Development/Moose/AI/AI_Cargo_APC.lua b/Moose Development/Moose/AI/AI_Cargo_APC.lua index 7f4f34a3e..2c76f2786 100644 --- a/Moose Development/Moose/AI/AI_Cargo_APC.lua +++ b/Moose Development/Moose/AI/AI_Cargo_APC.lua @@ -596,15 +596,18 @@ end -- @param From -- @param Event -- @param To --- @param Core.Point#COORDINATE Coordinate -function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate ) +-- @param Core.Point#COORDINATE Coordinate of the pickup point. +-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate, Speed ) if APC and APC:IsAlive() then if Coordinate then self.RoutePickup = true - local Waypoints = APC:TaskGroundOnRoad( Coordinate, APC:GetSpeedMax()*0.5, "Line abreast", true ) + local _speed=Speed or APC:GetSpeedMax()*0.5 + + local Waypoints = APC:TaskGroundOnRoad( Coordinate, _speed, "Line abreast", true ) local TaskFunction = APC:TaskFunction( "AI_CARGO_APC._Pickup", self ) @@ -629,13 +632,16 @@ end -- @param Event -- @param To -- @param Core.Point#COORDINATE Coordinate -function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate ) +-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed ) if APC and APC:IsAlive() then self.RouteDeploy = true + + local _speed=Speed or APC:GetSpeedMax()*0.5 - local Waypoints = APC:TaskGroundOnRoad( Coordinate, APC:GetSpeedMax()*0.5, "Line abreast", true ) + local Waypoints = APC:TaskGroundOnRoad( Coordinate, _speed, "Line abreast", true ) local TaskFunction = APC:TaskFunction( "AI_CARGO_APC._Deploy", self ) @@ -655,13 +661,16 @@ end -- @param Event -- @param To -- @param Core.Point#COORDINATE Coordinate -function AI_CARGO_APC:onafterHome( APC, From, Event, To, Coordinate ) +-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +function AI_CARGO_APC:onafterHome( APC, From, Event, To, Coordinate, Speed ) if APC and APC:IsAlive() ~= nil then self.RouteHome = true - - local Waypoints = APC:TaskGroundOnRoad( Coordinate, APC:GetSpeedMax()*0.5, "Line abreast", true ) + + local _speed=Speed or APC:GetSpeedMax()*0.5 + + local Waypoints = APC:TaskGroundOnRoad( Coordinate, _speed, "Line abreast", true ) self:F({Waypoints = Waypoints}) local Waypoint = Waypoints[#Waypoints] diff --git a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua index 343823d2f..bbbe19ed0 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua @@ -25,7 +25,6 @@ AI_CARGO_AIRPLANE = { -- @param #AI_CARGO_AIRPLANE self -- @param Wrapper.Group#GROUP Airplane -- @param Core.Set#SET_CARGO CargoSet --- @param #number CombatRadius -- @return #AI_CARGO_AIRPLANE function AI_CARGO_AIRPLANE:New( Airplane, CargoSet ) diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua index eabc91dc4..eaf9666d2 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua @@ -90,7 +90,7 @@ AI_CARGO_DISPATCHER_HELICOPTER = { -- @param #AI_CARGO_DISPATCHER_HELICOPTER self -- @param Core.Set#SET_GROUP SetHelicopter The collection of Helicopter @{Wrapper.Group}s. -- @param Core.Set#SET_CARGO SetCargo The collection of @{Cargo} derived objects. --- @param Core.Set#SET_ZONE SetDeployZone The collection of deploy @{Zone}s, which are used to where the cargo will be deployed by the Helicopters. +-- @param Core.Set#SET_ZONE SetDeployZones The collection of deploy @{Zone}s, which are used to where the cargo will be deployed by the Helicopters. -- @return #AI_CARGO_DISPATCHER_HELICOPTER -- @usage -- diff --git a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua index e8b7d24ce..139af0e16 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua @@ -29,7 +29,6 @@ AI_CARGO_QUEUE = {} -- @param #AI_CARGO_HELICOPTER self -- @param Wrapper.Group#GROUP Helicopter -- @param Core.Set#SET_CARGO CargoSet --- @param #number CombatRadius -- @return #AI_CARGO_HELICOPTER function AI_CARGO_HELICOPTER:New( Helicopter, CargoSet ) @@ -530,15 +529,17 @@ end -- @param Event -- @param To -- @param Core.Point#COORDINATE Coordinate --- @param #number Speed -function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordinate ) +-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordinate, Speed ) if Helicopter and Helicopter:IsAlive() ~= nil then Helicopter:Activate() self.RoutePickup = true - Coordinate.y = math.random( 50, 200 ) + Coordinate.y = math.random( 50, 200 ) + + local _speed=Speed or Helicopter:GetSpeedMax()*0.5 local Route = {} @@ -551,7 +552,7 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, - 150, + _speed, true ) @@ -560,7 +561,7 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, - 150, + _speed, true ) @@ -596,8 +597,8 @@ end -- @param Event -- @param To -- @param Core.Point#COORDINATE Coordinate --- @param #number Speed -function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordinate ) +-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordinate, Speed ) if Helicopter and Helicopter:IsAlive() ~= nil then @@ -608,7 +609,9 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin --- Calculate the target route point. - Coordinate.y = math.random( 50, 200 ) + Coordinate.y = math.random( 50, 200 ) + + local _speed=Speed or Helicopter:GetSpeedMax()*0.5 --- Create a route point of type air. local CoordinateFrom = Helicopter:GetCoordinate() @@ -616,7 +619,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, - 150, + _speed, true ) Route[#Route+1] = WaypointFrom @@ -628,7 +631,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, - 150, + _speed, true ) @@ -641,7 +644,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin local Tasks = {} Tasks[#Tasks+1] = Helicopter:TaskFunction( "AI_CARGO_HELICOPTER._Deploy", self, Coordinate ) - Tasks[#Tasks+1] = Helicopter:TaskOrbitCircle( math.random( 30, 100 ), 150, CoordinateTo:GetRandomCoordinateInRadius( 800, 500 ) ) + Tasks[#Tasks+1] = Helicopter:TaskOrbitCircle( math.random( 30, 100 ), _speed, CoordinateTo:GetRandomCoordinateInRadius( 800, 500 ) ) --Tasks[#Tasks+1] = Helicopter:TaskLandAtVec2( CoordinateTo:GetVec2() ) Route[#Route].task = Helicopter:TaskCombo( Tasks ) @@ -662,8 +665,8 @@ end -- @param Event -- @param To -- @param Core.Point#COORDINATE Coordinate --- @param #number Speed -function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinate ) +-- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinate, Speed ) if Helicopter and Helicopter:IsAlive() ~= nil then @@ -673,7 +676,9 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat --- Calculate the target route point. - Coordinate.y = math.random( 50, 200 ) + Coordinate.y = math.random( 50, 200 ) + + local _speed=Speed or Helicopter:GetSpeedMax()*0.5 --- Create a route point of type air. local CoordinateFrom = Helicopter:GetCoordinate() @@ -681,7 +686,7 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, - 150, + _speed, true ) Route[#Route+1] = WaypointFrom @@ -692,7 +697,7 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat "RADIO", POINT_VEC3.RoutePointType.TurningPoint, POINT_VEC3.RoutePointAction.TurningPoint, - 150, + _speed, true )