From 1345bdcb1092585a1eba78ee7745cdba6eaf8825 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Thu, 20 Sep 2018 20:08:00 +0200 Subject: [PATCH] Refinement of the code. - ALL the Pickup event code has changed. A Height parameter has been added. - ALL the Deploy event code has changed. A Height parameter has been added. - ALL the Home event code has changed. A Height parameter has been added. - ZONE_POLYGON now also has a create zone event triggered. --- Moose Development/Moose/AI/AI_Cargo.lua | 7 +- Moose Development/Moose/AI/AI_Cargo_APC.lua | 14 ++-- .../Moose/AI/AI_Cargo_Airplane.lua | 26 +++--- .../Moose/AI/AI_Cargo_Dispatcher.lua | 82 ++++++++++++++++--- .../Moose/AI/AI_Cargo_Dispatcher_APC.lua | 3 + .../Moose/AI/AI_Cargo_Dispatcher_Airplane.lua | 8 +- .../AI/AI_Cargo_Dispatcher_Helicopter.lua | 9 +- .../Moose/AI/AI_Cargo_Helicopter.lua | 22 +++-- Moose Development/Moose/Core/Zone.lua | 7 +- 9 files changed, 135 insertions(+), 43 deletions(-) diff --git a/Moose Development/Moose/AI/AI_Cargo.lua b/Moose Development/Moose/AI/AI_Cargo.lua index a0686b9c6..eb51e29e0 100644 --- a/Moose Development/Moose/AI/AI_Cargo.lua +++ b/Moose Development/Moose/AI/AI_Cargo.lua @@ -174,8 +174,9 @@ end -- @param To -- @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. +-- @param #number Height Height in meters to move to the home coordinate. -- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided. -function AI_CARGO:onafterPickup( APC, From, Event, To, Coordinate, Speed, PickupZone ) +function AI_CARGO:onafterPickup( APC, From, Event, To, Coordinate, Speed, Height, PickupZone ) self.Transporting = false self.Relocating = true @@ -191,7 +192,9 @@ end -- @param To -- @param Core.Point#COORDINATE Coordinate Deploy place. -- @param #number Speed Speed in km/h to drive to the depoly coordinate. Default is 50% of max possible speed the unit can go. -function AI_CARGO:onafterDeploy( APC, From, Event, To, Coordinate, Speed, DeployZone ) +-- @param #number Height Height in meters to move to the deploy coordinate. +-- @param Core.Zone#ZONE DeployZone The zone where the cargo will be deployed. +function AI_CARGO:onafterDeploy( APC, From, Event, To, Coordinate, Speed, Height, DeployZone ) self.Relocating = false self.Transporting = true diff --git a/Moose Development/Moose/AI/AI_Cargo_APC.lua b/Moose Development/Moose/AI/AI_Cargo_APC.lua index 76ebfc397..ace90787d 100644 --- a/Moose Development/Moose/AI/AI_Cargo_APC.lua +++ b/Moose Development/Moose/AI/AI_Cargo_APC.lua @@ -378,8 +378,9 @@ end -- @param To -- @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. +-- @param #number Height Height in meters to move to the pickup coordinate. This parameter is ignored for APCs. -- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided. -function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate, Speed, PickupZone ) +function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate, Speed, Height, PickupZone ) if APC and APC:IsAlive() then @@ -401,7 +402,7 @@ function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate, Speed, Pi AI_CARGO_APC._Pickup( APC, self, Coordinate, Speed, PickupZone ) end - self:GetParent( self, AI_CARGO_APC ).onafterPickup( self, APC, From, Event, To, Coordinate, Speed, PickupZone ) + self:GetParent( self, AI_CARGO_APC ).onafterPickup( self, APC, From, Event, To, Coordinate, Speed, Height, PickupZone ) end end @@ -415,7 +416,9 @@ end -- @param To -- @param Core.Point#COORDINATE Coordinate Deploy place. -- @param #number Speed Speed in km/h to drive to the depoly coordinate. Default is 50% of max possible speed the unit can go. -function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed, DeployZone ) +-- @param #number Height Height in meters to move to the deploy coordinate. This parameter is ignored for APCs. +-- @param Core.Zone#ZONE DeployZone The zone where the cargo will be deployed. +function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed, Height, DeployZone ) if APC and APC:IsAlive() then @@ -433,7 +436,7 @@ function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed, De APC:Route( Waypoints, 1 ) -- Move after a random seconds to the Route. See the Route method for details. - self:GetParent( self, AI_CARGO_APC ).onafterDeploy( self, APC, From, Event, To, Coordinate, Speed, DeployZone ) + self:GetParent( self, AI_CARGO_APC ).onafterDeploy( self, APC, From, Event, To, Coordinate, Speed, Height, DeployZone ) end @@ -464,7 +467,8 @@ end -- @param To -- @param Core.Point#COORDINATE Coordinate Home place. -- @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, HomeZone ) +-- @param #number Height Height in meters to move to the home coordinate. This parameter is ignored for APCs. +function AI_CARGO_APC:onafterHome( APC, From, Event, To, Coordinate, Speed, Height, HomeZone ) if APC and APC:IsAlive() ~= nil then diff --git a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua index 186679d24..82334c8ab 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua @@ -261,8 +261,9 @@ end -- @param #string To To state. -- @param Core.Point#COORDINATE Coordinate -- @param #number Speed in km/h for travelling to pickup base. --- @param Core.Zone#ZONE_AIRBASE PickupZone -function AI_CARGO_AIRPLANE:onafterPickup( Airplane, From, Event, To, Coordinate, Speed, PickupZone ) +-- @param #number Height Height in meters to move to the pickup coordinate. +-- @param Core.Zone#ZONE_AIRBASE (optional) PickupZone The zone where the cargo will be picked up. +function AI_CARGO_AIRPLANE:onafterPickup( Airplane, From, Event, To, Coordinate, Speed, Height, PickupZone ) if Airplane and Airplane:IsAlive() then --env.info("FF onafterpick aircraft alive") @@ -293,7 +294,7 @@ function AI_CARGO_AIRPLANE:onafterPickup( Airplane, From, Event, To, Coordinate, --env.info("FF onafterpickup routing to airbase "..ClosestAirbase:GetName()) -- Route aircraft to pickup airbase. - self:Route( Airplane, Airbase, Speed ) + self:Route( Airplane, Airbase, Speed, Height ) -- Set airbase as starting point in the next Route() call. self.Airbase = Airbase @@ -310,7 +311,7 @@ function AI_CARGO_AIRPLANE:onafterPickup( Airplane, From, Event, To, Coordinate, end - self:GetParent( self, AI_CARGO_AIRPLANE ).onafterPickup( self, Airplane, From, Event, To, Coordinate, Speed, PickupZone ) + self:GetParent( self, AI_CARGO_AIRPLANE ).onafterPickup( self, Airplane, From, Event, To, Coordinate, Speed, Height, PickupZone ) else --env.info("FF onafterpick aircraft not alive") end @@ -326,8 +327,9 @@ end -- @param #string To To state. -- @param Core.Point#COORDINATE Coordinate -- @param #number Speed in km/h for travelling to pickup base. --- @param Core.Zone#ZONE_AIRBASE DeployZone -function AI_CARGO_AIRPLANE:onafterDeploy( Airplane, From, Event, To, Coordinate, Speed, DeployZone ) +-- @param #number Height Height in meters to move to the home coordinate. +-- @param Core.Zone#ZONE_AIRBASE DeployZone The zone where the cargo will be deployed. +function AI_CARGO_AIRPLANE:onafterDeploy( Airplane, From, Event, To, Coordinate, Speed, Height, DeployZone ) if Airplane and Airplane:IsAlive()~=nil then @@ -339,7 +341,7 @@ function AI_CARGO_AIRPLANE:onafterDeploy( Airplane, From, Event, To, Coordinate, end -- Route to destination airbase. - self:Route( Airplane, Airbase, Speed ) + self:Route( Airplane, Airbase, Speed, Height ) -- Aircraft is on a depoly mission. self.RouteDeploy = true @@ -347,7 +349,7 @@ function AI_CARGO_AIRPLANE:onafterDeploy( Airplane, From, Event, To, Coordinate, -- Set destination airbase for next :Route() command. self.Airbase = Airbase - self:GetParent( self, AI_CARGO_AIRPLANE ).onafterDeploy( self, Airplane, From, Event, To, Coordinate, Speed, DeployZone ) + self:GetParent( self, AI_CARGO_AIRPLANE ).onafterDeploy( self, Airplane, From, Event, To, Coordinate, Speed, Height, DeployZone ) end end @@ -393,8 +395,9 @@ end -- @param Wrapper.Group#GROUP Airplane Airplane group to be routed. -- @param Wrapper.Airbase#AIRBASE Airbase Destination airbase. -- @param #number Speed Speed in km/h. Default is 80% of max possible speed the group can do. +-- @param #number Height Height in meters to move to the Airbase. -- @param #boolean Uncontrolled If true, spawn group in uncontrolled state. -function AI_CARGO_AIRPLANE:Route( Airplane, Airbase, Speed, Uncontrolled ) +function AI_CARGO_AIRPLANE:Route( Airplane, Airbase, Speed, Height, Uncontrolled ) if Airplane and Airplane:IsAlive() then @@ -468,8 +471,9 @@ end -- @param To To State. -- @param Core.Point#COORDINATE Coordinate Home place (not used). -- @param #number Speed Speed in km/h to fly to the home airbase (zone). Default is 80% of max possible speed the unit can go. +-- @param #number Height Height in meters to move to the home coordinate. -- @param Core.Zone#ZONE_AIRBASE HomeZone The home airbase (zone) where the plane should return to. -function AI_CARGO_AIRPLANE:onafterHome(Airplane, From, Event, To, Coordinate, Speed, HomeZone ) +function AI_CARGO_AIRPLANE:onafterHome(Airplane, From, Event, To, Coordinate, Speed, Height, HomeZone ) if Airplane and Airplane:IsAlive() then -- We are going home! @@ -480,7 +484,7 @@ function AI_CARGO_AIRPLANE:onafterHome(Airplane, From, Event, To, Coordinate, Sp self.Airbase=HomeBase -- Now route the airplane home - self:Route(Airplane, HomeBase, Speed) + self:Route( Airplane, HomeBase, Speed, Height ) end diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua index edcf18846..3e012d491 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua @@ -109,8 +109,9 @@ -- -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- -- @param Core.Point#COORDINATE Coordinate The coordinate of the pickup location. -- -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the pickup Coordinate. +-- -- @param #number Height Height in meters to move to the pickup coordinate. -- -- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone. --- function CLASS:OnAfterPickup( From, Event, To, CarrierGroup, Coordinate, Speed, PickupZone ) +-- function CLASS:OnAfterPickup( From, Event, To, CarrierGroup, Coordinate, Speed, Height, PickupZone ) -- -- -- Write here your own code. -- @@ -232,8 +233,9 @@ -- -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- -- @param Core.Point#COORDINATE Coordinate The deploy coordinate. -- -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the deploy Coordinate. +-- -- @param #number Height Height in meters to move to the deploy coordinate. -- -- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. --- function CLASS:OnAfterDeploy( From, Event, To, CarrierGroup, Coordinate, Speed, DeployZone ) +-- function CLASS:OnAfterDeploy( From, Event, To, CarrierGroup, Coordinate, Speed, Height, DeployZone ) -- -- -- Write here your own code. -- @@ -347,8 +349,9 @@ -- -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- -- @param Core.Point#COORDINATE Coordinate The home coordinate the Carrier will arrive and stop it's activities. -- -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the home Coordinate. +-- -- @param #number Height Height in meters to move to the home coordinate. -- -- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. --- function CLASS:OnAfterHome( From, Event, To, CarrierGroup, Coordinate, Speed, HomeZone ) +-- function CLASS:OnAfterHome( From, Event, To, CarrierGroup, Coordinate, Speed, Height, HomeZone ) -- -- -- Write here your own code. -- @@ -361,6 +364,7 @@ -- -- * @{#AI_CARGO_DISPATCHER.SetPickupRadius}(): Sets or randomizes the pickup location for the carrier around the cargo coordinate in a radius defined an outer and optional inner radius. -- * @{#AI_CARGO_DISPATCHER.SetPickupSpeed}(): Set the speed or randomizes the speed in km/h to pickup the cargo. +-- * @{#AI_CARGO_DISPATCHER.SetPickupHeight}(): Set the height or randomizes the height in meters to pickup the cargo. -- -- # 4) Set the deploy parameters. -- @@ -368,6 +372,7 @@ -- -- * @{#AI_CARGO_DISPATCHER.SetDeployRadius}(): Sets or randomizes the deploy location for the carrier around the cargo coordinate in a radius defined an outer and an optional inner radius. -- * @{#AI_CARGO_DISPATCHER.SetDeploySpeed}(): Set the speed or randomizes the speed in km/h to deploy the cargo. +-- * @{#AI_CARGO_DISPATCHER.SetDeployHeight}(): Set the height or randomizes the height in meters to deploy the cargo. -- -- # 5) Set the home zone when there isn't any more cargo to pickup. -- @@ -640,6 +645,55 @@ function AI_CARGO_DISPATCHER:SetDeploySpeed( MaxSpeed, MinSpeed ) end +--- Set the height or randomizes the height in meters to fly and pickup the cargo. The default height is 200 meters. +-- @param #AI_CARGO_DISPATCHER self +-- @param #number MaxHeight (optional) The maximum height to fly to the cargo pickup location. +-- @param #number MinHeight (optional) The minimum height to fly to the cargo pickup location. +-- @return #AI_CARGO_DISPATCHER +-- @usage +-- +-- -- Create a new cargo dispatcher +-- AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetCarrier, SetCargo, SetDeployZone ) +-- +-- -- Set the minimum pickup fly height to be 50 meters and the maximum height to be 200 meters. +-- AICargoDispatcherHelicopter:SetPickupHeight( 200, 50 ) +-- +function AI_CARGO_DISPATCHER:SetPickupHeight( MaxHeight, MinHeight ) + + MaxHeight = MaxHeight or 200 + MinHeight = MinHeight or MaxHeight + + self.PickupMinHeight = MinHeight + self.PickupMaxHeight = MaxHeight + + return self +end + + +--- Set the height or randomizes the height in meters to fly and deploy the cargo. The default height is 200 meters. +-- @param #AI_CARGO_DISPATCHER self +-- @param #number MaxHeight (optional) The maximum height to fly to the cargo deploy location. +-- @param #number MinHeight (optional) The minimum height to fly to the cargo deploy location. +-- @return #AI_CARGO_DISPATCHER +-- @usage +-- +-- -- Create a new cargo dispatcher +-- AICargoDispatcherHelicopter = AI_CARGO_DISPATCHER_HELICOPTER:New( SetCarrier, SetCargo, SetDeployZone ) +-- +-- -- Set the minimum deploy fly height to be 50 meters and the maximum height to be 200 meters. +-- AICargoDispatcherHelicopter:SetDeployHeight( 200, 50 ) +-- +function AI_CARGO_DISPATCHER:SetDeployHeight( MaxHeight, MinHeight ) + + MaxHeight = MaxHeight or 200 + MinHeight = MinHeight or MaxHeight + + self.DeployMinHeight = MinHeight + self.DeployMaxHeight = MaxHeight + + return self +end + --- The Start trigger event, which actually takes action at the specified time interval. -- @param #AI_CARGO_DISPATCHER self @@ -666,9 +720,10 @@ function AI_CARGO_DISPATCHER:onafterMonitor() -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Core.Point#COORDINATE Coordinate The coordinate of the pickup location. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the pickup Coordinate. + -- @param #number Height Height in meters to move to the pickup coordinate. -- @param Core.Zone#ZONE_AIRBASE PickupZone (optional) The zone from where the cargo is picked up. Note that the zone is optional and may not be provided, but for AI_CARGO_DISPATCHER_AIRBASE there will always be a PickupZone, as the pickup location is an airbase zone. - function AI_Cargo.OnAfterPickup( AI_Cargo, CarrierGroup, From, Event, To, Coordinate, Speed, PickupZone ) - self:Pickup( CarrierGroup, Coordinate, Speed, PickupZone ) + function AI_Cargo.OnAfterPickup( AI_Cargo, CarrierGroup, From, Event, To, Coordinate, Speed, Height, PickupZone ) + self:Pickup( CarrierGroup, Coordinate, Speed, Height, PickupZone ) end --- Load event handler OnAfter for AI_CARGO_DISPATCHER. @@ -751,10 +806,11 @@ function AI_CARGO_DISPATCHER:onafterMonitor() -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Core.Point#COORDINATE Coordinate The deploy coordinate. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the deploy Coordinate. + -- @param #number Height Height in meters to move to the deploy coordinate. -- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. - function AI_Cargo.OnAfterDeploy( AI_Cargo, CarrierGroup, From, Event, To, Coordinate, Speed, DeployZone ) - self:Deploy( CarrierGroup, Coordinate, Speed, DeployZone ) + function AI_Cargo.OnAfterDeploy( AI_Cargo, CarrierGroup, From, Event, To, Coordinate, Speed, Height, DeployZone ) + self:Deploy( CarrierGroup, Coordinate, Speed, Height, DeployZone ) end @@ -838,10 +894,11 @@ function AI_CARGO_DISPATCHER:onafterMonitor() -- @param Wrapper.Group#GROUP CarrierGroup The group object that contains the CarrierUnits. -- @param Core.Point#COORDINATE Coordinate The home coordinate the Carrier will arrive and stop it's activities. -- @param #number Speed The velocity in meters per second on which the CarrierGroup is routed towards the home Coordinate. + -- @param #number Height Height in meters to move to the home coordinate. -- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. - function AI_Cargo.OnAfterHome( AI_Cargo, Carrier, From, Event, To, Coordinate, Speed, HomeZone ) - self:Home( Carrier, Coordinate, Speed, HomeZone ) + function AI_Cargo.OnAfterHome( AI_Cargo, Carrier, From, Event, To, Coordinate, Speed, Height, HomeZone ) + self:Home( Carrier, Coordinate, Speed, Height, HomeZone ) end end @@ -862,6 +919,7 @@ function AI_CARGO_DISPATCHER:onafterMonitor() if Cargo:IsUnLoaded() == true and Cargo:IsDeployed() == false then local CargoCoordinate = Cargo:GetCoordinate() local CoordinateFree = true + self.PickupZoneSet:Flush() PickupZone = self.PickupZoneSet and self.PickupZoneSet:IsCoordinateInZone( CargoCoordinate ) if not self.PickupZoneSet or PickupZone then for CarrierPickup, Coordinate in pairs( self.PickupCargo ) do @@ -901,13 +959,13 @@ function AI_CARGO_DISPATCHER:onafterMonitor() if PickupCargo then self.CarrierHome[Carrier] = nil local PickupCoordinate = PickupCargo:GetCoordinate():GetRandomCoordinateInRadius( self.PickupOuterRadius, self.PickupInnerRadius ) - AI_Cargo:Pickup( PickupCoordinate, math.random( self.PickupMinSpeed, self.PickupMaxSpeed ), PickupZone ) + AI_Cargo:Pickup( PickupCoordinate, math.random( self.PickupMinSpeed, self.PickupMaxSpeed ), math.random( self.PickupMinHeight, self.PickupMaxHeight ), PickupZone ) break else if self.HomeZone then if not self.CarrierHome[Carrier] then self.CarrierHome[Carrier] = true - AI_Cargo:Home( self.HomeZone:GetRandomPointVec2(), math.random( self.PickupMinSpeed, self.PickupMaxSpeed ), self.HomeZone ) + AI_Cargo:Home( self.HomeZone:GetRandomPointVec2(), math.random( self.PickupMinSpeed, self.PickupMaxSpeed ), math.random( self.PickupMinHeight, self.PickupMaxHeight ), self.HomeZone ) end end end @@ -985,7 +1043,7 @@ function AI_CARGO_DISPATCHER:onafterTransport( From, Event, To, Carrier, Cargo ) local DeployZone = self.DeployZoneSet:GetRandomZone() local DeployCoordinate = DeployZone:GetCoordinate():GetRandomCoordinateInRadius( self.DeployOuterRadius, self.DeployInnerRadius ) - self.AI_Cargo[Carrier]:__Deploy( 0.1, DeployCoordinate, math.random( self.DeployMinSpeed, self.DeployMaxSpeed ), DeployZone ) + self.AI_Cargo[Carrier]:__Deploy( 0.1, DeployCoordinate, math.random( self.DeployMinSpeed, self.DeployMaxSpeed ), math.random( self.DeployMinHeight, self.DeployMaxHeight ), DeployZone ) end end diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_APC.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_APC.lua index da11cdcb2..4dbb87f41 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_APC.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_APC.lua @@ -120,6 +120,9 @@ function AI_CARGO_DISPATCHER_APC:New( APCSet, CargoSet, PickupZoneSet, DeployZon self:SetPickupRadius( 0, 0 ) self:SetDeployRadius( 0, 0 ) + self:SetPickupHeight() + self:SetDeployHeight() + self:SetCombatRadius( CombatRadius ) return self diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua index 24912784d..911728bf2 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua @@ -63,11 +63,15 @@ function AI_CARGO_DISPATCHER_AIRPLANE:New( AirplaneSet, CargoSet, PickupZoneSet, local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:NewWithZones( AirplaneSet, CargoSet, PickupZoneSet, DeployZoneSet ) ) -- #AI_CARGO_DISPATCHER_AIRPLANE - self:SetDeploySpeed( 1200, 600 ) self:SetPickupSpeed( 1200, 600 ) + self:SetDeploySpeed( 1200, 600 ) + self:SetPickupRadius( 0, 0 ) self:SetDeployRadius( 0, 0 ) - + + self:SetPickupHeight( 8000, 6000 ) + self:SetDeployHeight( 8000, 6000 ) + self:SetMonitorTimeInterval( 600 ) return self diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua index 69beb31f4..399a985dd 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Helicopter.lua @@ -119,14 +119,19 @@ function AI_CARGO_DISPATCHER_HELICOPTER:New( HelicopterSet, CargoSet, PickupZone local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:NewWithZones( HelicopterSet, CargoSet, PickupZoneSet, DeployZoneSet ) ) -- #AI_CARGO_DISPATCHER_HELICOPTER - self:SetDeploySpeed( 200, 150 ) - self:SetPickupSpeed( 200, 150 ) + self:SetPickupSpeed( 350, 150 ) + self:SetDeploySpeed( 350, 150 ) + self:SetPickupRadius( 0, 0 ) self:SetDeployRadius( 0, 0 ) + self:SetPickupHeight( 500, 200 ) + self:SetDeployHeight( 500, 200 ) + return self end + function AI_CARGO_DISPATCHER_HELICOPTER:AICargo( Helicopter, CargoSet ) return AI_CARGO_HELICOPTER:New( Helicopter, CargoSet ) diff --git a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua index 0a71e9250..4b838fde5 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua @@ -177,6 +177,9 @@ function AI_CARGO_HELICOPTER:New( Helicopter, CargoSet ) end + + + --- Set the Carrier. -- @param #AI_CARGO_HELICOPTER self -- @param Wrapper.Group#GROUP Helicopter @@ -416,15 +419,16 @@ end -- @param To -- @param Core.Point#COORDINATE Coordinate Pickup place. -- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +-- @param #number Height Height in meters to move to the pickup coordinate. This parameter is ignored for APCs. -- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided. -function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordinate, Speed, PickupZone ) +function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordinate, Speed, Height, PickupZone ) if Helicopter and Helicopter:IsAlive() ~= nil then Helicopter:Activate() self.RoutePickup = true - Coordinate.y = math.random( 50, 500 ) + Coordinate.y = Height local _speed=Speed or Helicopter:GetSpeedMax()*0.5 @@ -470,7 +474,7 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin self.PickupZone = PickupZone - self:GetParent( self, AI_CARGO_HELICOPTER ).onafterPickup( self, Helicopter, From, Event, To, Coordinate, Speed, PickupZone ) + self:GetParent( self, AI_CARGO_HELICOPTER ).onafterPickup( self, Helicopter, From, Event, To, Coordinate, Speed, Height, PickupZone ) end @@ -492,7 +496,8 @@ end -- @param To -- @param Core.Point#COORDINATE Coordinate Place at which the cargo is deployed. -- @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, DeployZone ) +-- @param #number Height Height in meters to move to the deploy coordinate. +function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordinate, Speed, Height, DeployZone ) if Helicopter and Helicopter:IsAlive() ~= nil then @@ -503,7 +508,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin --- Calculate the target route point. - Coordinate.y = math.random( 50, 500 ) + Coordinate.y = Height local _speed=Speed or Helicopter:GetSpeedMax()*0.5 @@ -548,7 +553,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin -- Now route the helicopter Helicopter:Route( Route, 0 ) - self:GetParent( self, AI_CARGO_HELICOPTER ).onafterDeploy( self, Helicopter, From, Event, To, Coordinate, Speed, DeployZone ) + self:GetParent( self, AI_CARGO_HELICOPTER ).onafterDeploy( self, Helicopter, From, Event, To, Coordinate, Speed, Height, DeployZone ) end end @@ -562,8 +567,9 @@ end -- @param To -- @param Core.Point#COORDINATE Coordinate Home place. -- @param #number Speed Speed in km/h to drive to the pickup coordinate. Default is 50% of max possible speed the unit can go. +-- @param #number Height Height in meters to move to the home coordinate. -- @param Core.Zone#ZONE HomeZone The zone wherein the carrier will return when all cargo has been transported. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE. -function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinate, Speed, HomeZone ) +function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinate, Speed, Height, HomeZone ) if Helicopter and Helicopter:IsAlive() ~= nil then @@ -573,7 +579,7 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat --- Calculate the target route point. - Coordinate.y = math.random( 50, 200 ) + Coordinate.y = Height Speed = Speed or Helicopter:GetSpeedMax()*0.5 diff --git a/Moose Development/Moose/Core/Zone.lua b/Moose Development/Moose/Core/Zone.lua index b434295f0..643477a86 100644 --- a/Moose Development/Moose/Core/Zone.lua +++ b/Moose Development/Moose/Core/Zone.lua @@ -1561,6 +1561,9 @@ function ZONE_POLYGON:New( ZoneName, ZoneGroup ) local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( ZoneName, GroupPoints ) ) self:F( { ZoneName, ZoneGroup, self._.Polygon } ) + -- Zone objects are added to the _DATABASE and SET_ZONE objects. + _EVENTDISPATCHER:CreateEventNewZone( self ) + return self end @@ -1568,7 +1571,6 @@ end --- Constructor to create a ZONE_POLYGON instance, taking the zone name and the **name** of the @{Wrapper.Group#GROUP} defined within the Mission Editor. -- The @{Wrapper.Group#GROUP} waypoints define the polygon corners. The first and the last point are automatically connected by ZONE_POLYGON. -- @param #ZONE_POLYGON self --- @param #string ZoneName Name of the zone. -- @param #string GroupName The group name of the GROUP defining the waypoints within the Mission Editor to define the polygon shape. -- @return #ZONE_POLYGON self function ZONE_POLYGON:NewFromGroupName( GroupName ) @@ -1580,6 +1582,9 @@ function ZONE_POLYGON:NewFromGroupName( GroupName ) local self = BASE:Inherit( self, ZONE_POLYGON_BASE:New( GroupName, GroupPoints ) ) self:F( { GroupName, ZoneGroup, self._.Polygon } ) + -- Zone objects are added to the _DATABASE and SET_ZONE objects. + _EVENTDISPATCHER:CreateEventNewZone( self ) + return self end