mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
- AI_A2A_Gci Removed reference to SetEngageZone - Fixed link to #AI_A2G_SEAD.SetEngageRange #2025 - AI_Air_Engage removed reference to SetEngageZone. Does not seem to exist any more. - AI_Air_Patrol removed reference to SetEngageZone. Does not seem to exist any more or is passed as argument now. - AI_FORMATION Fixed DCSTypes#AI.Option.Air.val.ROE OptionROE #2029 - SETTINGS Fixed link to Message #2021 - Fixed wrong indent of "Developer Note" in various classes
170 lines
7.3 KiB
Lua
170 lines
7.3 KiB
Lua
--- **AI** - Models the intelligent transportation of infantry and other cargo using Planes.
|
|
--
|
|
-- ## Features:
|
|
--
|
|
-- * The airplanes will fly towards the pickup airbases to pickup the cargo.
|
|
-- * The airplanes will fly towards the deploy airbases to deploy the cargo.
|
|
--
|
|
-- ===
|
|
--
|
|
-- ## Test Missions:
|
|
--
|
|
-- Test missions can be located on the main GITHUB site.
|
|
--
|
|
-- [FlightControl-Master/MOOSE_MISSIONS/AID - AI Dispatching/AID-CGO - AI Cargo Dispatching/]
|
|
-- (https://github.com/FlightControl-Master/MOOSE_MISSIONS/tree/develop/AID%20-%20AI%20Dispatching/AID-CGO%20-%20AI%20Cargo%20Dispatching)
|
|
--
|
|
-- ===
|
|
--
|
|
-- ### Author: **FlightControl**
|
|
--
|
|
-- ===
|
|
--
|
|
-- @module AI.AI_Cargo_Dispatcher_Airplane
|
|
-- @image AI_Cargo_Dispatching_For_Airplanes.JPG
|
|
|
|
|
|
--- @type AI_CARGO_DISPATCHER_AIRPLANE
|
|
-- @extends AI.AI_Cargo_Dispatcher#AI_CARGO_DISPATCHER
|
|
|
|
|
|
--- Brings a dynamic cargo handling capability for AI groups.
|
|
--
|
|
-- Airplanes can be mobilized to intelligently transport infantry and other cargo within the simulation.
|
|
--
|
|
-- The AI_CARGO_DISPATCHER_AIRPLANE module is derived from the AI_CARGO_DISPATCHER module.
|
|
--
|
|
-- ## Note! In order to fully understand the mechanisms of the AI_CARGO_DISPATCHER_AIRPLANE class, it is recommended that you first consult and READ the documentation of the @{AI.AI_Cargo_Dispatcher} module!!!**
|
|
--
|
|
-- Especially to learn how to **Tailor the different cargo handling events**, this will be very useful!
|
|
--
|
|
-- On top, the AI_CARGO_DISPATCHER_AIRPLANE class uses the @{Cargo.Cargo} capabilities within the MOOSE framework.
|
|
-- Also ensure that you fully understand how to declare and setup Cargo objects within the MOOSE framework before using this class.
|
|
-- CARGO derived objects must be declared within the mission to make the AI_CARGO_DISPATCHER_HELICOPTER object recognize the cargo.
|
|
--
|
|
-- # 1) AI_CARGO_DISPATCHER_AIRPLANE constructor.
|
|
--
|
|
-- * @{#AI_CARGO_DISPATCHER_AIRPLANE.New}(): Creates a new AI_CARGO_DISPATCHER_AIRPLANE object.
|
|
--
|
|
-- ---
|
|
--
|
|
-- # 2) AI_CARGO_DISPATCHER_AIRPLANE is a Finite State Machine.
|
|
--
|
|
-- This section must be read as follows. Each of the rows indicate a state transition, triggered through an event, and with an ending state of the event was executed.
|
|
-- The first column is the **From** state, the second column the **Event**, and the third column the **To** state.
|
|
--
|
|
-- So, each of the rows have the following structure.
|
|
--
|
|
-- * **From** => **Event** => **To**
|
|
--
|
|
-- Important to know is that an event can only be executed if the **current state** is the **From** state.
|
|
-- This, when an **Event** that is being triggered has a **From** state that is equal to the **Current** state of the state machine, the event will be executed,
|
|
-- and the resulting state will be the **To** state.
|
|
--
|
|
-- These are the different possible state transitions of this state machine implementation:
|
|
--
|
|
-- * Idle => Start => Monitoring
|
|
-- * Monitoring => Monitor => Monitoring
|
|
-- * Monitoring => Stop => Idle
|
|
--
|
|
-- * Monitoring => Pickup => Monitoring
|
|
-- * Monitoring => Load => Monitoring
|
|
-- * Monitoring => Loading => Monitoring
|
|
-- * Monitoring => Loaded => Monitoring
|
|
-- * Monitoring => PickedUp => Monitoring
|
|
-- * Monitoring => Deploy => Monitoring
|
|
-- * Monitoring => Unload => Monitoring
|
|
-- * Monitoring => Unloaded => Monitoring
|
|
-- * Monitoring => Deployed => Monitoring
|
|
-- * Monitoring => Home => Monitoring
|
|
--
|
|
--
|
|
-- ## 2.1) AI_CARGO_DISPATCHER States.
|
|
--
|
|
-- * **Monitoring**: The process is dispatching.
|
|
-- * **Idle**: The process is idle.
|
|
--
|
|
-- ## 2.2) AI_CARGO_DISPATCHER Events.
|
|
--
|
|
-- * **Start**: Start the transport process.
|
|
-- * **Stop**: Stop the transport process.
|
|
-- * **Monitor**: Monitor and take action.
|
|
--
|
|
-- * **Pickup**: Pickup cargo.
|
|
-- * **Load**: Load the cargo.
|
|
-- * **Loading**: The dispatcher is coordinating the loading of a cargo.
|
|
-- * **Loaded**: Flag that the cargo is loaded.
|
|
-- * **PickedUp**: The dispatcher has loaded all requested cargo into the CarrierGroup.
|
|
-- * **Deploy**: Deploy cargo to a location.
|
|
-- * **Unload**: Unload the cargo.
|
|
-- * **Unloaded**: Flag that the cargo is unloaded.
|
|
-- * **Deployed**: All cargo is unloaded from the carriers in the group.
|
|
-- * **Home**: A Carrier is going home.
|
|
--
|
|
-- ## 2.3) Enhance your mission scripts with **Tailored** Event Handling!
|
|
--
|
|
-- Within your mission, you can capture these events when triggered, and tailor the events with your own code!
|
|
-- Check out the @{AI.AI_Cargo_Dispatcher#AI_CARGO_DISPATCHER} class at chapter 3 for details on the different event handlers that are available and how to use them.
|
|
--
|
|
-- **There are a lot of templates available that allows you to quickly setup an event handler for a specific event type!**
|
|
--
|
|
--
|
|
-- # Developer Note
|
|
--
|
|
-- Note while this class still works, it is no longer supported as the original author stopped active development of MOOSE
|
|
-- Therefore, this class is considered to be deprecated
|
|
--
|
|
--
|
|
-- @field #AI_CARGO_DISPATCHER_AIRPLANE
|
|
AI_CARGO_DISPATCHER_AIRPLANE = {
|
|
ClassName = "AI_CARGO_DISPATCHER_AIRPLANE",
|
|
}
|
|
|
|
--- Creates a new AI_CARGO_DISPATCHER_AIRPLANE object.
|
|
-- @param #AI_CARGO_DISPATCHER_AIRPLANE self
|
|
-- @param Core.Set#SET_GROUP AirplaneSet The set of @{Wrapper.Group#GROUP} objects of airplanes that will transport the cargo.
|
|
-- @param Core.Set#SET_CARGO CargoSet The set of @{Cargo.Cargo#CARGO} objects, which can be CARGO_GROUP, CARGO_CRATE, CARGO_SLINGLOAD objects.
|
|
-- @param Core.Zone#SET_ZONE PickupZoneSet The set of zone airbases where the cargo has to be picked up.
|
|
-- @param Core.Zone#SET_ZONE DeployZoneSet The set of zone airbases where the cargo is deployed. Choice for each cargo is random.
|
|
-- @return #AI_CARGO_DISPATCHER_AIRPLANE self
|
|
-- @usage
|
|
--
|
|
-- -- An AI dispatcher object for an airplane squadron, moving infantry and vehicles from pickup airbases to deploy airbases.
|
|
--
|
|
-- local CargoInfantrySet = SET_CARGO:New():FilterTypes( "Infantry" ):FilterStart()
|
|
-- local AirplanesSet = SET_GROUP:New():FilterPrefixes( "Airplane" ):FilterStart()
|
|
-- local PickupZoneSet = SET_ZONE:New()
|
|
-- local DeployZoneSet = SET_ZONE:New()
|
|
--
|
|
-- PickupZoneSet:AddZone( ZONE_AIRBASE:New( AIRBASE.Caucasus.Gudauta ) )
|
|
-- DeployZoneSet:AddZone( ZONE_AIRBASE:New( AIRBASE.Caucasus.Sochi_Adler ) )
|
|
-- DeployZoneSet:AddZone( ZONE_AIRBASE:New( AIRBASE.Caucasus.Maykop_Khanskaya ) )
|
|
-- DeployZoneSet:AddZone( ZONE_AIRBASE:New( AIRBASE.Caucasus.Mineralnye_Vody ) )
|
|
-- DeployZoneSet:AddZone( ZONE_AIRBASE:New( AIRBASE.Caucasus.Vaziani ) )
|
|
--
|
|
-- AICargoDispatcherAirplanes = AI_CARGO_DISPATCHER_AIRPLANE:New( AirplanesSet, CargoInfantrySet, PickupZoneSet, DeployZoneSet )
|
|
-- AICargoDispatcherAirplanes:Start()
|
|
--
|
|
function AI_CARGO_DISPATCHER_AIRPLANE:New( AirplaneSet, CargoSet, PickupZoneSet, DeployZoneSet )
|
|
|
|
local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:New( AirplaneSet, CargoSet, PickupZoneSet, DeployZoneSet ) ) -- #AI_CARGO_DISPATCHER_AIRPLANE
|
|
|
|
self:SetPickupSpeed( 1200, 600 )
|
|
self:SetDeploySpeed( 1200, 600 )
|
|
|
|
self:SetPickupRadius( 0, 0 )
|
|
self:SetDeployRadius( 0, 0 )
|
|
|
|
self:SetPickupHeight( 8000, 6000 )
|
|
self:SetDeployHeight( 8000, 6000 )
|
|
|
|
self:SetMonitorTimeInterval( 600 )
|
|
|
|
return self
|
|
end
|
|
|
|
function AI_CARGO_DISPATCHER_AIRPLANE:AICargo( Airplane, CargoSet )
|
|
|
|
return AI_CARGO_AIRPLANE:New( Airplane, CargoSet )
|
|
end
|