From ffbc4a838eaa8b284f174d90d2ca342d8f7d3f02 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Sat, 18 Jun 2016 23:13:33 +0200 Subject: [PATCH] PATROLZONE class + integration of PATROLZONE class in AIBALANCER class + documentation. --- Moose Development/Moose/AIBalancer.lua | 50 +- Moose Development/Moose/Group.lua | 9 +- Moose Development/Moose/Moose.lua | 1 + Moose Development/Moose/PatrolZone.lua | 214 ++- Moose Development/Moose/Point.lua | 98 +- Moose Development/Moose/Zone.lua | 77 +- .../l10n/DEFAULT/Moose.lua | 1430 ++++++++++++++++- Moose Mission Setup/Moose.lua | 1430 ++++++++++++++++- Moose Mission Setup/Moose_Create.bat | 2 + .../Moose_Test_AIBALANCER.lua | 7 +- .../Moose_Test_AIBALANCER.miz | Bin 146123 -> 21575 bytes .../MOOSE_Test_PATROLZONE.miz | Bin 0 -> 152459 bytes .../Moose_Test_PATROLZONE.lua | 8 + Moose Training/Documentation/AIBalancer.html | 64 +- Moose Training/Documentation/Airbase.html | 1 + .../Documentation/AirbasePolice.html | 1 + Moose Training/Documentation/Base.html | 1 + Moose Training/Documentation/CARGO.html | 1 + Moose Training/Documentation/CleanUp.html | 1 + Moose Training/Documentation/Client.html | 1 + Moose Training/Documentation/DCSAirbase.html | 1 + .../Documentation/DCSCoalitionObject.html | 1 + Moose Training/Documentation/DCSCommand.html | 1 + .../Documentation/DCSController.html | 1 + Moose Training/Documentation/DCSGroup.html | 1 + Moose Training/Documentation/DCSObject.html | 1 + Moose Training/Documentation/DCSTask.html | 1 + Moose Training/Documentation/DCSTypes.html | 1 + Moose Training/Documentation/DCSUnit.html | 1 + Moose Training/Documentation/DCSWorld.html | 1 + Moose Training/Documentation/DCStimer.html | 1 + Moose Training/Documentation/DEPLOYTASK.html | 1 + .../Documentation/DESTROYBASETASK.html | 1 + .../Documentation/DESTROYGROUPSTASK.html | 1 + .../Documentation/DESTROYRADARSTASK.html | 1 + .../Documentation/DESTROYUNITTYPESTASK.html | 1 + Moose Training/Documentation/Database.html | 1 + Moose Training/Documentation/Escort.html | 1 + Moose Training/Documentation/Event.html | 1 + Moose Training/Documentation/GOHOMETASK.html | 1 + Moose Training/Documentation/Group.html | 14 +- Moose Training/Documentation/MISSION.html | 1 + Moose Training/Documentation/MOVEMENT.html | 1 + Moose Training/Documentation/Menu.html | 1 + Moose Training/Documentation/Message.html | 1 + .../Documentation/MissileTrainer.html | 1 + Moose Training/Documentation/NOTASK.html | 1 + Moose Training/Documentation/PICKUPTASK.html | 1 + Moose Training/Documentation/PatrolZone.html | 698 ++++++++ Moose Training/Documentation/Point.html | 207 ++- Moose Training/Documentation/ROUTETASK.html | 1 + Moose Training/Documentation/STAGE.html | 1 + Moose Training/Documentation/Scheduler.html | 1 + Moose Training/Documentation/Scoring.html | 1 + Moose Training/Documentation/Sead.html | 1 + Moose Training/Documentation/Set.html | 1 + Moose Training/Documentation/Spawn.html | 1 + Moose Training/Documentation/Static.html | 1 + .../Documentation/StaticObject.html | 1 + Moose Training/Documentation/TASK.html | 1 + Moose Training/Documentation/Unit.html | 1 + Moose Training/Documentation/Zone.html | 189 +++ Moose Training/Documentation/env.html | 1 + Moose Training/Documentation/index.html | 7 + Moose Training/Documentation/land.html | 1 + Moose Training/Documentation/routines.html | 1 + 66 files changed, 4491 insertions(+), 61 deletions(-) create mode 100644 Moose Test Missions/Moose_Test_PATROLZONE/MOOSE_Test_PATROLZONE.miz create mode 100644 Moose Test Missions/Moose_Test_PATROLZONE/Moose_Test_PATROLZONE.lua create mode 100644 Moose Training/Documentation/PatrolZone.html diff --git a/Moose Development/Moose/AIBalancer.lua b/Moose Development/Moose/AIBalancer.lua index 394c7e7ff..6f51d5634 100644 --- a/Moose Development/Moose/AIBalancer.lua +++ b/Moose Development/Moose/AIBalancer.lua @@ -22,14 +22,8 @@ -- -- 1.3) AIBALANCER allows AI to patrol specific zones: -- --------------------------------------------------- --- Use @{AIBalancer#AIBALANCER.AddPatrolZone}() to specify zones where airplanes need patrol a zone ( @{Zone} ) for a specific time, at a specific altitude, with a specific speed. --- Multiple zones can be patrolled, calling @{AIBalancer#AIBALANCER.AddPatrolZone}() multiple times. The AI will patrol at a random zone in the list. --- And when the PatrolTime is finished, it will patrol another zone. +-- Use @{AIBalancer#AIBALANCER.SetPatrolZone}() to specify a zone where the AI needs to patrol. -- --- 1.4) AIRBALANCER manages AI out of fuel events: --- ----------------------------------------------- --- Once an AI is out of fuel, it will contact the home base, so that on time, a new replacement AI is spawned, while the old will orbit for a specific time and RTB. --- Use @{AIBalancer#AIBALANCER.GuardFuel}() to guard for each AI the fuel status. -- -- === -- @@ -40,8 +34,8 @@ -- James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-) -- -- **SNAFU** --- Had a couple of mails with the guys to validate, if the same concept in the GTI/CAP script could be reworked within MOOSE. --- Non of the script code has been used however within the new AIBALANCER moose class. +-- Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. +-- None of the script code has been used however within the new AIBALANCER moose class. -- -- @module AIBalancer -- @author FlightControl @@ -54,6 +48,7 @@ -- @field Set#SET_AIRBASE ReturnAirbaseSet -- @field DCSTypes#Distance ReturnTresholdRange -- @field #boolean ToHomeAirbase +-- @field PatrolZone#PATROLZONE PatrolZone -- @extends Base#BASE AIBALANCER = { ClassName = "AIBALANCER", @@ -119,6 +114,15 @@ function AIBALANCER:ReturnToHomeAirbase( ReturnTresholdRange ) self.ReturnTresholdRange = ReturnTresholdRange end +--- Let the AI patrol a @{Zone} with a given Speed range and Altitude range. +-- @param #AIBALANCER self +-- @param PatrolZone#PATROLZONE PatrolZone The @{PatrolZone} where the AI needs to patrol. +-- @return PatrolZone#PATROLZONE self +function AIBALANCER:SetPatrolZone( PatrolZone ) + + self.PatrolZone = PatrolZone +end + --- @param #AIBALANCER self function AIBALANCER:_ClientAliveMonitorScheduler() @@ -133,6 +137,12 @@ function AIBALANCER:_ClientAliveMonitorScheduler() local AIGroup = Client:GetState( self, 'AIGroup' ) -- Group#GROUP + local PatrolZone = Client:GetState( self, "PatrolZone" ) + if PatrolZone then + PatrolZone = nil + Client:ClearState( self, "PatrolZone" ) + end + if self.ToNearestAirbase == false and self.ToHomeAirbase == false then AIGroup:Destroy() else @@ -193,7 +203,27 @@ function AIBALANCER:_ClientAliveMonitorScheduler() -- OK, spawn a new group from the SpawnAI objects provided. local SpawnAICount = #self.SpawnAI local SpawnAIIndex = math.random( 1, SpawnAICount ) - Client:SetState( self, 'AIGroup', self.SpawnAI[SpawnAIIndex]:Spawn() ) + local AIGroup = self.SpawnAI[SpawnAIIndex]:Spawn() + Client:SetState( self, 'AIGroup', AIGroup ) + + --- Now test if the AIGroup needs to patrol a zone, otherwise let it follow its route... + if self.PatrolZone then + local PatrolZone = PATROLZONE:New( + self.PatrolZone.PatrolZone, + self.PatrolZone.PatrolFloorAltitude, + self.PatrolZone.PatrolCeilingAltitude, + self.PatrolZone.PatrolMinSpeed, + self.PatrolPatrolMaxSpeed + ) + + if self.PatrolZone.PatrolManageFuel == true then + PatrolZone:ManageFuel( self.PatrolZone.PatrolFuelTresholdPercentage, self.PatrolZone.PatrolOutOfFuelOrbitTime ) + end + + PatrolZone:SetGroup( AIGroup ) + + Client:SetState( self, "PatrolZone", PatrolZone ) + end end end end diff --git a/Moose Development/Moose/Group.lua b/Moose Development/Moose/Group.lua index 4e37bab40..014dc4ad8 100644 --- a/Moose Development/Moose/Group.lua +++ b/Moose Development/Moose/Group.lua @@ -494,10 +494,15 @@ end -- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. -- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! -- @param #GROUP self +-- @param #table WayPoints If WayPoints is given, then use the route. -- @return #GROUP -function GROUP:WayPointInitialize() +function GROUP:WayPointInitialize( WayPoints ) - self.WayPoints = self:GetTaskRoute() + if WayPoints then + self.WayPoints = WayPoints + else + self.WayPoints = self:GetTaskRoute() + end return self end diff --git a/Moose Development/Moose/Moose.lua b/Moose Development/Moose/Moose.lua index eb707c211..2bf95aae0 100644 --- a/Moose Development/Moose/Moose.lua +++ b/Moose Development/Moose/Moose.lua @@ -36,6 +36,7 @@ Include.File( "Movement" ) Include.File( "Sead" ) Include.File( "Escort" ) Include.File( "MissileTrainer" ) +Include.File( "PatrolZone" ) Include.File( "AIBalancer" ) Include.File( "AirbasePolice" ) diff --git a/Moose Development/Moose/PatrolZone.lua b/Moose Development/Moose/PatrolZone.lua index 2d0cbc23a..eed11a231 100644 --- a/Moose Development/Moose/PatrolZone.lua +++ b/Moose Development/Moose/PatrolZone.lua @@ -14,8 +14,17 @@ -- -------------------------------------- -- The following methods are available to modify the parameters of a PATROLZONE object: -- --- * @{PatrolZone#PATROLZONE.SetSpeed}(): Set the patrol speed of the AI, while patrolling. --- * @{PatrolZone#PATROLZONE.SetAltitude}(): Set altitude of the AI, while patrolling. +-- * @{PatrolZone#PATROLZONE.SetGroup}(): Set the AI Patrol Group. +-- * @{PatrolZone#PATROLZONE.SetSpeed}(): Set the patrol speed of the AI, for the next patrol. +-- * @{PatrolZone#PATROLZONE.SetAltitude}(): Set altitude of the AI, for the next patrol. +-- +-- 1.3) Manage the out of fuel in the PATROLZONE: +-- ---------------------------------------------- +-- When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +-- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +-- When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +-- Once the time is finished, the old PatrolGroup will return to the base. +-- Use the method @{PatrolZone#PATROLZONE.ManageFuel}() to have this proces in place. -- -- === -- @@ -25,6 +34,12 @@ --- PATROLZONE class -- @type PATROLZONE +-- @field Group#GROUP PatrolGroup The @{Group} patrolling. +-- @field Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. +-- @field DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @field DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @field DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @field DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. -- @extends Base#BASE PATROLZONE = { ClassName = "PATROLZONE", @@ -32,7 +47,6 @@ PATROLZONE = { --- Creates a new PATROLZONE object, taking a @{Group} object as a parameter. The GROUP needs to be alive. -- @param #PATROLZONE self --- @param Group#GROUP PatrolGroup The @{Group} patrolling. -- @param Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. -- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. -- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. @@ -44,12 +58,11 @@ PATROLZONE = { -- PatrolZone = ZONE:New( 'PatrolZone' ) -- PatrolGroup = GROUP:FindByName( "Patrol Group" ) -- PatrolArea = PATROLZONE:New( PatrolGroup, PatrolZone, 3000, 6000, 600, 900 ) -function PATROLZONE:New( PatrolGroup, PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) +function PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) - self.PatrolGroup = PatrolGroup self.PatrolZone = PatrolZone self.PatrolFloorAltitude = PatrolFloorAltitude self.PatrolCeilingAltitude = PatrolCeilingAltitude @@ -58,3 +71,194 @@ function PATROLZONE:New( PatrolGroup, PatrolZone, PatrolFloorAltitude, PatrolCei return self end + +--- Set the @{Group} to act as the Patroller. +-- @param #PATROLZONE self +-- @param Group#GROUP PatrolGroup The @{Group} patrolling. +-- @return #PATROLZONE self +function PATROLZONE:SetGroup( PatrolGroup ) + + self.PatrolGroup = PatrolGroup + self.PatrolGroupTemplateName = PatrolGroup:GetName() + self:NewPatrolRoute() + + if not self.PatrolOutOfFuelMonitor then + self.PatrolOutOfFuelMonitor = SCHEDULER:New( self, self._MonitorOutOfFuelScheduled, {}, 60, 120, 0.2 ) + self.SpawnPatrolGroup = SPAWN:New( self.PatrolGroupTemplateName ) + end + + return self +end + +--- Sets (modifies) the minimum and maximum speed of the patrol. +-- @param #PATROLZONE self +-- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @return #PATROLZONE self +function PATROLZONE:SetSpeed( PatrolMinSpeed, PatrolMaxSpeed ) + self:F2( { PatrolMinSpeed, PatrolMaxSpeed } ) + + self.PatrolMinSpeed = PatrolMinSpeed + self.PatrolMaxSpeed = PatrolMaxSpeed +end + +--- Sets the floor and ceiling altitude of the patrol. +-- @param #PATROLZONE self +-- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @return #PATROLZONE self +function PATROLZONE:SetAltitude( PatrolFloorAltitude, PatrolCeilingAltitude ) + self:F2( { PatrolFloorAltitude, PatrolCeilingAltitude } ) + + self.PatrolFloorAltitude = PatrolFloorAltitude + self.PatrolCeilingAltitude = PatrolCeilingAltitude +end + + + +--- @param Group#GROUP PatrolGroup +function _NewPatrolRoute( PatrolGroup ) + + PatrolGroup:T( "NewPatrolRoute" ) + local PatrolZone = PatrolGroup:GetState( PatrolGroup, "PatrolZone" ) -- PatrolZone#PATROLZONE + PatrolZone:NewPatrolRoute() +end + +--- Defines a new patrol route using the @{PatrolZone} parameters and settings. +-- @param #PATROLZONE self +-- @return #PATROLZONE self +function PATROLZONE:NewPatrolRoute() + + self:F2() + + local PatrolRoute = {} + + if self.PatrolGroup:IsAlive() then + --- Determine if the PatrolGroup is within the PatrolZone. + -- If not, make a waypoint within the to that the PatrolGroup will fly at maximum speed to that point. + +-- --- Calculate the current route point. +-- local CurrentVec2 = self.PatrolGroup:GetPointVec2() +-- local CurrentAltitude = self.PatrolGroup:GetUnit(1):GetAltitude() +-- local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) +-- local CurrentRoutePoint = CurrentPointVec3:RoutePointAir( +-- POINT_VEC3.RoutePointAltType.BARO, +-- POINT_VEC3.RoutePointType.TurningPoint, +-- POINT_VEC3.RoutePointAction.TurningPoint, +-- ToPatrolZoneSpeed, +-- true +-- ) +-- +-- PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint + + self:T2( PatrolRoute ) + + if self.PatrolGroup:IsNotInZone( self.PatrolZone ) then + --- Find a random 2D point in PatrolZone. + local ToPatrolZoneVec2 = self.PatrolZone:GetRandomVec2() + self:T2( ToPatrolZoneVec2 ) + + --- Define Speed and Altitude. + local ToPatrolZoneAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ) + local ToPatrolZoneSpeed = self.PatrolMaxSpeed + + --- Obtain a 3D @{Point} from the 2D point + altitude. + self:T2( ToPatrolZoneVec2.x ) + self:T2( ToPatrolZoneVec2.y ) + local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y ) + + --- Create a route point of type air. + local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir( + POINT_VEC3.RoutePointAltType.BARO, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToPatrolZoneSpeed, + true + ) + + PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint + + end + + --- Define a random point in the @{Zone}. The AI will fly to that point within the zone. + + --- Find a random 2D point in PatrolZone. + local ToTargetVec2 = self.PatrolZone:GetRandomVec2() + self:T2( ToTargetVec2 ) + + --- Define Speed and Altitude. + local ToTargetAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ) + local ToTargetSpeed = math.random( self.PatrolMinSpeed, self.PatrolMaxSpeed ) + + --- Obtain a 3D @{Point} from the 2D point + altitude. + local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) + + --- Create a route point of type air. + local ToTargetRoutePoint = ToTargetPointVec3:RoutePointAir( + POINT_VEC3.RoutePointAltType.BARO, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToTargetSpeed, + true + ) + + ToTargetPointVec3:SmokeRed() + + PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint + + --- Now we're going to do something special, we're going to call a function from a waypoint action at the PatrolGroup... + self.PatrolGroup:WayPointInitialize( PatrolRoute ) + + --- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the PatrolGroupin a temporary variable ... + self.PatrolGroup:SetState( self.PatrolGroup, "PatrolZone", self ) + self.PatrolGroup:WayPointFunction( #PatrolRoute, 1, "_NewPatrolRoute" ) + + --- NOW ROUTE THE GROUP! + self.PatrolGroup:WayPointExecute( 1, 2 ) + end + +end + +--- When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +-- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +-- When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +-- Once the time is finished, the old PatrolGroup will return to the base. +-- @param #PATROLZONE self +-- @param #number PatrolFuelTresholdPercentage The treshold in percentage (between 0 and 1) when the PatrolGroup is considered to get out of fuel. +-- @param #number PatrolOutOfFuelOrbitTime The amount of seconds the out of fuel PatrolGroup will orbit before returning to the base. +-- @return #PATROLZONE self +function PATROLZONE:ManageFuel( PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime ) + + self.PatrolManageFuel = true + self.PatrolFuelTresholdPercentage = PatrolFuelTresholdPercentage + self.PatrolOutOfFuelOrbitTime = PatrolOutOfFuelOrbitTime + + if self.PatrolGroup then + self.PatrolOutOfFuelMonitor = SCHEDULER:New( self, self._MonitorOutOfFuelScheduled, {}, 60, 120, 0.2 ) + self.SpawnPatrolGroup = SPAWN:New( self.PatrolGroupTemplateName ) + end + return self +end + +--- @param #PATROLZONE self +function PATROLZONE:_MonitorOutOfFuelScheduled() + + if self.PatrolGroup and self.PatrolGroup:IsAlive() then + + local Fuel = self.PatrolGroup:GetUnit(1):GetFuel() + if Fuel < self.PatrolFuelTresholdPercentage then + local OldPatrolGroup = self.PatrolGroup + local PatrolGroupTemplate = self.PatrolGroup:GetTemplate() + + local OrbitTask = OldPatrolGroup:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed ) + local TimedOrbitTask = OldPatrolGroup:TaskControlled( OrbitTask, OldPatrolGroup:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) ) + OldPatrolGroup:SetTask( TimedOrbitTask, 10 ) + + local NewPatrolGroup = self.SpawnPatrolGroup:Spawn() + self.PatrolGroup = NewPatrolGroup + self:NewPatrolRoute() + end + else + self.PatrolOutOfFuelMonitor:Stop() + end +end \ No newline at end of file diff --git a/Moose Development/Moose/Point.lua b/Moose Development/Moose/Point.lua index e74c749e9..9573b06e7 100644 --- a/Moose Development/Moose/Point.lua +++ b/Moose Development/Moose/Point.lua @@ -30,6 +30,9 @@ -- @extends Base#BASE -- @field #POINT_VEC3.SmokeColor SmokeColor -- @field #POINT_VEC3.FlareColor FlareColor +-- @field #POINT_VEC3.RoutePointAltType RoutePointAltType +-- @field #POINT_VEC3.RoutePointType RoutePointType +-- @field #POINT_VEC3.RoutePointAction RoutePointAction POINT_VEC3 = { ClassName = "POINT_VEC3", SmokeColor = { @@ -38,14 +41,24 @@ POINT_VEC3 = { White = trigger.smokeColor.White, Orange = trigger.smokeColor.Orange, Blue = trigger.smokeColor.Blue - }, + }, FlareColor = { Green = trigger.flareColor.Green, Red = trigger.flareColor.Red, White = trigger.flareColor.White, Yellow = trigger.flareColor.Yellow - }, - } + }, + RoutePointAltType = { + BARO = "BARO", + }, + RoutePointType = { + TurningPoint = "Turning Point", + }, + RoutePointAction = { + TurningPoint = "Turning Point", + }, +} + --- SmokeColor -- @type POINT_VEC3.SmokeColor @@ -55,6 +68,8 @@ POINT_VEC3 = { -- @field Orange -- @field Blue + + --- FlareColor -- @type POINT_VEC3.FlareColor -- @field Green @@ -62,6 +77,26 @@ POINT_VEC3 = { -- @field White -- @field Yellow + + +--- RoutePoint AltTypes +-- @type POINT_VEC3.RoutePointAltType +-- @field BARO "BARO" + + + +--- RoutePoint Types +-- @type POINT_VEC3.RoutePointType +-- @field TurningPoint "Turning Point" + + + +--- RoutePoint Actions +-- @type POINT_VEC3.RoutePointAction +-- @field TurningPoint "Turning Point" + + + -- Constructor. --- Create a new POINT_VEC3 object. @@ -69,15 +104,68 @@ POINT_VEC3 = { -- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. -- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing Upwards. -- @param DCSTypes#Distance z The z coordinate of the Vec3 point, pointing to the Right. --- @return Point#POINT_VEC3 +-- @return Point#POINT_VEC3 self function POINT_VEC3:New( x, y, z ) local self = BASE:Inherit( self, BASE:New() ) - self:F2( { x, y, z } ) self.PointVec3 = { x = x, y = y, z = z } + self:F2( self.PointVec3 ) return self end + +--- Build an air type route point. +-- @param #POINT_VEC3 self +-- @param #POINT_VEC3.RoutePointAltType AltType The altitude type. +-- @param #POINT_VEC3.RoutePointType Type The route point type. +-- @param #POINT_VEC3.RoutePointAction Action The route point action. +-- @param DCSTypes#Speed Speed Airspeed in km/h. +-- @param #boolean SpeedLocked true means the speed is locked. +-- @return #table The route point. +function POINT_VEC3:RoutePointAir( AltType, Type, Action, Speed, SpeedLocked ) + + local RoutePoint = {} + RoutePoint.x = self.PointVec3.x + RoutePoint.y = self.PointVec3.z + RoutePoint.alt = self.PointVec3.y + RoutePoint.alt_type = AltType + + RoutePoint.type = Type + RoutePoint.action = Action + + RoutePoint.speed = Speed + RoutePoint.speed_locked = true + + RoutePoint.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + +-- ["task"] = +-- { +-- ["id"] = "ComboTask", +-- ["params"] = +-- { +-- ["tasks"] = +-- { +-- }, -- end of ["tasks"] +-- }, -- end of ["params"] +-- }, -- end of ["task"] + + + RoutePoint.task = {} + RoutePoint.task.id = "ComboTask" + RoutePoint.task.params = {} + RoutePoint.task.params.tasks = {} + + + return RoutePoint +end + + --- Smokes the point in a color. -- @param #POINT_VEC3 self -- @param Point#POINT_VEC3.SmokeColor SmokeColor diff --git a/Moose Development/Moose/Zone.lua b/Moose Development/Moose/Zone.lua index b7bec347b..843539077 100644 --- a/Moose Development/Moose/Zone.lua +++ b/Moose Development/Moose/Zone.lua @@ -77,6 +77,15 @@ ZONE_BASE = { ClassName = "ZONE_BASE", } + +--- The ZONE_BASE.BoundingSquare +-- @type ZONE_BASE.BoundingSquare +-- @field DCSTypes#Distance x1 The lower x coordinate (left down) +-- @field DCSTypes#Distance y1 The lower y coordinate (left down) +-- @field DCSTypes#Distance x2 The higher x coordinate (right up) +-- @field DCSTypes#Distance y2 The higher y coordinate (right up) + + --- ZONE_BASE constructor -- @param #ZONE_BASE self -- @param #string ZoneName Name of the zone. @@ -91,7 +100,7 @@ function ZONE_BASE:New( ZoneName ) end --- Returns if a location is within the zone. --- @param #ZONE_RADIUS self +-- @param #ZONE_BASE self -- @param DCSTypes#Vec2 PointVec2 The location to test. -- @return #boolean true if the location is within the zone. function ZONE_BASE:IsPointVec2InZone( PointVec2 ) @@ -101,7 +110,7 @@ function ZONE_BASE:IsPointVec2InZone( PointVec2 ) end --- Returns if a point is within the zone. --- @param #ZONE_RADIUS self +-- @param #ZONE_BASE self -- @param DCSTypes#Vec3 PointVec3 The point to test. -- @return #boolean true if the point is within the zone. function ZONE_BASE:IsPointVec3InZone( PointVec3 ) @@ -112,6 +121,21 @@ function ZONE_BASE:IsPointVec3InZone( PointVec3 ) return InZone end +--- Define a random @{DCSTypes#Vec2} within the zone. +-- @param #ZONE_BASE self +-- @return DCSTypes#Vec2 The Vec2 coordinates. +function ZONE_BASE:GetRandomVec2() + return { x = 0, y = 0 } +end + +--- Get the bounding square the zone. +-- @param #ZONE_BASE self +-- @return #ZONE_BASE.BoundingSquare The bounding square. +function ZONE_BASE:GetBoundingSquare() + return { x1 = 0, y1 = 0, x2 = 0, y2 = 0 } +end + + --- Smokes the zone boundaries in a color. -- @param #ZONE_BASE self -- @param SmokeColor The smoke color. @@ -495,6 +519,55 @@ function ZONE_POLYGON_BASE:IsPointVec2InZone( PointVec2 ) return c end +--- Define a random @{DCSTypes#Vec2} within the zone. +-- @param #ZONE_POLYGON_BASE self +-- @return DCSTypes#Vec2 The Vec2 coordinate. +function ZONE_POLYGON_BASE:GetRandomVec2() + self:F2() + + --- It is a bit tricky to find a random point within a polygon. Right now i am doing it the dirty and inefficient way... + local Vec2Found = false + local Vec2 + local BS = self:GetBoundingSquare() + + self:T2( BS ) + + while Vec2Found == false do + Vec2 = { x = math.random( BS.x1, BS.x2 ), y = math.random( BS.y1, BS.y2 ) } + self:T2( Vec2 ) + if self:IsPointVec2InZone( Vec2 ) then + Vec2Found = true + end + end + + self:T2( Vec2 ) + + return Vec2 +end + +--- Get the bounding square the zone. +-- @param #ZONE_POLYGON_BASE self +-- @return #ZONE_POLYGON_BASE.BoundingSquare The bounding square. +function ZONE_POLYGON_BASE:GetBoundingSquare() + + local x1 = self.Polygon[1].x + local y1 = self.Polygon[1].y + local x2 = self.Polygon[1].x + local y2 = self.Polygon[1].y + + for i = 2, #self.Polygon do + self:T2( { self.Polygon[i], x1, y1, x2, y2 } ) + x1 = ( x1 > self.Polygon[i].x ) and self.Polygon[i].x or x1 + x2 = ( x2 < self.Polygon[i].x ) and self.Polygon[i].x or x2 + y1 = ( y1 > self.Polygon[i].y ) and self.Polygon[i].y or y1 + y2 = ( y2 < self.Polygon[i].y ) and self.Polygon[i].y or y2 + + end + + return { x1 = x1, y1 = y1, x2 = x2, y2 = y2 } +end + + diff --git a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua index 1c6b5946f..45d0c09ee 100644 --- a/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua +++ b/Moose Mission Setup/Moose Mission Update/l10n/DEFAULT/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160618_1019' ) +env.info( 'Moose Generation Timestamp: 20160618_2312' ) local base = _G Include = {} @@ -4675,10 +4675,15 @@ end -- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. -- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! -- @param #GROUP self +-- @param #table WayPoints If WayPoints is given, then use the route. -- @return #GROUP -function GROUP:WayPointInitialize() +function GROUP:WayPointInitialize( WayPoints ) - self.WayPoints = self:GetTaskRoute() + if WayPoints then + self.WayPoints = WayPoints + else + self.WayPoints = self:GetTaskRoute() + end return self end @@ -7995,6 +8000,15 @@ ZONE_BASE = { ClassName = "ZONE_BASE", } + +--- The ZONE_BASE.BoundingSquare +-- @type ZONE_BASE.BoundingSquare +-- @field DCSTypes#Distance x1 The lower x coordinate (left down) +-- @field DCSTypes#Distance y1 The lower y coordinate (left down) +-- @field DCSTypes#Distance x2 The higher x coordinate (right up) +-- @field DCSTypes#Distance y2 The higher y coordinate (right up) + + --- ZONE_BASE constructor -- @param #ZONE_BASE self -- @param #string ZoneName Name of the zone. @@ -8009,7 +8023,7 @@ function ZONE_BASE:New( ZoneName ) end --- Returns if a location is within the zone. --- @param #ZONE_RADIUS self +-- @param #ZONE_BASE self -- @param DCSTypes#Vec2 PointVec2 The location to test. -- @return #boolean true if the location is within the zone. function ZONE_BASE:IsPointVec2InZone( PointVec2 ) @@ -8019,7 +8033,7 @@ function ZONE_BASE:IsPointVec2InZone( PointVec2 ) end --- Returns if a point is within the zone. --- @param #ZONE_RADIUS self +-- @param #ZONE_BASE self -- @param DCSTypes#Vec3 PointVec3 The point to test. -- @return #boolean true if the point is within the zone. function ZONE_BASE:IsPointVec3InZone( PointVec3 ) @@ -8030,6 +8044,21 @@ function ZONE_BASE:IsPointVec3InZone( PointVec3 ) return InZone end +--- Define a random @{DCSTypes#Vec2} within the zone. +-- @param #ZONE_BASE self +-- @return DCSTypes#Vec2 The Vec2 coordinates. +function ZONE_BASE:GetRandomVec2() + return { x = 0, y = 0 } +end + +--- Get the bounding square the zone. +-- @param #ZONE_BASE self +-- @return #ZONE_BASE.BoundingSquare The bounding square. +function ZONE_BASE:GetBoundingSquare() + return { x1 = 0, y1 = 0, x2 = 0, y2 = 0 } +end + + --- Smokes the zone boundaries in a color. -- @param #ZONE_BASE self -- @param SmokeColor The smoke color. @@ -8413,6 +8442,55 @@ function ZONE_POLYGON_BASE:IsPointVec2InZone( PointVec2 ) return c end +--- Define a random @{DCSTypes#Vec2} within the zone. +-- @param #ZONE_POLYGON_BASE self +-- @return DCSTypes#Vec2 The Vec2 coordinate. +function ZONE_POLYGON_BASE:GetRandomVec2() + self:F2() + + --- It is a bit tricky to find a random point within a polygon. Right now i am doing it the dirty and inefficient way... + local Vec2Found = false + local Vec2 + local BS = self:GetBoundingSquare() + + self:T2( BS ) + + while Vec2Found == false do + Vec2 = { x = math.random( BS.x1, BS.x2 ), y = math.random( BS.y1, BS.y2 ) } + self:T2( Vec2 ) + if self:IsPointVec2InZone( Vec2 ) then + Vec2Found = true + end + end + + self:T2( Vec2 ) + + return Vec2 +end + +--- Get the bounding square the zone. +-- @param #ZONE_POLYGON_BASE self +-- @return #ZONE_POLYGON_BASE.BoundingSquare The bounding square. +function ZONE_POLYGON_BASE:GetBoundingSquare() + + local x1 = self.Polygon[1].x + local y1 = self.Polygon[1].y + local x2 = self.Polygon[1].x + local y2 = self.Polygon[1].y + + for i = 2, #self.Polygon do + self:T2( { self.Polygon[i], x1, y1, x2, y2 } ) + x1 = ( x1 > self.Polygon[i].x ) and self.Polygon[i].x or x1 + x2 = ( x2 < self.Polygon[i].x ) and self.Polygon[i].x or x2 + y1 = ( y1 > self.Polygon[i].y ) and self.Polygon[i].y or y1 + y2 = ( y2 < self.Polygon[i].y ) and self.Polygon[i].y or y2 + + end + + return { x1 = x1, y1 = y1, x2 = x2, y2 = y2 } +end + + @@ -10315,8 +10393,6 @@ SET_BASE = { -- DBObject = SET_BASE:New() function SET_BASE:New( Database ) - env.info( tostring( Database ) ) - -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) @@ -11982,6 +12058,9 @@ end -- @extends Base#BASE -- @field #POINT_VEC3.SmokeColor SmokeColor -- @field #POINT_VEC3.FlareColor FlareColor +-- @field #POINT_VEC3.RoutePointAltType RoutePointAltType +-- @field #POINT_VEC3.RoutePointType RoutePointType +-- @field #POINT_VEC3.RoutePointAction RoutePointAction POINT_VEC3 = { ClassName = "POINT_VEC3", SmokeColor = { @@ -11990,14 +12069,24 @@ POINT_VEC3 = { White = trigger.smokeColor.White, Orange = trigger.smokeColor.Orange, Blue = trigger.smokeColor.Blue - }, + }, FlareColor = { Green = trigger.flareColor.Green, Red = trigger.flareColor.Red, White = trigger.flareColor.White, Yellow = trigger.flareColor.Yellow - }, - } + }, + RoutePointAltType = { + BARO = "BARO", + }, + RoutePointType = { + TurningPoint = "Turning Point", + }, + RoutePointAction = { + TurningPoint = "Turning Point", + }, +} + --- SmokeColor -- @type POINT_VEC3.SmokeColor @@ -12007,6 +12096,8 @@ POINT_VEC3 = { -- @field Orange -- @field Blue + + --- FlareColor -- @type POINT_VEC3.FlareColor -- @field Green @@ -12014,6 +12105,26 @@ POINT_VEC3 = { -- @field White -- @field Yellow + + +--- RoutePoint AltTypes +-- @type POINT_VEC3.RoutePointAltType +-- @field BARO "BARO" + + + +--- RoutePoint Types +-- @type POINT_VEC3.RoutePointType +-- @field TurningPoint "Turning Point" + + + +--- RoutePoint Actions +-- @type POINT_VEC3.RoutePointAction +-- @field TurningPoint "Turning Point" + + + -- Constructor. --- Create a new POINT_VEC3 object. @@ -12021,15 +12132,68 @@ POINT_VEC3 = { -- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. -- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing Upwards. -- @param DCSTypes#Distance z The z coordinate of the Vec3 point, pointing to the Right. --- @return Point#POINT_VEC3 +-- @return Point#POINT_VEC3 self function POINT_VEC3:New( x, y, z ) local self = BASE:Inherit( self, BASE:New() ) - self:F2( { x, y, z } ) self.PointVec3 = { x = x, y = y, z = z } + self:F2( self.PointVec3 ) return self end + +--- Build an air type route point. +-- @param #POINT_VEC3 self +-- @param #POINT_VEC3.RoutePointAltType AltType The altitude type. +-- @param #POINT_VEC3.RoutePointType Type The route point type. +-- @param #POINT_VEC3.RoutePointAction Action The route point action. +-- @param DCSTypes#Speed Speed Airspeed in km/h. +-- @param #boolean SpeedLocked true means the speed is locked. +-- @return #table The route point. +function POINT_VEC3:RoutePointAir( AltType, Type, Action, Speed, SpeedLocked ) + + local RoutePoint = {} + RoutePoint.x = self.PointVec3.x + RoutePoint.y = self.PointVec3.z + RoutePoint.alt = self.PointVec3.y + RoutePoint.alt_type = AltType + + RoutePoint.type = Type + RoutePoint.action = Action + + RoutePoint.speed = Speed + RoutePoint.speed_locked = true + + RoutePoint.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + +-- ["task"] = +-- { +-- ["id"] = "ComboTask", +-- ["params"] = +-- { +-- ["tasks"] = +-- { +-- }, -- end of ["tasks"] +-- }, -- end of ["params"] +-- }, -- end of ["task"] + + + RoutePoint.task = {} + RoutePoint.task.id = "ComboTask" + RoutePoint.task.params = {} + RoutePoint.task.params.tasks = {} + + + return RoutePoint +end + + --- Smokes the point in a color. -- @param #POINT_VEC3 self -- @param Point#POINT_VEC3.SmokeColor SmokeColor @@ -12208,6 +12372,7 @@ Include.File( "Movement" ) Include.File( "Sead" ) Include.File( "Escort" ) Include.File( "MissileTrainer" ) +Include.File( "PatrolZone" ) Include.File( "AIBalancer" ) Include.File( "AirbasePolice" ) @@ -20951,7 +21116,270 @@ function MISSILETRAINER:_TrackMissiles() return true end ---- This module contains the AIBALANCER class. +--- This module contains the PATROLZONE class. +-- +-- === +-- +-- 1) @{Patrol#PATROLZONE} class, extends @{Base#BASE} +-- =================================================== +-- The @{Patrol#PATROLZONE} class implements the core functions to patrol a @{Zone}. +-- +-- 1.1) PATROLZONE constructor: +-- ---------------------------- +-- @{PatrolZone#PATROLZONE.New}(): Creates a new PATROLZONE object. +-- +-- 1.2) Modify the PATROLZONE parameters: +-- -------------------------------------- +-- The following methods are available to modify the parameters of a PATROLZONE object: +-- +-- * @{PatrolZone#PATROLZONE.SetGroup}(): Set the AI Patrol Group. +-- * @{PatrolZone#PATROLZONE.SetSpeed}(): Set the patrol speed of the AI, for the next patrol. +-- * @{PatrolZone#PATROLZONE.SetAltitude}(): Set altitude of the AI, for the next patrol. +-- +-- 1.3) Manage the out of fuel in the PATROLZONE: +-- ---------------------------------------------- +-- When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +-- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +-- When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +-- Once the time is finished, the old PatrolGroup will return to the base. +-- Use the method @{PatrolZone#PATROLZONE.ManageFuel}() to have this proces in place. +-- +-- === +-- +-- @module PatrolZone +-- @author FlightControl + + +--- PATROLZONE class +-- @type PATROLZONE +-- @field Group#GROUP PatrolGroup The @{Group} patrolling. +-- @field Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. +-- @field DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @field DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @field DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @field DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @extends Base#BASE +PATROLZONE = { + ClassName = "PATROLZONE", +} + +--- Creates a new PATROLZONE object, taking a @{Group} object as a parameter. The GROUP needs to be alive. +-- @param #PATROLZONE self +-- @param Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. +-- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @return #PATROLZONE self +-- @usage +-- -- Define a new PATROLZONE Object. This PatrolArea will patrol a group within PatrolZone between 3000 and 6000 meters, with a variying speed between 600 and 900 km/h. +-- PatrolZone = ZONE:New( 'PatrolZone' ) +-- PatrolGroup = GROUP:FindByName( "Patrol Group" ) +-- PatrolArea = PATROLZONE:New( PatrolGroup, PatrolZone, 3000, 6000, 600, 900 ) +function PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + self.PatrolZone = PatrolZone + self.PatrolFloorAltitude = PatrolFloorAltitude + self.PatrolCeilingAltitude = PatrolCeilingAltitude + self.PatrolMinSpeed = PatrolMinSpeed + self.PatrolMaxSpeed = PatrolMaxSpeed + + return self +end + +--- Set the @{Group} to act as the Patroller. +-- @param #PATROLZONE self +-- @param Group#GROUP PatrolGroup The @{Group} patrolling. +-- @return #PATROLZONE self +function PATROLZONE:SetGroup( PatrolGroup ) + + self.PatrolGroup = PatrolGroup + self.PatrolGroupTemplateName = PatrolGroup:GetName() + self:NewPatrolRoute() + + if not self.PatrolOutOfFuelMonitor then + self.PatrolOutOfFuelMonitor = SCHEDULER:New( self, self._MonitorOutOfFuelScheduled, {}, 60, 120, 0.2 ) + self.SpawnPatrolGroup = SPAWN:New( self.PatrolGroupTemplateName ) + end + + return self +end + +--- Sets (modifies) the minimum and maximum speed of the patrol. +-- @param #PATROLZONE self +-- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @return #PATROLZONE self +function PATROLZONE:SetSpeed( PatrolMinSpeed, PatrolMaxSpeed ) + self:F2( { PatrolMinSpeed, PatrolMaxSpeed } ) + + self.PatrolMinSpeed = PatrolMinSpeed + self.PatrolMaxSpeed = PatrolMaxSpeed +end + +--- Sets the floor and ceiling altitude of the patrol. +-- @param #PATROLZONE self +-- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @return #PATROLZONE self +function PATROLZONE:SetAltitude( PatrolFloorAltitude, PatrolCeilingAltitude ) + self:F2( { PatrolFloorAltitude, PatrolCeilingAltitude } ) + + self.PatrolFloorAltitude = PatrolFloorAltitude + self.PatrolCeilingAltitude = PatrolCeilingAltitude +end + + + +--- @param Group#GROUP PatrolGroup +function _NewPatrolRoute( PatrolGroup ) + + PatrolGroup:T( "NewPatrolRoute" ) + local PatrolZone = PatrolGroup:GetState( PatrolGroup, "PatrolZone" ) -- PatrolZone#PATROLZONE + PatrolZone:NewPatrolRoute() +end + +--- Defines a new patrol route using the @{PatrolZone} parameters and settings. +-- @param #PATROLZONE self +-- @return #PATROLZONE self +function PATROLZONE:NewPatrolRoute() + + self:F2() + + local PatrolRoute = {} + + if self.PatrolGroup:IsAlive() then + --- Determine if the PatrolGroup is within the PatrolZone. + -- If not, make a waypoint within the to that the PatrolGroup will fly at maximum speed to that point. + +-- --- Calculate the current route point. +-- local CurrentVec2 = self.PatrolGroup:GetPointVec2() +-- local CurrentAltitude = self.PatrolGroup:GetUnit(1):GetAltitude() +-- local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) +-- local CurrentRoutePoint = CurrentPointVec3:RoutePointAir( +-- POINT_VEC3.RoutePointAltType.BARO, +-- POINT_VEC3.RoutePointType.TurningPoint, +-- POINT_VEC3.RoutePointAction.TurningPoint, +-- ToPatrolZoneSpeed, +-- true +-- ) +-- +-- PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint + + self:T2( PatrolRoute ) + + if self.PatrolGroup:IsNotInZone( self.PatrolZone ) then + --- Find a random 2D point in PatrolZone. + local ToPatrolZoneVec2 = self.PatrolZone:GetRandomVec2() + self:T2( ToPatrolZoneVec2 ) + + --- Define Speed and Altitude. + local ToPatrolZoneAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ) + local ToPatrolZoneSpeed = self.PatrolMaxSpeed + + --- Obtain a 3D @{Point} from the 2D point + altitude. + self:T2( ToPatrolZoneVec2.x ) + self:T2( ToPatrolZoneVec2.y ) + local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y ) + + --- Create a route point of type air. + local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir( + POINT_VEC3.RoutePointAltType.BARO, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToPatrolZoneSpeed, + true + ) + + PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint + + end + + --- Define a random point in the @{Zone}. The AI will fly to that point within the zone. + + --- Find a random 2D point in PatrolZone. + local ToTargetVec2 = self.PatrolZone:GetRandomVec2() + self:T2( ToTargetVec2 ) + + --- Define Speed and Altitude. + local ToTargetAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ) + local ToTargetSpeed = math.random( self.PatrolMinSpeed, self.PatrolMaxSpeed ) + + --- Obtain a 3D @{Point} from the 2D point + altitude. + local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) + + --- Create a route point of type air. + local ToTargetRoutePoint = ToTargetPointVec3:RoutePointAir( + POINT_VEC3.RoutePointAltType.BARO, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToTargetSpeed, + true + ) + + ToTargetPointVec3:SmokeRed() + + PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint + + --- Now we're going to do something special, we're going to call a function from a waypoint action at the PatrolGroup... + self.PatrolGroup:WayPointInitialize( PatrolRoute ) + + --- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the PatrolGroupin a temporary variable ... + self.PatrolGroup:SetState( self.PatrolGroup, "PatrolZone", self ) + self.PatrolGroup:WayPointFunction( #PatrolRoute, 1, "_NewPatrolRoute" ) + + --- NOW ROUTE THE GROUP! + self.PatrolGroup:WayPointExecute( 1, 2 ) + end + +end + +--- When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +-- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +-- When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +-- Once the time is finished, the old PatrolGroup will return to the base. +-- @param #PATROLZONE self +-- @param #number PatrolFuelTresholdPercentage The treshold in percentage (between 0 and 1) when the PatrolGroup is considered to get out of fuel. +-- @param #number PatrolOutOfFuelOrbitTime The amount of seconds the out of fuel PatrolGroup will orbit before returning to the base. +-- @return #PATROLZONE self +function PATROLZONE:ManageFuel( PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime ) + + self.PatrolManageFuel = true + self.PatrolFuelTresholdPercentage = PatrolFuelTresholdPercentage + self.PatrolOutOfFuelOrbitTime = PatrolOutOfFuelOrbitTime + + if self.PatrolGroup then + self.PatrolOutOfFuelMonitor = SCHEDULER:New( self, self._MonitorOutOfFuelScheduled, {}, 60, 120, 0.2 ) + self.SpawnPatrolGroup = SPAWN:New( self.PatrolGroupTemplateName ) + end + return self +end + +--- @param #PATROLZONE self +function PATROLZONE:_MonitorOutOfFuelScheduled() + + if self.PatrolGroup and self.PatrolGroup:IsAlive() then + + local Fuel = self.PatrolGroup:GetUnit(1):GetFuel() + if Fuel < self.PatrolFuelTresholdPercentage then + local OldPatrolGroup = self.PatrolGroup + local PatrolGroupTemplate = self.PatrolGroup:GetTemplate() + + local OrbitTask = OldPatrolGroup:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed ) + local TimedOrbitTask = OldPatrolGroup:TaskControlled( OrbitTask, OldPatrolGroup:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) ) + OldPatrolGroup:SetTask( TimedOrbitTask, 10 ) + + local NewPatrolGroup = self.SpawnPatrolGroup:Spawn() + self.PatrolGroup = NewPatrolGroup + self:NewPatrolRoute() + end + else + self.PatrolOutOfFuelMonitor:Stop() + end +end--- This module contains the AIBALANCER class. -- -- === -- @@ -20966,13 +21394,18 @@ end -- -- * @{#AIBALANCER.New}: Creates a new AIBALANCER object. -- --- 1.2) AIBALANCER return AI to Airbases: --- -------------------------------------- +-- 1.2) AIBALANCER returns AI to Airbases: +-- --------------------------------------- -- You can configure to have the AI to return to: -- -- * @{#AIBALANCER.ReturnToHomeAirbase}: Returns the AI to the home @{Airbase#AIRBASE}. -- * @{#AIBALANCER.ReturnToNearestAirbases}: Returns the AI to the nearest friendly @{Airbase#AIRBASE}. -- +-- 1.3) AIBALANCER allows AI to patrol specific zones: +-- --------------------------------------------------- +-- Use @{AIBalancer#AIBALANCER.SetPatrolZone}() to specify a zone where the AI needs to patrol. +-- +-- -- === -- -- CREDITS @@ -20981,6 +21414,10 @@ end -- Working together with James has resulted in the creation of the AIBALANCER class. -- James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-) -- +-- **SNAFU** +-- Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. +-- None of the script code has been used however within the new AIBALANCER moose class. +-- -- @module AIBalancer -- @author FlightControl @@ -20992,6 +21429,7 @@ end -- @field Set#SET_AIRBASE ReturnAirbaseSet -- @field DCSTypes#Distance ReturnTresholdRange -- @field #boolean ToHomeAirbase +-- @field PatrolZone#PATROLZONE PatrolZone -- @extends Base#BASE AIBALANCER = { ClassName = "AIBALANCER", @@ -21057,6 +21495,15 @@ function AIBALANCER:ReturnToHomeAirbase( ReturnTresholdRange ) self.ReturnTresholdRange = ReturnTresholdRange end +--- Let the AI patrol a @{Zone} with a given Speed range and Altitude range. +-- @param #AIBALANCER self +-- @param PatrolZone#PATROLZONE PatrolZone The @{PatrolZone} where the AI needs to patrol. +-- @return PatrolZone#PATROLZONE self +function AIBALANCER:SetPatrolZone( PatrolZone ) + + self.PatrolZone = PatrolZone +end + --- @param #AIBALANCER self function AIBALANCER:_ClientAliveMonitorScheduler() @@ -21071,6 +21518,12 @@ function AIBALANCER:_ClientAliveMonitorScheduler() local AIGroup = Client:GetState( self, 'AIGroup' ) -- Group#GROUP + local PatrolZone = Client:GetState( self, "PatrolZone" ) + if PatrolZone then + PatrolZone = nil + Client:ClearState( self, "PatrolZone" ) + end + if self.ToNearestAirbase == false and self.ToHomeAirbase == false then AIGroup:Destroy() else @@ -21131,7 +21584,27 @@ function AIBALANCER:_ClientAliveMonitorScheduler() -- OK, spawn a new group from the SpawnAI objects provided. local SpawnAICount = #self.SpawnAI local SpawnAIIndex = math.random( 1, SpawnAICount ) - Client:SetState( self, 'AIGroup', self.SpawnAI[SpawnAIIndex]:Spawn() ) + local AIGroup = self.SpawnAI[SpawnAIIndex]:Spawn() + Client:SetState( self, 'AIGroup', AIGroup ) + + --- Now test if the AIGroup needs to patrol a zone, otherwise let it follow its route... + if self.PatrolZone then + local PatrolZone = PATROLZONE:New( + self.PatrolZone.PatrolZone, + self.PatrolZone.PatrolFloorAltitude, + self.PatrolZone.PatrolCeilingAltitude, + self.PatrolZone.PatrolMinSpeed, + self.PatrolPatrolMaxSpeed + ) + + if self.PatrolZone.PatrolManageFuel == true then + PatrolZone:ManageFuel( self.PatrolZone.PatrolFuelTresholdPercentage, self.PatrolZone.PatrolOutOfFuelOrbitTime ) + end + + PatrolZone:SetGroup( AIGroup ) + + Client:SetState( self, "PatrolZone", PatrolZone ) + end end end end @@ -21141,6 +21614,931 @@ end +--- This module contains the AIRBASEPOLICE classes. +-- +-- === +-- +-- 1) @{AirbasePolice#AIRBASEPOLICE_BASE} class, extends @{Base#BASE} +-- ================================================================== +-- The @{AirbasePolice#AIRBASEPOLICE_BASE} class provides the main methods to monitor CLIENT behaviour at airbases. +-- CLIENTS should not be allowed to: +-- +-- * Don't taxi faster than 40 km/h. +-- * Don't take-off on taxiways. +-- * Avoid to hit other planes on the airbase. +-- * Obey ground control orders. +-- +-- 2) @{AirbasePolice#AIRBASEPOLICE_CAUCASUS} class, extends @{AirbasePolice#AIRBASEPOLICE_BASE} +-- ============================================================================================= +-- All the airbases on the caucasus map can be monitored using this class. +-- If you want to monitor specific airbases, you need to use the @{#AIRBASEPOLICE_BASE.Monitor}() method, which takes a table or airbase names. +-- The following names can be given: +-- * AnapaVityazevo +-- * Batumi +-- * Beslan +-- * Gelendzhik +-- * Gudauta +-- * Kobuleti +-- * KrasnodarCenter +-- * KrasnodarPashkovsky +-- * Krymsk +-- * Kutaisi +-- * MaykopKhanskaya +-- * MineralnyeVody +-- * Mozdok +-- * Nalchik +-- * Novorossiysk +-- * SenakiKolkhi +-- * SochiAdler +-- * Soganlug +-- * SukhumiBabushara +-- * TbilisiLochini +-- * Vaziani +-- +-- @module AirbasePolice +-- @author FlightControl + + +--- @type AIRBASEPOLICE_BASE +-- @field Set#SET_CLIENT SetClient +-- @extends Base#BASE + +AIRBASEPOLICE_BASE = { + ClassName = "AIRBASEPOLICE_BASE", + SetClient = nil, + Airbases = nil, + AirbaseNames = nil, +} + + +--- Creates a new AIRBASEPOLICE_BASE object. +-- @param #AIRBASEPOLICE_BASE self +-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they follow the rules of the airbase. +-- @param Airbases A table of Airbase Names. +-- @return #AIRBASEPOLICE_BASE self +function AIRBASEPOLICE_BASE:New( SetClient, Airbases ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + self:E( { self.ClassName, SetClient, Airbases } ) + + self.SetClient = SetClient + self.Airbases = Airbases + + for AirbaseID, Airbase in pairs( self.Airbases ) do + Airbase.ZoneBoundary = ZONE_POLYGON_BASE:New( "Boundary", Airbase.PointsBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + for PointsRunwayID, PointsRunway in pairs( Airbase.PointsRunways ) do + Airbase.ZoneRunways[PointsRunwayID] = ZONE_POLYGON_BASE:New( "Runway " .. PointsRunwayID, PointsRunway ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + end + end + + -- -- Template + -- local TemplateBoundary = GROUP:FindByName( "Template Boundary" ) + -- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" ) + -- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + + self.SetClient:ForEachClient( + --- @param Client#CLIENT Client + function( Client ) + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0) + Client:SetState( self, "Taxi", false ) + end + ) + + self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, {}, 0, 2, 0.05 ) + + return self +end + +--- @type AIRBASEPOLICE_BASE.AirbaseNames +-- @list <#string> + +--- Monitor a table of airbase names. +-- @param #AIRBASEPOLICE_BASE self +-- @param #AIRBASEPOLICE_BASE.AirbaseNames AirbaseNames A list of AirbaseNames to monitor. If this parameters is nil, then all airbases will be monitored. +-- @return #AIRBASEPOLICE_BASE self +function AIRBASEPOLICE_BASE:Monitor( AirbaseNames ) + + if AirbaseNames then + if type( AirbaseNames ) == "table" then + self.AirbaseNames = AirbaseNames + else + self.AirbaseNames = { AirbaseNames } + end + end +end + +--- @param #AIRBASEPOLICE_BASE self +function AIRBASEPOLICE_BASE:_AirbaseMonitor() + + for AirbaseID, Airbase in pairs( self.Airbases ) do + + if not self.AirbaseNames or self.AirbaseNames[AirbaseID] then + + self:E( AirbaseID ) + + self.SetClient:ForEachClientInZone( Airbase.ZoneBoundary, + + --- @param Client#CLIENT Client + function( Client ) + + self:E( Client.UnitName ) + if Client:IsAlive() then + local NotInRunwayZone = true + for ZoneRunwayID, ZoneRunway in pairs( Airbase.ZoneRunways ) do + NotInRunwayZone = ( Client:IsNotInZone( ZoneRunway ) == true ) and NotInRunwayZone or false + end + + if NotInRunwayZone then + local Taxi = self:GetState( self, "Taxi" ) + self:E( Taxi ) + if Taxi == false then + Client:Message( "Welcome at " .. AirbaseID .. ". The maximum taxiing speed is " .. Airbase.MaximumSpeed " km/h.", 20, "ATC" ) + self:SetState( self, "Taxi", true ) + end + + local VelocityVec3 = Client:GetVelocity() + local Velocity = math.abs(VelocityVec3.x) + math.abs(VelocityVec3.y) + math.abs(VelocityVec3.z) + local IsAboveRunway = Client:IsAboveRunway() + local IsOnGround = Client:InAir() == false + self:T( IsAboveRunway, IsOnGround ) + + if IsAboveRunway and IsOnGround then + + if Velocity > Airbase.MaximumSpeed then + local IsSpeeding = Client:GetState( self, "Speeding" ) + + if IsSpeeding == true then + local SpeedingWarnings = Client:GetState( self, "Warnings" ) + self:T( SpeedingWarnings ) + + if SpeedingWarnings <= 5 then + Client:Message( "You are speeding on the taxiway! Slow down or you will be removed from this airbase! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Warning " .. SpeedingWarnings .. " / 5" ) + Client:SetState( self, "Warnings", SpeedingWarnings + 1 ) + else + MESSAGE:New( "Player " .. Client:GetPlayerName() .. " has been removed from the airbase, due to a speeding violation ...", 10, "Airbase Police" ):ToAll() + Client:GetGroup():Destroy() + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0 ) + end + + else + Client:Message( "You are speeding on the taxiway! Slow down please ...! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Attention! " ) + Client:SetState( self, "Speeding", true ) + Client:SetState( self, "Warnings", 1 ) + end + + else + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0 ) + end + end + + else + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0 ) + local Taxi = self:GetState( self, "Taxi" ) + if Taxi == true then + Client:Message( "You have progressed to the runway ... Await take-off clearance ...", 20, "ATC" ) + self:SetState( self, "Taxi", false ) + end + end + end + end + ) + end + end + + return true +end + + +--- @type AIRBASEPOLICE_CAUCASUS +-- @field Set#SET_CLIENT SetClient +-- @extends #AIRBASEPOLICE_BASE + +AIRBASEPOLICE_CAUCASUS = { + ClassName = "AIRBASEPOLICE_CAUCASUS", + Airbases = { + AnapaVityazevo = { + PointsBoundary = { + [1]={["y"]=242234.85714287,["x"]=-6616.5714285726,}, + [2]={["y"]=241060.57142858,["x"]=-5585.142857144,}, + [3]={["y"]=243806.2857143,["x"]=-3962.2857142868,}, + [4]={["y"]=245240.57142858,["x"]=-4816.5714285726,}, + [5]={["y"]=244783.42857144,["x"]=-5630.8571428583,}, + [6]={["y"]=243800.57142858,["x"]=-5065.142857144,}, + [7]={["y"]=242232.00000001,["x"]=-6622.2857142868,}, + }, + PointsRunways = { + [1] = { + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Batumi = { + PointsBoundary = { + [1]={["y"]=617567.14285714,["x"]=-355313.14285715,}, + [2]={["y"]=616181.42857142,["x"]=-354800.28571429,}, + [3]={["y"]=616007.14285714,["x"]=-355128.85714286,}, + [4]={["y"]=618230,["x"]=-356914.57142858,}, + [5]={["y"]=618727.14285714,["x"]=-356166,}, + [6]={["y"]=617572.85714285,["x"]=-355308.85714286,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=616442.28571429,["x"]=-355090.28571429,}, + [2]={["y"]=618450.57142857,["x"]=-356522,}, + [3]={["y"]=618407.71428571,["x"]=-356584.85714286,}, + [4]={["y"]=618361.99999999,["x"]=-356554.85714286,}, + [5]={["y"]=618324.85714285,["x"]=-356599.14285715,}, + [6]={["y"]=618250.57142856,["x"]=-356543.42857143,}, + [7]={["y"]=618257.7142857,["x"]=-356496.28571429,}, + [8]={["y"]=618237.7142857,["x"]=-356459.14285715,}, + [9]={["y"]=616555.71428571,["x"]=-355258.85714286,}, + [10]={["y"]=616486.28571428,["x"]=-355280.57142858,}, + [11]={["y"]=616410.57142856,["x"]=-355227.71428572,}, + [12]={["y"]=616441.99999999,["x"]=-355179.14285715,}, + [13]={["y"]=616401.99999999,["x"]=-355147.71428572,}, + [14]={["y"]=616441.42857142,["x"]=-355092.57142858,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Beslan = { + PointsBoundary = { + [1]={["y"]=842082.57142857,["x"]=-148445.14285715,}, + [2]={["y"]=845237.71428572,["x"]=-148639.71428572,}, + [3]={["y"]=845232,["x"]=-148765.42857143,}, + [4]={["y"]=844220.57142857,["x"]=-149168.28571429,}, + [5]={["y"]=843274.85714286,["x"]=-149125.42857143,}, + [6]={["y"]=842077.71428572,["x"]=-148554,}, + [7]={["y"]=842083.42857143,["x"]=-148445.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=842104.57142857,["x"]=-148460.57142857,}, + [2]={["y"]=845225.71428572,["x"]=-148656,}, + [3]={["y"]=845220.57142858,["x"]=-148750,}, + [4]={["y"]=842098.85714286,["x"]=-148556.28571429,}, + [5]={["y"]=842104,["x"]=-148460.28571429,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Gelendzhik = { + PointsBoundary = { + [1]={["y"]=297856.00000001,["x"]=-51151.428571429,}, + [2]={["y"]=299044.57142858,["x"]=-49720.000000001,}, + [3]={["y"]=298861.71428572,["x"]=-49580.000000001,}, + [4]={["y"]=298198.85714286,["x"]=-49842.857142858,}, + [5]={["y"]=297990.28571429,["x"]=-50151.428571429,}, + [6]={["y"]=297696.00000001,["x"]=-51054.285714286,}, + [7]={["y"]=297850.28571429,["x"]=-51160.000000001,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=297834.00000001,["x"]=-51107.428571429,}, + [2]={["y"]=297786.57142858,["x"]=-51068.857142858,}, + [3]={["y"]=298946.57142858,["x"]=-49686.000000001,}, + [4]={["y"]=298993.14285715,["x"]=-49725.714285715,}, + [5]={["y"]=297835.14285715,["x"]=-51107.714285715,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Gudauta = { + PointsBoundary = { + [1]={["y"]=517246.57142857,["x"]=-197850.28571429,}, + [2]={["y"]=516749.42857142,["x"]=-198070.28571429,}, + [3]={["y"]=515755.14285714,["x"]=-197598.85714286,}, + [4]={["y"]=515369.42857142,["x"]=-196538.85714286,}, + [5]={["y"]=515623.71428571,["x"]=-195618.85714286,}, + [6]={["y"]=515946.57142857,["x"]=-195510.28571429,}, + [7]={["y"]=517243.71428571,["x"]=-197858.85714286,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=517096.57142857,["x"]=-197804.57142857,}, + [2]={["y"]=515880.85714285,["x"]=-195590.28571429,}, + [3]={["y"]=515812.28571428,["x"]=-195628.85714286,}, + [4]={["y"]=517036.57142857,["x"]=-197834.57142857,}, + [5]={["y"]=517097.99999999,["x"]=-197807.42857143,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Kobuleti = { + PointsBoundary = { + [1]={["y"]=634427.71428571,["x"]=-318290.28571429,}, + [2]={["y"]=635033.42857143,["x"]=-317550.2857143,}, + [3]={["y"]=635864.85714286,["x"]=-317333.14285715,}, + [4]={["y"]=636967.71428571,["x"]=-317261.71428572,}, + [5]={["y"]=637144.85714286,["x"]=-317913.14285715,}, + [6]={["y"]=634630.57142857,["x"]=-318687.42857144,}, + [7]={["y"]=634424.85714286,["x"]=-318290.2857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=634509.71428571,["x"]=-318339.42857144,}, + [2]={["y"]=636767.42857143,["x"]=-317516.57142858,}, + [3]={["y"]=636790,["x"]=-317575.71428572,}, + [4]={["y"]=634531.42857143,["x"]=-318398.00000001,}, + [5]={["y"]=634510.28571429,["x"]=-318339.71428572,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + KrasnodarCenter = { + PointsBoundary = { + [1]={["y"]=366680.28571429,["x"]=11699.142857142,}, + [2]={["y"]=366654.28571429,["x"]=11225.142857142,}, + [3]={["y"]=367497.14285715,["x"]=11082.285714285,}, + [4]={["y"]=368025.71428572,["x"]=10396.57142857,}, + [5]={["y"]=369854.28571429,["x"]=11367.999999999,}, + [6]={["y"]=369840.00000001,["x"]=11910.857142856,}, + [7]={["y"]=366682.57142858,["x"]=11697.999999999,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=369205.42857144,["x"]=11789.142857142,}, + [2]={["y"]=369209.71428572,["x"]=11714.857142856,}, + [3]={["y"]=366699.71428572,["x"]=11581.714285713,}, + [4]={["y"]=366698.28571429,["x"]=11659.142857142,}, + [5]={["y"]=369208.85714286,["x"]=11788.57142857,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + KrasnodarPashkovsky = { + PointsBoundary = { + [1]={["y"]=386754,["x"]=6476.5714285703,}, + [2]={["y"]=389182.57142858,["x"]=8722.2857142846,}, + [3]={["y"]=388832.57142858,["x"]=9086.5714285703,}, + [4]={["y"]=386961.14285715,["x"]=7707.9999999989,}, + [5]={["y"]=385404,["x"]=9179.4285714274,}, + [6]={["y"]=383239.71428572,["x"]=7386.5714285703,}, + [7]={["y"]=383954,["x"]=6486.5714285703,}, + [8]={["y"]=385775.42857143,["x"]=8097.9999999989,}, + [9]={["y"]=386804,["x"]=7319.4285714274,}, + [10]={["y"]=386375.42857143,["x"]=6797.9999999989,}, + [11]={["y"]=386746.85714286,["x"]=6472.2857142846,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=385891.14285715,["x"]=8416.5714285703,}, + [2]={["y"]=385842.28571429,["x"]=8467.9999999989,}, + [3]={["y"]=384180.85714286,["x"]=6917.1428571417,}, + [4]={["y"]=384228.57142858,["x"]=6867.7142857132,}, + [5]={["y"]=385891.14285715,["x"]=8416.5714285703,}, + }, + [2] = { + [1]={["y"]=386714.85714286,["x"]=6674.857142856,}, + [2]={["y"]=386757.71428572,["x"]=6627.7142857132,}, + [3]={["y"]=389028.57142858,["x"]=8741.4285714275,}, + [4]={["y"]=388981.71428572,["x"]=8790.5714285703,}, + [5]={["y"]=386714.57142858,["x"]=6674.5714285703,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Krymsk = { + PointsBoundary = { + [1]={["y"]=293338.00000001,["x"]=-7575.4285714297,}, + [2]={["y"]=295199.42857144,["x"]=-5434.0000000011,}, + [3]={["y"]=295595.14285715,["x"]=-6239.7142857154,}, + [4]={["y"]=294152.2857143,["x"]=-8325.4285714297,}, + [5]={["y"]=293345.14285715,["x"]=-7596.8571428582,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=293522.00000001,["x"]=-7567.4285714297,}, + [2]={["y"]=293578.57142858,["x"]=-7616.0000000011,}, + [3]={["y"]=295246.00000001,["x"]=-5591.142857144,}, + [4]={["y"]=295187.71428573,["x"]=-5546.0000000011,}, + [5]={["y"]=293523.14285715,["x"]=-7568.2857142868,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Kutaisi = { + PointsBoundary = { + [1]={["y"]=682087.42857143,["x"]=-284512.85714286,}, + [2]={["y"]=685387.42857143,["x"]=-283662.85714286,}, + [3]={["y"]=685294.57142857,["x"]=-284977.14285715,}, + [4]={["y"]=682744.57142857,["x"]=-286505.71428572,}, + [5]={["y"]=682094.57142857,["x"]=-284527.14285715,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=682638,["x"]=-285202.28571429,}, + [2]={["y"]=685050.28571429,["x"]=-284507.42857144,}, + [3]={["y"]=685068.85714286,["x"]=-284578.85714286,}, + [4]={["y"]=682657.42857143,["x"]=-285264.28571429,}, + [5]={["y"]=682638.28571429,["x"]=-285202.85714286,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + MaykopKhanskaya = { + PointsBoundary = { + [1]={["y"]=456876.28571429,["x"]=-27665.42857143,}, + [2]={["y"]=457800,["x"]=-28392.857142858,}, + [3]={["y"]=459368.57142857,["x"]=-26378.571428573,}, + [4]={["y"]=459425.71428572,["x"]=-25242.857142858,}, + [5]={["y"]=458961.42857143,["x"]=-24964.285714287,}, + [6]={["y"]=456878.57142857,["x"]=-27667.714285715,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=457005.42857143,["x"]=-27668.000000001,}, + [2]={["y"]=459028.85714286,["x"]=-25168.857142858,}, + [3]={["y"]=459082.57142857,["x"]=-25216.857142858,}, + [4]={["y"]=457060,["x"]=-27714.285714287,}, + [5]={["y"]=457004.57142857,["x"]=-27669.714285715,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + MineralnyeVody = { + PointsBoundary = { + [1]={["y"]=703857.14285714,["x"]=-50226.000000002,}, + [2]={["y"]=707385.71428571,["x"]=-51911.714285716,}, + [3]={["y"]=707595.71428571,["x"]=-51434.857142859,}, + [4]={["y"]=707900,["x"]=-51568.857142859,}, + [5]={["y"]=707542.85714286,["x"]=-52326.000000002,}, + [6]={["y"]=706628.57142857,["x"]=-52568.857142859,}, + [7]={["y"]=705142.85714286,["x"]=-51790.285714288,}, + [8]={["y"]=703678.57142857,["x"]=-50611.714285716,}, + [9]={["y"]=703857.42857143,["x"]=-50226.857142859,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=703904,["x"]=-50352.571428573,}, + [2]={["y"]=707596.28571429,["x"]=-52094.571428573,}, + [3]={["y"]=707560.57142858,["x"]=-52161.714285716,}, + [4]={["y"]=703871.71428572,["x"]=-50420.571428573,}, + [5]={["y"]=703902,["x"]=-50352.000000002,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Mozdok = { + PointsBoundary = { + [1]={["y"]=832123.42857143,["x"]=-83608.571428573,}, + [2]={["y"]=835916.28571429,["x"]=-83144.285714288,}, + [3]={["y"]=835474.28571429,["x"]=-84170.571428573,}, + [4]={["y"]=832911.42857143,["x"]=-84470.571428573,}, + [5]={["y"]=832487.71428572,["x"]=-85565.714285716,}, + [6]={["y"]=831573.42857143,["x"]=-85351.42857143,}, + [7]={["y"]=832123.71428572,["x"]=-83610.285714288,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=832201.14285715,["x"]=-83699.428571431,}, + [2]={["y"]=832212.57142857,["x"]=-83780.571428574,}, + [3]={["y"]=835730.28571429,["x"]=-83335.714285717,}, + [4]={["y"]=835718.85714286,["x"]=-83246.571428574,}, + [5]={["y"]=832200.57142857,["x"]=-83700.000000002,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Nalchik = { + PointsBoundary = { + [1]={["y"]=759370,["x"]=-125502.85714286,}, + [2]={["y"]=761384.28571429,["x"]=-124177.14285714,}, + [3]={["y"]=761472.85714286,["x"]=-124325.71428572,}, + [4]={["y"]=761092.85714286,["x"]=-125048.57142857,}, + [5]={["y"]=760295.71428572,["x"]=-125685.71428572,}, + [6]={["y"]=759444.28571429,["x"]=-125734.28571429,}, + [7]={["y"]=759375.71428572,["x"]=-125511.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=759454.28571429,["x"]=-125551.42857143,}, + [2]={["y"]=759492.85714286,["x"]=-125610.85714286,}, + [3]={["y"]=761406.28571429,["x"]=-124304.28571429,}, + [4]={["y"]=761361.14285714,["x"]=-124239.71428572,}, + [5]={["y"]=759456,["x"]=-125552.57142857,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Novorossiysk = { + PointsBoundary = { + [1]={["y"]=278677.71428573,["x"]=-41656.571428572,}, + [2]={["y"]=278446.2857143,["x"]=-41453.714285715,}, + [3]={["y"]=278989.14285716,["x"]=-40188.000000001,}, + [4]={["y"]=279717.71428573,["x"]=-39968.000000001,}, + [5]={["y"]=280020.57142859,["x"]=-40208.000000001,}, + [6]={["y"]=278674.85714287,["x"]=-41660.857142858,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=278673.14285716,["x"]=-41615.142857144,}, + [2]={["y"]=278625.42857144,["x"]=-41570.571428572,}, + [3]={["y"]=279835.42857144,["x"]=-40226.000000001,}, + [4]={["y"]=279882.2857143,["x"]=-40270.000000001,}, + [5]={["y"]=278672.00000001,["x"]=-41614.857142858,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + SenakiKolkhi = { + PointsBoundary = { + [1]={["y"]=646036.57142857,["x"]=-281778.85714286,}, + [2]={["y"]=646045.14285714,["x"]=-281191.71428571,}, + [3]={["y"]=647032.28571429,["x"]=-280598.85714285,}, + [4]={["y"]=647669.42857143,["x"]=-281273.14285714,}, + [5]={["y"]=648323.71428571,["x"]=-281370.28571428,}, + [6]={["y"]=648520.85714286,["x"]=-281978.85714285,}, + [7]={["y"]=646039.42857143,["x"]=-281783.14285714,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=646060.85714285,["x"]=-281736,}, + [2]={["y"]=646056.57142857,["x"]=-281631.71428571,}, + [3]={["y"]=648442.28571428,["x"]=-281840.28571428,}, + [4]={["y"]=648432.28571428,["x"]=-281918.85714286,}, + [5]={["y"]=646063.71428571,["x"]=-281738.85714286,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + SochiAdler = { + PointsBoundary = { + [1]={["y"]=460642.28571428,["x"]=-164861.71428571,}, + [2]={["y"]=462820.85714285,["x"]=-163368.85714286,}, + [3]={["y"]=463649.42857142,["x"]=-163340.28571429,}, + [4]={["y"]=463835.14285714,["x"]=-164040.28571429,}, + [5]={["y"]=462535.14285714,["x"]=-165654.57142857,}, + [6]={["y"]=460678,["x"]=-165247.42857143,}, + [7]={["y"]=460635.14285714,["x"]=-164876,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=460831.42857143,["x"]=-165180,}, + [2]={["y"]=460878.57142857,["x"]=-165257.14285714,}, + [3]={["y"]=463663.71428571,["x"]=-163793.14285714,}, + [4]={["y"]=463612.28571428,["x"]=-163697.42857143,}, + [5]={["y"]=460831.42857143,["x"]=-165177.14285714,}, + }, + [2] = { + [1]={["y"]=460831.42857143,["x"]=-165180,}, + [2]={["y"]=460878.57142857,["x"]=-165257.14285714,}, + [3]={["y"]=463663.71428571,["x"]=-163793.14285714,}, + [4]={["y"]=463612.28571428,["x"]=-163697.42857143,}, + [5]={["y"]=460831.42857143,["x"]=-165177.14285714,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Soganlug = { + PointsBoundary = { + [1]={["y"]=894530.85714286,["x"]=-316928.28571428,}, + [2]={["y"]=896422.28571428,["x"]=-318622.57142857,}, + [3]={["y"]=896090.85714286,["x"]=-318934,}, + [4]={["y"]=894019.42857143,["x"]=-317119.71428571,}, + [5]={["y"]=894533.71428571,["x"]=-316925.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=894525.71428571,["x"]=-316964,}, + [2]={["y"]=896363.14285714,["x"]=-318634.28571428,}, + [3]={["y"]=896299.14285714,["x"]=-318702.85714286,}, + [4]={["y"]=894464,["x"]=-317031.71428571,}, + [5]={["y"]=894524.57142857,["x"]=-316963.71428571,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + SukhumiBabushara = { + PointsBoundary = { + [1]={["y"]=562541.14285714,["x"]=-219852.28571429,}, + [2]={["y"]=562691.14285714,["x"]=-219395.14285714,}, + [3]={["y"]=564326.85714286,["x"]=-219523.71428571,}, + [4]={["y"]=566262.57142857,["x"]=-221166.57142857,}, + [5]={["y"]=566069.71428571,["x"]=-221580.85714286,}, + [6]={["y"]=562534,["x"]=-219873.71428571,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=562684,["x"]=-219779.71428571,}, + [2]={["y"]=562717.71428571,["x"]=-219718,}, + [3]={["y"]=566046.85714286,["x"]=-221376.57142857,}, + [4]={["y"]=566012.28571428,["x"]=-221446.57142857,}, + [5]={["y"]=562684.57142857,["x"]=-219782.57142857,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + TbilisiLochini = { + PointsBoundary = { + [1]={["y"]=895172.85714286,["x"]=-314667.42857143,}, + [2]={["y"]=895337.42857143,["x"]=-314143.14285714,}, + [3]={["y"]=895990.28571429,["x"]=-314036,}, + [4]={["y"]=897730.28571429,["x"]=-315284.57142857,}, + [5]={["y"]=897901.71428571,["x"]=-316284.57142857,}, + [6]={["y"]=897684.57142857,["x"]=-316618.85714286,}, + [7]={["y"]=895173.14285714,["x"]=-314667.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=895261.14285715,["x"]=-314652.28571428,}, + [2]={["y"]=897654.57142857,["x"]=-316523.14285714,}, + [3]={["y"]=897711.71428571,["x"]=-316450.28571429,}, + [4]={["y"]=895327.42857143,["x"]=-314568.85714286,}, + [5]={["y"]=895261.71428572,["x"]=-314656,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Vaziani = { + PointsBoundary = { + [1]={["y"]=902122,["x"]=-318163.71428572,}, + [2]={["y"]=902678.57142857,["x"]=-317594,}, + [3]={["y"]=903275.71428571,["x"]=-317405.42857143,}, + [4]={["y"]=903418.57142857,["x"]=-317891.14285714,}, + [5]={["y"]=904292.85714286,["x"]=-318748.28571429,}, + [6]={["y"]=904542,["x"]=-319740.85714286,}, + [7]={["y"]=904042,["x"]=-320166.57142857,}, + [8]={["y"]=902121.42857143,["x"]=-318164.85714286,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=902239.14285714,["x"]=-318190.85714286,}, + [2]={["y"]=904014.28571428,["x"]=-319994.57142857,}, + [3]={["y"]=904064.85714285,["x"]=-319945.14285715,}, + [4]={["y"]=902294.57142857,["x"]=-318146,}, + [5]={["y"]=902247.71428571,["x"]=-318190.85714286,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + }, +} + +--- Creates a new AIRBASEPOLICE_CAUCASUS object. +-- @param #AIRBASEPOLICE_CAUCASUS self +-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they follow the rules of the airbase. +-- @return #AIRBASEPOLICE_CAUCASUS self +function AIRBASEPOLICE_CAUCASUS:New( SetClient ) + + -- Inherits from BASE + local self = BASE:Inherit( self, AIRBASEPOLICE_BASE:New( SetClient, self.Airbases ) ) + + -- -- AnapaVityazevo + -- local AnapaVityazevoBoundary = GROUP:FindByName( "AnapaVityazevo Boundary" ) + -- self.Airbases.AnapaVityazevo.ZoneBoundary = ZONE_POLYGON:New( "AnapaVityazevo Boundary", AnapaVityazevoBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local AnapaVityazevoRunway1 = GROUP:FindByName( "AnapaVityazevo Runway 1" ) + -- self.Airbases.AnapaVityazevo.ZoneRunways[1] = ZONE_POLYGON:New( "AnapaVityazevo Runway 1", AnapaVityazevoRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Batumi + -- local BatumiBoundary = GROUP:FindByName( "Batumi Boundary" ) + -- self.Airbases.Batumi.ZoneBoundary = ZONE_POLYGON:New( "Batumi Boundary", BatumiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local BatumiRunway1 = GROUP:FindByName( "Batumi Runway 1" ) + -- self.Airbases.Batumi.ZoneRunways[1] = ZONE_POLYGON:New( "Batumi Runway 1", BatumiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Beslan + -- local BeslanBoundary = GROUP:FindByName( "Beslan Boundary" ) + -- self.Airbases.Beslan.ZoneBoundary = ZONE_POLYGON:New( "Beslan Boundary", BeslanBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local BeslanRunway1 = GROUP:FindByName( "Beslan Runway 1" ) + -- self.Airbases.Beslan.ZoneRunways[1] = ZONE_POLYGON:New( "Beslan Runway 1", BeslanRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Gelendzhik + -- local GelendzhikBoundary = GROUP:FindByName( "Gelendzhik Boundary" ) + -- self.Airbases.Gelendzhik.ZoneBoundary = ZONE_POLYGON:New( "Gelendzhik Boundary", GelendzhikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local GelendzhikRunway1 = GROUP:FindByName( "Gelendzhik Runway 1" ) + -- self.Airbases.Gelendzhik.ZoneRunways[1] = ZONE_POLYGON:New( "Gelendzhik Runway 1", GelendzhikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Gudauta + -- local GudautaBoundary = GROUP:FindByName( "Gudauta Boundary" ) + -- self.Airbases.Gudauta.ZoneBoundary = ZONE_POLYGON:New( "Gudauta Boundary", GudautaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local GudautaRunway1 = GROUP:FindByName( "Gudauta Runway 1" ) + -- self.Airbases.Gudauta.ZoneRunways[1] = ZONE_POLYGON:New( "Gudauta Runway 1", GudautaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Kobuleti + -- local KobuletiBoundary = GROUP:FindByName( "Kobuleti Boundary" ) + -- self.Airbases.Kobuleti.ZoneBoundary = ZONE_POLYGON:New( "Kobuleti Boundary", KobuletiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KobuletiRunway1 = GROUP:FindByName( "Kobuleti Runway 1" ) + -- self.Airbases.Kobuleti.ZoneRunways[1] = ZONE_POLYGON:New( "Kobuleti Runway 1", KobuletiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- KrasnodarCenter + -- local KrasnodarCenterBoundary = GROUP:FindByName( "KrasnodarCenter Boundary" ) + -- self.Airbases.KrasnodarCenter.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarCenter Boundary", KrasnodarCenterBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KrasnodarCenterRunway1 = GROUP:FindByName( "KrasnodarCenter Runway 1" ) + -- self.Airbases.KrasnodarCenter.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarCenter Runway 1", KrasnodarCenterRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- KrasnodarPashkovsky + -- local KrasnodarPashkovskyBoundary = GROUP:FindByName( "KrasnodarPashkovsky Boundary" ) + -- self.Airbases.KrasnodarPashkovsky.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarPashkovsky Boundary", KrasnodarPashkovskyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KrasnodarPashkovskyRunway1 = GROUP:FindByName( "KrasnodarPashkovsky Runway 1" ) + -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 1", KrasnodarPashkovskyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- local KrasnodarPashkovskyRunway2 = GROUP:FindByName( "KrasnodarPashkovsky Runway 2" ) + -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[2] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 2", KrasnodarPashkovskyRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Krymsk + -- local KrymskBoundary = GROUP:FindByName( "Krymsk Boundary" ) + -- self.Airbases.Krymsk.ZoneBoundary = ZONE_POLYGON:New( "Krymsk Boundary", KrymskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KrymskRunway1 = GROUP:FindByName( "Krymsk Runway 1" ) + -- self.Airbases.Krymsk.ZoneRunways[1] = ZONE_POLYGON:New( "Krymsk Runway 1", KrymskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Kutaisi + -- local KutaisiBoundary = GROUP:FindByName( "Kutaisi Boundary" ) + -- self.Airbases.Kutaisi.ZoneBoundary = ZONE_POLYGON:New( "Kutaisi Boundary", KutaisiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KutaisiRunway1 = GROUP:FindByName( "Kutaisi Runway 1" ) + -- self.Airbases.Kutaisi.ZoneRunways[1] = ZONE_POLYGON:New( "Kutaisi Runway 1", KutaisiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- MaykopKhanskaya + -- local MaykopKhanskayaBoundary = GROUP:FindByName( "MaykopKhanskaya Boundary" ) + -- self.Airbases.MaykopKhanskaya.ZoneBoundary = ZONE_POLYGON:New( "MaykopKhanskaya Boundary", MaykopKhanskayaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local MaykopKhanskayaRunway1 = GROUP:FindByName( "MaykopKhanskaya Runway 1" ) + -- self.Airbases.MaykopKhanskaya.ZoneRunways[1] = ZONE_POLYGON:New( "MaykopKhanskaya Runway 1", MaykopKhanskayaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- MineralnyeVody + -- local MineralnyeVodyBoundary = GROUP:FindByName( "MineralnyeVody Boundary" ) + -- self.Airbases.MineralnyeVody.ZoneBoundary = ZONE_POLYGON:New( "MineralnyeVody Boundary", MineralnyeVodyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local MineralnyeVodyRunway1 = GROUP:FindByName( "MineralnyeVody Runway 1" ) + -- self.Airbases.MineralnyeVody.ZoneRunways[1] = ZONE_POLYGON:New( "MineralnyeVody Runway 1", MineralnyeVodyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Mozdok + -- local MozdokBoundary = GROUP:FindByName( "Mozdok Boundary" ) + -- self.Airbases.Mozdok.ZoneBoundary = ZONE_POLYGON:New( "Mozdok Boundary", MozdokBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local MozdokRunway1 = GROUP:FindByName( "Mozdok Runway 1" ) + -- self.Airbases.Mozdok.ZoneRunways[1] = ZONE_POLYGON:New( "Mozdok Runway 1", MozdokRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Nalchik + -- local NalchikBoundary = GROUP:FindByName( "Nalchik Boundary" ) + -- self.Airbases.Nalchik.ZoneBoundary = ZONE_POLYGON:New( "Nalchik Boundary", NalchikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local NalchikRunway1 = GROUP:FindByName( "Nalchik Runway 1" ) + -- self.Airbases.Nalchik.ZoneRunways[1] = ZONE_POLYGON:New( "Nalchik Runway 1", NalchikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Novorossiysk + -- local NovorossiyskBoundary = GROUP:FindByName( "Novorossiysk Boundary" ) + -- self.Airbases.Novorossiysk.ZoneBoundary = ZONE_POLYGON:New( "Novorossiysk Boundary", NovorossiyskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local NovorossiyskRunway1 = GROUP:FindByName( "Novorossiysk Runway 1" ) + -- self.Airbases.Novorossiysk.ZoneRunways[1] = ZONE_POLYGON:New( "Novorossiysk Runway 1", NovorossiyskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- SenakiKolkhi + -- local SenakiKolkhiBoundary = GROUP:FindByName( "SenakiKolkhi Boundary" ) + -- self.Airbases.SenakiKolkhi.ZoneBoundary = ZONE_POLYGON:New( "SenakiKolkhi Boundary", SenakiKolkhiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SenakiKolkhiRunway1 = GROUP:FindByName( "SenakiKolkhi Runway 1" ) + -- self.Airbases.SenakiKolkhi.ZoneRunways[1] = ZONE_POLYGON:New( "SenakiKolkhi Runway 1", SenakiKolkhiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- SochiAdler + -- local SochiAdlerBoundary = GROUP:FindByName( "SochiAdler Boundary" ) + -- self.Airbases.SochiAdler.ZoneBoundary = ZONE_POLYGON:New( "SochiAdler Boundary", SochiAdlerBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SochiAdlerRunway1 = GROUP:FindByName( "SochiAdler Runway 1" ) + -- self.Airbases.SochiAdler.ZoneRunways[1] = ZONE_POLYGON:New( "SochiAdler Runway 1", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- local SochiAdlerRunway2 = GROUP:FindByName( "SochiAdler Runway 2" ) + -- self.Airbases.SochiAdler.ZoneRunways[2] = ZONE_POLYGON:New( "SochiAdler Runway 2", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Soganlug + -- local SoganlugBoundary = GROUP:FindByName( "Soganlug Boundary" ) + -- self.Airbases.Soganlug.ZoneBoundary = ZONE_POLYGON:New( "Soganlug Boundary", SoganlugBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SoganlugRunway1 = GROUP:FindByName( "Soganlug Runway 1" ) + -- self.Airbases.Soganlug.ZoneRunways[1] = ZONE_POLYGON:New( "Soganlug Runway 1", SoganlugRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- SukhumiBabushara + -- local SukhumiBabusharaBoundary = GROUP:FindByName( "SukhumiBabushara Boundary" ) + -- self.Airbases.SukhumiBabushara.ZoneBoundary = ZONE_POLYGON:New( "SukhumiBabushara Boundary", SukhumiBabusharaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SukhumiBabusharaRunway1 = GROUP:FindByName( "SukhumiBabushara Runway 1" ) + -- self.Airbases.SukhumiBabushara.ZoneRunways[1] = ZONE_POLYGON:New( "SukhumiBabushara Runway 1", SukhumiBabusharaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- TbilisiLochini + -- local TbilisiLochiniBoundary = GROUP:FindByName( "TbilisiLochini Boundary" ) + -- self.Airbases.TbilisiLochini.ZoneBoundary = ZONE_POLYGON:New( "TbilisiLochini Boundary", TbilisiLochiniBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local TbilisiLochiniRunway1 = GROUP:FindByName( "TbilisiLochini Runway 1" ) + -- self.Airbases.TbilisiLochini.ZoneRunways[1] = ZONE_POLYGON:New( "TbilisiLochini Runway 1", TbilisiLochiniRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Vaziani + -- local VazianiBoundary = GROUP:FindByName( "Vaziani Boundary" ) + -- self.Airbases.Vaziani.ZoneBoundary = ZONE_POLYGON:New( "Vaziani Boundary", VazianiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local VazianiRunway1 = GROUP:FindByName( "Vaziani Runway 1" ) + -- self.Airbases.Vaziani.ZoneRunways[1] = ZONE_POLYGON:New( "Vaziani Runway 1", VazianiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + + + -- -- Template + -- local TemplateBoundary = GROUP:FindByName( "Template Boundary" ) + -- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" ) + -- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + + return self + +end + BASE:TraceOnOff( false ) env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose.lua b/Moose Mission Setup/Moose.lua index 1c6b5946f..45d0c09ee 100644 --- a/Moose Mission Setup/Moose.lua +++ b/Moose Mission Setup/Moose.lua @@ -1,5 +1,5 @@ env.info( '*** MOOSE STATIC INCLUDE START *** ' ) -env.info( 'Moose Generation Timestamp: 20160618_1019' ) +env.info( 'Moose Generation Timestamp: 20160618_2312' ) local base = _G Include = {} @@ -4675,10 +4675,15 @@ end -- Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. -- Note that when WayPointInitialize is called, the Mission of the group is RESTARTED! -- @param #GROUP self +-- @param #table WayPoints If WayPoints is given, then use the route. -- @return #GROUP -function GROUP:WayPointInitialize() +function GROUP:WayPointInitialize( WayPoints ) - self.WayPoints = self:GetTaskRoute() + if WayPoints then + self.WayPoints = WayPoints + else + self.WayPoints = self:GetTaskRoute() + end return self end @@ -7995,6 +8000,15 @@ ZONE_BASE = { ClassName = "ZONE_BASE", } + +--- The ZONE_BASE.BoundingSquare +-- @type ZONE_BASE.BoundingSquare +-- @field DCSTypes#Distance x1 The lower x coordinate (left down) +-- @field DCSTypes#Distance y1 The lower y coordinate (left down) +-- @field DCSTypes#Distance x2 The higher x coordinate (right up) +-- @field DCSTypes#Distance y2 The higher y coordinate (right up) + + --- ZONE_BASE constructor -- @param #ZONE_BASE self -- @param #string ZoneName Name of the zone. @@ -8009,7 +8023,7 @@ function ZONE_BASE:New( ZoneName ) end --- Returns if a location is within the zone. --- @param #ZONE_RADIUS self +-- @param #ZONE_BASE self -- @param DCSTypes#Vec2 PointVec2 The location to test. -- @return #boolean true if the location is within the zone. function ZONE_BASE:IsPointVec2InZone( PointVec2 ) @@ -8019,7 +8033,7 @@ function ZONE_BASE:IsPointVec2InZone( PointVec2 ) end --- Returns if a point is within the zone. --- @param #ZONE_RADIUS self +-- @param #ZONE_BASE self -- @param DCSTypes#Vec3 PointVec3 The point to test. -- @return #boolean true if the point is within the zone. function ZONE_BASE:IsPointVec3InZone( PointVec3 ) @@ -8030,6 +8044,21 @@ function ZONE_BASE:IsPointVec3InZone( PointVec3 ) return InZone end +--- Define a random @{DCSTypes#Vec2} within the zone. +-- @param #ZONE_BASE self +-- @return DCSTypes#Vec2 The Vec2 coordinates. +function ZONE_BASE:GetRandomVec2() + return { x = 0, y = 0 } +end + +--- Get the bounding square the zone. +-- @param #ZONE_BASE self +-- @return #ZONE_BASE.BoundingSquare The bounding square. +function ZONE_BASE:GetBoundingSquare() + return { x1 = 0, y1 = 0, x2 = 0, y2 = 0 } +end + + --- Smokes the zone boundaries in a color. -- @param #ZONE_BASE self -- @param SmokeColor The smoke color. @@ -8413,6 +8442,55 @@ function ZONE_POLYGON_BASE:IsPointVec2InZone( PointVec2 ) return c end +--- Define a random @{DCSTypes#Vec2} within the zone. +-- @param #ZONE_POLYGON_BASE self +-- @return DCSTypes#Vec2 The Vec2 coordinate. +function ZONE_POLYGON_BASE:GetRandomVec2() + self:F2() + + --- It is a bit tricky to find a random point within a polygon. Right now i am doing it the dirty and inefficient way... + local Vec2Found = false + local Vec2 + local BS = self:GetBoundingSquare() + + self:T2( BS ) + + while Vec2Found == false do + Vec2 = { x = math.random( BS.x1, BS.x2 ), y = math.random( BS.y1, BS.y2 ) } + self:T2( Vec2 ) + if self:IsPointVec2InZone( Vec2 ) then + Vec2Found = true + end + end + + self:T2( Vec2 ) + + return Vec2 +end + +--- Get the bounding square the zone. +-- @param #ZONE_POLYGON_BASE self +-- @return #ZONE_POLYGON_BASE.BoundingSquare The bounding square. +function ZONE_POLYGON_BASE:GetBoundingSquare() + + local x1 = self.Polygon[1].x + local y1 = self.Polygon[1].y + local x2 = self.Polygon[1].x + local y2 = self.Polygon[1].y + + for i = 2, #self.Polygon do + self:T2( { self.Polygon[i], x1, y1, x2, y2 } ) + x1 = ( x1 > self.Polygon[i].x ) and self.Polygon[i].x or x1 + x2 = ( x2 < self.Polygon[i].x ) and self.Polygon[i].x or x2 + y1 = ( y1 > self.Polygon[i].y ) and self.Polygon[i].y or y1 + y2 = ( y2 < self.Polygon[i].y ) and self.Polygon[i].y or y2 + + end + + return { x1 = x1, y1 = y1, x2 = x2, y2 = y2 } +end + + @@ -10315,8 +10393,6 @@ SET_BASE = { -- DBObject = SET_BASE:New() function SET_BASE:New( Database ) - env.info( tostring( Database ) ) - -- Inherits from BASE local self = BASE:Inherit( self, BASE:New() ) @@ -11982,6 +12058,9 @@ end -- @extends Base#BASE -- @field #POINT_VEC3.SmokeColor SmokeColor -- @field #POINT_VEC3.FlareColor FlareColor +-- @field #POINT_VEC3.RoutePointAltType RoutePointAltType +-- @field #POINT_VEC3.RoutePointType RoutePointType +-- @field #POINT_VEC3.RoutePointAction RoutePointAction POINT_VEC3 = { ClassName = "POINT_VEC3", SmokeColor = { @@ -11990,14 +12069,24 @@ POINT_VEC3 = { White = trigger.smokeColor.White, Orange = trigger.smokeColor.Orange, Blue = trigger.smokeColor.Blue - }, + }, FlareColor = { Green = trigger.flareColor.Green, Red = trigger.flareColor.Red, White = trigger.flareColor.White, Yellow = trigger.flareColor.Yellow - }, - } + }, + RoutePointAltType = { + BARO = "BARO", + }, + RoutePointType = { + TurningPoint = "Turning Point", + }, + RoutePointAction = { + TurningPoint = "Turning Point", + }, +} + --- SmokeColor -- @type POINT_VEC3.SmokeColor @@ -12007,6 +12096,8 @@ POINT_VEC3 = { -- @field Orange -- @field Blue + + --- FlareColor -- @type POINT_VEC3.FlareColor -- @field Green @@ -12014,6 +12105,26 @@ POINT_VEC3 = { -- @field White -- @field Yellow + + +--- RoutePoint AltTypes +-- @type POINT_VEC3.RoutePointAltType +-- @field BARO "BARO" + + + +--- RoutePoint Types +-- @type POINT_VEC3.RoutePointType +-- @field TurningPoint "Turning Point" + + + +--- RoutePoint Actions +-- @type POINT_VEC3.RoutePointAction +-- @field TurningPoint "Turning Point" + + + -- Constructor. --- Create a new POINT_VEC3 object. @@ -12021,15 +12132,68 @@ POINT_VEC3 = { -- @param DCSTypes#Distance x The x coordinate of the Vec3 point, pointing to the North. -- @param DCSTypes#Distance y The y coordinate of the Vec3 point, pointing Upwards. -- @param DCSTypes#Distance z The z coordinate of the Vec3 point, pointing to the Right. --- @return Point#POINT_VEC3 +-- @return Point#POINT_VEC3 self function POINT_VEC3:New( x, y, z ) local self = BASE:Inherit( self, BASE:New() ) - self:F2( { x, y, z } ) self.PointVec3 = { x = x, y = y, z = z } + self:F2( self.PointVec3 ) return self end + +--- Build an air type route point. +-- @param #POINT_VEC3 self +-- @param #POINT_VEC3.RoutePointAltType AltType The altitude type. +-- @param #POINT_VEC3.RoutePointType Type The route point type. +-- @param #POINT_VEC3.RoutePointAction Action The route point action. +-- @param DCSTypes#Speed Speed Airspeed in km/h. +-- @param #boolean SpeedLocked true means the speed is locked. +-- @return #table The route point. +function POINT_VEC3:RoutePointAir( AltType, Type, Action, Speed, SpeedLocked ) + + local RoutePoint = {} + RoutePoint.x = self.PointVec3.x + RoutePoint.y = self.PointVec3.z + RoutePoint.alt = self.PointVec3.y + RoutePoint.alt_type = AltType + + RoutePoint.type = Type + RoutePoint.action = Action + + RoutePoint.speed = Speed + RoutePoint.speed_locked = true + + RoutePoint.properties = { + ["vnav"] = 1, + ["scale"] = 0, + ["angle"] = 0, + ["vangle"] = 0, + ["steer"] = 2, + } + +-- ["task"] = +-- { +-- ["id"] = "ComboTask", +-- ["params"] = +-- { +-- ["tasks"] = +-- { +-- }, -- end of ["tasks"] +-- }, -- end of ["params"] +-- }, -- end of ["task"] + + + RoutePoint.task = {} + RoutePoint.task.id = "ComboTask" + RoutePoint.task.params = {} + RoutePoint.task.params.tasks = {} + + + return RoutePoint +end + + --- Smokes the point in a color. -- @param #POINT_VEC3 self -- @param Point#POINT_VEC3.SmokeColor SmokeColor @@ -12208,6 +12372,7 @@ Include.File( "Movement" ) Include.File( "Sead" ) Include.File( "Escort" ) Include.File( "MissileTrainer" ) +Include.File( "PatrolZone" ) Include.File( "AIBalancer" ) Include.File( "AirbasePolice" ) @@ -20951,7 +21116,270 @@ function MISSILETRAINER:_TrackMissiles() return true end ---- This module contains the AIBALANCER class. +--- This module contains the PATROLZONE class. +-- +-- === +-- +-- 1) @{Patrol#PATROLZONE} class, extends @{Base#BASE} +-- =================================================== +-- The @{Patrol#PATROLZONE} class implements the core functions to patrol a @{Zone}. +-- +-- 1.1) PATROLZONE constructor: +-- ---------------------------- +-- @{PatrolZone#PATROLZONE.New}(): Creates a new PATROLZONE object. +-- +-- 1.2) Modify the PATROLZONE parameters: +-- -------------------------------------- +-- The following methods are available to modify the parameters of a PATROLZONE object: +-- +-- * @{PatrolZone#PATROLZONE.SetGroup}(): Set the AI Patrol Group. +-- * @{PatrolZone#PATROLZONE.SetSpeed}(): Set the patrol speed of the AI, for the next patrol. +-- * @{PatrolZone#PATROLZONE.SetAltitude}(): Set altitude of the AI, for the next patrol. +-- +-- 1.3) Manage the out of fuel in the PATROLZONE: +-- ---------------------------------------------- +-- When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +-- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +-- When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +-- Once the time is finished, the old PatrolGroup will return to the base. +-- Use the method @{PatrolZone#PATROLZONE.ManageFuel}() to have this proces in place. +-- +-- === +-- +-- @module PatrolZone +-- @author FlightControl + + +--- PATROLZONE class +-- @type PATROLZONE +-- @field Group#GROUP PatrolGroup The @{Group} patrolling. +-- @field Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. +-- @field DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @field DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @field DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @field DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @extends Base#BASE +PATROLZONE = { + ClassName = "PATROLZONE", +} + +--- Creates a new PATROLZONE object, taking a @{Group} object as a parameter. The GROUP needs to be alive. +-- @param #PATROLZONE self +-- @param Zone#ZONE_BASE PatrolZone The @{Zone} where the patrol needs to be executed. +-- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @return #PATROLZONE self +-- @usage +-- -- Define a new PATROLZONE Object. This PatrolArea will patrol a group within PatrolZone between 3000 and 6000 meters, with a variying speed between 600 and 900 km/h. +-- PatrolZone = ZONE:New( 'PatrolZone' ) +-- PatrolGroup = GROUP:FindByName( "Patrol Group" ) +-- PatrolArea = PATROLZONE:New( PatrolGroup, PatrolZone, 3000, 6000, 600, 900 ) +function PATROLZONE:New( PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + + self.PatrolZone = PatrolZone + self.PatrolFloorAltitude = PatrolFloorAltitude + self.PatrolCeilingAltitude = PatrolCeilingAltitude + self.PatrolMinSpeed = PatrolMinSpeed + self.PatrolMaxSpeed = PatrolMaxSpeed + + return self +end + +--- Set the @{Group} to act as the Patroller. +-- @param #PATROLZONE self +-- @param Group#GROUP PatrolGroup The @{Group} patrolling. +-- @return #PATROLZONE self +function PATROLZONE:SetGroup( PatrolGroup ) + + self.PatrolGroup = PatrolGroup + self.PatrolGroupTemplateName = PatrolGroup:GetName() + self:NewPatrolRoute() + + if not self.PatrolOutOfFuelMonitor then + self.PatrolOutOfFuelMonitor = SCHEDULER:New( self, self._MonitorOutOfFuelScheduled, {}, 60, 120, 0.2 ) + self.SpawnPatrolGroup = SPAWN:New( self.PatrolGroupTemplateName ) + end + + return self +end + +--- Sets (modifies) the minimum and maximum speed of the patrol. +-- @param #PATROLZONE self +-- @param DCSTypes#Speed PatrolMinSpeed The minimum speed of the @{Group} in km/h. +-- @param DCSTypes#Speed PatrolMaxSpeed The maximum speed of the @{Group} in km/h. +-- @return #PATROLZONE self +function PATROLZONE:SetSpeed( PatrolMinSpeed, PatrolMaxSpeed ) + self:F2( { PatrolMinSpeed, PatrolMaxSpeed } ) + + self.PatrolMinSpeed = PatrolMinSpeed + self.PatrolMaxSpeed = PatrolMaxSpeed +end + +--- Sets the floor and ceiling altitude of the patrol. +-- @param #PATROLZONE self +-- @param DCSTypes#Altitude PatrolFloorAltitude The lowest altitude in meters where to execute the patrol. +-- @param DCSTypes#Altitude PatrolCeilingAltitude The highest altitude in meters where to execute the patrol. +-- @return #PATROLZONE self +function PATROLZONE:SetAltitude( PatrolFloorAltitude, PatrolCeilingAltitude ) + self:F2( { PatrolFloorAltitude, PatrolCeilingAltitude } ) + + self.PatrolFloorAltitude = PatrolFloorAltitude + self.PatrolCeilingAltitude = PatrolCeilingAltitude +end + + + +--- @param Group#GROUP PatrolGroup +function _NewPatrolRoute( PatrolGroup ) + + PatrolGroup:T( "NewPatrolRoute" ) + local PatrolZone = PatrolGroup:GetState( PatrolGroup, "PatrolZone" ) -- PatrolZone#PATROLZONE + PatrolZone:NewPatrolRoute() +end + +--- Defines a new patrol route using the @{PatrolZone} parameters and settings. +-- @param #PATROLZONE self +-- @return #PATROLZONE self +function PATROLZONE:NewPatrolRoute() + + self:F2() + + local PatrolRoute = {} + + if self.PatrolGroup:IsAlive() then + --- Determine if the PatrolGroup is within the PatrolZone. + -- If not, make a waypoint within the to that the PatrolGroup will fly at maximum speed to that point. + +-- --- Calculate the current route point. +-- local CurrentVec2 = self.PatrolGroup:GetPointVec2() +-- local CurrentAltitude = self.PatrolGroup:GetUnit(1):GetAltitude() +-- local CurrentPointVec3 = POINT_VEC3:New( CurrentVec2.x, CurrentAltitude, CurrentVec2.y ) +-- local CurrentRoutePoint = CurrentPointVec3:RoutePointAir( +-- POINT_VEC3.RoutePointAltType.BARO, +-- POINT_VEC3.RoutePointType.TurningPoint, +-- POINT_VEC3.RoutePointAction.TurningPoint, +-- ToPatrolZoneSpeed, +-- true +-- ) +-- +-- PatrolRoute[#PatrolRoute+1] = CurrentRoutePoint + + self:T2( PatrolRoute ) + + if self.PatrolGroup:IsNotInZone( self.PatrolZone ) then + --- Find a random 2D point in PatrolZone. + local ToPatrolZoneVec2 = self.PatrolZone:GetRandomVec2() + self:T2( ToPatrolZoneVec2 ) + + --- Define Speed and Altitude. + local ToPatrolZoneAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ) + local ToPatrolZoneSpeed = self.PatrolMaxSpeed + + --- Obtain a 3D @{Point} from the 2D point + altitude. + self:T2( ToPatrolZoneVec2.x ) + self:T2( ToPatrolZoneVec2.y ) + local ToPatrolZonePointVec3 = POINT_VEC3:New( ToPatrolZoneVec2.x, ToPatrolZoneAltitude, ToPatrolZoneVec2.y ) + + --- Create a route point of type air. + local ToPatrolZoneRoutePoint = ToPatrolZonePointVec3:RoutePointAir( + POINT_VEC3.RoutePointAltType.BARO, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToPatrolZoneSpeed, + true + ) + + PatrolRoute[#PatrolRoute+1] = ToPatrolZoneRoutePoint + + end + + --- Define a random point in the @{Zone}. The AI will fly to that point within the zone. + + --- Find a random 2D point in PatrolZone. + local ToTargetVec2 = self.PatrolZone:GetRandomVec2() + self:T2( ToTargetVec2 ) + + --- Define Speed and Altitude. + local ToTargetAltitude = math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ) + local ToTargetSpeed = math.random( self.PatrolMinSpeed, self.PatrolMaxSpeed ) + + --- Obtain a 3D @{Point} from the 2D point + altitude. + local ToTargetPointVec3 = POINT_VEC3:New( ToTargetVec2.x, ToTargetAltitude, ToTargetVec2.y ) + + --- Create a route point of type air. + local ToTargetRoutePoint = ToTargetPointVec3:RoutePointAir( + POINT_VEC3.RoutePointAltType.BARO, + POINT_VEC3.RoutePointType.TurningPoint, + POINT_VEC3.RoutePointAction.TurningPoint, + ToTargetSpeed, + true + ) + + ToTargetPointVec3:SmokeRed() + + PatrolRoute[#PatrolRoute+1] = ToTargetRoutePoint + + --- Now we're going to do something special, we're going to call a function from a waypoint action at the PatrolGroup... + self.PatrolGroup:WayPointInitialize( PatrolRoute ) + + --- Do a trick, link the NewPatrolRoute function of the PATROLGROUP object to the PatrolGroupin a temporary variable ... + self.PatrolGroup:SetState( self.PatrolGroup, "PatrolZone", self ) + self.PatrolGroup:WayPointFunction( #PatrolRoute, 1, "_NewPatrolRoute" ) + + --- NOW ROUTE THE GROUP! + self.PatrolGroup:WayPointExecute( 1, 2 ) + end + +end + +--- When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +-- Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +-- When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +-- Once the time is finished, the old PatrolGroup will return to the base. +-- @param #PATROLZONE self +-- @param #number PatrolFuelTresholdPercentage The treshold in percentage (between 0 and 1) when the PatrolGroup is considered to get out of fuel. +-- @param #number PatrolOutOfFuelOrbitTime The amount of seconds the out of fuel PatrolGroup will orbit before returning to the base. +-- @return #PATROLZONE self +function PATROLZONE:ManageFuel( PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime ) + + self.PatrolManageFuel = true + self.PatrolFuelTresholdPercentage = PatrolFuelTresholdPercentage + self.PatrolOutOfFuelOrbitTime = PatrolOutOfFuelOrbitTime + + if self.PatrolGroup then + self.PatrolOutOfFuelMonitor = SCHEDULER:New( self, self._MonitorOutOfFuelScheduled, {}, 60, 120, 0.2 ) + self.SpawnPatrolGroup = SPAWN:New( self.PatrolGroupTemplateName ) + end + return self +end + +--- @param #PATROLZONE self +function PATROLZONE:_MonitorOutOfFuelScheduled() + + if self.PatrolGroup and self.PatrolGroup:IsAlive() then + + local Fuel = self.PatrolGroup:GetUnit(1):GetFuel() + if Fuel < self.PatrolFuelTresholdPercentage then + local OldPatrolGroup = self.PatrolGroup + local PatrolGroupTemplate = self.PatrolGroup:GetTemplate() + + local OrbitTask = OldPatrolGroup:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed ) + local TimedOrbitTask = OldPatrolGroup:TaskControlled( OrbitTask, OldPatrolGroup:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) ) + OldPatrolGroup:SetTask( TimedOrbitTask, 10 ) + + local NewPatrolGroup = self.SpawnPatrolGroup:Spawn() + self.PatrolGroup = NewPatrolGroup + self:NewPatrolRoute() + end + else + self.PatrolOutOfFuelMonitor:Stop() + end +end--- This module contains the AIBALANCER class. -- -- === -- @@ -20966,13 +21394,18 @@ end -- -- * @{#AIBALANCER.New}: Creates a new AIBALANCER object. -- --- 1.2) AIBALANCER return AI to Airbases: --- -------------------------------------- +-- 1.2) AIBALANCER returns AI to Airbases: +-- --------------------------------------- -- You can configure to have the AI to return to: -- -- * @{#AIBALANCER.ReturnToHomeAirbase}: Returns the AI to the home @{Airbase#AIRBASE}. -- * @{#AIBALANCER.ReturnToNearestAirbases}: Returns the AI to the nearest friendly @{Airbase#AIRBASE}. -- +-- 1.3) AIBALANCER allows AI to patrol specific zones: +-- --------------------------------------------------- +-- Use @{AIBalancer#AIBALANCER.SetPatrolZone}() to specify a zone where the AI needs to patrol. +-- +-- -- === -- -- CREDITS @@ -20981,6 +21414,10 @@ end -- Working together with James has resulted in the creation of the AIBALANCER class. -- James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-) -- +-- **SNAFU** +-- Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. +-- None of the script code has been used however within the new AIBALANCER moose class. +-- -- @module AIBalancer -- @author FlightControl @@ -20992,6 +21429,7 @@ end -- @field Set#SET_AIRBASE ReturnAirbaseSet -- @field DCSTypes#Distance ReturnTresholdRange -- @field #boolean ToHomeAirbase +-- @field PatrolZone#PATROLZONE PatrolZone -- @extends Base#BASE AIBALANCER = { ClassName = "AIBALANCER", @@ -21057,6 +21495,15 @@ function AIBALANCER:ReturnToHomeAirbase( ReturnTresholdRange ) self.ReturnTresholdRange = ReturnTresholdRange end +--- Let the AI patrol a @{Zone} with a given Speed range and Altitude range. +-- @param #AIBALANCER self +-- @param PatrolZone#PATROLZONE PatrolZone The @{PatrolZone} where the AI needs to patrol. +-- @return PatrolZone#PATROLZONE self +function AIBALANCER:SetPatrolZone( PatrolZone ) + + self.PatrolZone = PatrolZone +end + --- @param #AIBALANCER self function AIBALANCER:_ClientAliveMonitorScheduler() @@ -21071,6 +21518,12 @@ function AIBALANCER:_ClientAliveMonitorScheduler() local AIGroup = Client:GetState( self, 'AIGroup' ) -- Group#GROUP + local PatrolZone = Client:GetState( self, "PatrolZone" ) + if PatrolZone then + PatrolZone = nil + Client:ClearState( self, "PatrolZone" ) + end + if self.ToNearestAirbase == false and self.ToHomeAirbase == false then AIGroup:Destroy() else @@ -21131,7 +21584,27 @@ function AIBALANCER:_ClientAliveMonitorScheduler() -- OK, spawn a new group from the SpawnAI objects provided. local SpawnAICount = #self.SpawnAI local SpawnAIIndex = math.random( 1, SpawnAICount ) - Client:SetState( self, 'AIGroup', self.SpawnAI[SpawnAIIndex]:Spawn() ) + local AIGroup = self.SpawnAI[SpawnAIIndex]:Spawn() + Client:SetState( self, 'AIGroup', AIGroup ) + + --- Now test if the AIGroup needs to patrol a zone, otherwise let it follow its route... + if self.PatrolZone then + local PatrolZone = PATROLZONE:New( + self.PatrolZone.PatrolZone, + self.PatrolZone.PatrolFloorAltitude, + self.PatrolZone.PatrolCeilingAltitude, + self.PatrolZone.PatrolMinSpeed, + self.PatrolPatrolMaxSpeed + ) + + if self.PatrolZone.PatrolManageFuel == true then + PatrolZone:ManageFuel( self.PatrolZone.PatrolFuelTresholdPercentage, self.PatrolZone.PatrolOutOfFuelOrbitTime ) + end + + PatrolZone:SetGroup( AIGroup ) + + Client:SetState( self, "PatrolZone", PatrolZone ) + end end end end @@ -21141,6 +21614,931 @@ end +--- This module contains the AIRBASEPOLICE classes. +-- +-- === +-- +-- 1) @{AirbasePolice#AIRBASEPOLICE_BASE} class, extends @{Base#BASE} +-- ================================================================== +-- The @{AirbasePolice#AIRBASEPOLICE_BASE} class provides the main methods to monitor CLIENT behaviour at airbases. +-- CLIENTS should not be allowed to: +-- +-- * Don't taxi faster than 40 km/h. +-- * Don't take-off on taxiways. +-- * Avoid to hit other planes on the airbase. +-- * Obey ground control orders. +-- +-- 2) @{AirbasePolice#AIRBASEPOLICE_CAUCASUS} class, extends @{AirbasePolice#AIRBASEPOLICE_BASE} +-- ============================================================================================= +-- All the airbases on the caucasus map can be monitored using this class. +-- If you want to monitor specific airbases, you need to use the @{#AIRBASEPOLICE_BASE.Monitor}() method, which takes a table or airbase names. +-- The following names can be given: +-- * AnapaVityazevo +-- * Batumi +-- * Beslan +-- * Gelendzhik +-- * Gudauta +-- * Kobuleti +-- * KrasnodarCenter +-- * KrasnodarPashkovsky +-- * Krymsk +-- * Kutaisi +-- * MaykopKhanskaya +-- * MineralnyeVody +-- * Mozdok +-- * Nalchik +-- * Novorossiysk +-- * SenakiKolkhi +-- * SochiAdler +-- * Soganlug +-- * SukhumiBabushara +-- * TbilisiLochini +-- * Vaziani +-- +-- @module AirbasePolice +-- @author FlightControl + + +--- @type AIRBASEPOLICE_BASE +-- @field Set#SET_CLIENT SetClient +-- @extends Base#BASE + +AIRBASEPOLICE_BASE = { + ClassName = "AIRBASEPOLICE_BASE", + SetClient = nil, + Airbases = nil, + AirbaseNames = nil, +} + + +--- Creates a new AIRBASEPOLICE_BASE object. +-- @param #AIRBASEPOLICE_BASE self +-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they follow the rules of the airbase. +-- @param Airbases A table of Airbase Names. +-- @return #AIRBASEPOLICE_BASE self +function AIRBASEPOLICE_BASE:New( SetClient, Airbases ) + + -- Inherits from BASE + local self = BASE:Inherit( self, BASE:New() ) + self:E( { self.ClassName, SetClient, Airbases } ) + + self.SetClient = SetClient + self.Airbases = Airbases + + for AirbaseID, Airbase in pairs( self.Airbases ) do + Airbase.ZoneBoundary = ZONE_POLYGON_BASE:New( "Boundary", Airbase.PointsBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + for PointsRunwayID, PointsRunway in pairs( Airbase.PointsRunways ) do + Airbase.ZoneRunways[PointsRunwayID] = ZONE_POLYGON_BASE:New( "Runway " .. PointsRunwayID, PointsRunway ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + end + end + + -- -- Template + -- local TemplateBoundary = GROUP:FindByName( "Template Boundary" ) + -- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" ) + -- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + + self.SetClient:ForEachClient( + --- @param Client#CLIENT Client + function( Client ) + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0) + Client:SetState( self, "Taxi", false ) + end + ) + + self.AirbaseMonitor = SCHEDULER:New( self, self._AirbaseMonitor, {}, 0, 2, 0.05 ) + + return self +end + +--- @type AIRBASEPOLICE_BASE.AirbaseNames +-- @list <#string> + +--- Monitor a table of airbase names. +-- @param #AIRBASEPOLICE_BASE self +-- @param #AIRBASEPOLICE_BASE.AirbaseNames AirbaseNames A list of AirbaseNames to monitor. If this parameters is nil, then all airbases will be monitored. +-- @return #AIRBASEPOLICE_BASE self +function AIRBASEPOLICE_BASE:Monitor( AirbaseNames ) + + if AirbaseNames then + if type( AirbaseNames ) == "table" then + self.AirbaseNames = AirbaseNames + else + self.AirbaseNames = { AirbaseNames } + end + end +end + +--- @param #AIRBASEPOLICE_BASE self +function AIRBASEPOLICE_BASE:_AirbaseMonitor() + + for AirbaseID, Airbase in pairs( self.Airbases ) do + + if not self.AirbaseNames or self.AirbaseNames[AirbaseID] then + + self:E( AirbaseID ) + + self.SetClient:ForEachClientInZone( Airbase.ZoneBoundary, + + --- @param Client#CLIENT Client + function( Client ) + + self:E( Client.UnitName ) + if Client:IsAlive() then + local NotInRunwayZone = true + for ZoneRunwayID, ZoneRunway in pairs( Airbase.ZoneRunways ) do + NotInRunwayZone = ( Client:IsNotInZone( ZoneRunway ) == true ) and NotInRunwayZone or false + end + + if NotInRunwayZone then + local Taxi = self:GetState( self, "Taxi" ) + self:E( Taxi ) + if Taxi == false then + Client:Message( "Welcome at " .. AirbaseID .. ". The maximum taxiing speed is " .. Airbase.MaximumSpeed " km/h.", 20, "ATC" ) + self:SetState( self, "Taxi", true ) + end + + local VelocityVec3 = Client:GetVelocity() + local Velocity = math.abs(VelocityVec3.x) + math.abs(VelocityVec3.y) + math.abs(VelocityVec3.z) + local IsAboveRunway = Client:IsAboveRunway() + local IsOnGround = Client:InAir() == false + self:T( IsAboveRunway, IsOnGround ) + + if IsAboveRunway and IsOnGround then + + if Velocity > Airbase.MaximumSpeed then + local IsSpeeding = Client:GetState( self, "Speeding" ) + + if IsSpeeding == true then + local SpeedingWarnings = Client:GetState( self, "Warnings" ) + self:T( SpeedingWarnings ) + + if SpeedingWarnings <= 5 then + Client:Message( "You are speeding on the taxiway! Slow down or you will be removed from this airbase! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Warning " .. SpeedingWarnings .. " / 5" ) + Client:SetState( self, "Warnings", SpeedingWarnings + 1 ) + else + MESSAGE:New( "Player " .. Client:GetPlayerName() .. " has been removed from the airbase, due to a speeding violation ...", 10, "Airbase Police" ):ToAll() + Client:GetGroup():Destroy() + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0 ) + end + + else + Client:Message( "You are speeding on the taxiway! Slow down please ...! Your current velocity is " .. string.format( "%2.0f km/h", Velocity ), 5, "Attention! " ) + Client:SetState( self, "Speeding", true ) + Client:SetState( self, "Warnings", 1 ) + end + + else + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0 ) + end + end + + else + Client:SetState( self, "Speeding", false ) + Client:SetState( self, "Warnings", 0 ) + local Taxi = self:GetState( self, "Taxi" ) + if Taxi == true then + Client:Message( "You have progressed to the runway ... Await take-off clearance ...", 20, "ATC" ) + self:SetState( self, "Taxi", false ) + end + end + end + end + ) + end + end + + return true +end + + +--- @type AIRBASEPOLICE_CAUCASUS +-- @field Set#SET_CLIENT SetClient +-- @extends #AIRBASEPOLICE_BASE + +AIRBASEPOLICE_CAUCASUS = { + ClassName = "AIRBASEPOLICE_CAUCASUS", + Airbases = { + AnapaVityazevo = { + PointsBoundary = { + [1]={["y"]=242234.85714287,["x"]=-6616.5714285726,}, + [2]={["y"]=241060.57142858,["x"]=-5585.142857144,}, + [3]={["y"]=243806.2857143,["x"]=-3962.2857142868,}, + [4]={["y"]=245240.57142858,["x"]=-4816.5714285726,}, + [5]={["y"]=244783.42857144,["x"]=-5630.8571428583,}, + [6]={["y"]=243800.57142858,["x"]=-5065.142857144,}, + [7]={["y"]=242232.00000001,["x"]=-6622.2857142868,}, + }, + PointsRunways = { + [1] = { + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Batumi = { + PointsBoundary = { + [1]={["y"]=617567.14285714,["x"]=-355313.14285715,}, + [2]={["y"]=616181.42857142,["x"]=-354800.28571429,}, + [3]={["y"]=616007.14285714,["x"]=-355128.85714286,}, + [4]={["y"]=618230,["x"]=-356914.57142858,}, + [5]={["y"]=618727.14285714,["x"]=-356166,}, + [6]={["y"]=617572.85714285,["x"]=-355308.85714286,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=616442.28571429,["x"]=-355090.28571429,}, + [2]={["y"]=618450.57142857,["x"]=-356522,}, + [3]={["y"]=618407.71428571,["x"]=-356584.85714286,}, + [4]={["y"]=618361.99999999,["x"]=-356554.85714286,}, + [5]={["y"]=618324.85714285,["x"]=-356599.14285715,}, + [6]={["y"]=618250.57142856,["x"]=-356543.42857143,}, + [7]={["y"]=618257.7142857,["x"]=-356496.28571429,}, + [8]={["y"]=618237.7142857,["x"]=-356459.14285715,}, + [9]={["y"]=616555.71428571,["x"]=-355258.85714286,}, + [10]={["y"]=616486.28571428,["x"]=-355280.57142858,}, + [11]={["y"]=616410.57142856,["x"]=-355227.71428572,}, + [12]={["y"]=616441.99999999,["x"]=-355179.14285715,}, + [13]={["y"]=616401.99999999,["x"]=-355147.71428572,}, + [14]={["y"]=616441.42857142,["x"]=-355092.57142858,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Beslan = { + PointsBoundary = { + [1]={["y"]=842082.57142857,["x"]=-148445.14285715,}, + [2]={["y"]=845237.71428572,["x"]=-148639.71428572,}, + [3]={["y"]=845232,["x"]=-148765.42857143,}, + [4]={["y"]=844220.57142857,["x"]=-149168.28571429,}, + [5]={["y"]=843274.85714286,["x"]=-149125.42857143,}, + [6]={["y"]=842077.71428572,["x"]=-148554,}, + [7]={["y"]=842083.42857143,["x"]=-148445.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=842104.57142857,["x"]=-148460.57142857,}, + [2]={["y"]=845225.71428572,["x"]=-148656,}, + [3]={["y"]=845220.57142858,["x"]=-148750,}, + [4]={["y"]=842098.85714286,["x"]=-148556.28571429,}, + [5]={["y"]=842104,["x"]=-148460.28571429,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Gelendzhik = { + PointsBoundary = { + [1]={["y"]=297856.00000001,["x"]=-51151.428571429,}, + [2]={["y"]=299044.57142858,["x"]=-49720.000000001,}, + [3]={["y"]=298861.71428572,["x"]=-49580.000000001,}, + [4]={["y"]=298198.85714286,["x"]=-49842.857142858,}, + [5]={["y"]=297990.28571429,["x"]=-50151.428571429,}, + [6]={["y"]=297696.00000001,["x"]=-51054.285714286,}, + [7]={["y"]=297850.28571429,["x"]=-51160.000000001,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=297834.00000001,["x"]=-51107.428571429,}, + [2]={["y"]=297786.57142858,["x"]=-51068.857142858,}, + [3]={["y"]=298946.57142858,["x"]=-49686.000000001,}, + [4]={["y"]=298993.14285715,["x"]=-49725.714285715,}, + [5]={["y"]=297835.14285715,["x"]=-51107.714285715,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Gudauta = { + PointsBoundary = { + [1]={["y"]=517246.57142857,["x"]=-197850.28571429,}, + [2]={["y"]=516749.42857142,["x"]=-198070.28571429,}, + [3]={["y"]=515755.14285714,["x"]=-197598.85714286,}, + [4]={["y"]=515369.42857142,["x"]=-196538.85714286,}, + [5]={["y"]=515623.71428571,["x"]=-195618.85714286,}, + [6]={["y"]=515946.57142857,["x"]=-195510.28571429,}, + [7]={["y"]=517243.71428571,["x"]=-197858.85714286,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=517096.57142857,["x"]=-197804.57142857,}, + [2]={["y"]=515880.85714285,["x"]=-195590.28571429,}, + [3]={["y"]=515812.28571428,["x"]=-195628.85714286,}, + [4]={["y"]=517036.57142857,["x"]=-197834.57142857,}, + [5]={["y"]=517097.99999999,["x"]=-197807.42857143,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Kobuleti = { + PointsBoundary = { + [1]={["y"]=634427.71428571,["x"]=-318290.28571429,}, + [2]={["y"]=635033.42857143,["x"]=-317550.2857143,}, + [3]={["y"]=635864.85714286,["x"]=-317333.14285715,}, + [4]={["y"]=636967.71428571,["x"]=-317261.71428572,}, + [5]={["y"]=637144.85714286,["x"]=-317913.14285715,}, + [6]={["y"]=634630.57142857,["x"]=-318687.42857144,}, + [7]={["y"]=634424.85714286,["x"]=-318290.2857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=634509.71428571,["x"]=-318339.42857144,}, + [2]={["y"]=636767.42857143,["x"]=-317516.57142858,}, + [3]={["y"]=636790,["x"]=-317575.71428572,}, + [4]={["y"]=634531.42857143,["x"]=-318398.00000001,}, + [5]={["y"]=634510.28571429,["x"]=-318339.71428572,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + KrasnodarCenter = { + PointsBoundary = { + [1]={["y"]=366680.28571429,["x"]=11699.142857142,}, + [2]={["y"]=366654.28571429,["x"]=11225.142857142,}, + [3]={["y"]=367497.14285715,["x"]=11082.285714285,}, + [4]={["y"]=368025.71428572,["x"]=10396.57142857,}, + [5]={["y"]=369854.28571429,["x"]=11367.999999999,}, + [6]={["y"]=369840.00000001,["x"]=11910.857142856,}, + [7]={["y"]=366682.57142858,["x"]=11697.999999999,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=369205.42857144,["x"]=11789.142857142,}, + [2]={["y"]=369209.71428572,["x"]=11714.857142856,}, + [3]={["y"]=366699.71428572,["x"]=11581.714285713,}, + [4]={["y"]=366698.28571429,["x"]=11659.142857142,}, + [5]={["y"]=369208.85714286,["x"]=11788.57142857,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + KrasnodarPashkovsky = { + PointsBoundary = { + [1]={["y"]=386754,["x"]=6476.5714285703,}, + [2]={["y"]=389182.57142858,["x"]=8722.2857142846,}, + [3]={["y"]=388832.57142858,["x"]=9086.5714285703,}, + [4]={["y"]=386961.14285715,["x"]=7707.9999999989,}, + [5]={["y"]=385404,["x"]=9179.4285714274,}, + [6]={["y"]=383239.71428572,["x"]=7386.5714285703,}, + [7]={["y"]=383954,["x"]=6486.5714285703,}, + [8]={["y"]=385775.42857143,["x"]=8097.9999999989,}, + [9]={["y"]=386804,["x"]=7319.4285714274,}, + [10]={["y"]=386375.42857143,["x"]=6797.9999999989,}, + [11]={["y"]=386746.85714286,["x"]=6472.2857142846,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=385891.14285715,["x"]=8416.5714285703,}, + [2]={["y"]=385842.28571429,["x"]=8467.9999999989,}, + [3]={["y"]=384180.85714286,["x"]=6917.1428571417,}, + [4]={["y"]=384228.57142858,["x"]=6867.7142857132,}, + [5]={["y"]=385891.14285715,["x"]=8416.5714285703,}, + }, + [2] = { + [1]={["y"]=386714.85714286,["x"]=6674.857142856,}, + [2]={["y"]=386757.71428572,["x"]=6627.7142857132,}, + [3]={["y"]=389028.57142858,["x"]=8741.4285714275,}, + [4]={["y"]=388981.71428572,["x"]=8790.5714285703,}, + [5]={["y"]=386714.57142858,["x"]=6674.5714285703,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Krymsk = { + PointsBoundary = { + [1]={["y"]=293338.00000001,["x"]=-7575.4285714297,}, + [2]={["y"]=295199.42857144,["x"]=-5434.0000000011,}, + [3]={["y"]=295595.14285715,["x"]=-6239.7142857154,}, + [4]={["y"]=294152.2857143,["x"]=-8325.4285714297,}, + [5]={["y"]=293345.14285715,["x"]=-7596.8571428582,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=293522.00000001,["x"]=-7567.4285714297,}, + [2]={["y"]=293578.57142858,["x"]=-7616.0000000011,}, + [3]={["y"]=295246.00000001,["x"]=-5591.142857144,}, + [4]={["y"]=295187.71428573,["x"]=-5546.0000000011,}, + [5]={["y"]=293523.14285715,["x"]=-7568.2857142868,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Kutaisi = { + PointsBoundary = { + [1]={["y"]=682087.42857143,["x"]=-284512.85714286,}, + [2]={["y"]=685387.42857143,["x"]=-283662.85714286,}, + [3]={["y"]=685294.57142857,["x"]=-284977.14285715,}, + [4]={["y"]=682744.57142857,["x"]=-286505.71428572,}, + [5]={["y"]=682094.57142857,["x"]=-284527.14285715,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=682638,["x"]=-285202.28571429,}, + [2]={["y"]=685050.28571429,["x"]=-284507.42857144,}, + [3]={["y"]=685068.85714286,["x"]=-284578.85714286,}, + [4]={["y"]=682657.42857143,["x"]=-285264.28571429,}, + [5]={["y"]=682638.28571429,["x"]=-285202.85714286,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + MaykopKhanskaya = { + PointsBoundary = { + [1]={["y"]=456876.28571429,["x"]=-27665.42857143,}, + [2]={["y"]=457800,["x"]=-28392.857142858,}, + [3]={["y"]=459368.57142857,["x"]=-26378.571428573,}, + [4]={["y"]=459425.71428572,["x"]=-25242.857142858,}, + [5]={["y"]=458961.42857143,["x"]=-24964.285714287,}, + [6]={["y"]=456878.57142857,["x"]=-27667.714285715,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=457005.42857143,["x"]=-27668.000000001,}, + [2]={["y"]=459028.85714286,["x"]=-25168.857142858,}, + [3]={["y"]=459082.57142857,["x"]=-25216.857142858,}, + [4]={["y"]=457060,["x"]=-27714.285714287,}, + [5]={["y"]=457004.57142857,["x"]=-27669.714285715,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + MineralnyeVody = { + PointsBoundary = { + [1]={["y"]=703857.14285714,["x"]=-50226.000000002,}, + [2]={["y"]=707385.71428571,["x"]=-51911.714285716,}, + [3]={["y"]=707595.71428571,["x"]=-51434.857142859,}, + [4]={["y"]=707900,["x"]=-51568.857142859,}, + [5]={["y"]=707542.85714286,["x"]=-52326.000000002,}, + [6]={["y"]=706628.57142857,["x"]=-52568.857142859,}, + [7]={["y"]=705142.85714286,["x"]=-51790.285714288,}, + [8]={["y"]=703678.57142857,["x"]=-50611.714285716,}, + [9]={["y"]=703857.42857143,["x"]=-50226.857142859,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=703904,["x"]=-50352.571428573,}, + [2]={["y"]=707596.28571429,["x"]=-52094.571428573,}, + [3]={["y"]=707560.57142858,["x"]=-52161.714285716,}, + [4]={["y"]=703871.71428572,["x"]=-50420.571428573,}, + [5]={["y"]=703902,["x"]=-50352.000000002,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Mozdok = { + PointsBoundary = { + [1]={["y"]=832123.42857143,["x"]=-83608.571428573,}, + [2]={["y"]=835916.28571429,["x"]=-83144.285714288,}, + [3]={["y"]=835474.28571429,["x"]=-84170.571428573,}, + [4]={["y"]=832911.42857143,["x"]=-84470.571428573,}, + [5]={["y"]=832487.71428572,["x"]=-85565.714285716,}, + [6]={["y"]=831573.42857143,["x"]=-85351.42857143,}, + [7]={["y"]=832123.71428572,["x"]=-83610.285714288,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=832201.14285715,["x"]=-83699.428571431,}, + [2]={["y"]=832212.57142857,["x"]=-83780.571428574,}, + [3]={["y"]=835730.28571429,["x"]=-83335.714285717,}, + [4]={["y"]=835718.85714286,["x"]=-83246.571428574,}, + [5]={["y"]=832200.57142857,["x"]=-83700.000000002,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Nalchik = { + PointsBoundary = { + [1]={["y"]=759370,["x"]=-125502.85714286,}, + [2]={["y"]=761384.28571429,["x"]=-124177.14285714,}, + [3]={["y"]=761472.85714286,["x"]=-124325.71428572,}, + [4]={["y"]=761092.85714286,["x"]=-125048.57142857,}, + [5]={["y"]=760295.71428572,["x"]=-125685.71428572,}, + [6]={["y"]=759444.28571429,["x"]=-125734.28571429,}, + [7]={["y"]=759375.71428572,["x"]=-125511.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=759454.28571429,["x"]=-125551.42857143,}, + [2]={["y"]=759492.85714286,["x"]=-125610.85714286,}, + [3]={["y"]=761406.28571429,["x"]=-124304.28571429,}, + [4]={["y"]=761361.14285714,["x"]=-124239.71428572,}, + [5]={["y"]=759456,["x"]=-125552.57142857,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Novorossiysk = { + PointsBoundary = { + [1]={["y"]=278677.71428573,["x"]=-41656.571428572,}, + [2]={["y"]=278446.2857143,["x"]=-41453.714285715,}, + [3]={["y"]=278989.14285716,["x"]=-40188.000000001,}, + [4]={["y"]=279717.71428573,["x"]=-39968.000000001,}, + [5]={["y"]=280020.57142859,["x"]=-40208.000000001,}, + [6]={["y"]=278674.85714287,["x"]=-41660.857142858,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=278673.14285716,["x"]=-41615.142857144,}, + [2]={["y"]=278625.42857144,["x"]=-41570.571428572,}, + [3]={["y"]=279835.42857144,["x"]=-40226.000000001,}, + [4]={["y"]=279882.2857143,["x"]=-40270.000000001,}, + [5]={["y"]=278672.00000001,["x"]=-41614.857142858,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + SenakiKolkhi = { + PointsBoundary = { + [1]={["y"]=646036.57142857,["x"]=-281778.85714286,}, + [2]={["y"]=646045.14285714,["x"]=-281191.71428571,}, + [3]={["y"]=647032.28571429,["x"]=-280598.85714285,}, + [4]={["y"]=647669.42857143,["x"]=-281273.14285714,}, + [5]={["y"]=648323.71428571,["x"]=-281370.28571428,}, + [6]={["y"]=648520.85714286,["x"]=-281978.85714285,}, + [7]={["y"]=646039.42857143,["x"]=-281783.14285714,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=646060.85714285,["x"]=-281736,}, + [2]={["y"]=646056.57142857,["x"]=-281631.71428571,}, + [3]={["y"]=648442.28571428,["x"]=-281840.28571428,}, + [4]={["y"]=648432.28571428,["x"]=-281918.85714286,}, + [5]={["y"]=646063.71428571,["x"]=-281738.85714286,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + SochiAdler = { + PointsBoundary = { + [1]={["y"]=460642.28571428,["x"]=-164861.71428571,}, + [2]={["y"]=462820.85714285,["x"]=-163368.85714286,}, + [3]={["y"]=463649.42857142,["x"]=-163340.28571429,}, + [4]={["y"]=463835.14285714,["x"]=-164040.28571429,}, + [5]={["y"]=462535.14285714,["x"]=-165654.57142857,}, + [6]={["y"]=460678,["x"]=-165247.42857143,}, + [7]={["y"]=460635.14285714,["x"]=-164876,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=460831.42857143,["x"]=-165180,}, + [2]={["y"]=460878.57142857,["x"]=-165257.14285714,}, + [3]={["y"]=463663.71428571,["x"]=-163793.14285714,}, + [4]={["y"]=463612.28571428,["x"]=-163697.42857143,}, + [5]={["y"]=460831.42857143,["x"]=-165177.14285714,}, + }, + [2] = { + [1]={["y"]=460831.42857143,["x"]=-165180,}, + [2]={["y"]=460878.57142857,["x"]=-165257.14285714,}, + [3]={["y"]=463663.71428571,["x"]=-163793.14285714,}, + [4]={["y"]=463612.28571428,["x"]=-163697.42857143,}, + [5]={["y"]=460831.42857143,["x"]=-165177.14285714,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Soganlug = { + PointsBoundary = { + [1]={["y"]=894530.85714286,["x"]=-316928.28571428,}, + [2]={["y"]=896422.28571428,["x"]=-318622.57142857,}, + [3]={["y"]=896090.85714286,["x"]=-318934,}, + [4]={["y"]=894019.42857143,["x"]=-317119.71428571,}, + [5]={["y"]=894533.71428571,["x"]=-316925.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=894525.71428571,["x"]=-316964,}, + [2]={["y"]=896363.14285714,["x"]=-318634.28571428,}, + [3]={["y"]=896299.14285714,["x"]=-318702.85714286,}, + [4]={["y"]=894464,["x"]=-317031.71428571,}, + [5]={["y"]=894524.57142857,["x"]=-316963.71428571,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + SukhumiBabushara = { + PointsBoundary = { + [1]={["y"]=562541.14285714,["x"]=-219852.28571429,}, + [2]={["y"]=562691.14285714,["x"]=-219395.14285714,}, + [3]={["y"]=564326.85714286,["x"]=-219523.71428571,}, + [4]={["y"]=566262.57142857,["x"]=-221166.57142857,}, + [5]={["y"]=566069.71428571,["x"]=-221580.85714286,}, + [6]={["y"]=562534,["x"]=-219873.71428571,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=562684,["x"]=-219779.71428571,}, + [2]={["y"]=562717.71428571,["x"]=-219718,}, + [3]={["y"]=566046.85714286,["x"]=-221376.57142857,}, + [4]={["y"]=566012.28571428,["x"]=-221446.57142857,}, + [5]={["y"]=562684.57142857,["x"]=-219782.57142857,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + TbilisiLochini = { + PointsBoundary = { + [1]={["y"]=895172.85714286,["x"]=-314667.42857143,}, + [2]={["y"]=895337.42857143,["x"]=-314143.14285714,}, + [3]={["y"]=895990.28571429,["x"]=-314036,}, + [4]={["y"]=897730.28571429,["x"]=-315284.57142857,}, + [5]={["y"]=897901.71428571,["x"]=-316284.57142857,}, + [6]={["y"]=897684.57142857,["x"]=-316618.85714286,}, + [7]={["y"]=895173.14285714,["x"]=-314667.42857143,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=895261.14285715,["x"]=-314652.28571428,}, + [2]={["y"]=897654.57142857,["x"]=-316523.14285714,}, + [3]={["y"]=897711.71428571,["x"]=-316450.28571429,}, + [4]={["y"]=895327.42857143,["x"]=-314568.85714286,}, + [5]={["y"]=895261.71428572,["x"]=-314656,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + Vaziani = { + PointsBoundary = { + [1]={["y"]=902122,["x"]=-318163.71428572,}, + [2]={["y"]=902678.57142857,["x"]=-317594,}, + [3]={["y"]=903275.71428571,["x"]=-317405.42857143,}, + [4]={["y"]=903418.57142857,["x"]=-317891.14285714,}, + [5]={["y"]=904292.85714286,["x"]=-318748.28571429,}, + [6]={["y"]=904542,["x"]=-319740.85714286,}, + [7]={["y"]=904042,["x"]=-320166.57142857,}, + [8]={["y"]=902121.42857143,["x"]=-318164.85714286,}, + }, + PointsRunways = { + [1] = { + [1]={["y"]=902239.14285714,["x"]=-318190.85714286,}, + [2]={["y"]=904014.28571428,["x"]=-319994.57142857,}, + [3]={["y"]=904064.85714285,["x"]=-319945.14285715,}, + [4]={["y"]=902294.57142857,["x"]=-318146,}, + [5]={["y"]=902247.71428571,["x"]=-318190.85714286,}, + }, + }, + ZoneBoundary = {}, + ZoneRunways = {}, + MaximumSpeed = 50, + }, + }, +} + +--- Creates a new AIRBASEPOLICE_CAUCASUS object. +-- @param #AIRBASEPOLICE_CAUCASUS self +-- @param SetClient A SET_CLIENT object that will contain the CLIENT objects to be monitored if they follow the rules of the airbase. +-- @return #AIRBASEPOLICE_CAUCASUS self +function AIRBASEPOLICE_CAUCASUS:New( SetClient ) + + -- Inherits from BASE + local self = BASE:Inherit( self, AIRBASEPOLICE_BASE:New( SetClient, self.Airbases ) ) + + -- -- AnapaVityazevo + -- local AnapaVityazevoBoundary = GROUP:FindByName( "AnapaVityazevo Boundary" ) + -- self.Airbases.AnapaVityazevo.ZoneBoundary = ZONE_POLYGON:New( "AnapaVityazevo Boundary", AnapaVityazevoBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local AnapaVityazevoRunway1 = GROUP:FindByName( "AnapaVityazevo Runway 1" ) + -- self.Airbases.AnapaVityazevo.ZoneRunways[1] = ZONE_POLYGON:New( "AnapaVityazevo Runway 1", AnapaVityazevoRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Batumi + -- local BatumiBoundary = GROUP:FindByName( "Batumi Boundary" ) + -- self.Airbases.Batumi.ZoneBoundary = ZONE_POLYGON:New( "Batumi Boundary", BatumiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local BatumiRunway1 = GROUP:FindByName( "Batumi Runway 1" ) + -- self.Airbases.Batumi.ZoneRunways[1] = ZONE_POLYGON:New( "Batumi Runway 1", BatumiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Beslan + -- local BeslanBoundary = GROUP:FindByName( "Beslan Boundary" ) + -- self.Airbases.Beslan.ZoneBoundary = ZONE_POLYGON:New( "Beslan Boundary", BeslanBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local BeslanRunway1 = GROUP:FindByName( "Beslan Runway 1" ) + -- self.Airbases.Beslan.ZoneRunways[1] = ZONE_POLYGON:New( "Beslan Runway 1", BeslanRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Gelendzhik + -- local GelendzhikBoundary = GROUP:FindByName( "Gelendzhik Boundary" ) + -- self.Airbases.Gelendzhik.ZoneBoundary = ZONE_POLYGON:New( "Gelendzhik Boundary", GelendzhikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local GelendzhikRunway1 = GROUP:FindByName( "Gelendzhik Runway 1" ) + -- self.Airbases.Gelendzhik.ZoneRunways[1] = ZONE_POLYGON:New( "Gelendzhik Runway 1", GelendzhikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Gudauta + -- local GudautaBoundary = GROUP:FindByName( "Gudauta Boundary" ) + -- self.Airbases.Gudauta.ZoneBoundary = ZONE_POLYGON:New( "Gudauta Boundary", GudautaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local GudautaRunway1 = GROUP:FindByName( "Gudauta Runway 1" ) + -- self.Airbases.Gudauta.ZoneRunways[1] = ZONE_POLYGON:New( "Gudauta Runway 1", GudautaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Kobuleti + -- local KobuletiBoundary = GROUP:FindByName( "Kobuleti Boundary" ) + -- self.Airbases.Kobuleti.ZoneBoundary = ZONE_POLYGON:New( "Kobuleti Boundary", KobuletiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KobuletiRunway1 = GROUP:FindByName( "Kobuleti Runway 1" ) + -- self.Airbases.Kobuleti.ZoneRunways[1] = ZONE_POLYGON:New( "Kobuleti Runway 1", KobuletiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- KrasnodarCenter + -- local KrasnodarCenterBoundary = GROUP:FindByName( "KrasnodarCenter Boundary" ) + -- self.Airbases.KrasnodarCenter.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarCenter Boundary", KrasnodarCenterBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KrasnodarCenterRunway1 = GROUP:FindByName( "KrasnodarCenter Runway 1" ) + -- self.Airbases.KrasnodarCenter.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarCenter Runway 1", KrasnodarCenterRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- KrasnodarPashkovsky + -- local KrasnodarPashkovskyBoundary = GROUP:FindByName( "KrasnodarPashkovsky Boundary" ) + -- self.Airbases.KrasnodarPashkovsky.ZoneBoundary = ZONE_POLYGON:New( "KrasnodarPashkovsky Boundary", KrasnodarPashkovskyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KrasnodarPashkovskyRunway1 = GROUP:FindByName( "KrasnodarPashkovsky Runway 1" ) + -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[1] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 1", KrasnodarPashkovskyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- local KrasnodarPashkovskyRunway2 = GROUP:FindByName( "KrasnodarPashkovsky Runway 2" ) + -- self.Airbases.KrasnodarPashkovsky.ZoneRunways[2] = ZONE_POLYGON:New( "KrasnodarPashkovsky Runway 2", KrasnodarPashkovskyRunway2 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Krymsk + -- local KrymskBoundary = GROUP:FindByName( "Krymsk Boundary" ) + -- self.Airbases.Krymsk.ZoneBoundary = ZONE_POLYGON:New( "Krymsk Boundary", KrymskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KrymskRunway1 = GROUP:FindByName( "Krymsk Runway 1" ) + -- self.Airbases.Krymsk.ZoneRunways[1] = ZONE_POLYGON:New( "Krymsk Runway 1", KrymskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Kutaisi + -- local KutaisiBoundary = GROUP:FindByName( "Kutaisi Boundary" ) + -- self.Airbases.Kutaisi.ZoneBoundary = ZONE_POLYGON:New( "Kutaisi Boundary", KutaisiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local KutaisiRunway1 = GROUP:FindByName( "Kutaisi Runway 1" ) + -- self.Airbases.Kutaisi.ZoneRunways[1] = ZONE_POLYGON:New( "Kutaisi Runway 1", KutaisiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- MaykopKhanskaya + -- local MaykopKhanskayaBoundary = GROUP:FindByName( "MaykopKhanskaya Boundary" ) + -- self.Airbases.MaykopKhanskaya.ZoneBoundary = ZONE_POLYGON:New( "MaykopKhanskaya Boundary", MaykopKhanskayaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local MaykopKhanskayaRunway1 = GROUP:FindByName( "MaykopKhanskaya Runway 1" ) + -- self.Airbases.MaykopKhanskaya.ZoneRunways[1] = ZONE_POLYGON:New( "MaykopKhanskaya Runway 1", MaykopKhanskayaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- MineralnyeVody + -- local MineralnyeVodyBoundary = GROUP:FindByName( "MineralnyeVody Boundary" ) + -- self.Airbases.MineralnyeVody.ZoneBoundary = ZONE_POLYGON:New( "MineralnyeVody Boundary", MineralnyeVodyBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local MineralnyeVodyRunway1 = GROUP:FindByName( "MineralnyeVody Runway 1" ) + -- self.Airbases.MineralnyeVody.ZoneRunways[1] = ZONE_POLYGON:New( "MineralnyeVody Runway 1", MineralnyeVodyRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Mozdok + -- local MozdokBoundary = GROUP:FindByName( "Mozdok Boundary" ) + -- self.Airbases.Mozdok.ZoneBoundary = ZONE_POLYGON:New( "Mozdok Boundary", MozdokBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local MozdokRunway1 = GROUP:FindByName( "Mozdok Runway 1" ) + -- self.Airbases.Mozdok.ZoneRunways[1] = ZONE_POLYGON:New( "Mozdok Runway 1", MozdokRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Nalchik + -- local NalchikBoundary = GROUP:FindByName( "Nalchik Boundary" ) + -- self.Airbases.Nalchik.ZoneBoundary = ZONE_POLYGON:New( "Nalchik Boundary", NalchikBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local NalchikRunway1 = GROUP:FindByName( "Nalchik Runway 1" ) + -- self.Airbases.Nalchik.ZoneRunways[1] = ZONE_POLYGON:New( "Nalchik Runway 1", NalchikRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Novorossiysk + -- local NovorossiyskBoundary = GROUP:FindByName( "Novorossiysk Boundary" ) + -- self.Airbases.Novorossiysk.ZoneBoundary = ZONE_POLYGON:New( "Novorossiysk Boundary", NovorossiyskBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local NovorossiyskRunway1 = GROUP:FindByName( "Novorossiysk Runway 1" ) + -- self.Airbases.Novorossiysk.ZoneRunways[1] = ZONE_POLYGON:New( "Novorossiysk Runway 1", NovorossiyskRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- SenakiKolkhi + -- local SenakiKolkhiBoundary = GROUP:FindByName( "SenakiKolkhi Boundary" ) + -- self.Airbases.SenakiKolkhi.ZoneBoundary = ZONE_POLYGON:New( "SenakiKolkhi Boundary", SenakiKolkhiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SenakiKolkhiRunway1 = GROUP:FindByName( "SenakiKolkhi Runway 1" ) + -- self.Airbases.SenakiKolkhi.ZoneRunways[1] = ZONE_POLYGON:New( "SenakiKolkhi Runway 1", SenakiKolkhiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- SochiAdler + -- local SochiAdlerBoundary = GROUP:FindByName( "SochiAdler Boundary" ) + -- self.Airbases.SochiAdler.ZoneBoundary = ZONE_POLYGON:New( "SochiAdler Boundary", SochiAdlerBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SochiAdlerRunway1 = GROUP:FindByName( "SochiAdler Runway 1" ) + -- self.Airbases.SochiAdler.ZoneRunways[1] = ZONE_POLYGON:New( "SochiAdler Runway 1", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- local SochiAdlerRunway2 = GROUP:FindByName( "SochiAdler Runway 2" ) + -- self.Airbases.SochiAdler.ZoneRunways[2] = ZONE_POLYGON:New( "SochiAdler Runway 2", SochiAdlerRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Soganlug + -- local SoganlugBoundary = GROUP:FindByName( "Soganlug Boundary" ) + -- self.Airbases.Soganlug.ZoneBoundary = ZONE_POLYGON:New( "Soganlug Boundary", SoganlugBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SoganlugRunway1 = GROUP:FindByName( "Soganlug Runway 1" ) + -- self.Airbases.Soganlug.ZoneRunways[1] = ZONE_POLYGON:New( "Soganlug Runway 1", SoganlugRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- SukhumiBabushara + -- local SukhumiBabusharaBoundary = GROUP:FindByName( "SukhumiBabushara Boundary" ) + -- self.Airbases.SukhumiBabushara.ZoneBoundary = ZONE_POLYGON:New( "SukhumiBabushara Boundary", SukhumiBabusharaBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local SukhumiBabusharaRunway1 = GROUP:FindByName( "SukhumiBabushara Runway 1" ) + -- self.Airbases.SukhumiBabushara.ZoneRunways[1] = ZONE_POLYGON:New( "SukhumiBabushara Runway 1", SukhumiBabusharaRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- TbilisiLochini + -- local TbilisiLochiniBoundary = GROUP:FindByName( "TbilisiLochini Boundary" ) + -- self.Airbases.TbilisiLochini.ZoneBoundary = ZONE_POLYGON:New( "TbilisiLochini Boundary", TbilisiLochiniBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local TbilisiLochiniRunway1 = GROUP:FindByName( "TbilisiLochini Runway 1" ) + -- self.Airbases.TbilisiLochini.ZoneRunways[1] = ZONE_POLYGON:New( "TbilisiLochini Runway 1", TbilisiLochiniRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + -- -- Vaziani + -- local VazianiBoundary = GROUP:FindByName( "Vaziani Boundary" ) + -- self.Airbases.Vaziani.ZoneBoundary = ZONE_POLYGON:New( "Vaziani Boundary", VazianiBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local VazianiRunway1 = GROUP:FindByName( "Vaziani Runway 1" ) + -- self.Airbases.Vaziani.ZoneRunways[1] = ZONE_POLYGON:New( "Vaziani Runway 1", VazianiRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + -- + -- + -- + + + -- -- Template + -- local TemplateBoundary = GROUP:FindByName( "Template Boundary" ) + -- self.Airbases.Template.ZoneBoundary = ZONE_POLYGON:New( "Template Boundary", TemplateBoundary ):SmokeZone(POINT_VEC3.SmokeColor.White):Flush() + -- + -- local TemplateRunway1 = GROUP:FindByName( "Template Runway 1" ) + -- self.Airbases.Template.ZoneRunways[1] = ZONE_POLYGON:New( "Template Runway 1", TemplateRunway1 ):SmokeZone(POINT_VEC3.SmokeColor.Red):Flush() + + return self + +end + BASE:TraceOnOff( false ) env.info( '*** MOOSE INCLUDE END *** ' ) diff --git a/Moose Mission Setup/Moose_Create.bat b/Moose Mission Setup/Moose_Create.bat index 3a3b85b19..cae9c1747 100644 --- a/Moose Mission Setup/Moose_Create.bat +++ b/Moose Mission Setup/Moose_Create.bat @@ -74,7 +74,9 @@ COPY /b Moose.lua + %1\Movement.lua Moose.lua COPY /b Moose.lua + %1\Sead.lua Moose.lua COPY /b Moose.lua + %1\Escort.lua Moose.lua COPY /b Moose.lua + %1\MissileTrainer.lua Moose.lua +COPY /b Moose.lua + %1\PatrolZone.lua Moose.lua COPY /b Moose.lua + %1\AIBalancer.lua Moose.lua +COPY /b Moose.lua + %1\AirbasePolice.lua Moose.lua COPY /b Moose.lua + "Moose Create Static\Moose_Trace_Off.lua" Moose.lua diff --git a/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.lua b/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.lua index 77d24710c..b8eac65a9 100644 --- a/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.lua +++ b/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.lua @@ -11,4 +11,9 @@ local RU_AIBalancer = AIBALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn ) local RU_AirbasesSet = SET_AIRBASE:New():FilterCoalitions("red"):FilterStart() RU_AirbasesSet:Flush() RU_AIBalancer:ReturnToNearestAirbases( 10000, RU_AirbasesSet ) ---RU_AIBalancer:ReturnToHomeAirbase( 10000 ) \ No newline at end of file +--RU_AIBalancer:ReturnToHomeAirbase( 10000 ) + +local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone" ) +local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) +local PatrolZone = PATROLZONE:New( PatrolZone, 3000, 6000, 300, 600 ):ManageFuel( 0.2, 60 ) +RU_AIBalancer:SetPatrolZone( PatrolZone ) diff --git a/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.miz b/Moose Test Missions/Moose_Test_AIBALANCER/Moose_Test_AIBALANCER.miz index 6d1235f4a37065014e606b6ef74f74f52edfc0e4..874ea74b69da7b4350d3a8f5a7fe88993c4106f8 100644 GIT binary patch delta 19413 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 Q0PKv%Z5IGgOtyM|0c|j6DF6Tf delta 144888 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

x5~5g;s?rZeJ*6Dj`G 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 literal 0 HcmV?d00001 diff --git a/Moose Test Missions/Moose_Test_PATROLZONE/Moose_Test_PATROLZONE.lua b/Moose Test Missions/Moose_Test_PATROLZONE/Moose_Test_PATROLZONE.lua new file mode 100644 index 000000000..786a1f014 --- /dev/null +++ b/Moose Test Missions/Moose_Test_PATROLZONE/Moose_Test_PATROLZONE.lua @@ -0,0 +1,8 @@ + +local PatrolZoneGroup = GROUP:FindByName( "Patrol Zone" ) +local PatrolZone = ZONE_POLYGON:New( "PatrolZone", PatrolZoneGroup ) + +local PatrolGroup = GROUP:FindByName( "Patrol Group" ) + +local Patrol = PATROLZONE:New( PatrolGroup, PatrolZone, 3000, 6000, 300, 600 ) +Patrol:ManageFuel( 0.2, 60 ) \ No newline at end of file diff --git a/Moose Training/Documentation/AIBalancer.html b/Moose Training/Documentation/AIBalancer.html index dc76f6281..aee134ded 100644 --- a/Moose Training/Documentation/AIBalancer.html +++ b/Moose Training/Documentation/AIBalancer.html @@ -52,6 +52,7 @@

  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • @@ -90,7 +91,7 @@ There will be as many AI GROUPS spawned as there at CLIENTS in SETCLIENT no
  • AIBALANCER.New: Creates a new AIBALANCER object.
  • -

    1.2) AIBALANCER return AI to Airbases:

    +

    1.2) AIBALANCER returns AI to Airbases:

    You can configure to have the AI to return to:

    +

    1.3) AIBALANCER allows AI to patrol specific zones:

    +

    Use AIBalancer#AIBALANCER.SetPatrolZone() to specify a zone where the AI needs to patrol.

    + +

    CREDITS

    @@ -105,6 +110,10 @@ There will be as many AI GROUPS spawned as there at CLIENTS in SETCLIENT no Working together with James has resulted in the creation of the AIBALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)

    +

    SNAFU +Had a couple of mails with the guys to validate, if the same concept in the GCI/CAP script could be reworked within MOOSE. +None of the script code has been used however within the new AIBALANCER moose class.

    +

    Global(s)

    @@ -127,6 +136,12 @@ James has shared his ideas on balancing AI with air units, and together we made + + + + @@ -157,6 +172,12 @@ James has shared his ideas on balancing AI with air units, and together we made + + + + @@ -252,6 +273,20 @@ A SPAWN object that will spawn the AI units required, balancing the SetClient.#AIBALANCER: self

    + + +
    +
    + + PatrolZone#PATROLZONE + +AIBALANCER.PatrolZone + +
    +
    + + +
    @@ -344,6 +379,33 @@ The SET of Set#SET_AIRBASEs to evaluate wh + +
    +
    +
    + + +AIBALANCER:SetPatrolZone(PatrolZone) + +
    +
    + +

    Let the AI patrol a Zone with a given Speed range and Altitude range.

    + +

    Parameter

    + +

    Return value

    + +

    PatrolZone#PATROLZONE: +self

    +
    diff --git a/Moose Training/Documentation/Airbase.html b/Moose Training/Documentation/Airbase.html index f63188be6..9d1bafccd 100644 --- a/Moose Training/Documentation/Airbase.html +++ b/Moose Training/Documentation/Airbase.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/AirbasePolice.html b/Moose Training/Documentation/AirbasePolice.html index 4934cc28d..5b5c98e3f 100644 --- a/Moose Training/Documentation/AirbasePolice.html +++ b/Moose Training/Documentation/AirbasePolice.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Base.html b/Moose Training/Documentation/Base.html index 9f589ca9c..754859475 100644 --- a/Moose Training/Documentation/Base.html +++ b/Moose Training/Documentation/Base.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/CARGO.html b/Moose Training/Documentation/CARGO.html index 20bbf715f..369e0abd0 100644 --- a/Moose Training/Documentation/CARGO.html +++ b/Moose Training/Documentation/CARGO.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/CleanUp.html b/Moose Training/Documentation/CleanUp.html index 861ef65e4..7b7e5c504 100644 --- a/Moose Training/Documentation/CleanUp.html +++ b/Moose Training/Documentation/CleanUp.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Client.html b/Moose Training/Documentation/Client.html index 6132b28e5..421da1eb2 100644 --- a/Moose Training/Documentation/Client.html +++ b/Moose Training/Documentation/Client.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSAirbase.html b/Moose Training/Documentation/DCSAirbase.html index a96d76367..e5d542f0d 100644 --- a/Moose Training/Documentation/DCSAirbase.html +++ b/Moose Training/Documentation/DCSAirbase.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSCoalitionObject.html b/Moose Training/Documentation/DCSCoalitionObject.html index cb13fb9f6..1c3668d2e 100644 --- a/Moose Training/Documentation/DCSCoalitionObject.html +++ b/Moose Training/Documentation/DCSCoalitionObject.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSCommand.html b/Moose Training/Documentation/DCSCommand.html index 762ea11f1..daf33f18c 100644 --- a/Moose Training/Documentation/DCSCommand.html +++ b/Moose Training/Documentation/DCSCommand.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSController.html b/Moose Training/Documentation/DCSController.html index 4a98c7547..4b6908b2b 100644 --- a/Moose Training/Documentation/DCSController.html +++ b/Moose Training/Documentation/DCSController.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSGroup.html b/Moose Training/Documentation/DCSGroup.html index a5602a9cb..18b0c8135 100644 --- a/Moose Training/Documentation/DCSGroup.html +++ b/Moose Training/Documentation/DCSGroup.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSObject.html b/Moose Training/Documentation/DCSObject.html index e2da5331a..688ae7b14 100644 --- a/Moose Training/Documentation/DCSObject.html +++ b/Moose Training/Documentation/DCSObject.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSTask.html b/Moose Training/Documentation/DCSTask.html index f98d366b1..87c5032d6 100644 --- a/Moose Training/Documentation/DCSTask.html +++ b/Moose Training/Documentation/DCSTask.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSTypes.html b/Moose Training/Documentation/DCSTypes.html index 63f6419f1..fbe1784b6 100644 --- a/Moose Training/Documentation/DCSTypes.html +++ b/Moose Training/Documentation/DCSTypes.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSUnit.html b/Moose Training/Documentation/DCSUnit.html index e7696abb4..dc9d485b1 100644 --- a/Moose Training/Documentation/DCSUnit.html +++ b/Moose Training/Documentation/DCSUnit.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCSWorld.html b/Moose Training/Documentation/DCSWorld.html index 17f317a99..5102d717c 100644 --- a/Moose Training/Documentation/DCSWorld.html +++ b/Moose Training/Documentation/DCSWorld.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DCStimer.html b/Moose Training/Documentation/DCStimer.html index 8d60fadff..170c14e39 100644 --- a/Moose Training/Documentation/DCStimer.html +++ b/Moose Training/Documentation/DCStimer.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DEPLOYTASK.html b/Moose Training/Documentation/DEPLOYTASK.html index df32f815b..9a5c1702d 100644 --- a/Moose Training/Documentation/DEPLOYTASK.html +++ b/Moose Training/Documentation/DEPLOYTASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DESTROYBASETASK.html b/Moose Training/Documentation/DESTROYBASETASK.html index ff9352bf6..e99c21de0 100644 --- a/Moose Training/Documentation/DESTROYBASETASK.html +++ b/Moose Training/Documentation/DESTROYBASETASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DESTROYGROUPSTASK.html b/Moose Training/Documentation/DESTROYGROUPSTASK.html index cdb1afe52..bee8d784e 100644 --- a/Moose Training/Documentation/DESTROYGROUPSTASK.html +++ b/Moose Training/Documentation/DESTROYGROUPSTASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DESTROYRADARSTASK.html b/Moose Training/Documentation/DESTROYRADARSTASK.html index d68eb936d..e75efaa1f 100644 --- a/Moose Training/Documentation/DESTROYRADARSTASK.html +++ b/Moose Training/Documentation/DESTROYRADARSTASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/DESTROYUNITTYPESTASK.html b/Moose Training/Documentation/DESTROYUNITTYPESTASK.html index b3b200186..a559aaf8d 100644 --- a/Moose Training/Documentation/DESTROYUNITTYPESTASK.html +++ b/Moose Training/Documentation/DESTROYUNITTYPESTASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Database.html b/Moose Training/Documentation/Database.html index 47be64322..8cbba61ab 100644 --- a/Moose Training/Documentation/Database.html +++ b/Moose Training/Documentation/Database.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Escort.html b/Moose Training/Documentation/Escort.html index 3ff1d99f1..c67de91a0 100644 --- a/Moose Training/Documentation/Escort.html +++ b/Moose Training/Documentation/Escort.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Event.html b/Moose Training/Documentation/Event.html index 49b030d8d..8dd1e6a91 100644 --- a/Moose Training/Documentation/Event.html +++ b/Moose Training/Documentation/Event.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/GOHOMETASK.html b/Moose Training/Documentation/GOHOMETASK.html index 66d6d102e..cd69864ca 100644 --- a/Moose Training/Documentation/GOHOMETASK.html +++ b/Moose Training/Documentation/GOHOMETASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Group.html b/Moose Training/Documentation/Group.html index 3f2b5e173..274de8685 100644 --- a/Moose Training/Documentation/Group.html +++ b/Moose Training/Documentation/Group.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • @@ -960,7 +961,7 @@ A speed can be given in km/h.

    - + @@ -4231,7 +4232,7 @@ The waypoint function to be called when the group moves over the waypoint. The w
    -GROUP:WayPointInitialize() +GROUP:WayPointInitialize(WayPoints)
    @@ -4243,6 +4244,15 @@ The waypoint function to be called when the group moves over the waypoint. The w Use the method @{Group@GROUP:WayPointExecute) to start the execution of the new mission plan. Note that when WayPointInitialize is called, the Mission of the group is RESTARTED!

    +

    Parameter

    +
      +
    • + +

      #table WayPoints : +If WayPoints is given, then use the route.

      + +
    • +

    Return value

    #GROUP:

    diff --git a/Moose Training/Documentation/MISSION.html b/Moose Training/Documentation/MISSION.html index 0e63e702c..83f2d4e69 100644 --- a/Moose Training/Documentation/MISSION.html +++ b/Moose Training/Documentation/MISSION.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/MOVEMENT.html b/Moose Training/Documentation/MOVEMENT.html index 3d2e998cc..578915315 100644 --- a/Moose Training/Documentation/MOVEMENT.html +++ b/Moose Training/Documentation/MOVEMENT.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Menu.html b/Moose Training/Documentation/Menu.html index 47f85f72e..9b6cf848b 100644 --- a/Moose Training/Documentation/Menu.html +++ b/Moose Training/Documentation/Menu.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Message.html b/Moose Training/Documentation/Message.html index de573a83a..85a2767a2 100644 --- a/Moose Training/Documentation/Message.html +++ b/Moose Training/Documentation/Message.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/MissileTrainer.html b/Moose Training/Documentation/MissileTrainer.html index ecaaa64d0..db9d7acc5 100644 --- a/Moose Training/Documentation/MissileTrainer.html +++ b/Moose Training/Documentation/MissileTrainer.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/NOTASK.html b/Moose Training/Documentation/NOTASK.html index fcbd3b481..5d097b91e 100644 --- a/Moose Training/Documentation/NOTASK.html +++ b/Moose Training/Documentation/NOTASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/PICKUPTASK.html b/Moose Training/Documentation/PICKUPTASK.html index e02e1ff6f..f996c7e6b 100644 --- a/Moose Training/Documentation/PICKUPTASK.html +++ b/Moose Training/Documentation/PICKUPTASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/PatrolZone.html b/Moose Training/Documentation/PatrolZone.html new file mode 100644 index 000000000..0c78cc031 --- /dev/null +++ b/Moose Training/Documentation/PatrolZone.html @@ -0,0 +1,698 @@ + + + + + + +
    +
    + +
    +
    +
    +
    + +
    +

    Module PatrolZone

    + +

    This module contains the PATROLZONE class.

    + + + +
    + +

    1) Patrol#PATROLZONE class, extends Base#BASE

    +

    The Patrol#PATROLZONE class implements the core functions to patrol a Zone.

    + +

    1.1) PATROLZONE constructor:

    +

    PatrolZone#PATROLZONE.New(): Creates a new PATROLZONE object.

    + +

    1.2) Modify the PATROLZONE parameters:

    +

    The following methods are available to modify the parameters of a PATROLZONE object:

    + +
    * <a href="PatrolZone.html##(PATROLZONE).SetGroup">PatrolZone#PATROLZONE.SetGroup</a>(): Set the AI Patrol Group.
    +* <a href="PatrolZone.html##(PATROLZONE).SetSpeed">PatrolZone#PATROLZONE.SetSpeed</a>(): Set the patrol speed of the AI, for the next patrol.
    +* <a href="PatrolZone.html##(PATROLZONE).SetAltitude">PatrolZone#PATROLZONE.SetAltitude</a>(): Set altitude of the AI, for the next patrol.
    +
    + +

    1.3) Manage the out of fuel in the PATROLZONE:

    +

    When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base. +Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +Once the time is finished, the old PatrolGroup will return to the base. +Use the method PatrolZone#PATROLZONE.ManageFuel() to have this proces in place.

    + +
    + + +

    Global(s)

    +
    AIBALANCER:New(SetClient, SpawnAI)

    Creates a new AIBALANCER object, building a set of units belonging to a coalitions, categories, countries, types or with defined prefix names.

    +
    AIBALANCER.PatrolZone +
    AIBALANCER.SetClient +
    AIBALANCER:SetPatrolZone(PatrolZone) +

    Let the AI patrol a Zone with a given Speed range and Altitude range.

    GROUP:WayPointInitialize()GROUP:WayPointInitialize(WayPoints)

    Retrieve the group mission and allow to place function hooks within the mission waypoint plan.

    + + + + + + + + +
    PATROLZONE + +
    _NewPatrolRoute(PatrolGroup) + +
    +

    Type PATROLZONE

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PATROLZONE.ClassName + +
    PATROLZONE:ManageFuel(PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime) +

    When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base.

    +
    PATROLZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed) +

    Creates a new PATROLZONE object, taking a Group object as a parameter.

    +
    PATROLZONE:NewPatrolRoute() +

    Defines a new patrol route using the PatrolZone parameters and settings.

    +
    PATROLZONE.PatrolCeilingAltitude +

    The highest altitude in meters where to execute the patrol.

    +
    PATROLZONE.PatrolFloorAltitude +

    The lowest altitude in meters where to execute the patrol.

    +
    PATROLZONE.PatrolFuelTresholdPercentage + +
    PATROLZONE.PatrolGroup +

    The Group patrolling.

    +
    PATROLZONE.PatrolGroupTemplateName + +
    PATROLZONE.PatrolManageFuel + +
    PATROLZONE.PatrolMaxSpeed +

    The maximum speed of the Group in km/h.

    +
    PATROLZONE.PatrolMinSpeed +

    The minimum speed of the Group in km/h.

    +
    PATROLZONE.PatrolOutOfFuelMonitor + +
    PATROLZONE.PatrolOutOfFuelOrbitTime + +
    PATROLZONE.PatrolZone +

    The Zone where the patrol needs to be executed.

    +
    PATROLZONE:SetAltitude(PatrolFloorAltitude, PatrolCeilingAltitude) +

    Sets the floor and ceiling altitude of the patrol.

    +
    PATROLZONE:SetGroup(PatrolGroup) +

    Set the Group to act as the Patroller.

    +
    PATROLZONE:SetSpeed(PatrolMinSpeed, PatrolMaxSpeed) +

    Sets (modifies) the minimum and maximum speed of the patrol.

    +
    PATROLZONE.SpawnPatrolGroup + +
    PATROLZONE:_MonitorOutOfFuelScheduled() + +
    + +

    Global(s)

    +
    +
    + + #PATROLZONE + +PATROLZONE + +
    +
    + + + +
    +
    +
    +
    + + +_NewPatrolRoute(PatrolGroup) + +
    +
    + + + +

    Parameter

    + +
    +
    +

    Type PatrolZone

    + +

    Type PATROLZONE

    + +

    PATROLZONE class

    + +

    Field(s)

    +
    +
    + + #string + +PATROLZONE.ClassName + +
    +
    + + + +
    +
    +
    +
    + + +PATROLZONE:ManageFuel(PatrolFuelTresholdPercentage, PatrolOutOfFuelOrbitTime) + +
    +
    + +

    When the PatrolGroup is out of fuel, it is required that a new PatrolGroup is started, before the old PatrolGroup can return to the home base.

    + + +

    Therefore, with a parameter and a calculation of the distance to the home base, the fuel treshold is calculated. +When the fuel treshold is reached, the PatrolGroup will continue for a given time its patrol task in orbit, while a new PatrolGroup is targetted to the PATROLZONE. +Once the time is finished, the old PatrolGroup will return to the base.

    + +

    Parameters

    +
      +
    • + +

      #number PatrolFuelTresholdPercentage : +The treshold in percentage (between 0 and 1) when the PatrolGroup is considered to get out of fuel.

      + +
    • +
    • + +

      #number PatrolOutOfFuelOrbitTime : +The amount of seconds the out of fuel PatrolGroup will orbit before returning to the base.

      + +
    • +
    +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + +PATROLZONE:New(PatrolZone, PatrolFloorAltitude, PatrolCeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed) + +
    +
    + +

    Creates a new PATROLZONE object, taking a Group object as a parameter.

    + + +

    The GROUP needs to be alive.

    + +

    Parameters

    +
      +
    • + +

      Zone#ZONE_BASE PatrolZone : +The Zone where the patrol needs to be executed.

      + +
    • +
    • + +

      DCSTypes#Altitude PatrolFloorAltitude : +The lowest altitude in meters where to execute the patrol.

      + +
    • +
    • + +

      DCSTypes#Altitude PatrolCeilingAltitude : +The highest altitude in meters where to execute the patrol.

      + +
    • +
    • + +

      DCSTypes#Speed PatrolMinSpeed : +The minimum speed of the Group in km/h.

      + +
    • +
    • + +

      DCSTypes#Speed PatrolMaxSpeed : +The maximum speed of the Group in km/h.

      + +
    • +
    +

    Return value

    + +

    #PATROLZONE: +self

    + +

    Usage:

    +
    -- Define a new PATROLZONE Object. This PatrolArea will patrol a group within PatrolZone between 3000 and 6000 meters, with a variying speed between 600 and 900 km/h.
    +PatrolZone = ZONE:New( 'PatrolZone' )
    +PatrolGroup = GROUP:FindByName( "Patrol Group" )
    +PatrolArea = PATROLZONE:New( PatrolGroup, PatrolZone, 3000, 6000, 600, 900 )
    + +
    +
    +
    +
    + + +PATROLZONE:NewPatrolRoute() + +
    +
    + +

    Defines a new patrol route using the PatrolZone parameters and settings.

    + +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + DCSTypes#Altitude + +PATROLZONE.PatrolCeilingAltitude + +
    +
    + +

    The highest altitude in meters where to execute the patrol.

    + +
    +
    +
    +
    + + DCSTypes#Altitude + +PATROLZONE.PatrolFloorAltitude + +
    +
    + +

    The lowest altitude in meters where to execute the patrol.

    + +
    +
    +
    +
    + + + +PATROLZONE.PatrolFuelTresholdPercentage + +
    +
    + + + +
    +
    +
    +
    + + Group#GROUP + +PATROLZONE.PatrolGroup + +
    +
    + +

    The Group patrolling.

    + +
    +
    +
    +
    + + + +PATROLZONE.PatrolGroupTemplateName + +
    +
    + + + +
    +
    +
    +
    + + #boolean + +PATROLZONE.PatrolManageFuel + +
    +
    + + + +
    +
    +
    +
    + + DCSTypes#Speed + +PATROLZONE.PatrolMaxSpeed + +
    +
    + +

    The maximum speed of the Group in km/h.

    + +
    +
    +
    +
    + + DCSTypes#Speed + +PATROLZONE.PatrolMinSpeed + +
    +
    + +

    The minimum speed of the Group in km/h.

    + +
    +
    +
    +
    + + + +PATROLZONE.PatrolOutOfFuelMonitor + +
    +
    + + + +
    +
    +
    +
    + + + +PATROLZONE.PatrolOutOfFuelOrbitTime + +
    +
    + + + +
    +
    +
    +
    + + Zone#ZONE_BASE + +PATROLZONE.PatrolZone + +
    +
    + +

    The Zone where the patrol needs to be executed.

    + +
    +
    +
    +
    + + +PATROLZONE:SetAltitude(PatrolFloorAltitude, PatrolCeilingAltitude) + +
    +
    + +

    Sets the floor and ceiling altitude of the patrol.

    + +

    Parameters

    +
      +
    • + +

      DCSTypes#Altitude PatrolFloorAltitude : +The lowest altitude in meters where to execute the patrol.

      + +
    • +
    • + +

      DCSTypes#Altitude PatrolCeilingAltitude : +The highest altitude in meters where to execute the patrol.

      + +
    • +
    +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + +PATROLZONE:SetGroup(PatrolGroup) + +
    +
    + +

    Set the Group to act as the Patroller.

    + +

    Parameter

    + +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + +PATROLZONE:SetSpeed(PatrolMinSpeed, PatrolMaxSpeed) + +
    +
    + +

    Sets (modifies) the minimum and maximum speed of the patrol.

    + +

    Parameters

    + +

    Return value

    + +

    #PATROLZONE: +self

    + +
    +
    +
    +
    + + + +PATROLZONE.SpawnPatrolGroup + +
    +
    + + + +
    +
    +
    +
    + + +PATROLZONE:_MonitorOutOfFuelScheduled() + +
    +
    + + + +
    +
    + + + + + + diff --git a/Moose Training/Documentation/Point.html b/Moose Training/Documentation/Point.html index 98cacdedc..f1202e5d5 100644 --- a/Moose Training/Documentation/Point.html +++ b/Moose Training/Documentation/Point.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • @@ -197,6 +198,30 @@ POINT_VEC3:New(x, y, z)

    Create a new POINT_VEC3 object.

    + + + + POINT_VEC3.RoutePointAction + + + + + + POINT_VEC3:RoutePointAir(AltType, Type, Action, Speed, SpeedLocked) + +

    Build an air type route point.

    + + + + POINT_VEC3.RoutePointAltType + + + + + + POINT_VEC3.RoutePointType + + @@ -267,6 +292,36 @@ POINT_VEC3.FlareColor.Yellow + + + + +

    Type POINT_VEC3.RoutePointAction

    + + + + + +
    POINT_VEC3.RoutePointAction.TurningPoint +

    "Turning Point"

    +
    + +

    Type POINT_VEC3.RoutePointAltType

    + + + + + +
    POINT_VEC3.RoutePointAltType.BARO +

    "BARO"

    +
    + +

    Type POINT_VEC3.RoutePointType

    + + + +
    POINT_VEC3.RoutePointType.TurningPoint +

    "Turning Point"

    @@ -670,7 +725,100 @@ The z coordinate of the Vec3 point, pointing to the Right.

    Return value

    -

    Point#POINT_VEC3:

    +

    Point#POINT_VEC3: +self

    + + + +
    +
    + + #POINT_VEC3.RoutePointAction + +POINT_VEC3.RoutePointAction + +
    +
    + + + +
    +
    +
    +
    + + +POINT_VEC3:RoutePointAir(AltType, Type, Action, Speed, SpeedLocked) + +
    +
    + +

    Build an air type route point.

    + +

    Parameters

    + +

    Return value

    + +

    #table: +The route point.

    + +
    +
    +
    +
    + + #POINT_VEC3.RoutePointAltType + +POINT_VEC3.RoutePointAltType + +
    +
    + + + +
    +
    +
    +
    + + #POINT_VEC3.RoutePointType + +POINT_VEC3.RoutePointType + +
    +
    +
    @@ -831,6 +979,63 @@ The z coordinate of the Vec3 point, pointing to the Right.

    + +
    + +

    Type POINT_VEC3.RoutePointAction

    + +

    RoutePoint Actions

    + +

    Field(s)

    +
    +
    + + +POINT_VEC3.RoutePointAction.TurningPoint + +
    +
    + +

    "Turning Point"

    + +
    +
    + +

    Type POINT_VEC3.RoutePointAltType

    + +

    RoutePoint AltTypes

    + +

    Field(s)

    +
    +
    + + +POINT_VEC3.RoutePointAltType.BARO + +
    +
    + +

    "BARO"

    + +
    +
    + +

    Type POINT_VEC3.RoutePointType

    + +

    RoutePoint Types

    + +

    Field(s)

    +
    +
    + + +POINT_VEC3.RoutePointType.TurningPoint + +
    +
    + +

    "Turning Point"

    +
    diff --git a/Moose Training/Documentation/ROUTETASK.html b/Moose Training/Documentation/ROUTETASK.html index 720b0790f..d09a08b26 100644 --- a/Moose Training/Documentation/ROUTETASK.html +++ b/Moose Training/Documentation/ROUTETASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/STAGE.html b/Moose Training/Documentation/STAGE.html index f8c129a32..e36f92952 100644 --- a/Moose Training/Documentation/STAGE.html +++ b/Moose Training/Documentation/STAGE.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Scheduler.html b/Moose Training/Documentation/Scheduler.html index dcedab1d2..785c3ba4d 100644 --- a/Moose Training/Documentation/Scheduler.html +++ b/Moose Training/Documentation/Scheduler.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Scoring.html b/Moose Training/Documentation/Scoring.html index 866110d9e..9c7a0404a 100644 --- a/Moose Training/Documentation/Scoring.html +++ b/Moose Training/Documentation/Scoring.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Sead.html b/Moose Training/Documentation/Sead.html index 908123c58..0499fd234 100644 --- a/Moose Training/Documentation/Sead.html +++ b/Moose Training/Documentation/Sead.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Set.html b/Moose Training/Documentation/Set.html index 751a47a5e..597140810 100644 --- a/Moose Training/Documentation/Set.html +++ b/Moose Training/Documentation/Set.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Spawn.html b/Moose Training/Documentation/Spawn.html index bef92dc13..6b4e369eb 100644 --- a/Moose Training/Documentation/Spawn.html +++ b/Moose Training/Documentation/Spawn.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Static.html b/Moose Training/Documentation/Static.html index c1ea45769..95cc3cc4c 100644 --- a/Moose Training/Documentation/Static.html +++ b/Moose Training/Documentation/Static.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/StaticObject.html b/Moose Training/Documentation/StaticObject.html index 74815f716..54ac84727 100644 --- a/Moose Training/Documentation/StaticObject.html +++ b/Moose Training/Documentation/StaticObject.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/TASK.html b/Moose Training/Documentation/TASK.html index 7b6072159..49736f3e0 100644 --- a/Moose Training/Documentation/TASK.html +++ b/Moose Training/Documentation/TASK.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Unit.html b/Moose Training/Documentation/Unit.html index 2348dc8a5..77eadcbf0 100644 --- a/Moose Training/Documentation/Unit.html +++ b/Moose Training/Documentation/Unit.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/Zone.html b/Moose Training/Documentation/Zone.html index 427389aa8..994b5f569 100644 --- a/Moose Training/Documentation/Zone.html +++ b/Moose Training/Documentation/Zone.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • @@ -200,6 +201,18 @@ ZONE_BASE.ClassName + + + + ZONE_BASE:GetBoundingSquare() + +

    Get the bounding square the zone.

    + + + + ZONE_BASE:GetRandomVec2() + +

    Define a random DCSTypes#Vec2 within the zone.

    @@ -230,6 +243,34 @@ ZONE_BASE.ZoneName

    Name of the zone.

    + + + + +

    Type ZONE_BASE.BoundingSquare

    + + + + + + + + + + + + + + + +
    ZONE_BASE.BoundingSquare.x1 +

    The lower x coordinate (left down)

    +
    ZONE_BASE.BoundingSquare.x2 +

    The higher x coordinate (right up)

    +
    ZONE_BASE.BoundingSquare.y1 +

    The lower y coordinate (left down)

    +
    ZONE_BASE.BoundingSquare.y2 +

    The higher y coordinate (right up)

    @@ -262,6 +303,18 @@ ZONE_POLYGON_BASE:Flush()

    Flush polygon coordinates as a table in DCS.log.

    + + + + ZONE_POLYGON_BASE:GetBoundingSquare() + +

    Get the bounding square the zone.

    + + + + ZONE_POLYGON_BASE:GetRandomVec2() + +

    Define a random DCSTypes#Vec2 within the zone.

    @@ -564,6 +617,42 @@ The name of the zone as defined within the mission editor.

    + + +
    +
    + + +ZONE_BASE:GetBoundingSquare() + +
    +
    + +

    Get the bounding square the zone.

    + +

    Return value

    + +

    #ZONE_BASE.BoundingSquare: +The bounding square.

    + +
    +
    +
    +
    + + +ZONE_BASE:GetRandomVec2() + +
    +
    + +

    Define a random DCSTypes#Vec2 within the zone.

    + +

    Return value

    + +

    DCSTypes#Vec2: +The Vec2 coordinates.

    +
    @@ -681,6 +770,68 @@ The smoke color.

    Name of the zone.

    + +
    + +

    Type ZONE_BASE.BoundingSquare

    + +

    The ZONE_BASE.BoundingSquare

    + +

    Field(s)

    +
    +
    + + DCSTypes#Distance + +ZONE_BASE.BoundingSquare.x1 + +
    +
    + +

    The lower x coordinate (left down)

    + +
    +
    +
    +
    + + DCSTypes#Distance + +ZONE_BASE.BoundingSquare.x2 + +
    +
    + +

    The higher x coordinate (right up)

    + +
    +
    +
    +
    + + DCSTypes#Distance + +ZONE_BASE.BoundingSquare.y1 + +
    +
    + +

    The lower y coordinate (left down)

    + +
    +
    +
    +
    + + DCSTypes#Distance + +ZONE_BASE.BoundingSquare.y2 + +
    +
    + +

    The higher y coordinate (right up)

    +
    @@ -780,6 +931,42 @@ self

    + +ZONE_POLYGON_BASE:GetBoundingSquare() + +
    +
    + +

    Get the bounding square the zone.

    + +

    Return value

    + +

    #ZONEPOLYGONBASE.BoundingSquare: +The bounding square.

    + +
    +
    +
    +
    + + +ZONE_POLYGON_BASE:GetRandomVec2() + +
    +
    + +

    Define a random DCSTypes#Vec2 within the zone.

    + +

    Return value

    + +

    DCSTypes#Vec2: +The Vec2 coordinate.

    + +
    +
    +
    +
    + ZONE_POLYGON_BASE:IsPointVec2InZone(PointVec2) @@ -882,6 +1069,8 @@ self

    +

    Type ZONE_POLYGON_BASE.BoundingSquare

    +

    Type ZONE_POLYGON_BASE.ListVec2

    A points array.

    diff --git a/Moose Training/Documentation/env.html b/Moose Training/Documentation/env.html index eca440c02..bdcc2c889 100644 --- a/Moose Training/Documentation/env.html +++ b/Moose Training/Documentation/env.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/index.html b/Moose Training/Documentation/index.html index df1d2da5c..bbd167f81 100644 --- a/Moose Training/Documentation/index.html +++ b/Moose Training/Documentation/index.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • @@ -281,6 +282,12 @@ PICKUPTASK

    A PICKUPTASK orchestrates the loading of CARGO at a specific landing zone.

    + + + + PatrolZone + +

    This module contains the PATROLZONE class.

    diff --git a/Moose Training/Documentation/land.html b/Moose Training/Documentation/land.html index 3165c0a7b..c302f7aed 100644 --- a/Moose Training/Documentation/land.html +++ b/Moose Training/Documentation/land.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • diff --git a/Moose Training/Documentation/routines.html b/Moose Training/Documentation/routines.html index d3316c8ae..d636dd02e 100644 --- a/Moose Training/Documentation/routines.html +++ b/Moose Training/Documentation/routines.html @@ -52,6 +52,7 @@
  • Mission
  • NOTASK
  • PICKUPTASK
  • +
  • PatrolZone
  • Point
  • ROUTETASK
  • STAGE
  • 5*iZdFwZR2 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