This commit is contained in:
FlightControl 2016-04-02 23:18:20 +02:00
parent a38d394110
commit 883246e154

View File

@ -2569,9 +2569,9 @@ end
env.info(( 'Init: Scripts Loaded v1.1' ))
--- BASE The base class for all the classes defined within MOOSE.
--- The BASE class for all the classes defined within MOOSE.
-- @module Base
-- @author Flightcontrol
-- @author FlightControl
Include.File( "Routines" )
@ -2604,7 +2604,6 @@ local _TraceClass = {
-- @field ClassName The name of the class.
-- @field ClassID The ID number of the class.
BASE = {
ClassName = "BASE",
ClassID = 0,
Events = {}
@ -2619,8 +2618,8 @@ FORMATION = {
--- The base constructor. This is the top top class of all classed defined within the MOOSE.
-- Any new class needs to be derived from this class for proper inheritance.
-- @param self
-- @return #BASE
-- @param #BASE self
-- @return #BASE The new instance of the BASE class.
-- @usage
-- function TASK:New()
--
@ -2647,9 +2646,10 @@ function BASE:New()
end
--- This is the worker method to inherit from a parent class.
-- @param #BASE self
-- @param Child is the Child class that inherits.
-- @param Parent is the Parent class that the Child inherits from.
-- @return Child
-- @param #BASE Parent is the Parent class that the Child inherits from.
-- @return #BASE Child
function BASE:Inherit( Child, Parent )
local Child = routines.utils.deepCopy( Child )
local Parent = routines.utils.deepCopy( Parent )
@ -2663,6 +2663,7 @@ function BASE:Inherit( Child, Parent )
end
--- This is the worker method to retrieve the Parent class.
-- @param #BASE self
-- @param #BASE Child is the Child class from which the Parent class needs to be retrieved.
-- @return #BASE
function BASE:Inherited( Child )
@ -2693,7 +2694,11 @@ function BASE:GetClassID()
return self.ClassID
end
--- Set a new listener for the class.
-- @param self
-- @param DCSTypes#Event Event
-- @param #function EventFunction
-- @return #BASE
function BASE:AddEvent( Event, EventFunction )
self:F( Event )
@ -2705,7 +2710,9 @@ function BASE:AddEvent( Event, EventFunction )
return self
end
--- Enable the event listeners for the class.
-- @param #BASE self
-- @return #BASE
function BASE:EnableEvents()
self:F( #self.Events )
@ -2718,6 +2725,10 @@ function BASE:EnableEvents()
return self
end
--- Disable the event listeners for the class.
-- @param #BASE self
-- @return #BASE
function BASE:DisableEvents()
self:F()
@ -2769,7 +2780,13 @@ local BaseEventCodes = {
-- weapon = Weapon
-- }
--- Creation of a Birth Event.
-- @param #BASE self
-- @param DCSTypes#Time EventTime The time stamp of the event.
-- @param DCSObject#Object Initiator The initiating object of the event.
-- @param #string IniUnitName The initiating unit name.
-- @param place
-- @param subplace
function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subplace )
self:F( { EventTime, Initiator, IniUnitName, place, subplace } )
@ -2785,6 +2802,10 @@ function BASE:CreateEventBirth( EventTime, Initiator, IniUnitName, place, subpla
world.onEvent( Event )
end
--- Creation of a Crash Event.
-- @param #BASE self
-- @param DCSTypes#Time EventTime The time stamp of the event.
-- @param DCSObject#Object Initiator The initiating object of the event.
function BASE:CreateEventCrash( EventTime, Initiator )
self:F( { EventTime, Initiator } )
@ -2796,7 +2817,11 @@ function BASE:CreateEventCrash( EventTime, Initiator )
world.onEvent( Event )
end
-- TODO: Complete DCSTypes#Event structure.
--- The main event handling function... This function captures all events generated for the class.
-- @param #BASE self
-- @param DCSTypes#Event event
function BASE:onEvent(event)
--env.info( 'onEvent Table self = ' .. tostring(self) )
@ -2821,7 +2846,6 @@ function BASE:onEvent(event)
end
end
end
end
-- Trace section
@ -2829,6 +2853,9 @@ end
-- Log a trace (only shown when trace is on)
-- TODO: Make trace function using variable parameters.
--- Trace a function call. Must be at the beginning of the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:F( Arguments )
if _TraceOn and _TraceClass[self.ClassName] then
@ -2850,6 +2877,9 @@ function BASE:F( Arguments )
end
end
--- Trace a function call level 2. Must be at the beginning of the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:F2( Arguments )
if _TraceLevel >= 2 then
@ -2858,6 +2888,9 @@ function BASE:F2( Arguments )
end
--- Trace a function call level 3. Must be at the beginning of the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:F3( Arguments )
if _TraceLevel >= 3 then
@ -2866,6 +2899,9 @@ function BASE:F3( Arguments )
end
--- Trace a function logic. Can be anywhere within the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:T( Arguments )
if _TraceOn and _TraceClass[self.ClassName] then
@ -2887,6 +2923,9 @@ function BASE:T( Arguments )
end
end
--- Trace a function logic level 2. Can be anywhere within the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:T2( Arguments )
if _TraceLevel >= 2 then
@ -2895,6 +2934,9 @@ function BASE:T2( Arguments )
end
--- Trace a function logic level 3. Can be anywhere within the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:T3( Arguments )
if _TraceLevel >= 3 then
@ -2903,9 +2945,9 @@ function BASE:T3( Arguments )
end
-- Log an exception
--- Log an exception which will be traced always. Can be anywhere within the function logic.
-- @param #BASE self
-- @param Arguments A #table or any field.
function BASE:E( Arguments )
local DebugInfoCurrent = debug.getinfo( 2, "nl" )
@ -4336,6 +4378,7 @@ Include.File( "Group" )
--- The DATABASE class
-- @type DATABASE
-- @extends Base#BASE
DATABASE = {
ClassName = "DATABASE",
Units = {},
@ -6273,7 +6316,9 @@ function CARGO_SLINGLOAD:UnLoad( Client, TargetZoneName )
return Cargo
end
--- CLIENT Classes
--- The CLIENT models client units in multi player missions.
-- Clients are those groups defined within the Mission Editor that have the skillset defined as "Client" or "Player".
-- Note that clients are NOT the same as groups, they are NOT necessarily alive.
-- @module Client
-- @author FlightControl
@ -6282,8 +6327,6 @@ Include.File( "Base" )
Include.File( "Cargo" )
Include.File( "Message" )
--- Clients are those Groups defined within the Mission Editor that have the skillset defined as "Client" or "Player".
-- These clients are defined within the Mission Orchestration Framework (MOF)
--- The CLIENT class
-- @type CLIENT
@ -6333,8 +6376,30 @@ function CLIENT:New( ClientName, ClientBriefing )
return self
end
--- Transport defines that the Client is a Transport. Transports show cargo.
-- @param #CLIENT self
-- @return #CLIENT
function CLIENT:Transport()
self:F()
self.ClientTransport = true
return self
end
--- AddBriefing adds a briefing to a CLIENT when a player joins a mission.
-- @param #CLIENT self
-- @param #string ClientBriefing is the text defining the Mission briefing.
-- @return #CLIENT
function CLIENT:AddBriefing( ClientBriefing )
self:F()
self.ClientBriefing = ClientBriefing
return self
end
--- Resets a CLIENT.
-- @param string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client.
-- @param #CLIENT self
-- @param #string ClientName Name of the Group as defined within the Mission Editor. The Group must have a Unit with the type Client.
function CLIENT:Reset( ClientName )
self:F()
self._Menus = {}
@ -6343,12 +6408,13 @@ end
--- Checks for a client alive event and calls a function on a continuous basis.
-- @param #CLIENT self
-- @param #function CallBack Function.
-- @return #CLIENT
function CLIENT:Alive( CallBack )
self:F()
self.ClientAlive2 = false
self.ClientCallBack = CallBack
self.AliveCheckFunction = routines.scheduleFunction( self._AliveCheckCallBack, { self }, timer.getTime() + 1, 5 )
self.AliveCheckScheduler = routines.scheduleFunction( self._AliveCheckScheduler, { self }, timer.getTime() + 1, 5 )
return self
end
@ -6372,7 +6438,7 @@ end
--- @param #CLIENT self
function CLIENT:_AliveCheckCallBack()
function CLIENT:_AliveCheckScheduler()
self:F( { self.ClientName, self.ClientAlive2 } )
if self:IsAlive() then
@ -6390,6 +6456,7 @@ end
--- Return the DCSGroup of a Client.
-- This function is modified to deal with a couple of bugs in DCS 1.5.3
-- @param #CLIENT self
-- @return DCSGroup#Group
function CLIENT:GetDCSGroup()
self:F3()
@ -6460,9 +6527,12 @@ function CLIENT:GetDCSGroup()
end
-- TODO: Check DCSTypes#Group.ID
--- Get the group ID of the client.
-- @param #CLIENT self
-- @return DCSTypes#Group.ID
function CLIENT:GetClientGroupID()
if not self.ClientGroupID then
local ClientGroup = self:GetDCSGroup()
if ClientGroup and ClientGroup:isExist() then
@ -6477,6 +6547,9 @@ function CLIENT:GetClientGroupID()
end
--- Get the name of the group of the client.
-- @param #CLIENT self
-- @return #string
function CLIENT:GetClientGroupName()
if not self.ClientGroupName then
@ -6492,7 +6565,8 @@ function CLIENT:GetClientGroupName()
return self.ClientGroupName
end
--- Returns the Unit of the @{CLIENT}.
--- Returns the UNIT of the CLIENT.
-- @param #CLIENT self
-- @return Unit#UNIT
function CLIENT:GetClientGroupUnit()
self:F()
@ -6506,8 +6580,9 @@ function CLIENT:GetClientGroupUnit()
end
end
--- Returns the DCSUnit of the @{CLIENT}.
-- @return DCSUnit
--- Returns the DCSUnit of the CLIENT.
-- @param #CLIENT self
-- @return DCSTypes#Unit
function CLIENT:GetClientGroupDCSUnit()
self:F2()
@ -6520,13 +6595,15 @@ function CLIENT:GetClientGroupDCSUnit()
end
end
-- TODO what is this??? check. possible double function.
function CLIENT:GetUnit()
self:F()
return UNIT:New( self:GetClientGroupDCSUnit() )
end
--- Returns the Point of the @{CLIENT}.
--- Returns the position of the CLIENT in @{DCSTypes#Vec2} format..
-- @param #CLIENT self
-- @return DCSTypes#Vec2
function CLIENT:GetPointVec2()
self:F()
@ -6548,8 +6625,9 @@ function CLIENT:GetPointVec2()
end
--- Returns the Position of the @{CLIENT}.
-- @return DCSTypes#Position
--- Returns the position of the CLIENT in @{DCSTypes#Vec3} format.
-- @param #CLIENT self
-- @return DCSTypes#Vec3
function CLIENT:ClientPosition()
self:F()
@ -6564,7 +6642,8 @@ function CLIENT:ClientPosition()
return nil
end
--- Returns the altitude of the @{CLIENT}.
--- Returns the altitude of the CLIENT.
-- @param #CLIENT self
-- @return DCSTypes#Distance
function CLIENT:GetAltitude()
self:F()
@ -6582,33 +6661,17 @@ function CLIENT:GetAltitude()
end
--- Transport defines that the Client is a Transport.
-- @return CLIENT
function CLIENT:Transport()
self:F()
self.ClientTransport = true
return self
end
--- AddBriefing adds a briefing to a Client when a Player joins a Mission.
-- @param string ClientBriefing is the text defining the Mission briefing.
-- @return CLIENT
function CLIENT:AddBriefing( ClientBriefing )
self:F()
self.ClientBriefing = ClientBriefing
return self
end
--- IsTransport returns if a Client is a transport.
-- @return bool
--- Evaluates if the CLIENT is a transport.
-- @param #CLIENT self
-- @return #boolean true is a transport.
function CLIENT:IsTransport()
self:F()
return self.ClientTransport
end
--- ShowCargo shows the @{CARGO} within the CLIENT to the Player.
-- The @{CARGO} is shown throught the MESSAGE system of DCS World.
--- Shows the @{Cargo#CARGO} contained within the CLIENT to the player as a message.
-- The @{Cargo#CARGO} is shown using the @{Message#MESSAGE} distribution system.
-- @param #CLIENT self
function CLIENT:ShowCargo()
self:F()
@ -6628,18 +6691,20 @@ function CLIENT:ShowCargo()
end
--- SwitchMessages is a local function called by the DCS World Menu system to switch off messages.
-- TODO (1) I urgently need to revise this.
--- A local function called by the DCS World Menu system to switch off messages.
function CLIENT.SwitchMessages( PrmTable )
PrmTable[1].MessageSwitch = PrmTable[2]
end
--- Message is the key Message driver for the CLIENT class.
--- The main message driver for the CLIENT.
-- This function displays various messages to the Player logged into the CLIENT through the DCS World Messaging system.
-- @param string Message is the text describing the message.
-- @param number MessageDuration is the duration in seconds that the Message should be displayed.
-- @param string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId
-- @param string MessageCategory is the category of the message (the title).
-- @param number MessageInterval is the interval in seconds between the display of the Message when the CLIENT is in the air.
-- @param #CLIENT self
-- @param #string Message is the text describing the message.
-- @param #number MessageDuration is the duration in seconds that the Message should be displayed.
-- @param #string MessageId is a text identifying the Message in the MessageQueue. The Message system overwrites Messages with the same MessageId
-- @param #string MessageCategory is the category of the message (the title).
-- @param #number MessageInterval is the interval in seconds between the display of the @{Message#MESSAGE} when the CLIENT is in the air.
function CLIENT:Message( Message, MessageDuration, MessageId, MessageCategory, MessageInterval )
self:F()
@ -9492,8 +9557,8 @@ function MISSIONSCHEDULER:Time( TimeSeconds, TimeIntervalShow, TimeShow )
self.TimeShow = TimeShow
end
--- CLEANUP Classes
-- @module CLEANUP
--- The CLEANUP class keeps an area clean of crashing or colliding airplanes. It also prevents airplanes from firing within this area.
-- @module CleanUp
-- @author Flightcontrol
Include.File( "Routines" )
@ -9512,11 +9577,12 @@ CLEANUP = {
}
--- Creates the main object which is handling the cleaning of the debris within the given Zone Names.
-- @param table{string,...}|string ZoneNames which is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name.
-- @param ?number TimeInterval is the interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes.
-- @return CLEANUP
-- @param #CLEANUP self
-- @param #table ZoneNames Is a table of zone names where the debris should be cleaned. Also a single string can be passed with one zone name.
-- @param #number TimeInterval The interval in seconds when the clean activity takes place. The default is 300 seconds, thus every 5 minutes.
-- @return #CLEANUP
-- @usage
-- -- Clean these Zones.
-- -- Clean these Zones.
-- CleanUpAirports = CLEANUP:New( { 'CLEAN Tbilisi', 'CLEAN Kutaisi' }, 150 )
-- or
-- CleanUpTbilisi = CLEANUP:New( 'CLEAN Tbilisi', 150 )
@ -9542,14 +9608,16 @@ function CLEANUP:New( ZoneNames, TimeInterval ) local self = BASE:Inherit( self,
self:EnableEvents()
self.CleanUpFunction = routines.scheduleFunction( self._Scheduler, { self }, timer.getTime() + 1, TimeInterval )
self.CleanUpScheduler = routines.scheduleFunction( self._CleanUpScheduler, { self }, timer.getTime() + 1, TimeInterval )
return self
end
--- Destroys a group from the simulator, but checks first if it is still existing!
-- @see CLEANUP
-- @param #CLEANUP self
-- @param DCSGroup#Group GroupObject The object to be destroyed.
-- @param #string CleanUpGroupName The groupname...
function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName )
self:F( { GroupObject, CleanUpGroupName } )
@ -9560,8 +9628,10 @@ function CLEANUP:_DestroyGroup( GroupObject, CleanUpGroupName )
end
end
--- Destroys a unit from the simulator, but checks first if it is still existing!
-- @see CLEANUP
--- Destroys a @{DCSUnit#Unit} from the simulator, but checks first if it is still existing!
-- @param #CLEANUP self
-- @param DCSUnit#Unit CleanUpUnit The object to be destroyed.
-- @param #string CleanUpUnitName The Unit name ...
function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName )
self:F( { CleanUpUnit, CleanUpUnitName } )
@ -9587,8 +9657,10 @@ function CLEANUP:_DestroyUnit( CleanUpUnit, CleanUpUnitName )
end
end
-- TODO check DCSTypes#Weapon
--- Destroys a missile from the simulator, but checks first if it is still existing!
-- @see CLEANUP
-- @param #CLEANUP self
-- @param DCSTypes#Weapon MissileObject
function CLEANUP:_DestroyMissile( MissileObject )
self:F( { MissileObject } )
@ -9598,8 +9670,10 @@ function CLEANUP:_DestroyMissile( MissileObject )
end
end
--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME.
-- @see CLEANUP
--- Detects if a crash event occurs.
-- Crashed units go into a CleanUpList for removal.
-- @param #CLEANUP self
-- @param DCSTypes#Event event
function CLEANUP:_EventCrash( event )
self:F( { event } )
@ -9624,12 +9698,12 @@ function CLEANUP:_EventCrash( event )
self.CleanUpList[CleanUpUnitName].CleanUpGroup = CleanUpGroup
self.CleanUpList[CleanUpUnitName].CleanUpGroupName = CleanUpGroupName
self.CleanUpList[CleanUpUnitName].CleanUpUnitName = CleanUpUnitName
end
--- Detects if an SA site was shot with an anti radiation missile. In this case, take evasive actions based on the skill level set within the ME.
-- @see CLEANUP
--- Detects if a unit shoots a missile.
-- If this occurs within one of the zones, then the weapon used must be destroyed.
-- @param #CLEANUP self
-- @param DCSTypes#Event event
function CLEANUP:_EventShot( event )
self:F( { event } )
@ -9654,6 +9728,8 @@ end
--- Detects if the Unit has an S_EVENT_HIT within the given ZoneNames. If this is the case, destroy the unit.
-- @param #CLEANUP self
-- @param DCSTypes#Event event
function CLEANUP:_EventHitCleanUp( event )
self:F( { event } )
@ -9688,6 +9764,7 @@ function CLEANUP:_EventHitCleanUp( event )
end
--- Add the @{DCSUnit#Unit} to the CleanUpList for CleanUp.
function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName )
self:F( { CleanUpUnit, CleanUpUnitName } )
@ -9704,6 +9781,8 @@ function CLEANUP:_AddForCleanUp( CleanUpUnit, CleanUpUnitName )
end
--- Detects if the Unit has an S_EVENT_ENGINE_SHUTDOWN or an S_EVENT_HIT within the given ZoneNames. If this is the case, add the Group to the CLEANUP List.
-- @param #CLEANUP self
-- @param DCSTypes#Event event
function CLEANUP:_EventAddForCleanUp( event )
local CleanUpUnit = event.initiator -- the Unit
@ -9728,7 +9807,7 @@ function CLEANUP:_EventAddForCleanUp( event )
end
CleanUpSurfaceTypeText = {
local CleanUpSurfaceTypeText = {
"LAND",
"SHALLOW_WATER",
"WATER",
@ -9737,7 +9816,8 @@ CleanUpSurfaceTypeText = {
}
--- At the defined time interval, CleanUp the Groups within the CleanUpList.
function CLEANUP:_Scheduler()
-- @param #CLEANUP self
function CLEANUP:_CleanUpScheduler()
self:F( "CleanUp Scheduler" )
for CleanUpUnitName, UnitData in pairs( self.CleanUpList ) do