From 15cf215d4909e2b7b8e030a4a883d6d0d3d803fe Mon Sep 17 00:00:00 2001 From: FlightControl Date: Wed, 14 Jun 2017 10:24:59 +0200 Subject: [PATCH] Documentation --- .../Moose DOCUMENTATION Generate.launch | 1 + .../Moose/AI/AI_A2A_Dispatcher.lua | 93 +++++++++++++------ Utils/GenerateDocumentations.bat | 12 +-- docs/Documentation/AI_A2A_Dispatcher.html | 68 ++++++++++---- docs/Documentation/Cargo.html | 1 - docs/Documentation/Detection.html | 3 +- docs/Documentation/Fsm.html | 3 +- docs/Documentation/Movement.html | 4 + docs/Documentation/Point.html | 1 + docs/Documentation/Settings.html | 2 +- docs/Documentation/Spawn.html | 35 +++---- docs/Documentation/SpawnStatic.html | 1 - docs/Documentation/Spot.html | 4 - docs/Documentation/Task_Cargo.html | 2 +- 14 files changed, 145 insertions(+), 85 deletions(-) diff --git a/Moose Development/LDT External Tools/Moose DOCUMENTATION Generate.launch b/Moose Development/LDT External Tools/Moose DOCUMENTATION Generate.launch index 43f710ca8..f652d09d7 100644 --- a/Moose Development/LDT External Tools/Moose DOCUMENTATION Generate.launch +++ b/Moose Development/LDT External Tools/Moose DOCUMENTATION Generate.launch @@ -4,5 +4,6 @@ + diff --git a/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua b/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua index 02217a468..ecb35578a 100644 --- a/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_A2A_Dispatcher.lua @@ -23,7 +23,12 @@ do -- AI_A2A_DISPATCHER --- # AI\_A2A\_DISPATCHER class, extends @{Tasking#DETECTION_MANAGER} -- - -- The @{#AI\_A2A\_DISPATCHER} class is designed to create an automatic air defence system for a coalition. + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia1.JPG) + -- + -- The @{#AI_A2A_DISPATCHER} class is designed to create an automatic air defence system for a coalition. + -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia3.JPG) + -- -- It includes automatic spawning of Combat Air Patrol aircraft (CAP) and Ground Controlled Intercept aircraft (GCI) in response to enemy air movements that are detected by a ground based radar network. -- CAP flights will take off and proceed to designated CAP zones where they will remain on station until the ground radars direct them to intercept detected enemy aircraft or they run short of fuel and must return to base (RTB). When a CAP flight leaves their zone to perform an interception or return to base a new CAP flight will spawn to take their place. -- If all CAP flights are engaged or RTB then additional GCI interceptors will scramble to intercept unengaged enemy aircraft under ground radar control. @@ -40,13 +45,21 @@ do -- AI_A2A_DISPATCHER -- -- The @{#AI_A2A_DISPATCHER.New}() method is used to setup the EWR network and to define the grouping. -- - -- ### 1.1. Define the EWR network: + -- ### 1.1. Define the **EWR network**: + -- + -- As part of the AI\_A2A\_DISPATCHER constructor, an EWR network must be given as the first parameter. + -- An EWR network, or, Early Warning Radar network, is used to early detect potential airborne targets and to understand the position of patrolling targets of the enemy. + -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia5.JPG) -- -- Typically EWR networks are setup using 55G6 EWR, 1L13 EWR, Hawk sr and Patriot str ground based radar units. -- These radars have different ranges and 55G6 EWR and 1L13 EWR radars are Eastern Bloc units (eg Russia, Ukraine, Georgia) while the Hawk and Patriot radars are Western (eg US). -- Additionally, ANY other radar capable unit can be part of the EWR network! Also AWACS airborne units, planes, helicopters can help to detect targets, as long as they have radar. -- The position of these units is very important as they need to provide enough coverage - -- to pick up enemy aircraft as they approach so that CAP and GCI flights can be tasked to intercept them. + -- to pick up enemy aircraft as they approach so that CAP and GCI flights can be tasked to intercept them. + -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia7.JPG) + -- -- Additionally in a hot war situation where the border is no longer respected the placement of radars has a big effect on how fast the war escalates. -- For example if they are a long way forward and can detect enemy planes on the ground and taking off -- they will start to vector CAP and GCI flights to attack them straight away which will immediately draw a response from the other coalition. @@ -54,8 +67,8 @@ do -- AI_A2A_DISPATCHER -- therefore less CAP and GCI flights will spawn and this will tend to make just the border area active rather than a melee over the whole map. -- It all depends on what the desired effect is. -- - -- EWR networks are dynamically constructed, that is, they form part of the @{Set#SET_GROUP} object that is given as the input parameter of the AI\_A2A\_DISPATCHER class. - -- By defining in a smart way the names or name prefixes of the groups of EWR capable units, these units will be automatically added or deleted from the EWR network, + -- EWR networks are **dynamically constructed**, that is, they form part of the @{Set#SET_GROUP} object that is given as the input parameter of the AI\_A2A\_DISPATCHER class. + -- By defining in a **smart way the names or name prefixes of the groups** of EWR capable units, these units will be **automatically added or deleted** from the EWR network, -- increasing or decreasing the radar coverage of the Early Warning System. -- -- See the following example to setup an EWR network containing EWR stations and AWACS. @@ -73,6 +86,9 @@ do -- AI_A2A_DISPATCHER -- **DetectionSetGroup** is then being configured to filter all active groups with a group name starting with **DF CCCP AWACS** or **DF CCCP EWR** to be included in the Set. -- **DetectionSetGroup** is then being ordered to start the dynamic filtering. Note that any destroy or new spawn of a group with the above names will be removed or added to the Set. -- The **DetectionSetGroup** variable is then passed to the @{#AI_A2A_DISPATCHER.New}() method to indicate the EWR network configuration and setup the A2A defense detection mechanism. + -- + -- ### 1.2. Define the detected **target grouping radius**: + -- -- As a second parameter of the @{#AI_A2A_DISPATCHER.New}() method, 30000 indicates that detected targets need to be grouped within a radius of 30km. -- The grouping radius should not be too small, but also depends on the types of planes and the era of the simulation. -- Fast planes like in the 80s, need a larger radius than WWII planes. @@ -84,6 +100,9 @@ do -- AI_A2A_DISPATCHER -- ## 2. Set the **engage radius**: -- -- Define the radius to engage any target by airborne friendlies, which are executing cap or returning from an intercept mission. + -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia10.JPG) + -- -- So, if there is a target area detected and reported, -- then any friendlies that are airborne near this target area, -- will be commanded to (re-)engage that target when available (if no other tasks were commanded). @@ -98,10 +117,15 @@ do -- AI_A2A_DISPATCHER -- According to the tactical and strategic design of the mission broadly decide the shape and extent of red and blue territories. -- They should be laid out such that a border area is created between the two coalitions. -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia4.JPG) + -- -- Define a border area to simulate a **cold war** scenario and use the method @{#AI_A2A_DISPATCHER.SetBorderZone}() to create a border zone for the dispatcher. -- -- A **cold war** is one where CAP aircraft patrol their territory but will not attack enemy aircraft or launch GCI aircraft unless enemy aircraft enter their territory. In other words the EWR may detect an enemy aircraft but will only send aircraft to attack it if it crosses the border. -- A **hot war** is one where CAP aircraft will intercept any detected enemy aircraft and GCI aircraft will launch against detected enemy aircraft without regard for territory. In other words if the ground radar can detect the enemy aircraft then it will send CAP and GCI aircraft to attack it. + -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia9.JPG) + -- -- If it’s a cold war then the **borders of red and blue territory** need to be defined using a @{zone} object derived from @{Zone#ZONE_BASE}. -- If a hot war is chosen then **no borders** actually need to be defined using the helicopter units other than it makes it easier sometimes for the mission maker to envisage where the red and blue territories roughly are. In a hot war the borders are effectively defined by the ground based radar coverage of a coalition. Set the noborders parameter to 1 -- @@ -169,7 +193,10 @@ do -- AI_A2A_DISPATCHER -- -- ### 4.3. Set squadron grouping -- - -- Choices are 1, 2, 3 or 4 when CAP or GCI flights spawn. Use the method @{#AI_A2A_DISPATCHER.SetSquadronGrouping}() to set the amount of CAP or GCI flights that will take-off when spawned. + -- Use the method @{#AI_A2A_DISPATCHER.SetSquadronGrouping}() to set the amount of CAP or GCI flights that will take-off when spawned. + -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia12.JPG) + -- -- In the case of GCI, the @{#AI_A2A_DISPATCHER.SetSquadronGrouping}() method has additional behaviour. When there aren't enough CAP flights airborne, a GCI will be initiated for the remaining -- targets to be engaged. Depending on the grouping parameter, the spawned flights for GCI are grouped into this setting. -- For example with a group setting of 2, if 3 targets are detected and cannot be engaged by CAP or any airborne flight, @@ -182,6 +209,8 @@ do -- AI_A2A_DISPATCHER -- The effectiveness can be set with the **overhead parameter**. This is a number that is used to calculate the amount of Units that dispatching command will allocate to GCI in surplus of detected amount of units. -- The **default value** of the overhead parameter is 1.0, which means **equal balance**. -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia11.JPG) + -- -- However, depending on the (type of) aircraft (strength and payload) in the squadron and the amount of resources available, this parameter can be changed. -- -- The @{#AI_A2A_DISPATCHER.SetOverhead}() method can be used to tweak the defense strength, @@ -203,8 +232,10 @@ do -- AI_A2A_DISPATCHER -- -- ### 5.1. Set the CAP zones -- - -- * CAP zones are patrol areas where Combat Air Patrol (CAP) flights loiter until they either return to base due to low fuel or are assigned an interception task by ground control. + -- CAP zones are patrol areas where Combat Air Patrol (CAP) flights loiter until they either return to base due to low fuel or are assigned an interception task by ground control. -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia6.JPG) + -- -- * As the CAP flights wander around within the zone waiting to be tasked, these zones need to be large enough that the aircraft are not constantly turning -- but do not have to be big and numerous enough to completely cover a border. -- @@ -223,6 +254,8 @@ do -- AI_A2A_DISPATCHER -- -- * Typically if a CAP flight is tasked and therefore leaves their zone empty while they go off and intercept their target another CAP flight will spawn to take their place. -- + -- ![Banner Image](..\Presentations\AI_A2A_DISPATCHER\Dia7.JPG) + -- -- The following example illustrates how CAP zones are coded: -- -- -- CAP Squadron execution. @@ -1633,31 +1666,35 @@ do -- AI_A2A_DISPATCHER self:GCI( DetectedItem, DefendersMissing, Friendlies ) end end - - -- Show tactical situation - Report:Add( string.format( "\n - Target %s ( %s ): %s" , DetectedItem.ItemID, DetectedItem.Index, DetectedItem.Set:GetObjectNames() ) ) + + if self.TacticalDisplay then + -- Show tactical situation + Report:Add( string.format( "\n - Target %s ( %s ): %s" , DetectedItem.ItemID, DetectedItem.Index, DetectedItem.Set:GetObjectNames() ) ) + for Defender, DefenderTask in pairs( self:GetDefenderTasks() ) do + local Defender = Defender -- Wrapper.Group#GROUP + if DefenderTask.Target and DefenderTask.Target.Index == DetectedItem.Index then + Report:Add( string.format( " - %s ( %s - %s ) %s", Defender:GetName(), DefenderTask.Type, DefenderTask.Fsm:GetState(), Defender:HasTask() == true and "Executing" or "Idle" ) ) + end + end + end + end + + if self.TacticalDisplay then + Report:Add( "\n - No Targets:") + local TaskCount = 0 for Defender, DefenderTask in pairs( self:GetDefenderTasks() ) do + TaskCount = TaskCount + 1 local Defender = Defender -- Wrapper.Group#GROUP - if DefenderTask.Target and DefenderTask.Target.Index == DetectedItem.Index then - Report:Add( string.format( " - %s ( %s - %s ) %s", Defender:GetName(), DefenderTask.Type, DefenderTask.Fsm:GetState(), Defender:HasTask() == true and "Executing" or "Idle" ) ) - end + if not DefenderTask.Target then + local DefenderHasTask = Defender:HasTask() + Report:Add( string.format( " - %s ( %s - %s ) %s", Defender:GetName(), DefenderTask.Type, DefenderTask.Fsm:GetState(), Defender:HasTask() == true and "Executing" or "Idle" ) ) + end end + Report:Add( string.format( "\n - %d Tasks", TaskCount ) ) + + self:T( Report:Text( "\n" ) ) + trigger.action.outText( Report:Text( "\n" ), 25 ) end - - Report:Add( "\n - No Targets:") - local TaskCount = 0 - for Defender, DefenderTask in pairs( self:GetDefenderTasks() ) do - TaskCount = TaskCount + 1 - local Defender = Defender -- Wrapper.Group#GROUP - if not DefenderTask.Target then - local DefenderHasTask = Defender:HasTask() - Report:Add( string.format( " - %s ( %s - %s ) %s", Defender:GetName(), DefenderTask.Type, DefenderTask.Fsm:GetState(), Defender:HasTask() == true and "Executing" or "Idle" ) ) - end - end - Report:Add( string.format( "\n - %d Tasks", TaskCount ) ) - - self:T( Report:Text( "\n" ) ) - trigger.action.outText( Report:Text( "\n" ), 25 ) return true end diff --git a/Utils/GenerateDocumentations.bat b/Utils/GenerateDocumentations.bat index d106f5189..144cc2a6f 100644 --- a/Utils/GenerateDocumentations.bat +++ b/Utils/GenerateDocumentations.bat @@ -5,9 +5,9 @@ echo Generating LuaDocumentor Documentation echo -------------------------------------- call luadocumentor.bat -:: Generate Slate documentation -echo Generating Slate Documentation -echo ------------------------------ -cd "Slate Documentation Generator" -call Generate.bat -cd .. \ No newline at end of file +rem :: Generate Slate documentation +rem echo Generating Slate Documentation +rem echo ------------------------------ +rem cd "Slate Documentation Generator" +rem call Generate.bat +rem cd .. \ No newline at end of file diff --git a/docs/Documentation/AI_A2A_Dispatcher.html b/docs/Documentation/AI_A2A_Dispatcher.html index efdca725b..7eb00b1c6 100644 --- a/docs/Documentation/AI_A2A_Dispatcher.html +++ b/docs/Documentation/AI_A2A_Dispatcher.html @@ -128,7 +128,9 @@

AI_A2A_DISPATCHER class, extends Tasking#DETECTION_MANAGER

-

The #AI class is designed to create an automatic air defence system for a coalition.

+

Banner Image

+ +

The #AIA2ADISPATCHER class is designed to create an automatic air defence system for a coalition.

@@ -599,9 +601,14 @@

AI_A2A_DISPATCHER class, extends Tasking#DETECTION_MANAGER

-

The #AI class is designed to create an automatic air defence system for a coalition.

+

Banner Image

+ +

The #AIA2ADISPATCHER class is designed to create an automatic air defence system for a coalition.

+ +

Banner Image

+

It includes automatic spawning of Combat Air Patrol aircraft (CAP) and Ground Controlled Intercept aircraft (GCI) in response to enemy air movements that are detected by a ground based radar network. CAP flights will take off and proceed to designated CAP zones where they will remain on station until the ground radars direct them to intercept detected enemy aircraft or they run short of fuel and must return to base (RTB). When a CAP flight leaves their zone to perform an interception or return to base a new CAP flight will spawn to take their place. If all CAP flights are engaged or RTB then additional GCI interceptors will scramble to intercept unengaged enemy aircraft under ground radar control. @@ -618,22 +625,30 @@ There are two parameters required, a Set#SET_GRO

The AIA2ADISPATCHER.New() method is used to setup the EWR network and to define the grouping.

-

1.1. Define the EWR network:

+

1.1. Define the EWR network:

+ +

As part of the AI_A2A_DISPATCHER constructor, an EWR network must be given as the first parameter. +An EWR network, or, Early Warning Radar network, is used to early detect potential airborne targets and to understand the position of patrolling targets of the enemy.

+ +

Banner Image

Typically EWR networks are setup using 55G6 EWR, 1L13 EWR, Hawk sr and Patriot str ground based radar units. These radars have different ranges and 55G6 EWR and 1L13 EWR radars are Eastern Bloc units (eg Russia, Ukraine, Georgia) while the Hawk and Patriot radars are Western (eg US). Additionally, ANY other radar capable unit can be part of the EWR network! Also AWACS airborne units, planes, helicopters can help to detect targets, as long as they have radar. The position of these units is very important as they need to provide enough coverage -to pick up enemy aircraft as they approach so that CAP and GCI flights can be tasked to intercept them. -Additionally in a hot war situation where the border is no longer respected the placement of radars has a big effect on how fast the war escalates. +to pick up enemy aircraft as they approach so that CAP and GCI flights can be tasked to intercept them.

+ +

Banner Image

+ +

Additionally in a hot war situation where the border is no longer respected the placement of radars has a big effect on how fast the war escalates. For example if they are a long way forward and can detect enemy planes on the ground and taking off they will start to vector CAP and GCI flights to attack them straight away which will immediately draw a response from the other coalition. Having the radars further back will mean a slower escalation because fewer targets will be detected and therefore less CAP and GCI flights will spawn and this will tend to make just the border area active rather than a melee over the whole map. It all depends on what the desired effect is.

-

EWR networks are dynamically constructed, that is, they form part of the Set#SET_GROUP object that is given as the input parameter of the AI_A2A_DISPATCHER class. -By defining in a smart way the names or name prefixes of the groups of EWR capable units, these units will be automatically added or deleted from the EWR network, +

EWR networks are dynamically constructed, that is, they form part of the Set#SET_GROUP object that is given as the input parameter of the AI_A2A_DISPATCHER class. +By defining in a smart way the names or name prefixes of the groups of EWR capable units, these units will be automatically added or deleted from the EWR network, increasing or decreasing the radar coverage of the Early Warning System.

See the following example to setup an EWR network containing EWR stations and AWACS.

@@ -651,8 +666,11 @@ A2ADispatcher = AI_A2A_DISPATCHER:New( DetectionSetGroup, 30000 )

The above example creates a SET_GROUP instance, and stores this in the variable (object) DetectionSetGroup. DetectionSetGroup is then being configured to filter all active groups with a group name starting with DF CCCP AWACS or DF CCCP EWR to be included in the Set. DetectionSetGroup is then being ordered to start the dynamic filtering. Note that any destroy or new spawn of a group with the above names will be removed or added to the Set. -The DetectionSetGroup variable is then passed to the AIA2ADISPATCHER.New() method to indicate the EWR network configuration and setup the A2A defense detection mechanism. -As a second parameter of the AIA2ADISPATCHER.New() method, 30000 indicates that detected targets need to be grouped within a radius of 30km. +The DetectionSetGroup variable is then passed to the AIA2ADISPATCHER.New() method to indicate the EWR network configuration and setup the A2A defense detection mechanism.

+ +

1.2. Define the detected target grouping radius:

+ +

As a second parameter of the AIA2ADISPATCHER.New() method, 30000 indicates that detected targets need to be grouped within a radius of 30km. The grouping radius should not be too small, but also depends on the types of planes and the era of the simulation. Fast planes like in the 80s, need a larger radius than WWII planes.
Typically I suggest to use 30000 for new generation planes and 10000 for older era aircraft.

@@ -662,8 +680,11 @@ group being detected. This may result in additional GCI being started by the dis

2. Set the engage radius:

-

Define the radius to engage any target by airborne friendlies, which are executing cap or returning from an intercept mission. -So, if there is a target area detected and reported, +

Define the radius to engage any target by airborne friendlies, which are executing cap or returning from an intercept mission.

+ +

Banner Image

+ +

So, if there is a target area detected and reported, then any friendlies that are airborne near this target area, will be commanded to (re-)engage that target when available (if no other tasks were commanded). For example, if 100000 is given as a value, then any friendly that is airborne within 100km from the detected target, @@ -677,11 +698,16 @@ If too large, any airborne cap may not be able to reach the detected target area

According to the tactical and strategic design of the mission broadly decide the shape and extent of red and blue territories. They should be laid out such that a border area is created between the two coalitions.

+

Banner Image

+

Define a border area to simulate a cold war scenario and use the method AIA2ADISPATCHER.SetBorderZone() to create a border zone for the dispatcher.

A cold war is one where CAP aircraft patrol their territory but will not attack enemy aircraft or launch GCI aircraft unless enemy aircraft enter their territory. In other words the EWR may detect an enemy aircraft but will only send aircraft to attack it if it crosses the border. -A hot war is one where CAP aircraft will intercept any detected enemy aircraft and GCI aircraft will launch against detected enemy aircraft without regard for territory. In other words if the ground radar can detect the enemy aircraft then it will send CAP and GCI aircraft to attack it. -If it’s a cold war then the borders of red and blue territory need to be defined using a zone object derived from Zone#ZONE_BASE. +A hot war is one where CAP aircraft will intercept any detected enemy aircraft and GCI aircraft will launch against detected enemy aircraft without regard for territory. In other words if the ground radar can detect the enemy aircraft then it will send CAP and GCI aircraft to attack it.

+ +

Banner Image

+ +

If it’s a cold war then the borders of red and blue territory need to be defined using a zone object derived from Zone#ZONE_BASE. If a hot war is chosen then no borders actually need to be defined using the helicopter units other than it makes it easier sometimes for the mission maker to envisage where the red and blue territories roughly are. In a hot war the borders are effectively defined by the ground based radar coverage of a coalition. Set the noborders parameter to 1

4. Squadrons:

@@ -758,8 +784,11 @@ Damaged or out-of-fuel aircraft are returning to the nearest friendly airbase an

4.3. Set squadron grouping

-

Choices are 1, 2, 3 or 4 when CAP or GCI flights spawn. Use the method AIA2ADISPATCHER.SetSquadronGrouping() to set the amount of CAP or GCI flights that will take-off when spawned. -In the case of GCI, the AIA2ADISPATCHER.SetSquadronGrouping() method has additional behaviour. When there aren't enough CAP flights airborne, a GCI will be initiated for the remaining +

Use the method AIA2ADISPATCHER.SetSquadronGrouping() to set the amount of CAP or GCI flights that will take-off when spawned.

+ +

Banner Image

+ +

In the case of GCI, the AIA2ADISPATCHER.SetSquadronGrouping() method has additional behaviour. When there aren't enough CAP flights airborne, a GCI will be initiated for the remaining targets to be engaged. Depending on the grouping parameter, the spawned flights for GCI are grouped into this setting.
For example with a group setting of 2, if 3 targets are detected and cannot be engaged by CAP or any airborne flight, a GCI needs to be started, the GCI flights will be grouped as follows: Group 1 of 2 flights and Group 2 of one flight!

@@ -771,6 +800,8 @@ a GCI needs to be started, the GCI flights will be grouped as follows: Group 1 o

The effectiveness can be set with the overhead parameter. This is a number that is used to calculate the amount of Units that dispatching command will allocate to GCI in surplus of detected amount of units. The default value of the overhead parameter is 1.0, which means equal balance.

+

Banner Image

+

However, depending on the (type of) aircraft (strength and payload) in the squadron and the amount of resources available, this parameter can be changed.

The AIA2ADISPATCHER.SetOverhead() method can be used to tweak the defense strength, @@ -794,8 +825,11 @@ multiplied by the Overhead and rounded up to the smallest integer.

5.1. Set the CAP zones

+

CAP zones are patrol areas where Combat Air Patrol (CAP) flights loiter until they either return to base due to low fuel or are assigned an interception task by ground control.

+ +

Banner Image

+
    -
  • CAP zones are patrol areas where Combat Air Patrol (CAP) flights loiter until they either return to base due to low fuel or are assigned an interception task by ground control.

  • As the CAP flights wander around within the zone waiting to be tasked, these zones need to be large enough that the aircraft are not constantly turning but do not have to be big and numerous enough to completely cover a border.

  • CAP zones can be of any type, and are derived from the Zone#ZONE_BASE class. Zones can be Zone#ZONE, Zone#ZONE_POLYGON, Zone#ZONE_UNIT, Zone#ZONE_GROUP, etc. @@ -810,6 +844,8 @@ multiplied by the Overhead and rounded up to the smallest integer.

  • Typically if a CAP flight is tasked and therefore leaves their zone empty while they go off and intercept their target another CAP flight will spawn to take their place.

+

Banner Image

+

The following example illustrates how CAP zones are coded:

 -- CAP Squadron execution.
diff --git a/docs/Documentation/Cargo.html b/docs/Documentation/Cargo.html
index e3fae231c..d774a472f 100644
--- a/docs/Documentation/Cargo.html
+++ b/docs/Documentation/Cargo.html
@@ -2934,7 +2934,6 @@ The range till cargo will board.

- CARGO_UNIT.CargoCarrier diff --git a/docs/Documentation/Detection.html b/docs/Documentation/Detection.html index 49f3c5879..6e5b46606 100644 --- a/docs/Documentation/Detection.html +++ b/docs/Documentation/Detection.html @@ -2387,7 +2387,6 @@ The index of the DetectedItem.

- #number DETECTION_BASE.DetectedItemCount @@ -2559,7 +2558,7 @@ The index of the DetectedItem.

- #number + DETECTION_BASE.DetectionInterval diff --git a/docs/Documentation/Fsm.html b/docs/Documentation/Fsm.html index 401b60084..5267af595 100644 --- a/docs/Documentation/Fsm.html +++ b/docs/Documentation/Fsm.html @@ -1604,7 +1604,7 @@ A string defining the start state.

- + #string FSM._StartState @@ -1903,7 +1903,6 @@ A string defining the start state.

- FSM.current diff --git a/docs/Documentation/Movement.html b/docs/Documentation/Movement.html index 4307c3aaa..be5ce073c 100644 --- a/docs/Documentation/Movement.html +++ b/docs/Documentation/Movement.html @@ -227,6 +227,7 @@ on defined intervals (currently every minute).

+ #number MOVEMENT.AliveUnits @@ -235,6 +236,9 @@ on defined intervals (currently every minute).

+ +

Contains the counter how many units are currently alive

+
diff --git a/docs/Documentation/Point.html b/docs/Documentation/Point.html index f204d56d9..74e7fcb9a 100644 --- a/docs/Documentation/Point.html +++ b/docs/Documentation/Point.html @@ -2799,6 +2799,7 @@ The y coordinate.

+ POINT_VEC2.z diff --git a/docs/Documentation/Settings.html b/docs/Documentation/Settings.html index 4dce02244..7dca37cbf 100644 --- a/docs/Documentation/Settings.html +++ b/docs/Documentation/Settings.html @@ -1073,7 +1073,7 @@ true if metric.

- #boolean + SETTINGS.Metric diff --git a/docs/Documentation/Spawn.html b/docs/Documentation/Spawn.html index 89a987529..0f27003d1 100644 --- a/docs/Documentation/Spawn.html +++ b/docs/Documentation/Spawn.html @@ -822,12 +822,6 @@ and any spaces before and after the resulting name are removed.

SPAWN:_TranslateRotate(SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle) - - - - SPAWN.uncontrolled - - @@ -2200,6 +2194,9 @@ The group that was spawned. You can use this group for further actions.

+ +

Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning.

+
@@ -2732,6 +2729,9 @@ when nothing was spawned.

+ +

Overwrite unit names by default with group name.

+
@@ -2746,6 +2746,9 @@ when nothing was spawned.

+ +

By default, no InitLimit

+
@@ -2781,7 +2784,7 @@ when nothing was spawned.

- + #number SPAWN.SpawnMaxGroups @@ -2798,7 +2801,7 @@ when nothing was spawned.

- + #number SPAWN.SpawnMaxUnitsAlive @@ -3150,7 +3153,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 ) -

When the first Spawn executes, all the Groups need to be made visible before start.

+

Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.

@@ -3730,20 +3733,6 @@ True = Continue Scheduler

- -
-
-
- - - -SPAWN.uncontrolled - -
-
- - -
diff --git a/docs/Documentation/SpawnStatic.html b/docs/Documentation/SpawnStatic.html index d8aa5e633..bc91b9624 100644 --- a/docs/Documentation/SpawnStatic.html +++ b/docs/Documentation/SpawnStatic.html @@ -436,7 +436,6 @@ ptional) The name of the new static.

- #number SPAWNSTATIC.SpawnIndex diff --git a/docs/Documentation/Spot.html b/docs/Documentation/Spot.html index 5fdc3b305..ead3792db 100644 --- a/docs/Documentation/Spot.html +++ b/docs/Documentation/Spot.html @@ -765,7 +765,6 @@ true if it is lasing

- SPOT.ScheduleID @@ -779,7 +778,6 @@ true if it is lasing

- SPOT.SpotIR @@ -793,7 +791,6 @@ true if it is lasing

- SPOT.SpotLaser @@ -807,7 +804,6 @@ true if it is lasing

- SPOT.Target diff --git a/docs/Documentation/Task_Cargo.html b/docs/Documentation/Task_Cargo.html index a49a3383f..463fdae49 100644 --- a/docs/Documentation/Task_Cargo.html +++ b/docs/Documentation/Task_Cargo.html @@ -510,7 +510,7 @@ based on the tasking capabilities defined in Task#TA
- Core.Cargo#CARGO_GROUP + Core.Cargo#CARGO FSM_PROCESS.Cargo