mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge pull request #582 from FlightControl-Master/562-AI-A2A-Dispatcher
562 ai a2a dispatcher
This commit is contained in:
commit
c4a2c9edc9
@ -385,8 +385,13 @@ do -- AI_A2A_DISPATCHER
|
|||||||
-- DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
-- DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
-- DetectionSetGroup:FilterStart()
|
-- DetectionSetGroup:FilterStart()
|
||||||
--
|
--
|
||||||
|
-- -- Here we define detection to be done by area, with a grouping radius of 3000.
|
||||||
|
-- Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
--
|
||||||
-- -- Setup the A2A dispatcher, and initialize it.
|
-- -- Setup the A2A dispatcher, and initialize it.
|
||||||
-- A2ADispatcher = AI_A2A_DISPATCHER:New( DetectionSetGroup, 30000 )
|
-- A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
--
|
||||||
|
--
|
||||||
--
|
--
|
||||||
-- -- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
-- -- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
-- -- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
-- -- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
@ -515,10 +520,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
-- @field #AI_A2A_DISPATCHER
|
-- @field #AI_A2A_DISPATCHER
|
||||||
AI_A2A_DISPATCHER = {
|
AI_A2A_DISPATCHER = {
|
||||||
ClassName = "AI_A2A_DISPATCHER",
|
ClassName = "AI_A2A_DISPATCHER",
|
||||||
Mission = nil,
|
|
||||||
Detection = nil,
|
Detection = nil,
|
||||||
Tasks = {},
|
|
||||||
SweepZones = {},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -539,8 +541,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
|
|
||||||
--- AI_A2A_DISPATCHER constructor.
|
--- AI_A2A_DISPATCHER constructor.
|
||||||
-- @param #AI_A2A_DISPATCHER self
|
-- @param #AI_A2A_DISPATCHER self
|
||||||
-- @param #string The Squadron Name. This name is used to control the squadron settings in the A2A dispatcher, and also in communication to human players.
|
-- @param Functional.Detection#DETECTION_BASE Detection The DETECTION object that will detects targets using the the Early Warning Radar network.
|
||||||
-- @param Core.Set#SET_GROUP DetectionSetGroup The @{Set} of group objects that will setup the Early Warning Radar network.
|
|
||||||
-- @param #number GroupingRadius The radius in meters wherein detected planes are being grouped as one target area.
|
-- @param #number GroupingRadius The radius in meters wherein detected planes are being grouped as one target area.
|
||||||
-- For airplanes, 6000 (6km) is recommended, and is also the default value of this parameter.
|
-- For airplanes, 6000 (6km) is recommended, and is also the default value of this parameter.
|
||||||
-- @return #AI_A2A_DISPATCHER self
|
-- @return #AI_A2A_DISPATCHER self
|
||||||
@ -549,9 +550,7 @@ do -- AI_A2A_DISPATCHER
|
|||||||
-- -- Set a new AI A2A Dispatcher object, based on an EWR network with a 6 km grouping radius.
|
-- -- Set a new AI A2A Dispatcher object, based on an EWR network with a 6 km grouping radius.
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
function AI_A2A_DISPATCHER:New( DetectionSetGroup, GroupingRadius )
|
function AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
local Detection = DETECTION_AREAS:New( DetectionSetGroup, GroupingRadius )
|
|
||||||
|
|
||||||
-- Inherits from DETECTION_MANAGER
|
-- Inherits from DETECTION_MANAGER
|
||||||
local self = BASE:Inherit( self, DETECTION_MANAGER:New( nil, Detection ) ) -- #AI_A2A_DISPATCHER
|
local self = BASE:Inherit( self, DETECTION_MANAGER:New( nil, Detection ) ) -- #AI_A2A_DISPATCHER
|
||||||
@ -1025,14 +1024,14 @@ do -- AI_A2A_DISPATCHER
|
|||||||
|
|
||||||
local Cap = self.DefenderSquadrons[SquadronName].Cap
|
local Cap = self.DefenderSquadrons[SquadronName].Cap
|
||||||
if Cap then
|
if Cap then
|
||||||
Cap.LowInterval = LowInterval
|
Cap.LowInterval = LowInterval or 300
|
||||||
Cap.HighInterval = HighInterval
|
Cap.HighInterval = HighInterval or 600
|
||||||
Cap.Probability = Probability
|
Cap.Probability = Probability or 1
|
||||||
Cap.CapLimit = CapLimit
|
Cap.CapLimit = CapLimit
|
||||||
Cap.Scheduler = Cap.Scheduler or SCHEDULER:New( self )
|
Cap.Scheduler = Cap.Scheduler or SCHEDULER:New( self )
|
||||||
local Scheduler = Cap.Scheduler -- Core.Scheduler#SCHEDULER
|
local Scheduler = Cap.Scheduler -- Core.Scheduler#SCHEDULER
|
||||||
local Variance = ( HighInterval - LowInterval ) / 2
|
local Variance = ( Cap.HighInterval - Cap.LowInterval ) / 2
|
||||||
local Median = LowInterval + Variance
|
local Median = Cap.LowInterval + Variance
|
||||||
local Randomization = Variance / Median
|
local Randomization = Variance / Median
|
||||||
Scheduler:Schedule(self, self.SchedulerCAP, { SquadronName }, Median, Median, Randomization )
|
Scheduler:Schedule(self, self.SchedulerCAP, { SquadronName }, Median, Median, Randomization )
|
||||||
else
|
else
|
||||||
@ -2016,3 +2015,121 @@ do
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
do
|
||||||
|
|
||||||
|
--- AI_A2A_DISPATCHER_GCICAP class.
|
||||||
|
-- @type AI_A2A_DISPATCHER_GCICAP
|
||||||
|
-- @extends #AI_A2A_DISPATCHER
|
||||||
|
|
||||||
|
--- # AI\_A2A\_DISPATCHER\_GCICAP class, extends @{AI#AI_A2A_DISPATCHER}
|
||||||
|
--
|
||||||
|
-- 
|
||||||
|
--
|
||||||
|
-- The @{#AI_A2A_DISPATCHER} class is designed to create an automatic air defence system for a coalition.
|
||||||
|
--
|
||||||
|
--
|
||||||
|
-- 
|
||||||
|
--
|
||||||
|
-- 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.
|
||||||
|
-- With a little time and with a little work it provides the mission designer with a convincing and completely automatic air defence system.
|
||||||
|
-- In short it is a plug in very flexible and configurable air defence module for DCS World.
|
||||||
|
--
|
||||||
|
-- Note that in order to create a two way A2A defense system, two AI\_A2A\_DISPATCHER_GCICAP defense system may need to be created, for each coalition one.
|
||||||
|
-- This is a good implementation, because maybe in the future, more coalitions may become available in DCS world.
|
||||||
|
--
|
||||||
|
-- ## 1. AI\_A2A\_DISPATCHER\_GCICAP constructor:
|
||||||
|
--
|
||||||
|
-- The @{#AI_A2A_DISPATCHER_GCICAP.New}() method creates a new AI\_A2A\_DISPATCHER\_GCICAP instance.
|
||||||
|
-- There are two parameters required, a list of prefix group names that collects the groups of the EWR network, and a radius in meters,
|
||||||
|
-- that will be used to group the detected targets.
|
||||||
|
--
|
||||||
|
-- ### 1.1. Define the **EWR network**:
|
||||||
|
--
|
||||||
|
-- As part of the AI\_A2A\_DISPATCHER\_GCICAP constructor, a list of prefixes must be given of the group names defined within the mission editor,
|
||||||
|
-- that define the EWR network.
|
||||||
|
--
|
||||||
|
-- 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.
|
||||||
|
--
|
||||||
|
-- 
|
||||||
|
--
|
||||||
|
-- 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.
|
||||||
|
-- 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 maintained**. By defining in a **smart way the names or name prefixes of the groups** with EWR capable units, these groups 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.
|
||||||
|
--
|
||||||
|
-- -- Setup the A2A GCICAP dispatcher, and initialize it.
|
||||||
|
-- A2ADispatcher = AI_A2A_DISPATCHER_GCICAP:New( { "DF CCCP AWACS", "DF CCCP EWR" }, 30000 )
|
||||||
|
--
|
||||||
|
-- The above example creates a new AI_A2A_DISPATCHER_GCICAP instance, and stores this in the variable (object) **A2ADispatcher**.
|
||||||
|
-- The first parameter is are the prefixes of the group names that define the EWR network.
|
||||||
|
-- The A2A dispatcher will filter all active groups with a group name starting with **DF CCCP AWACS** or **DF CCCP EWR** to be included in the EWR network.
|
||||||
|
--
|
||||||
|
-- ### 1.2. Define the detected **target grouping radius**:
|
||||||
|
--
|
||||||
|
-- As a second parameter of the @{#AI_A2A_DISPATCHER_GCICAP.New}() method, a radius in meters must be given. The radius 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.
|
||||||
|
--
|
||||||
|
-- Note that detected targets are constantly re-grouped, that is, when certain detected aircraft are moving further than the group radius, then these aircraft will become a separate
|
||||||
|
-- group being detected. This may result in additional GCI being started by the dispatcher! So don't make this value too small!
|
||||||
|
--
|
||||||
|
-- ## 2. AI_A2A_DISPATCHER_DOCUMENTATION is derived from @{#AI_A2A_DISPATCHER},
|
||||||
|
-- so all further documentation needs to be consulted in this class
|
||||||
|
-- for documentation consistency.
|
||||||
|
--
|
||||||
|
-- @field #AI_A2A_DISPATCHER_GCICAP
|
||||||
|
AI_A2A_DISPATCHER_GCICAP = {
|
||||||
|
ClassName = "AI_A2A_DISPATCHER_GCICAP",
|
||||||
|
Detection = nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--- AI_A2A_DISPATCHER_GCICAP constructor.
|
||||||
|
-- @param #AI_A2A_DISPATCHER_GCICAP self
|
||||||
|
-- @param #list<#string> EWRPrefixes A list of prefixes that of groups that setup the Early Warning Radar network.
|
||||||
|
-- @param #number GroupingRadius The radius in meters wherein detected planes are being grouped as one target area.
|
||||||
|
-- For airplanes, 6000 (6km) is recommended, and is also the default value of this parameter.
|
||||||
|
-- @return #AI_A2A_DISPATCHER_GCICAP
|
||||||
|
-- @usage
|
||||||
|
--
|
||||||
|
-- -- Set a new AI A2A Dispatcher object, based on an EWR network with a 30 km grouping radius
|
||||||
|
-- -- This for ground and awacs installations.
|
||||||
|
--
|
||||||
|
-- A2ADispatcher = AI_A2A_DISPATCHER_GCICAP:New( { "BlueEWRGroundRadars", "BlueEWRAwacs" }, 30000 )
|
||||||
|
--
|
||||||
|
function AI_A2A_DISPATCHER_GCICAP:New( EWRPrefixes, GroupingRadius )
|
||||||
|
|
||||||
|
local SetGroup = SET_GROUP:New()
|
||||||
|
SetGroup:FilterPrefixes( EWRPrefixes )
|
||||||
|
SetGroup:FilterStart()
|
||||||
|
|
||||||
|
local Detection = DETECTION_AREAS:New( SetGroup, GroupingRadius )
|
||||||
|
|
||||||
|
local self = BASE:Inherit( self, AI_A2A_DISPATCHER:New( Detection ) ) -- #AI_A2A_DISPATCHER_GCICAP
|
||||||
|
|
||||||
|
self:__Start( 5 )
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|||||||
@ -802,8 +802,8 @@ do -- COORDINATE
|
|||||||
end
|
end
|
||||||
|
|
||||||
if Settings:IsA2A_BULLS() then
|
if Settings:IsA2A_BULLS() then
|
||||||
local Coordinate = Controllable:GetCoordinate()
|
local Coalition = Controllable:GetCoalition()
|
||||||
return self:ToStringBULLS( Coordinate, Settings )
|
return self:ToStringBULLS( Coalition, Settings )
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if Settings:IsA2G_BRA() then
|
if Settings:IsA2G_BRA() then
|
||||||
|
|||||||
@ -130,6 +130,16 @@
|
|||||||
|
|
||||||
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia1.JPG" alt="Banner Image"/></p>
|
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia1.JPG" alt="Banner Image"/></p>
|
||||||
|
|
||||||
|
<p>The <a href="##(AI_A2A_DISPATCHER)">#AI<em>A2A</em>DISPATCHER</a> class is designed to create an automatic air defence system for a coalition.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="name" nowrap="nowrap"><a href="#AI_A2A_DISPATCHER_GCICAP">AI_A2A_DISPATCHER_GCICAP</a></td>
|
||||||
|
<td class="summary">
|
||||||
|
<h1>AI_A2A_DISPATCHER_GCICAP class, extends <a href="AI.html##(AI_A2A_DISPATCHER)">AI#AI<em>A2A</em>DISPATCHER</a></h1>
|
||||||
|
|
||||||
|
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia1.JPG" alt="Banner Image"/></p>
|
||||||
|
|
||||||
<p>The <a href="##(AI_A2A_DISPATCHER)">#AI<em>A2A</em>DISPATCHER</a> class is designed to create an automatic air defence system for a coalition.</p>
|
<p>The <a href="##(AI_A2A_DISPATCHER)">#AI<em>A2A</em>DISPATCHER</a> class is designed to create an automatic air defence system for a coalition.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -329,7 +339,7 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER).New">AI_A2A_DISPATCHER:New(The, DetectionSetGroup, GroupingRadius)</a></td>
|
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER).New">AI_A2A_DISPATCHER:New(Detection, GroupingRadius)</a></td>
|
||||||
<td class="summary">
|
<td class="summary">
|
||||||
<p>AI<em>A2A</em>DISPATCHER constructor.</p>
|
<p>AI<em>A2A</em>DISPATCHER constructor.</p>
|
||||||
</td>
|
</td>
|
||||||
@ -584,6 +594,16 @@
|
|||||||
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER).onafterGCI">AI_A2A_DISPATCHER:onafterGCI(From, Event, To, Target, DefendersMissing, AIGroups)</a></td>
|
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER).onafterGCI">AI_A2A_DISPATCHER:onafterGCI(From, Event, To, Target, DefendersMissing, AIGroups)</a></td>
|
||||||
<td class="summary">
|
<td class="summary">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2><a id="#(AI_A2A_DISPATCHER_GCICAP)">Type <code>AI_A2A_DISPATCHER_GCICAP</code></a></h2>
|
||||||
|
<table class="function_list">
|
||||||
|
<tr>
|
||||||
|
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER_GCICAP).New">AI_A2A_DISPATCHER_GCICAP:New(<, GroupingRadius, EWRPrefixes)</a></td>
|
||||||
|
<td class="summary">
|
||||||
|
<p>AI<em>A2A</em>DISPATCHER_GCICAP constructor.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -982,8 +1002,13 @@ But you can also define other zone types instead, like moving zones.</p>
|
|||||||
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
DetectionSetGroup:FilterPrefixes( { "DF CCCP AWACS", "DF CCCP EWR" } )
|
||||||
DetectionSetGroup:FilterStart()
|
DetectionSetGroup:FilterStart()
|
||||||
|
|
||||||
|
-- Here we define detection to be done by area, with a grouping radius of 3000.
|
||||||
|
Detection = DETECTION_AREAS:New( DetectionSetGroup, 30000 )
|
||||||
|
|
||||||
-- Setup the A2A dispatcher, and initialize it.
|
-- Setup the A2A dispatcher, and initialize it.
|
||||||
A2ADispatcher = AI_A2A_DISPATCHER:New( DetectionSetGroup, 30000 )
|
A2ADispatcher = AI_A2A_DISPATCHER:New( Detection )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
-- Initialize the dispatcher, setting up a border zone. This is a polygon,
|
||||||
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
-- which takes the waypoints of a late activated group with the name CCCP Border as the boundaries of the border area.
|
||||||
@ -1101,6 +1126,96 @@ Therefore if F4s are wanted as a coalition’s CAP or GCI aircraft Germany will
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl class="function">
|
||||||
|
<dt>
|
||||||
|
|
||||||
|
<em><a href="##(AI_A2A_DISPATCHER_GCICAP)">#AI_A2A_DISPATCHER_GCICAP</a></em>
|
||||||
|
<a id="AI_A2A_DISPATCHER_GCICAP" >
|
||||||
|
<strong>AI_A2A_DISPATCHER_GCICAP</strong>
|
||||||
|
</a>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<h1>AI_A2A_DISPATCHER_GCICAP class, extends <a href="AI.html##(AI_A2A_DISPATCHER)">AI#AI<em>A2A</em>DISPATCHER</a></h1>
|
||||||
|
|
||||||
|
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia1.JPG" alt="Banner Image"/></p>
|
||||||
|
|
||||||
|
<p>The <a href="##(AI_A2A_DISPATCHER)">#AI<em>A2A</em>DISPATCHER</a> class is designed to create an automatic air defence system for a coalition.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia3.JPG" alt="Banner Image"/></p>
|
||||||
|
|
||||||
|
<p>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.
|
||||||
|
With a little time and with a little work it provides the mission designer with a convincing and completely automatic air defence system.
|
||||||
|
In short it is a plug in very flexible and configurable air defence module for DCS World.</p>
|
||||||
|
|
||||||
|
<p>Note that in order to create a two way A2A defense system, two AI_A2A_DISPATCHER_GCICAP defense system may need to be created, for each coalition one.
|
||||||
|
This is a good implementation, because maybe in the future, more coalitions may become available in DCS world.</p>
|
||||||
|
|
||||||
|
<h2>1. AI_A2A_DISPATCHER_GCICAP constructor:</h2>
|
||||||
|
|
||||||
|
<p>The <a href="##(AI_A2A_DISPATCHER_GCICAP).New">AI<em>A2A</em>DISPATCHER_GCICAP.New</a>() method creates a new AI_A2A_DISPATCHER_GCICAP instance.
|
||||||
|
There are two parameters required, a list of prefix group names that collects the groups of the EWR network, and a radius in meters,
|
||||||
|
that will be used to group the detected targets.</p>
|
||||||
|
|
||||||
|
<h3>1.1. Define the <strong>EWR network</strong>:</h3>
|
||||||
|
|
||||||
|
<p>As part of the AI_A2A_DISPATCHER_GCICAP constructor, a list of prefixes must be given of the group names defined within the mission editor,
|
||||||
|
that define the EWR network.</p>
|
||||||
|
|
||||||
|
<p>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.</p>
|
||||||
|
|
||||||
|
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia5.JPG" alt="Banner Image"/></p>
|
||||||
|
|
||||||
|
<p>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.</p>
|
||||||
|
|
||||||
|
<p><img src="..\Presentations\AI_A2A_DISPATCHER\Dia7.JPG" alt="Banner Image"/></p>
|
||||||
|
|
||||||
|
<p>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. </p>
|
||||||
|
|
||||||
|
<p>EWR networks are <strong>dynamically maintained</strong>. By defining in a <strong>smart way the names or name prefixes of the groups</strong> with EWR capable units, these groups will be <strong>automatically added or deleted</strong> from the EWR network,
|
||||||
|
increasing or decreasing the radar coverage of the Early Warning System.</p>
|
||||||
|
|
||||||
|
<p>See the following example to setup an EWR network containing EWR stations and AWACS.</p>
|
||||||
|
|
||||||
|
<pre><code>-- Setup the A2A GCICAP dispatcher, and initialize it.
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER_GCICAP:New( { "DF CCCP AWACS", "DF CCCP EWR" }, 30000 )
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<p>The above example creates a new AI<em>A2A</em>DISPATCHER_GCICAP instance, and stores this in the variable (object) <strong>A2ADispatcher</strong>.
|
||||||
|
The first parameter is are the prefixes of the group names that define the EWR network.
|
||||||
|
The A2A dispatcher will filter all active groups with a group name starting with <strong>DF CCCP AWACS</strong> or <strong>DF CCCP EWR</strong> to be included in the EWR network.</p>
|
||||||
|
|
||||||
|
<h3>1.2. Define the detected <strong>target grouping radius</strong>:</h3>
|
||||||
|
|
||||||
|
<p>As a second parameter of the <a href="##(AI_A2A_DISPATCHER_GCICAP).New">AI<em>A2A</em>DISPATCHER_GCICAP.New</a>() method, a radius in meters must be given. The radius 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. <br/>
|
||||||
|
Typically I suggest to use 30000 for new generation planes and 10000 for older era aircraft.</p>
|
||||||
|
|
||||||
|
<p>Note that detected targets are constantly re-grouped, that is, when certain detected aircraft are moving further than the group radius, then these aircraft will become a separate
|
||||||
|
group being detected. This may result in additional GCI being started by the dispatcher! So don't make this value too small!</p>
|
||||||
|
|
||||||
|
<h2>2. AI<em>A2A</em>DISPATCHER_DOCUMENTATION is derived from <a href="##(AI_A2A_DISPATCHER)">#AI<em>A2A</em>DISPATCHER</a>,</h2>
|
||||||
|
<p>so all further documentation needs to be consulted in this class
|
||||||
|
for documentation consistency.</p>
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<h2><a id="#(AI_A2A_Dispatcher)" >Type <code>AI_A2A_Dispatcher</code></a></h2>
|
<h2><a id="#(AI_A2A_Dispatcher)" >Type <code>AI_A2A_Dispatcher</code></a></h2>
|
||||||
@ -1856,7 +1971,7 @@ Takeoff From the airbase hot, from the airbase cold, in the air, from the runway
|
|||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<a id="#(AI_A2A_DISPATCHER).New" >
|
<a id="#(AI_A2A_DISPATCHER).New" >
|
||||||
<strong>AI_A2A_DISPATCHER:New(The, DetectionSetGroup, GroupingRadius)</strong>
|
<strong>AI_A2A_DISPATCHER:New(Detection, GroupingRadius)</strong>
|
||||||
</a>
|
</a>
|
||||||
</dt>
|
</dt>
|
||||||
<dd>
|
<dd>
|
||||||
@ -1867,14 +1982,8 @@ Takeoff From the airbase hot, from the airbase cold, in the air, from the runway
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
|
|
||||||
<p><code><em>#string The </em></code>:
|
<p><code><em><a href="Functional.Detection.html##(DETECTION_BASE)">Functional.Detection#DETECTION_BASE</a> Detection </em></code>:
|
||||||
Squadron Name. This name is used to control the squadron settings in the A2A dispatcher, and also in communication to human players.</p>
|
The DETECTION object that will detects targets using the the Early Warning Radar network.</p>
|
||||||
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
|
|
||||||
<p><code><em><a href="Core.Set.html##(SET_GROUP)">Core.Set#SET_GROUP</a> DetectionSetGroup </em></code>:
|
|
||||||
The <a href="Set.html">Set</a> of group objects that will setup the Early Warning Radar network.</p>
|
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@ -3399,6 +3508,61 @@ Provide a value of <strong>true</strong> to display every 30 seconds a tactical
|
|||||||
<p>Enumerator for spawns at airbases</p>
|
<p>Enumerator for spawns at airbases</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2><a id="#(AI_A2A_DISPATCHER_GCICAP)" >Type <code>AI_A2A_DISPATCHER_GCICAP</code></a></h2>
|
||||||
|
|
||||||
|
<p>AI<em>A2A</em>DISPATCHER_GCICAP class.</p>
|
||||||
|
|
||||||
|
<h3>Field(s)</h3>
|
||||||
|
<dl class="function">
|
||||||
|
<dt>
|
||||||
|
|
||||||
|
<a id="#(AI_A2A_DISPATCHER_GCICAP).New" >
|
||||||
|
<strong>AI_A2A_DISPATCHER_GCICAP:New(<, GroupingRadius, EWRPrefixes)</strong>
|
||||||
|
</a>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
<p>AI<em>A2A</em>DISPATCHER_GCICAP constructor.</p>
|
||||||
|
|
||||||
|
<h3>Parameters</h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
|
||||||
|
<p><code><em><a href="##(list)">#list</a> < </em></code>:
|
||||||
|
string> EWRPrefixes A list of prefixes that of groups that setup the Early Warning Radar network.</p>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
|
||||||
|
<p><code><em>#number GroupingRadius </em></code>:
|
||||||
|
The radius in meters wherein detected planes are being grouped as one target area.
|
||||||
|
For airplanes, 6000 (6km) is recommended, and is also the default value of this parameter.</p>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
|
||||||
|
<p><code><em> EWRPrefixes </em></code>: </p>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Return value</h3>
|
||||||
|
|
||||||
|
<p><em><a href="##(AI_A2A_DISPATCHER_GCICAP)">#AI<em>A2A</em>DISPATCHER_GCICAP</a>:</em></p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Usage:</h3>
|
||||||
|
<pre class="example"><code>
|
||||||
|
-- Set a new AI A2A Dispatcher object, based on an EWR network with a 30 km grouping radius
|
||||||
|
-- This for ground and awacs installations.
|
||||||
|
|
||||||
|
A2ADispatcher = AI_A2A_DISPATCHER_GCICAP:New( { "BlueEWRGroundRadars", "BlueEWRAwacs" }, 30000 )
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<h2><a id="#(list)" >Type <code>list</code></a></h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -926,6 +926,9 @@ Use the method <a href="##(AI_PATROL_ZONE).ManageDamage">AI<em>PATROL</em>ZONE.M
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p> This table contains the targets detected during patrol.</p>
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="function">
|
<dl class="function">
|
||||||
|
|||||||
@ -900,6 +900,7 @@ function below will use the range 1-7 just in case</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em></em>
|
||||||
<a id="#(DESIGNATE).LaserCodes" >
|
<a id="#(DESIGNATE).LaserCodes" >
|
||||||
<strong>DESIGNATE.LaserCodes</strong>
|
<strong>DESIGNATE.LaserCodes</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -2387,6 +2387,7 @@ The index of the DetectedItem.</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em>#number</em>
|
||||||
<a id="#(DETECTION_BASE).DetectedItemCount" >
|
<a id="#(DETECTION_BASE).DetectedItemCount" >
|
||||||
<strong>DETECTION_BASE.DetectedItemCount</strong>
|
<strong>DETECTION_BASE.DetectedItemCount</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -227,6 +227,7 @@ on defined intervals (currently every minute).</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em>#number</em>
|
||||||
<a id="#(MOVEMENT).AliveUnits" >
|
<a id="#(MOVEMENT).AliveUnits" >
|
||||||
<strong>MOVEMENT.AliveUnits</strong>
|
<strong>MOVEMENT.AliveUnits</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -235,6 +236,9 @@ on defined intervals (currently every minute).</p>
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p> Contains the counter how many units are currently alive</p>
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="function">
|
<dl class="function">
|
||||||
|
|||||||
@ -2799,7 +2799,6 @@ The y coordinate.</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<em></em>
|
|
||||||
<a id="#(POINT_VEC2).z" >
|
<a id="#(POINT_VEC2).z" >
|
||||||
<strong>POINT_VEC2.z</strong>
|
<strong>POINT_VEC2.z</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -1073,7 +1073,7 @@ true if metric.</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<em></em>
|
<em>#boolean</em>
|
||||||
<a id="#(SETTINGS).Metric" >
|
<a id="#(SETTINGS).Metric" >
|
||||||
<strong>SETTINGS.Metric</strong>
|
<strong>SETTINGS.Metric</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -822,6 +822,12 @@ and any spaces before and after the resulting name are removed.</p>
|
|||||||
<td class="name" nowrap="nowrap"><a href="##(SPAWN)._TranslateRotate">SPAWN:_TranslateRotate(SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle)</a></td>
|
<td class="name" nowrap="nowrap"><a href="##(SPAWN)._TranslateRotate">SPAWN:_TranslateRotate(SpawnIndex, SpawnRootX, SpawnRootY, SpawnX, SpawnY, SpawnAngle)</a></td>
|
||||||
<td class="summary">
|
<td class="summary">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="name" nowrap="nowrap"><a href="##(SPAWN).uncontrolled">SPAWN.uncontrolled</a></td>
|
||||||
|
<td class="summary">
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@ -2729,6 +2735,9 @@ when nothing was spawned.</p>
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p> Overwrite unit names by default with group name.</p>
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="function">
|
<dl class="function">
|
||||||
@ -2743,9 +2752,6 @@ when nothing was spawned.</p>
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p> By default, no InitLimit</p>
|
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl class="function">
|
<dl class="function">
|
||||||
@ -2781,7 +2787,7 @@ when nothing was spawned.</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<em>#number</em>
|
<em></em>
|
||||||
<a id="#(SPAWN).SpawnMaxGroups" >
|
<a id="#(SPAWN).SpawnMaxGroups" >
|
||||||
<strong>SPAWN.SpawnMaxGroups</strong>
|
<strong>SPAWN.SpawnMaxGroups</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -2798,7 +2804,7 @@ when nothing was spawned.</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<em>#number</em>
|
<em></em>
|
||||||
<a id="#(SPAWN).SpawnMaxUnitsAlive" >
|
<a id="#(SPAWN).SpawnMaxUnitsAlive" >
|
||||||
<strong>SPAWN.SpawnMaxUnitsAlive</strong>
|
<strong>SPAWN.SpawnMaxUnitsAlive</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -3126,7 +3132,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<em>#boolean</em>
|
<em></em>
|
||||||
<a id="#(SPAWN).SpawnUnControlled" >
|
<a id="#(SPAWN).SpawnUnControlled" >
|
||||||
<strong>SPAWN.SpawnUnControlled</strong>
|
<strong>SPAWN.SpawnUnControlled</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -3150,7 +3156,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p> Flag that indicates if all the Groups of the SpawnGroup need to be visible when Spawned.</p>
|
<p> When the first Spawn executes, all the Groups need to be made visible before start.</p>
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@ -3730,6 +3736,20 @@ True = Continue Scheduler</p>
|
|||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl class="function">
|
||||||
|
<dt>
|
||||||
|
|
||||||
|
<em></em>
|
||||||
|
<a id="#(SPAWN).uncontrolled" >
|
||||||
|
<strong>SPAWN.uncontrolled</strong>
|
||||||
|
</a>
|
||||||
|
</dt>
|
||||||
|
<dd>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
|||||||
@ -436,6 +436,7 @@ ptional) The name of the new static.</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em>#number</em>
|
||||||
<a id="#(SPAWNSTATIC).SpawnIndex" >
|
<a id="#(SPAWNSTATIC).SpawnIndex" >
|
||||||
<strong>SPAWNSTATIC.SpawnIndex</strong>
|
<strong>SPAWNSTATIC.SpawnIndex</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -765,6 +765,7 @@ true if it is lasing</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em></em>
|
||||||
<a id="#(SPOT).ScheduleID" >
|
<a id="#(SPOT).ScheduleID" >
|
||||||
<strong>SPOT.ScheduleID</strong>
|
<strong>SPOT.ScheduleID</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -778,6 +779,7 @@ true if it is lasing</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em></em>
|
||||||
<a id="#(SPOT).SpotIR" >
|
<a id="#(SPOT).SpotIR" >
|
||||||
<strong>SPOT.SpotIR</strong>
|
<strong>SPOT.SpotIR</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -791,6 +793,7 @@ true if it is lasing</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em></em>
|
||||||
<a id="#(SPOT).SpotLaser" >
|
<a id="#(SPOT).SpotLaser" >
|
||||||
<strong>SPOT.SpotLaser</strong>
|
<strong>SPOT.SpotLaser</strong>
|
||||||
</a>
|
</a>
|
||||||
@ -804,6 +807,7 @@ true if it is lasing</p>
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
|
<em></em>
|
||||||
<a id="#(SPOT).Target" >
|
<a id="#(SPOT).Target" >
|
||||||
<strong>SPOT.Target</strong>
|
<strong>SPOT.Target</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@ -524,7 +524,6 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
|
|||||||
<dl class="function">
|
<dl class="function">
|
||||||
<dt>
|
<dt>
|
||||||
|
|
||||||
<em></em>
|
|
||||||
<a id="#(FSM_PROCESS).DeployZone" >
|
<a id="#(FSM_PROCESS).DeployZone" >
|
||||||
<strong>FSM_PROCESS.DeployZone</strong>
|
<strong>FSM_PROCESS.DeployZone</strong>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user