mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
AI_BALANCER revised completely
-- Revised and Added documentation. -- Added pictures to documentation. -- Add/Exit clients is working. AI balances perfectly. -- FSM bug fixed. SUBS should not execute OnAfter, OnEnter
This commit is contained in:
parent
1f90c0c766
commit
51780b1d9b
@ -1,36 +1,69 @@
|
||||
--- This module contains the AI_BALANCER class.
|
||||
--- SP:N MP:Y AI:Y HU:N TYP:A -- This module contains the AI_BALANCER class.
|
||||
--
|
||||
-- AI Balancing will replace in multi player missions non-occupied human slots with AI groups, in order to provide an
|
||||
-- engaging simulation environment, even when there are hardly any players in the mission.
|
||||
--
|
||||
-- 
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- 1) @{AI.AI_Balancer#AI_BALANCER} class, extends @{Core.Fsm#FSM_SET}
|
||||
-- ===================================================================================
|
||||
-- # 1) @{AI.AI_Balancer#AI_BALANCER} class, extends @{Core.Fsm#FSM_SET}
|
||||
--
|
||||
-- The @{AI.AI_Balancer#AI_BALANCER} class monitors and manages as many AI GROUPS as there are
|
||||
-- CLIENTS in a SET_CLIENT collection not occupied by players.
|
||||
-- CLIENTS in a SET_CLIENT collection not occupied by human players.
|
||||
-- In other words, use AI_BALANCER to simulate human behaviour by spawning in replacement AI.
|
||||
--
|
||||
-- The AI_BALANCER class manages internally a collection of AI management objects, which govern the behaviour
|
||||
-- of the underlying AI GROUPS.
|
||||
-- of the spawned AI @{Wrapper.Group#GROUP)s.
|
||||
--
|
||||
-- The parent class @{Core.Fsm#FSM_SET} manages the functionality to control the Finite State Machine (FSM)
|
||||
-- and calls for each event the state transition methods providing the internal @{Core.Fsm#FSM_SET.Set} object containing the
|
||||
-- SET_GROUP and additional event parameters provided during the event.
|
||||
-- AI and additional event parameters provided during the event.
|
||||
--
|
||||
-- 1.1) AI_BALANCER construction method
|
||||
-- ---------------------------------------
|
||||
-- Create a new AI_BALANCER object with the @{#AI_BALANCER.New} method:
|
||||
-- ## 1.1) AI_BALANCER construction
|
||||
--
|
||||
-- * @{#AI_BALANCER.New}: Creates a new AI_BALANCER object.
|
||||
-- Create a new AI_BALANCER object with the @{#AI_BALANCER.New}() method:
|
||||
--
|
||||
-- ## 1.2) AI_BALANCER is a FSM
|
||||
--
|
||||
-- The AI_BALANCER is a state machine: it manages the different events and states of the @{Core.Fsm#FSM_SET.Set} it is governing.
|
||||
-- The AI_BALANCER has a default flow to manage the set.
|
||||
--
|
||||
-- 
|
||||
--
|
||||
--
|
||||
-- ### 1.2.1) AI_BALANCER States
|
||||
--
|
||||
-- * **Monitoring** ( Set ): Monitoring the Set if all AI is spawned for the Clients.
|
||||
-- * **Spawning** ( Set, ClientName ): There is a new AI group spawned with ClientName as the name of reference.
|
||||
-- * **Spawned** ( Set, AIGroup ): A new AI has been spawned. You can handle this event to customize the AI behaviour with other AI FSMs or own processes.
|
||||
-- * **Destroying** ( Set, AIGroup ): The AI is being destroyed.
|
||||
-- * **Returning** ( Set, AIGroup ): The AI is returning to the airbase specified by the ReturnToAirbase methods. Handle this state to customize the return behaviour of the AI, if any.
|
||||
--
|
||||
-- ### 1.2.2) AI_BALANCER Events
|
||||
--
|
||||
-- * **Monitor** ( Set ): Every 10 seconds, the Monitor event is triggered to monitor the Set.
|
||||
-- * **Spawn** ( Set, ClientName ): Triggers when there is a new AI group to be spawned with ClientName as the name of reference.
|
||||
-- * **Spawned** ( Set, AIGroup ): Triggers when a new AI has been spawned. You can handle this event to customize the AI behaviour with other AI FSMs or own processes.
|
||||
-- * **Destroy** ( Set, AIGroup ): The AI is being destroyed.
|
||||
-- * **Return** ( Set, AIGroup ): The AI is returning to the airbase specified by the ReturnToAirbase methods.
|
||||
--
|
||||
-- 1.2)
|
||||
-- ----
|
||||
-- * Add
|
||||
-- * Remove
|
||||
-- ## 1.3) AI_BALANCER spawn interval for replacement AI
|
||||
--
|
||||
-- 1.2) AI_BALANCER returns AI to Airbases
|
||||
-- ------------------------------------------
|
||||
-- You can configure to have the AI to return to:
|
||||
-- Use the method @{#AI_BALANCER.InitSpawnInterval}() to set the earliest and latest interval in seconds that is waited until a new replacement AI is spawned.
|
||||
--
|
||||
-- * @{#AI_BALANCER.ReturnToHomeAirbase}: Returns the AI to the home @{Wrapper.Airbase#AIRBASE}.
|
||||
-- * @{#AI_BALANCER.ReturnToNearestAirbases}: Returns the AI to the nearest friendly @{Wrapper.Airbase#AIRBASE}.
|
||||
-- --
|
||||
-- ## 1.4) AI_BALANCER returns AI to Airbases
|
||||
--
|
||||
-- By default, When a human player joins a slot that is AI_BALANCED, the AI group will be destroyed by default.
|
||||
-- However, there are 2 additional options that you can use to customize the destroy behaviour.
|
||||
-- When a human player joins a slot, you can configure to let the AI return to:
|
||||
--
|
||||
-- * @{#AI_BALANCER.ReturnToHomeAirbase}: Returns the AI to the **home** @{Wrapper.Airbase#AIRBASE}.
|
||||
-- * @{#AI_BALANCER.ReturnToNearestAirbases}: Returns the AI to the **nearest friendly** @{Wrapper.Airbase#AIRBASE}.
|
||||
--
|
||||
-- Note that when AI returns to an airbase, it will trigger the **Return** event and will return,
|
||||
-- otherwise when the AI is destroyed, the **Destroy** event will be triggered.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- **API CHANGE HISTORY**
|
||||
@ -43,29 +76,21 @@
|
||||
--
|
||||
-- Hereby the change log:
|
||||
--
|
||||
-- 2016-08-17: SPAWN:**InitCleanUp**( SpawnCleanUpInterval ) replaces SPAWN:_CleanUp_( SpawnCleanUpInterval )
|
||||
--
|
||||
-- * Want to ensure that the methods starting with **Init** are the first called methods before any _Spawn_ method is called!
|
||||
-- * This notation makes it now more clear which methods are initialization methods and which methods are Spawn enablement methods.
|
||||
-- 2017-01-08: AI_BALANCER:**InitSpawnInterval( Earliest, Latest )** added.
|
||||
--
|
||||
-- ===
|
||||
--
|
||||
-- AUTHORS and CONTRIBUTIONS
|
||||
-- =========================
|
||||
-- # **AUTHORS and CONTRIBUTIONS**
|
||||
--
|
||||
-- ### Contributions:
|
||||
--
|
||||
-- * **Dutch_Baron (James)**: Who you can search on the Eagle Dynamics Forums.
|
||||
-- Working together with James has resulted in the creation of the AI_BALANCER class.
|
||||
-- James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)
|
||||
-- * **[Dutch_Baron](https://forums.eagle.ru/member.php?u=112075)**: Working together with James has resulted in the creation of the AI_BALANCER 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 AI_BALANCER moose class.
|
||||
-- * **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 AI_BALANCER moose class.
|
||||
--
|
||||
-- ### Authors:
|
||||
--
|
||||
-- * FlightControl: Framework Design & Programming
|
||||
-- * FlightControl: Framework Design & Programming and Documentation.
|
||||
--
|
||||
-- @module AI_Balancer
|
||||
|
||||
@ -98,17 +123,14 @@ function AI_BALANCER:New( SetClient, SpawnAI )
|
||||
local self = BASE:Inherit( self, FSM_SET:New( SET_GROUP:New() ) ) -- AI.AI_Balancer#AI_BALANCER
|
||||
|
||||
self:SetStartState( "None" )
|
||||
self:AddTransition( "*", "Start", "Monitoring" )
|
||||
self:AddTransition( "*", "Monitor", "Monitoring" )
|
||||
self:AddTransition( "*", "Spawn", "Spawning" )
|
||||
self:AddTransition( "Spawning", "Spawned", "Spawned" )
|
||||
self:AddTransition( "*", "Destroyed", "Destroyed" )
|
||||
self:AddTransition( "*", "Destroy", "Destroying" )
|
||||
self:AddTransition( "*", "Return", "Returning" )
|
||||
self:AddTransition( "*", "End", "End" )
|
||||
self:AddTransition( "*", "Dead", "End" )
|
||||
|
||||
self.SetClient = SetClient
|
||||
self.SetClient:FilterOnce()
|
||||
self.SpawnAI = SpawnAI
|
||||
|
||||
self.SpawnQueue = {}
|
||||
@ -116,7 +138,7 @@ function AI_BALANCER:New( SetClient, SpawnAI )
|
||||
self.ToNearestAirbase = false
|
||||
self.ToHomeAirbase = false
|
||||
|
||||
self:__Start( 5 )
|
||||
self:__Monitor( 1 )
|
||||
|
||||
return self
|
||||
end
|
||||
@ -168,24 +190,6 @@ function AI_BALANCER:onenterSpawning( SetGroup, From, Event, To, ClientName )
|
||||
|
||||
SetGroup:Add( ClientName, AIGroup )
|
||||
self.SpawnQueue[ClientName] = nil
|
||||
|
||||
|
||||
-- --- @param Wrapper.Group#GROUP AIGroup
|
||||
-- -- @param Core.Event#EVENTDATA EventData
|
||||
-- local function Respawn( AIGroup, EventData )
|
||||
-- if EventData.IniUnit then
|
||||
-- local CheckGroup = EventData.IniUnit:GetGroup()
|
||||
-- if CheckGroup:GetName() == AIGroup:GetName() then
|
||||
-- if CheckGroup:GetUnits() == nil then
|
||||
-- AIGroup:Respawn( AIGroup:GetTemplate() )
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
--
|
||||
-- AIGroup:EventOnDead( Respawn )
|
||||
-- AIGroup:EventOnEjection( Respawn )
|
||||
|
||||
-- Fire the Spawned event. The first parameter is the AIGroup just Spawned.
|
||||
-- Mission designers can catch this event to bind further actions to the AIGroup.
|
||||
@ -195,17 +199,12 @@ end
|
||||
--- @param #AI_BALANCER self
|
||||
-- @param Core.Set#SET_GROUP SetGroup
|
||||
-- @param Wrapper.Group#GROUP AIGroup
|
||||
function AI_BALANCER:onenterDestroying( SetGroup, From, Event, To, AIGroup )
|
||||
|
||||
AIGroup:Destroy()
|
||||
end
|
||||
|
||||
--- @param #AI_BALANCER self
|
||||
-- @param Core.Set#SET_GROUP SetGroup
|
||||
-- @param Wrapper.Group#GROUP AIGroup
|
||||
function AI_BALANCER:onenterDestroyed( SetGroup, From, Event, To, AIGroup )
|
||||
function AI_BALANCER:onenterDestroying( SetGroup, From, Event, To, ClientName, AIGroup )
|
||||
|
||||
AIGroup:Destroy()
|
||||
SetGroup:Flush()
|
||||
SetGroup:Remove( ClientName )
|
||||
SetGroup:Flush()
|
||||
end
|
||||
|
||||
--- @param #AI_BALANCER self
|
||||
@ -238,6 +237,7 @@ end
|
||||
function AI_BALANCER:onenterMonitoring( SetGroup )
|
||||
|
||||
self:E( { self.SetClient:Count() } )
|
||||
self.SetClient:Flush()
|
||||
|
||||
self.SetClient:ForEachClient(
|
||||
--- @param Wrapper.Client#CLIENT Client
|
||||
@ -245,12 +245,13 @@ function AI_BALANCER:onenterMonitoring( SetGroup )
|
||||
self:E(Client.ClientName)
|
||||
|
||||
local AIGroup = self.Set:Get( Client.UnitName ) -- Wrapper.Group#GROUP
|
||||
self:E({Client:IsAlive()})
|
||||
if Client:IsAlive() then
|
||||
|
||||
if AIGroup and AIGroup:IsAlive() == true then
|
||||
|
||||
if self.ToNearestAirbase == false and self.ToHomeAirbase == false then
|
||||
self:Destroy( AIGroup )
|
||||
self:Destroy( Client.UnitName, AIGroup )
|
||||
else
|
||||
-- We test if there is no other CLIENT within the self.ReturnTresholdRange of the first unit of the AI group.
|
||||
-- If there is a CLIENT, the AI stays engaged and will not return.
|
||||
|
||||
@ -565,7 +565,7 @@ do -- FSM
|
||||
sub.fsm.fsmparent = self
|
||||
sub.fsm.ReturnEvents = sub.ReturnEvents
|
||||
sub.fsm[sub.StartEvent]( sub.fsm )
|
||||
execute = true
|
||||
execute = false
|
||||
end
|
||||
|
||||
local fsmparent, Event = self:_isendstate( to )
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -24,7 +24,7 @@
|
||||
-- @module TEST.AI_BALANCER.T001
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ):FilterStart()
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
|
||||
Binary file not shown.
@ -25,7 +25,7 @@
|
||||
-- @module TEST.AI_BALANCER.T002
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ):FilterStart()
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
|
||||
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ):FilterStart()
|
||||
RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
RU_PlanesSpawn = SPAWN:New( "AI RU" ):InitCleanUp( 20 )
|
||||
RU_AI_Balancer = AI_BALANCER:New( RU_PlanesClientSet, RU_PlanesSpawn )
|
||||
|
||||
@ -7,7 +7,7 @@ RU_AirbasesSet:Flush()
|
||||
RU_AI_Balancer:ReturnToNearestAirbases( 10000, RU_AirbasesSet )
|
||||
|
||||
|
||||
US_PlanesClientSet = SET_CLIENT:New():FilterCountries( "USA" ):FilterCategories( "plane" ):FilterStart()
|
||||
US_PlanesClientSet = SET_CLIENT:New():FilterCountries( "USA" ):FilterCategories( "plane" )
|
||||
US_PlanesSpawn = SPAWN:New( "AI US" ):InitCleanUp( 20 )
|
||||
US_AI_Balancer = AI_BALANCER:New( US_PlanesClientSet, US_PlanesSpawn )
|
||||
|
||||
|
||||
Binary file not shown.
@ -22,7 +22,7 @@
|
||||
--
|
||||
|
||||
-- Define the SET of CLIENTs from the red coalition. This SET is filled during startup.
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" ):FilterStart()
|
||||
local RU_PlanesClientSet = SET_CLIENT:New():FilterCountries( "RUSSIA" ):FilterCategories( "plane" )
|
||||
|
||||
-- Define the SPAWN object for the red AI plane template.
|
||||
-- We use InitCleanUp to check every 20 seconds, if there are no planes blocked at the airbase, waithing for take-off.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -68,42 +68,80 @@
|
||||
<div id="content">
|
||||
<h1>Module <code>AI_Balancer</code></h1>
|
||||
|
||||
<p>This module contains the AI_BALANCER class.</p>
|
||||
<p>SP:N MP:Y AI:Y HU:N TYP:A -- This module contains the AI_BALANCER class.</p>
|
||||
|
||||
|
||||
|
||||
<p>AI Balancing will replace in multi player missions non-occupied human slots with AI groups, in order to provide an
|
||||
engaging simulation environment, even when there are hardly any players in the mission.</p>
|
||||
|
||||
<p><img src="..\Presentations\AI_Balancer\Dia1.JPG" alt="Banner Image"/></p>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h1>1) <a href="AI.AI_Balancer.html##(AI_BALANCER)">AI.AI<em>Balancer#AI</em>BALANCER</a> class, extends <a href="Core.Fsm.html##(FSM_SET)">Core.Fsm#FSM_SET</a></h1>
|
||||
|
||||
<p>The <a href="AI.AI_Balancer.html##(AI_BALANCER)">AI.AI<em>Balancer#AI</em>BALANCER</a> class monitors and manages as many AI GROUPS as there are
|
||||
CLIENTS in a SET<em>CLIENT collection not occupied by players.
|
||||
The AI</em>BALANCER class manages internally a collection of AI management objects, which govern the behaviour
|
||||
of the underlying AI GROUPS.</p>
|
||||
CLIENTS in a SET<em>CLIENT collection not occupied by human players.
|
||||
In other words, use AI</em>BALANCER to simulate human behaviour by spawning in replacement AI.</p>
|
||||
|
||||
<p>The parent class <a href="Core.Fsm.html##(FSM_SET)">Core.Fsm#FSM_SET</a> manages the functionality to control the Finite State Machine (FSM)
|
||||
<p>The AI_BALANCER class manages internally a collection of AI management objects, which govern the behaviour
|
||||
of the spawned AI <a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a> manages the functionality to control the Finite State Machine (FSM)
|
||||
and calls for each event the state transition methods providing the internal <a href="Core.Fsm.html##(FSM_SET).Set">Core.Fsm#FSM_SET.Set</a> object containing the
|
||||
SET_GROUP and additional event parameters provided during the event.</p>
|
||||
AI and additional event parameters provided during the event.</p>
|
||||
|
||||
<h2>1.1) AI_BALANCER construction method</h2>
|
||||
<p>Create a new AI_BALANCER object with the <a href="##(AI_BALANCER).New">AI_BALANCER.New</a> method:</p>
|
||||
<h2>1.1) AI_BALANCER construction</h2>
|
||||
|
||||
<p>Create a new AI_BALANCER object with the <a href="##(AI_BALANCER).New">AI_BALANCER.New</a>() method:</p>
|
||||
|
||||
<h2>1.2) AI_BALANCER is a FSM</h2>
|
||||
|
||||
<p>The AI_BALANCER is a state machine: it manages the different events and states of the <a href="Core.Fsm.html##(FSM_SET).Set">Core.Fsm#FSM_SET.Set</a> it is governing.
|
||||
The AI_BALANCER has a default flow to manage the set.</p>
|
||||
|
||||
<p><img src="..\Presentations\AI_Balancer\Dia2.JPG" alt="Process"/></p>
|
||||
|
||||
|
||||
<h3>1.2.1) AI_BALANCER States</h3>
|
||||
|
||||
<ul>
|
||||
<li><a href="##(AI_BALANCER).New">AI_BALANCER.New</a>: Creates a new AI_BALANCER object.</li>
|
||||
<li><strong>Monitoring</strong> ( Set ): Monitoring the Set if all AI is spawned for the Clients.</li>
|
||||
<li><strong>Spawning</strong> ( Set, ClientName ): There is a new AI group spawned with ClientName as the name of reference.</li>
|
||||
<li><strong>Spawned</strong> ( Set, AIGroup ): A new AI has been spawned. You can handle this event to customize the AI behaviour with other AI FSMs or own processes.</li>
|
||||
<li><strong>Destroying</strong> ( Set, AIGroup ): The AI is being destroyed.</li>
|
||||
<li><strong>Returning</strong> ( Set, AIGroup ): The AI is returning to the airbase specified by the ReturnToAirbase methods. Handle this state to customize the return behaviour of the AI, if any.</li>
|
||||
</ul>
|
||||
|
||||
<h2>1.2) </h2>
|
||||
<p> * Add
|
||||
* Remove</p>
|
||||
|
||||
<h2>1.2) AI_BALANCER returns AI to Airbases</h2>
|
||||
<p>You can configure to have the AI to return to:</p>
|
||||
<h3>1.2.2) AI_BALANCER Events</h3>
|
||||
|
||||
<ul>
|
||||
<li><a href="##(AI_BALANCER).ReturnToHomeAirbase">AI_BALANCER.ReturnToHomeAirbase</a>: Returns the AI to the home <a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a>.</li>
|
||||
<li><a href="##(AI_BALANCER).ReturnToNearestAirbases">AI_BALANCER.ReturnToNearestAirbases</a>: Returns the AI to the nearest friendly <a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a>.
|
||||
--</li>
|
||||
<li><strong>Monitor</strong> ( Set ): Every 10 seconds, the Monitor event is triggered to monitor the Set.</li>
|
||||
<li><strong>Spawn</strong> ( Set, ClientName ): Triggers when there is a new AI group to be spawned with ClientName as the name of reference.</li>
|
||||
<li><strong>Spawned</strong> ( Set, AIGroup ): Triggers when a new AI has been spawned. You can handle this event to customize the AI behaviour with other AI FSMs or own processes.</li>
|
||||
<li><strong>Destroy</strong> ( Set, AIGroup ): The AI is being destroyed.</li>
|
||||
<li><strong>Return</strong> ( Set, AIGroup ): The AI is returning to the airbase specified by the ReturnToAirbase methods.</li>
|
||||
</ul>
|
||||
|
||||
<h2>1.3) AI_BALANCER spawn interval for replacement AI</h2>
|
||||
|
||||
<p>Use the method <a href="##(AI_BALANCER).InitSpawnInterval">AI_BALANCER.InitSpawnInterval</a>() to set the earliest and latest interval in seconds that is waited until a new replacement AI is spawned.</p>
|
||||
|
||||
<h2>1.4) AI_BALANCER returns AI to Airbases</h2>
|
||||
|
||||
<p>By default, When a human player joins a slot that is AI_BALANCED, the AI group will be destroyed by default.
|
||||
However, there are 2 additional options that you can use to customize the destroy behaviour.
|
||||
When a human player joins a slot, you can configure to let the AI return to:</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="##(AI_BALANCER).ReturnToHomeAirbase">AI_BALANCER.ReturnToHomeAirbase</a>: Returns the AI to the <strong>home</strong> <a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a>.</li>
|
||||
<li><a href="##(AI_BALANCER).ReturnToNearestAirbases">AI_BALANCER.ReturnToNearestAirbases</a>: Returns the AI to the <strong>nearest friendly</strong> <a href="Wrapper.Airbase.html##(AIRBASE)">Wrapper.Airbase#AIRBASE</a>.</li>
|
||||
</ul>
|
||||
|
||||
<p>Note that when AI returns to an airbase, it will trigger the <strong>Return</strong> event and will return,
|
||||
otherwise when the AI is destroyed, the <strong>Destroy</strong> event will be triggered.</p>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h1><strong>API CHANGE HISTORY</strong></h1>
|
||||
|
||||
<p>The underlying change log documents the API changes. Please read this carefully. The following notation is used:</p>
|
||||
@ -115,32 +153,23 @@ SET_GROUP and additional event parameters provided during the event.</p>
|
||||
|
||||
<p>Hereby the change log:</p>
|
||||
|
||||
<p>2016-08-17: SPAWN:<strong>InitCleanUp</strong>( SpawnCleanUpInterval ) replaces SPAWN:<em>CleanUp</em>( SpawnCleanUpInterval )</p>
|
||||
|
||||
<ul>
|
||||
<li>Want to ensure that the methods starting with <strong>Init</strong> are the first called methods before any <em>Spawn</em> method is called!</li>
|
||||
<li>This notation makes it now more clear which methods are initialization methods and which methods are Spawn enablement methods.</li>
|
||||
</ul>
|
||||
<p>2017-01-08: AI_BALANCER:<strong>InitSpawnInterval( Earliest, Latest )</strong> added.</p>
|
||||
|
||||
<hr/>
|
||||
|
||||
<h1>AUTHORS and CONTRIBUTIONS</h1>
|
||||
<h1><strong>AUTHORS and CONTRIBUTIONS</strong></h1>
|
||||
|
||||
<h3>Contributions:</h3>
|
||||
|
||||
<ul>
|
||||
<li><p><strong>Dutch_Baron (James)</strong>: Who you can search on the Eagle Dynamics Forums. <br/>
|
||||
Working together with James has resulted in the creation of the AI_BALANCER class. <br/>
|
||||
James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)</p></li>
|
||||
<li><p><strong>SNAFU</strong>:
|
||||
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 AI_BALANCER moose class.</p></li>
|
||||
<li><p><strong><a href="https://forums.eagle.ru/member.php?u=112075">Dutch_Baron</a></strong>: Working together with James has resulted in the creation of the AI_BALANCER class. James has shared his ideas on balancing AI with air units, and together we made a first design which you can use now :-)</p></li>
|
||||
<li><p><strong>SNAFU</strong>: 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 AI_BALANCER moose class.</p></li>
|
||||
</ul>
|
||||
|
||||
<h3>Authors:</h3>
|
||||
|
||||
<ul>
|
||||
<li>FlightControl: Framework Design & Programming</li>
|
||||
<li>FlightControl: Framework Design & Programming and Documentation.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@ -165,6 +194,24 @@ SET_GROUP and additional event parameters provided during the event.</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).ClassName">AI_BALANCER.ClassName</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).Earliest">AI_BALANCER.Earliest</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).InitSpawnInterval">AI_BALANCER:InitSpawnInterval(Earliest, Latest)</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets the earliest to the latest interval in seconds how long AI_BALANCER will wait to spawn a new AI.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).Latest">AI_BALANCER.Latest</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -207,6 +254,18 @@ SET_GROUP and additional event parameters provided during the event.</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).SetClient">AI_BALANCER.SetClient</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).SpawnAI">AI_BALANCER.SpawnAI</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).Test">AI_BALANCER.Test</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -222,7 +281,7 @@ SET_GROUP and additional event parameters provided during the event.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).onenterDestroying">AI_BALANCER:onenterDestroying(SetGroup, AIGroup, From, Event, To)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_BALANCER).onenterDestroying">AI_BALANCER:onenterDestroying(SetGroup, AIGroup, From, Event, To, ClientName)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -295,6 +354,70 @@ SET_GROUP and additional event parameters provided during the event.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(AI_BALANCER).Earliest" >
|
||||
<strong>AI_BALANCER.Earliest</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_BALANCER).InitSpawnInterval" >
|
||||
<strong>AI_BALANCER:InitSpawnInterval(Earliest, Latest)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Sets the earliest to the latest interval in seconds how long AI_BALANCER will wait to spawn a new AI.</p>
|
||||
|
||||
|
||||
<p>Provide 2 identical seconds if the interval should be a fixed amount of seconds.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number Earliest </em></code>:
|
||||
The earliest a new AI can be spawned in seconds.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number Latest </em></code>:
|
||||
The latest a new AI can be spawned in seconds.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
|
||||
<p>self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(AI_BALANCER).Latest" >
|
||||
<strong>AI_BALANCER.Latest</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -328,9 +451,6 @@ The default Spawn object to spawn new AI Groups when needed.</p>
|
||||
<p><em><a href="##(AI_BALANCER)">#AI_BALANCER</a>:</em></p>
|
||||
|
||||
|
||||
<h3>Usage:</h3>
|
||||
<pre class="example"><code>-- Define a new AI_BALANCER Object.</code></pre>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -437,6 +557,34 @@ The SET of <a href="Core.Set.html##(SET_AIRBASE)">Core.Set#SET_AIRBASE</a>s to e
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Functional.Spawn.html##(SPAWN)">Functional.Spawn#SPAWN</a></em>
|
||||
<a id="#(AI_BALANCER).SpawnAI" >
|
||||
<strong>AI_BALANCER.SpawnAI</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a></em>
|
||||
<a id="#(AI_BALANCER).Test" >
|
||||
<strong>AI_BALANCER.Test</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -471,7 +619,7 @@ The SET of <a href="Core.Set.html##(SET_AIRBASE)">Core.Set#SET_AIRBASE</a>s to e
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_BALANCER).onenterDestroying" >
|
||||
<strong>AI_BALANCER:onenterDestroying(SetGroup, AIGroup, From, Event, To)</strong>
|
||||
<strong>AI_BALANCER:onenterDestroying(SetGroup, AIGroup, From, Event, To, ClientName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -504,6 +652,11 @@ The SET of <a href="Core.Set.html##(SET_AIRBASE)">Core.Set#SET_AIRBASE</a>s to e
|
||||
|
||||
<p><code><em> To </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> ClientName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
|
||||
@ -119,13 +119,13 @@ All derived classes from AI</em>CARGO follow the same state machine, expose the
|
||||
There are 2 moments when state transition methods will be called by the state machine:</p>
|
||||
|
||||
<ul>
|
||||
<li><p><strong>Before</strong> the state transition.
|
||||
The state transition method needs to start with the name <strong>OnBefore + the name of the state</strong>.
|
||||
<li><p><strong>Leaving</strong> the state.
|
||||
The state transition method needs to start with the name <strong>OnLeave + the name of the state</strong>.
|
||||
If the state transition method returns false, then the processing of the state transition will not be done!
|
||||
If you want to change the behaviour of the AIControllable at this event, return false,
|
||||
but then you'll need to specify your own logic using the AIControllable!</p></li>
|
||||
<li><p><strong>After</strong> the state transition.
|
||||
The state transition method needs to start with the name <strong>OnAfter + the name of the state</strong>.
|
||||
<li><p><strong>Entering</strong> the state.
|
||||
The state transition method needs to start with the name <strong>OnEnter + the name of the state</strong>.
|
||||
These state transition methods need to provide a return value, which is specified at the function description.</p></li>
|
||||
</ul>
|
||||
|
||||
@ -254,49 +254,49 @@ Use the event functions as described above to Load, UnLoad, Board, UnBoard the A
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnAfterBoarding">AI_CARGO:OnAfterBoarding(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnEnterBoarding">AI_CARGO:OnEnterBoarding(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnAfterLoaded">AI_CARGO:OnAfterLoaded(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnEnterLoaded">AI_CARGO:OnEnterLoaded(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnAfterUnBoarding">AI_CARGO:OnAfterUnBoarding(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnEnterUnBoarding">AI_CARGO:OnEnterUnBoarding(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnAfterUnLoaded">AI_CARGO:OnAfterUnLoaded(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnEnterUnLoaded">AI_CARGO:OnEnterUnLoaded(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnBeforeBoarding">AI_CARGO:OnBeforeBoarding(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnLeaveBoarding">AI_CARGO:OnLeaveBoarding(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnBeforeLoaded">AI_CARGO:OnBeforeLoaded(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnLeaveLoaded">AI_CARGO:OnLeaveLoaded(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnBeforeUnBoarding">AI_CARGO:OnBeforeUnBoarding(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnLeaveUnBoarding">AI_CARGO:OnLeaveUnBoarding(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnBeforeUnLoaded">AI_CARGO:OnBeforeUnLoaded(Controllable)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_CARGO).OnLeaveUnLoaded">AI_CARGO:OnLeaveUnLoaded(Controllable)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -974,8 +974,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnAfterBoarding" >
|
||||
<strong>AI_CARGO:OnAfterBoarding(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnEnterBoarding" >
|
||||
<strong>AI_CARGO:OnEnterBoarding(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -995,8 +995,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnAfterLoaded" >
|
||||
<strong>AI_CARGO:OnAfterLoaded(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnEnterLoaded" >
|
||||
<strong>AI_CARGO:OnEnterLoaded(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1016,8 +1016,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnAfterUnBoarding" >
|
||||
<strong>AI_CARGO:OnAfterUnBoarding(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnEnterUnBoarding" >
|
||||
<strong>AI_CARGO:OnEnterUnBoarding(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1037,8 +1037,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnAfterUnLoaded" >
|
||||
<strong>AI_CARGO:OnAfterUnLoaded(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnEnterUnLoaded" >
|
||||
<strong>AI_CARGO:OnEnterUnLoaded(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1058,8 +1058,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnBeforeBoarding" >
|
||||
<strong>AI_CARGO:OnBeforeBoarding(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnLeaveBoarding" >
|
||||
<strong>AI_CARGO:OnLeaveBoarding(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1084,8 +1084,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnBeforeLoaded" >
|
||||
<strong>AI_CARGO:OnBeforeLoaded(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnLeaveLoaded" >
|
||||
<strong>AI_CARGO:OnLeaveLoaded(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1110,8 +1110,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnBeforeUnBoarding" >
|
||||
<strong>AI_CARGO:OnBeforeUnBoarding(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnLeaveUnBoarding" >
|
||||
<strong>AI_CARGO:OnLeaveUnBoarding(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1136,8 +1136,8 @@ The Carrier that will hold the cargo.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_CARGO).OnBeforeUnLoaded" >
|
||||
<strong>AI_CARGO:OnBeforeUnLoaded(Controllable)</strong>
|
||||
<a id="#(AI_CARGO).OnLeaveUnLoaded" >
|
||||
<strong>AI_CARGO:OnLeaveUnLoaded(Controllable)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
@ -464,12 +464,24 @@ YYYY-MM-DD: CLASS:<strong>NewFunction( Params )</strong> added</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).AddTransition">FSM:AddTransition(From, Event, To)</a></td>
|
||||
<td class="summary">
|
||||
<p>Add a new transition rule to the FSM.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).CallScheduler">FSM.CallScheduler</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).ClassName">FSM.ClassName</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).Events">FSM.Events</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -536,18 +548,48 @@ YYYY-MM-DD: CLASS:<strong>NewFunction( Params )</strong> added</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).New">FSM:New(FsmT)</a></td>
|
||||
<td class="summary">
|
||||
<p>Creates a new FSM object.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).Scores">FSM.Scores</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).SetStartState">FSM:SetStartState(State)</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets the start state of the FSM.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM)._EndStates">FSM._EndStates</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM)._Processes">FSM._Processes</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM)._Scores">FSM._Scores</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM)._StartState">FSM._StartState</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM)._Transitions">FSM._Transitions</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -620,12 +662,30 @@ YYYY-MM-DD: CLASS:<strong>NewFunction( Params )</strong> added</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).current">FSM.current</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).endstates">FSM.endstates</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).is">FSM:is(state)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).options">FSM.options</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(FSM).subs">FSM.subs</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -1101,6 +1161,20 @@ The To state.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).CallScheduler" >
|
||||
<strong>FSM.CallScheduler</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1115,6 +1189,20 @@ The To state.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).Events" >
|
||||
<strong>FSM.Events</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1315,6 +1403,20 @@ A string containing the start state.</p>
|
||||
<p><em><a href="##(FSM)">#FSM</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).Scores" >
|
||||
<strong>FSM.Scores</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1343,6 +1445,48 @@ A string defining the start state.</p>
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM)._EndStates" >
|
||||
<strong>FSM._EndStates</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM)._Processes" >
|
||||
<strong>FSM._Processes</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM)._Scores" >
|
||||
<strong>FSM._Scores</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#string</em>
|
||||
<a id="#(FSM)._StartState" >
|
||||
<strong>FSM._StartState</strong>
|
||||
</a>
|
||||
@ -1351,6 +1495,20 @@ A string defining the start state.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM)._Transitions" >
|
||||
<strong>FSM._Transitions</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1622,7 +1780,6 @@ A string defining the start state.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).current" >
|
||||
<strong>FSM.current</strong>
|
||||
</a>
|
||||
@ -1631,6 +1788,20 @@ A string defining the start state.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).endstates" >
|
||||
<strong>FSM.endstates</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1652,6 +1823,33 @@ A string defining the start state.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(FSM).options" >
|
||||
<strong>FSM.options</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).subs" >
|
||||
<strong>FSM.subs</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
@ -138,7 +138,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(OBJECT).New">OBJECT:New(ObjectName)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(OBJECT).New">OBJECT:New(ObjectName, Test)</a></td>
|
||||
<td class="summary">
|
||||
<p>Create a new OBJECT from a DCSObject</p>
|
||||
</td>
|
||||
@ -256,20 +256,25 @@ The DCS Object is not existing or alive. </p>
|
||||
<dt>
|
||||
|
||||
<a id="#(OBJECT).New" >
|
||||
<strong>OBJECT:New(ObjectName)</strong>
|
||||
<strong>OBJECT:New(ObjectName, Test)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Create a new OBJECT from a DCSObject</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Dcs.DCSWrapper.Object.html##(Object)">Dcs.DCSWrapper.Object#Object</a> ObjectName </em></code>:
|
||||
The Object name</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> Test </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
@ -470,6 +470,12 @@ The following iterator methods are currently available within the SET</em>AIRBAS
|
||||
<td class="name" nowrap="nowrap"><a href="##(SET_BASE).AddObject">SET_BASE:AddObject(Object)</a></td>
|
||||
<td class="summary">
|
||||
<p>Adds a <a href="Core.Base.html##(BASE)">Core.Base#BASE</a> object in the <a href="Core.Set.html##(SET_BASE)">Core.Set#SET_BASE</a>, using the Object Name as the index.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SET_BASE).CallScheduler">SET_BASE.CallScheduler</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1600,6 +1606,20 @@ The added BASE Object.</p>
|
||||
<p><em><a href="Core.Base.html##(BASE)">Core.Base#BASE</a>:</em>
|
||||
The added BASE Object.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Core.Scheduler.html##(SCHEDULER)">Core.Scheduler#SCHEDULER</a></em>
|
||||
<a id="#(SET_BASE).CallScheduler" >
|
||||
<strong>SET_BASE.CallScheduler</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -1692,6 +1692,9 @@ The group that was spawned. You can use this group for further actions.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<p> Don't repeat the group from Take-Off till Landing and back Take-Off by ReSpawning.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -71,7 +71,7 @@
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="AI_Balancer.html">AI_Balancer</a></td>
|
||||
<td class="summary">
|
||||
<p>This module contains the AI_BALANCER class.</p>
|
||||
<p>SP:N MP:Y AI:Y HU:N TYP:A -- This module contains the AI_BALANCER class.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
BIN
docs/Presentations/AI_Balancer/AI_BALANCER.pptx
Normal file
BIN
docs/Presentations/AI_Balancer/AI_BALANCER.pptx
Normal file
Binary file not shown.
BIN
docs/Presentations/AI_Balancer/Dia1.JPG
Normal file
BIN
docs/Presentations/AI_Balancer/Dia1.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 173 KiB |
BIN
docs/Presentations/AI_Balancer/Dia2.JPG
Normal file
BIN
docs/Presentations/AI_Balancer/Dia2.JPG
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 197 KiB |
Loading…
x
Reference in New Issue
Block a user