mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Merge branch 'master' into funkyfranky
This commit is contained in:
commit
8bcb47a8ee
@ -440,7 +440,7 @@ function AI_A2A:onafterStatus()
|
||||
end
|
||||
end
|
||||
|
||||
if self:Is( "Damaged" ) or self:Is( "LostControl" ) then
|
||||
if self:Is( "Fuel" ) or self:Is( "Damaged" ) or self:Is( "LostControl" ) then
|
||||
if DistanceFromHomeBase < 5000 then
|
||||
self:E( self.Controllable:GetName() .. " is too far from home base, RTB!" )
|
||||
self:Home( "Destroy" )
|
||||
@ -448,25 +448,27 @@ function AI_A2A:onafterStatus()
|
||||
end
|
||||
|
||||
|
||||
local Fuel = self.Controllable:GetFuel()
|
||||
self:F({Fuel=Fuel})
|
||||
if Fuel < self.PatrolFuelThresholdPercentage then
|
||||
if self.TankerName then
|
||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... Refuelling at Tanker!" )
|
||||
self:Refuel()
|
||||
if not self:Is( "Fuel" ) and not self:Is( "Home" ) then
|
||||
local Fuel = self.Controllable:GetFuel()
|
||||
self:F({Fuel=Fuel})
|
||||
if Fuel < self.PatrolFuelThresholdPercentage then
|
||||
if self.TankerName then
|
||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... Refuelling at Tanker!" )
|
||||
self:Refuel()
|
||||
else
|
||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... RTB!" )
|
||||
local OldAIControllable = self.Controllable
|
||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||
|
||||
local OrbitTask = OldAIControllable:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed )
|
||||
local TimedOrbitTask = OldAIControllable:TaskControlled( OrbitTask, OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) )
|
||||
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
||||
|
||||
self:Fuel()
|
||||
RTB = true
|
||||
end
|
||||
else
|
||||
self:E( self.Controllable:GetName() .. " is out of fuel: " .. Fuel .. " ... RTB!" )
|
||||
local OldAIControllable = self.Controllable
|
||||
local AIControllableTemplate = self.Controllable:GetTemplate()
|
||||
|
||||
local OrbitTask = OldAIControllable:TaskOrbitCircle( math.random( self.PatrolFloorAltitude, self.PatrolCeilingAltitude ), self.PatrolMinSpeed )
|
||||
local TimedOrbitTask = OldAIControllable:TaskControlled( OrbitTask, OldAIControllable:TaskCondition(nil,nil,nil,nil,self.PatrolOutOfFuelOrbitTime,nil ) )
|
||||
OldAIControllable:SetTask( TimedOrbitTask, 10 )
|
||||
|
||||
self:Fuel()
|
||||
RTB = true
|
||||
end
|
||||
else
|
||||
end
|
||||
|
||||
-- TODO: Check GROUP damage function.
|
||||
@ -477,6 +479,7 @@ function AI_A2A:onafterStatus()
|
||||
self:E( self.Controllable:GetName() .. " is damaged: " .. Damage .. " ... RTB!" )
|
||||
self:Damaged()
|
||||
RTB = true
|
||||
self:SetStatusOff()
|
||||
end
|
||||
|
||||
-- Check if planes went RTB and are out of control.
|
||||
|
||||
@ -1000,7 +1000,7 @@ do -- AI_A2A_DISPATCHER
|
||||
--- @param #AI_A2A_DISPATCHER self
|
||||
-- @param Core.Event#EVENTDATA EventData
|
||||
function AI_A2A_DISPATCHER:OnEventLand( EventData )
|
||||
self:F( "Landed" )
|
||||
self:E( "Landed" )
|
||||
local DefenderUnit = EventData.IniUnit
|
||||
local Defender = EventData.IniGroup
|
||||
local Squadron = self:GetSquadronFromDefender( Defender )
|
||||
@ -1019,7 +1019,11 @@ do -- AI_A2A_DISPATCHER
|
||||
-- Damaged units cannot be repaired anymore.
|
||||
DefenderUnit:Destroy()
|
||||
return
|
||||
end
|
||||
end
|
||||
if DefenderUnit:GetFuel() <= self.DefenderDefault.FuelThreshold then
|
||||
DefenderUnit:Destroy()
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1348,11 +1352,12 @@ do -- AI_A2A_DISPATCHER
|
||||
|
||||
---
|
||||
-- @param #AI_A2A_DISPATCHER self
|
||||
function AI_A2A_DISPATCHER:SetDefenderTask( Defender, Type, Fsm, Target )
|
||||
function AI_A2A_DISPATCHER:SetDefenderTask( SquadronName, Defender, Type, Fsm, Target )
|
||||
|
||||
self.DefenderTasks[Defender] = self.DefenderTasks[Defender] or {}
|
||||
self.DefenderTasks[Defender].Type = Type
|
||||
self.DefenderTasks[Defender].Fsm = Fsm
|
||||
self.DefenderTasks[Defender].SquadronName = SquadronName
|
||||
|
||||
if Target then
|
||||
self:SetDefenderTaskTarget( Defender, Target )
|
||||
@ -1449,7 +1454,6 @@ do -- AI_A2A_DISPATCHER
|
||||
-- @return #AI_A2A_DISPATCHER
|
||||
function AI_A2A_DISPATCHER:SetSquadron( SquadronName, AirbaseName, SpawnTemplates, Resources )
|
||||
|
||||
self:E( { SquadronName = SquadronName, AirbaseName = AirbaseName, SpawnTemplates = SpawnTemplates, Resources = Resources } )
|
||||
|
||||
self.DefenderSquadrons[SquadronName] = self.DefenderSquadrons[SquadronName] or {}
|
||||
|
||||
@ -1473,6 +1477,8 @@ do -- AI_A2A_DISPATCHER
|
||||
end
|
||||
end
|
||||
DefenderSquadron.Resources = Resources
|
||||
|
||||
self:E( { Squadron = {SquadronName, AirbaseName, SpawnTemplates, Resources } } )
|
||||
|
||||
return self
|
||||
end
|
||||
@ -1537,6 +1543,8 @@ do -- AI_A2A_DISPATCHER
|
||||
Cap.AltType = AltType
|
||||
|
||||
self:SetSquadronCapInterval( SquadronName, self.DefenderDefault.CapLimit, self.DefenderDefault.CapMinSeconds, self.DefenderDefault.CapMaxSeconds, 1 )
|
||||
|
||||
self:E( { CAP = { SquadronName, Zone, FloorAltitude, CeilingAltitude, PatrolMinSpeed, PatrolMaxSpeed, EngageMinSpeed, EngageMaxSpeed, AltType } } )
|
||||
|
||||
return self
|
||||
end
|
||||
@ -1577,14 +1585,15 @@ do -- AI_A2A_DISPATCHER
|
||||
local Scheduler = Cap.Scheduler -- Core.Scheduler#SCHEDULER
|
||||
local ScheduleID = Cap.ScheduleID
|
||||
local Variance = ( Cap.HighInterval - Cap.LowInterval ) / 2
|
||||
local Median = Cap.LowInterval + Variance
|
||||
local Randomization = Variance / Median
|
||||
local Repeat = Cap.LowInterval + Variance
|
||||
local Randomization = Variance / Repeat
|
||||
local Start = math.random( 1, Cap.HighInterval )
|
||||
|
||||
if ScheduleID then
|
||||
Scheduler:Stop( ScheduleID )
|
||||
end
|
||||
|
||||
Cap.ScheduleID = Scheduler:Schedule( self, self.SchedulerCAP, { SquadronName }, Median, Median, Randomization )
|
||||
Cap.ScheduleID = Scheduler:Schedule( self, self.SchedulerCAP, { SquadronName }, Start, Repeat, Randomization )
|
||||
else
|
||||
error( "This squadron does not exist:" .. SquadronName )
|
||||
end
|
||||
@ -1627,6 +1636,7 @@ do -- AI_A2A_DISPATCHER
|
||||
local Cap = DefenderSquadron.Cap
|
||||
if Cap then
|
||||
local CapCount = self:CountCapAirborne( SquadronName )
|
||||
self:E( { CapCount = CapCount } )
|
||||
if CapCount < Cap.CapLimit then
|
||||
local Probability = math.random()
|
||||
if Probability <= Cap.Probability then
|
||||
@ -1683,6 +1693,8 @@ do -- AI_A2A_DISPATCHER
|
||||
Intercept.Name = SquadronName
|
||||
Intercept.EngageMinSpeed = EngageMinSpeed
|
||||
Intercept.EngageMaxSpeed = EngageMaxSpeed
|
||||
|
||||
self:E( { GCI = { SquadronName, EngageMinSpeed, EngageMaxSpeed } } )
|
||||
end
|
||||
|
||||
--- Defines the default amount of extra planes that will take-off as part of the defense system.
|
||||
@ -2465,12 +2477,14 @@ do -- AI_A2A_DISPATCHER
|
||||
local DefenderSquadron = self.DefenderSquadrons[SquadronName]
|
||||
if DefenderSquadron then
|
||||
for AIGroup, DefenderTask in pairs( self:GetDefenderTasks() ) do
|
||||
if DefenderTask.Type == "CAP" then
|
||||
if AIGroup:IsAlive() then
|
||||
-- Check if the CAP is patrolling or engaging. If not, this is not a valid CAP, even if it is alive!
|
||||
-- The CAP could be damaged, lost control, or out of fuel!
|
||||
if DefenderTask.Fsm:Is( "Patrolling" ) or DefenderTask.Fsm:Is( "Engaging" ) or DefenderTask.Fsm:Is( "Refuelling" )then
|
||||
CapCount = CapCount + 1
|
||||
if DefenderTask.SquadronName == SquadronName then
|
||||
if DefenderTask.Type == "CAP" then
|
||||
if AIGroup:IsAlive() then
|
||||
-- Check if the CAP is patrolling or engaging. If not, this is not a valid CAP, even if it is alive!
|
||||
-- The CAP could be damaged, lost control, or out of fuel!
|
||||
if DefenderTask.Fsm:Is( "Patrolling" ) or DefenderTask.Fsm:Is( "Engaging" ) or DefenderTask.Fsm:Is( "Refuelling" )then
|
||||
CapCount = CapCount + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2488,12 +2502,17 @@ do -- AI_A2A_DISPATCHER
|
||||
-- First, count the active AIGroups Units, targetting the DetectedSet
|
||||
local AIUnitCount = 0
|
||||
|
||||
self:E( "Counting Defenders Engaged for Attacker:" )
|
||||
local DetectedSet = Target.Set
|
||||
DetectedSet:Flush()
|
||||
|
||||
local DefenderTasks = self:GetDefenderTasks()
|
||||
for AIGroup, DefenderTask in pairs( DefenderTasks ) do
|
||||
local AIGroup = AIGroup -- Wrapper.Group#GROUP
|
||||
local DefenderTask = self:GetDefenderTaskTarget( AIGroup )
|
||||
if DefenderTask and DefenderTask.Index == Target.Index then
|
||||
AIUnitCount = AIUnitCount + AIGroup:GetSize()
|
||||
self:E( "Defender Group Name: " .. AIGroup:GetName() .. ", Size: " .. AIGroup:GetSize() )
|
||||
end
|
||||
end
|
||||
|
||||
@ -2581,7 +2600,34 @@ do -- AI_A2A_DISPATCHER
|
||||
Fsm:Start()
|
||||
Fsm:__Patrol( 2 )
|
||||
|
||||
self:SetDefenderTask( DefenderCAP, "CAP", Fsm )
|
||||
self:SetDefenderTask( SquadronName, DefenderCAP, "CAP", Fsm )
|
||||
|
||||
function Fsm:onafterRTB( Defender, From, Event, To )
|
||||
self:F({"CAP RTB", Defender:GetName()})
|
||||
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||
Dispatcher:ClearDefenderTaskTarget( Defender )
|
||||
end
|
||||
|
||||
--- @param #AI_A2A_DISPATCHER self
|
||||
function Fsm:onafterHome( Defender, From, Event, To, Action )
|
||||
self:E({"CAP Home", Defender:GetName()})
|
||||
self:GetParent(self).onafterHome( self, Defender, From, Event, To )
|
||||
|
||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||
|
||||
if Action and Action == "Destroy" then
|
||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||
Defender:Destroy()
|
||||
end
|
||||
|
||||
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||
Defender:Destroy()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2602,32 +2648,6 @@ do -- AI_A2A_DISPATCHER
|
||||
|
||||
self:SetDefenderTaskTarget( Defender, Target )
|
||||
|
||||
function Fsm:onafterRTB( Defender, From, Event, To )
|
||||
self:F({"CAP RTB", Defender:GetName()})
|
||||
self:GetParent(self).onafterRTB( self, Defender, From, Event, To )
|
||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||
Dispatcher:ClearDefenderTaskTarget( Defender )
|
||||
end
|
||||
|
||||
--- @param #AI_A2A_DISPATCHER self
|
||||
function Fsm:onafterHome( Defender, From, Event, To, Action )
|
||||
self:F({"CAP Home", Defender:GetName()})
|
||||
self:GetParent(self).onafterHome( self, Defender, From, Event, To )
|
||||
|
||||
local Dispatcher = self:GetDispatcher() -- #AI_A2A_DISPATCHER
|
||||
local Squadron = Dispatcher:GetSquadronFromDefender( Defender )
|
||||
|
||||
if Action and Action == "Destroy" then
|
||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||
Defender:Destroy()
|
||||
end
|
||||
|
||||
if Dispatcher:GetSquadronLanding( Squadron.Name ) == AI_A2A_DISPATCHER.Landing.NearAirbase then
|
||||
Dispatcher:RemoveDefenderFromSquadron( Squadron, Defender )
|
||||
Defender:Destroy()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2636,6 +2656,8 @@ do -- AI_A2A_DISPATCHER
|
||||
-- @param #AI_A2A_DISPATCHER self
|
||||
function AI_A2A_DISPATCHER:onafterGCI( From, Event, To, DetectedItem, DefendersMissing, Friendlies )
|
||||
|
||||
self:F( { From, Event, To, DetectedItem.Index, DefendersMissing, Friendlies } )
|
||||
|
||||
local AttackerSet = DetectedItem.Set
|
||||
local AttackerCount = AttackerSet:Count()
|
||||
local DefendersCount = 0
|
||||
@ -2658,17 +2680,19 @@ do -- AI_A2A_DISPATCHER
|
||||
local BreakLoop = false
|
||||
|
||||
while( DefendersCount > 0 and not BreakLoop ) do
|
||||
|
||||
self:F( { DefenderSquadrons = self.DefenderSquadrons } )
|
||||
for SquadronName, DefenderSquadron in pairs( self.DefenderSquadrons or {} ) do
|
||||
self:F( { GCI = DefenderSquadron.Gci } )
|
||||
for InterceptID, Intercept in pairs( DefenderSquadron.Gci or {} ) do
|
||||
|
||||
--self:E( { DefenderSquadron } )
|
||||
self:F( { DefenderSquadron } )
|
||||
local SpawnCoord = DefenderSquadron.Airbase:GetCoordinate() -- Core.Point#COORDINATE
|
||||
--local TargetCoord = AttackerSet:GetFirst():GetCoordinate()
|
||||
local TargetCoord = DetectedItem.InterceptCoord
|
||||
if TargetCoord then
|
||||
local Distance = SpawnCoord:Get2DDistance( TargetCoord )
|
||||
self:F( { Distance = Distance, TargetCoord = TargetCoord } )
|
||||
local InterceptCoord = DetectedItem.InterceptCoord
|
||||
self:F({InterceptCoord = InterceptCoord})
|
||||
if InterceptCoord then
|
||||
local Distance = SpawnCoord:Get2DDistance( InterceptCoord )
|
||||
self:F( { Distance = Distance, InterceptCoord = InterceptCoord } )
|
||||
|
||||
if ClosestDistance == 0 or Distance < ClosestDistance then
|
||||
|
||||
@ -2732,7 +2756,7 @@ do -- AI_A2A_DISPATCHER
|
||||
Fsm:__Engage( 2, DetectedItem.Set ) -- Engage on the TargetSetUnit
|
||||
|
||||
|
||||
self:SetDefenderTask( DefenderGCI, "GCI", Fsm, DetectedItem )
|
||||
self:SetDefenderTask( ClosestDefenderSquadronName, DefenderGCI, "GCI", Fsm, DetectedItem )
|
||||
|
||||
|
||||
function Fsm:onafterRTB( Defender, From, Event, To )
|
||||
@ -2865,14 +2889,14 @@ do -- AI_A2A_DISPATCHER
|
||||
self:ClearDefenderTask( AIGroup )
|
||||
else
|
||||
if DefenderTask.Target then
|
||||
local Target = Detection:GetDetectedItem( DefenderTask.Target.Index )
|
||||
if not Target then
|
||||
local AttackerItem = Detection:GetDetectedItem( DefenderTask.Target.Index )
|
||||
if not AttackerItem then
|
||||
self:F( { "Removing obsolete Target:", DefenderTask.Target.Index } )
|
||||
self:ClearDefenderTaskTarget( AIGroup )
|
||||
|
||||
else
|
||||
if DefenderTask.Target.Set then
|
||||
if DefenderTask.Target.Set:Count() == 0 then
|
||||
local AttackerCount = DefenderTask.Target.Set:Count()
|
||||
if AttackerCount == 0 then
|
||||
self:F( { "All Targets destroyed in Target, removing:", DefenderTask.Target.Index } )
|
||||
self:ClearDefenderTaskTarget( AIGroup )
|
||||
end
|
||||
@ -2958,7 +2982,7 @@ do -- AI_A2A_DISPATCHER
|
||||
end
|
||||
Report:Add( string.format( "\n - %d Tasks", TaskCount ) )
|
||||
|
||||
self:T( Report:Text( "\n" ) )
|
||||
self:E( Report:Text( "\n" ) )
|
||||
trigger.action.outText( Report:Text( "\n" ), 25 )
|
||||
end
|
||||
|
||||
@ -3454,6 +3478,7 @@ do
|
||||
-- Setup squadrons
|
||||
|
||||
self:F( { Airbases = AirbaseNames } )
|
||||
self.Templates:Flush()
|
||||
|
||||
for AirbaseID, AirbaseName in pairs( AirbaseNames ) do
|
||||
local Airbase = _DATABASE:FindAirbase( AirbaseName ) -- Wrapper.Airbase#AIRBASE
|
||||
|
||||
@ -871,9 +871,9 @@ function EVENT:onEvent( Event )
|
||||
-- Okay, we got the event from DCS. Now loop the SORTED self.EventSorted[] table for the received Event.id, and for each EventData registered, check if a function needs to be called.
|
||||
for EventClass, EventData in pairs( self.Events[Event.id][EventPriority] ) do
|
||||
|
||||
if Event.IniObjectCategory ~= Object.Category.STATIC then
|
||||
self:E( { "Evaluating: ", EventClass:GetClassNameAndID() } )
|
||||
end
|
||||
--if Event.IniObjectCategory ~= Object.Category.STATIC then
|
||||
-- self:E( { "Evaluating: ", EventClass:GetClassNameAndID() } )
|
||||
--end
|
||||
|
||||
Event.IniGroup = GROUP:FindByName( Event.IniDCSGroupName )
|
||||
Event.TgtGroup = GROUP:FindByName( Event.TgtDCSGroupName )
|
||||
|
||||
@ -838,8 +838,12 @@ do -- COORDINATE
|
||||
|
||||
if ModeA2A then
|
||||
if Settings:IsA2A_BRAA() then
|
||||
local Coordinate = Controllable:GetCoordinate()
|
||||
return self:ToStringBRA( Coordinate, Settings )
|
||||
if Controllable then
|
||||
local Coordinate = Controllable:GetCoordinate()
|
||||
return self:ToStringBRA( Coordinate, Settings )
|
||||
else
|
||||
return self:ToStringMGRS( Settings )
|
||||
end
|
||||
end
|
||||
if Settings:IsA2A_BULLS() then
|
||||
local Coalition = Controllable:GetCoalition()
|
||||
@ -856,8 +860,13 @@ do -- COORDINATE
|
||||
end
|
||||
else
|
||||
if Settings:IsA2G_BR() then
|
||||
local Coordinate = Controllable:GetCoordinate()
|
||||
return Controllable and self:ToStringBR( Coordinate, Settings ) or self:ToStringMGRS( Settings )
|
||||
-- If no Controllable is given to calculate the BR from, then MGRS will be used!!!
|
||||
if Controllable then
|
||||
local Coordinate = Controllable:GetCoordinate()
|
||||
return Controllable and self:ToStringBR( Coordinate, Settings ) or self:ToStringMGRS( Settings )
|
||||
else
|
||||
return self:ToStringMGRS( Settings )
|
||||
end
|
||||
end
|
||||
if Settings:IsA2G_LL_DMS() then
|
||||
return self:ToStringLLDMS( Settings )
|
||||
|
||||
@ -1784,6 +1784,7 @@ end
|
||||
|
||||
--- Calculate the maxium A2G threat level of the SET_UNIT.
|
||||
-- @param #SET_UNIT self
|
||||
-- @return #number The maximum threatlevel
|
||||
function SET_UNIT:CalculateThreatLevelA2G()
|
||||
|
||||
local MaxThreatLevelA2G = 0
|
||||
|
||||
@ -834,6 +834,20 @@ function ZONE_GROUP:GetRandomVec2()
|
||||
return Point
|
||||
end
|
||||
|
||||
--- Returns a @{Point#POINT_VEC2} object reflecting a random 2D location within the zone.
|
||||
-- @param #ZONE_GROUP self
|
||||
-- @param #number inner (optional) Minimal distance from the center of the zone. Default is 0.
|
||||
-- @param #number outer (optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone.
|
||||
-- @return Core.Point#POINT_VEC2 The @{Point#POINT_VEC2} object reflecting the random 3D location within the zone.
|
||||
function ZONE_GROUP:GetRandomPointVec2( inner, outer )
|
||||
self:F( self.ZoneName, inner, outer )
|
||||
|
||||
local PointVec2 = POINT_VEC2:NewFromVec2( self:GetRandomVec2() )
|
||||
|
||||
self:T3( { PointVec2 } )
|
||||
|
||||
return PointVec2
|
||||
end
|
||||
|
||||
|
||||
--- @type ZONE_POLYGON_BASE
|
||||
|
||||
@ -133,7 +133,7 @@ do -- DESIGNATE
|
||||
--
|
||||
-- ## 4. Laser codes
|
||||
--
|
||||
-- ### 4.1 Set possible laser codes
|
||||
-- ### 4.1. Set possible laser codes
|
||||
--
|
||||
-- An array of laser codes can be provided, that will be used by the DESIGNATE when lasing.
|
||||
-- The laser code is communicated by the Recce when it is lasing a larget.
|
||||
@ -151,10 +151,19 @@ do -- DESIGNATE
|
||||
--
|
||||
-- The above sets a collection of possible laser codes that can be assigned. **Note the { } notation!**
|
||||
--
|
||||
-- ### 4.2 Auto generate laser codes
|
||||
-- ### 4.2. Auto generate laser codes
|
||||
--
|
||||
-- Use the method @{#DESIGNATE.GenerateLaserCodes}() to generate all possible laser codes. Logic implemented and advised by Ciribob!
|
||||
--
|
||||
-- ### 4.3. Add specific lase codes to the lase menu
|
||||
--
|
||||
-- Certain plane types can only drop laser guided ordonnance when targets are lased with specific laser codes.
|
||||
-- The SU-25T needs targets to be lased using laser code 1113.
|
||||
-- The A-10A needs targets to be lased using laser code 1680.
|
||||
--
|
||||
-- The method @{#DESIGNATE.AddMenuLaserCode}() to allow a player to lase a target using a specific laser code.
|
||||
-- Remove such a lase menu option using @{#DESIGNATE.RemoveMenuLaserCode}().
|
||||
--
|
||||
-- ## 5. Autolase to automatically lase detected targets.
|
||||
--
|
||||
-- DetectionItems can be auto lased once detected by Recces. As such, there is almost no action required from the Players using the Designate Menu.
|
||||
@ -396,6 +405,8 @@ do -- DESIGNATE
|
||||
|
||||
self.LaserCodesUsed = {}
|
||||
|
||||
self.MenuLaserCodes = {} -- This map contains the laser codes that will be shown in the designate menu to lase with specific laser codes.
|
||||
|
||||
self.Detection:__Start( 2 )
|
||||
|
||||
self:__Detect( -15 )
|
||||
@ -491,6 +502,43 @@ do -- DESIGNATE
|
||||
end
|
||||
|
||||
|
||||
--- Add a specific lase code to the designate lase menu to lase targets with a specific laser code.
|
||||
-- The MenuText will appear in the lase menu.
|
||||
-- @param #DESIGNATE self
|
||||
-- @param #number LaserCode The specific laser code to be added to the lase menu.
|
||||
-- @param #string MenuText The text to be shown to the player. If you specify a %d in the MenuText, the %d will be replaced with the LaserCode specified.
|
||||
-- @return #DESIGNATE
|
||||
-- @usage
|
||||
-- RecceDesignation:AddMenuLaserCode( 1113, "Lase with %d for Su-25T" )
|
||||
-- RecceDesignation:AddMenuLaserCode( 1680, "Lase with %d for A-10A" )
|
||||
--
|
||||
function DESIGNATE:AddMenuLaserCode( LaserCode, MenuText )
|
||||
|
||||
self.MenuLaserCodes[LaserCode] = MenuText
|
||||
self:SetDesignateMenu()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
--- Removes a specific lase code from the designate lase menu.
|
||||
-- @param #DESIGNATE self
|
||||
-- @param #number LaserCode The specific laser code that was set to be added to the lase menu.
|
||||
-- @return #DESIGNATE
|
||||
-- @usage
|
||||
-- RecceDesignation:RemoveMenuLaserCode( 1113 )
|
||||
--
|
||||
function DESIGNATE:RemoveMenuLaserCode( LaserCode )
|
||||
|
||||
self.MenuLaserCodes[LaserCode] = nil
|
||||
self:SetDesignateMenu()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
--- Set the name of the designation. The name will appear in the menu.
|
||||
-- This method can be used to control different designations for different plane types.
|
||||
-- @param #DESIGNATE self
|
||||
@ -797,11 +845,9 @@ do -- DESIGNATE
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Flash Status Report On", StatusMenu, self.MenuFlashStatus, self, AttackGroup, true ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
end
|
||||
|
||||
local DetectedItems = self.Detection:GetDetectedItems()
|
||||
|
||||
for DesignateIndex, Designating in pairs( self.Designating ) do
|
||||
|
||||
local DetectedItem = DetectedItems[DesignateIndex]
|
||||
local DetectedItem = self.Detection:GetDetectedItem( DesignateIndex )
|
||||
|
||||
if DetectedItem then
|
||||
|
||||
@ -813,8 +859,10 @@ do -- DESIGNATE
|
||||
MenuText = "(-) " .. MenuText
|
||||
local DetectedMenu = MENU_GROUP:New( AttackGroup, MenuText, MenuDesignate ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Search other target", DetectedMenu, self.MenuForget, self, DesignateIndex ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Lase target 60 secs", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 60 ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Lase target 120 secs", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 120 ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
for LaserCode, MenuText in pairs( self.MenuLaserCodes ) do
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, string.format( MenuText, LaserCode ), DetectedMenu, self.MenuLaseCode, self, DesignateIndex, 60, LaserCode ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
end
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Lase targets", DetectedMenu, self.MenuLaseOn, self, DesignateIndex, 60 ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Smoke red", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Red ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Smoke blue", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Blue ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
MENU_GROUP_COMMAND:New( AttackGroup, "Smoke green", DetectedMenu, self.MenuSmoke, self, DesignateIndex, SMOKECOLOR.Green ):SetTime( MenuTime ):SetTag( self.DesignateName )
|
||||
@ -914,6 +962,18 @@ do -- DESIGNATE
|
||||
self:SetDesignateMenu()
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- @param #DESIGNATE self
|
||||
function DESIGNATE:MenuLaseCode( Index, Duration, LaserCode )
|
||||
|
||||
self:E( "Designate through Lase using " .. LaserCode )
|
||||
|
||||
self:__LaseOn( 1, Index, Duration, LaserCode )
|
||||
self:SetDesignateMenu()
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- @param #DESIGNATE self
|
||||
function DESIGNATE:MenuLaseOff( Index, Duration )
|
||||
@ -927,21 +987,22 @@ do -- DESIGNATE
|
||||
|
||||
---
|
||||
-- @param #DESIGNATE self
|
||||
function DESIGNATE:onafterLaseOn( From, Event, To, Index, Duration )
|
||||
function DESIGNATE:onafterLaseOn( From, Event, To, Index, Duration, LaserCode )
|
||||
|
||||
self.Designating[Index] = "Laser"
|
||||
self:__Lasing( -1, Index, Duration )
|
||||
self:__Lasing( -1, Index, Duration, LaserCode )
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- @param #DESIGNATE self
|
||||
-- @return #DESIGNATE
|
||||
function DESIGNATE:onafterLasing( From, Event, To, Index, Duration )
|
||||
function DESIGNATE:onafterLasing( From, Event, To, Index, Duration, LaserCodeRequested )
|
||||
|
||||
|
||||
local TargetSetUnit = self.Detection:GetDetectedSet( Index )
|
||||
|
||||
local MarkedCount = 0
|
||||
local MarkingCount = 0
|
||||
local MarkedTypes = {}
|
||||
local ReportTypes = REPORT:New()
|
||||
local ReportLaserCodes = REPORT:New()
|
||||
@ -953,12 +1014,30 @@ do -- DESIGNATE
|
||||
local Recce = RecceData -- Wrapper.Unit#UNIT
|
||||
self:F( { TargetUnit = TargetUnit, Recce = Recce:GetName() } )
|
||||
if not Recce:IsLasing() then
|
||||
local LaserCode = Recce:GetLaserCode() --(Not deleted when stopping with lasing).
|
||||
local LaserCode = Recce:GetLaserCode() -- (Not deleted when stopping with lasing).
|
||||
self:F( { ClearingLaserCode = LaserCode } )
|
||||
self.LaserCodesUsed[LaserCode] = nil
|
||||
self.Recces[TargetUnit] = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- If a specific lasercode is requested, we disable one active lase!
|
||||
if LaserCodeRequested then
|
||||
for TargetUnit, RecceData in pairs( self.Recces ) do -- We break after the first has been processed.
|
||||
local Recce = RecceData -- Wrapper.Unit#UNIT
|
||||
self:F( { TargetUnit = TargetUnit, Recce = Recce:GetName() } )
|
||||
if Recce:IsLasing() then
|
||||
-- When a Recce is lasing, we switch the lasing off, and clear the references to the lasing in the DESIGNATE class.
|
||||
Recce:LaseOff() -- Switch off the lasing.
|
||||
local LaserCode = Recce:GetLaserCode() -- (Not deleted when stopping with lasing).
|
||||
self:F( { ClearingLaserCode = LaserCode } )
|
||||
self.LaserCodesUsed[LaserCode] = nil
|
||||
self.Recces[TargetUnit] = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
TargetSetUnit:ForEachUnitPerThreatLevel( 10, 0,
|
||||
--- @param Wrapper.Unit#UNIT SmokeUnit
|
||||
@ -966,7 +1045,7 @@ do -- DESIGNATE
|
||||
|
||||
self:F( { TargetUnit = TargetUnit:GetName() } )
|
||||
|
||||
if MarkedCount < self.MaximumMarkings then
|
||||
if MarkingCount < self.MaximumMarkings then
|
||||
|
||||
if TargetUnit:IsAlive() then
|
||||
|
||||
@ -993,6 +1072,11 @@ do -- DESIGNATE
|
||||
local LaserCode = self.LaserCodes[LaserCodeIndex]
|
||||
--self:F( { LaserCode = LaserCode, LaserCodeUsed = self.LaserCodesUsed[LaserCode] } )
|
||||
|
||||
if LaserCodeRequested and LaserCodeRequested ~= LaserCode then
|
||||
LaserCode = LaserCodeRequested
|
||||
LaserCodeRequested = nil
|
||||
end
|
||||
|
||||
if not self.LaserCodesUsed[LaserCode] then
|
||||
|
||||
self.LaserCodesUsed[LaserCode] = LaserCodeIndex
|
||||
@ -1007,7 +1091,7 @@ do -- DESIGNATE
|
||||
self.Recces[TargetUnit] = RecceUnit
|
||||
RecceUnit:MessageToSetGroup( "Marking " .. TargetUnit:GetTypeName() .. " with laser " .. RecceUnit:GetSpot().LaserCode .. " for " .. Duration .. "s.", 5, self.AttackSet, self.DesignateName )
|
||||
-- OK. We have assigned for the Recce a TargetUnit. We can exit the function.
|
||||
MarkedCount = MarkedCount + 1
|
||||
MarkingCount = MarkingCount + 1
|
||||
local TargetUnitType = TargetUnit:GetTypeName()
|
||||
if not MarkedTypes[TargetUnitType] then
|
||||
MarkedTypes[TargetUnitType] = true
|
||||
@ -1031,7 +1115,7 @@ do -- DESIGNATE
|
||||
Recce:MessageToSetGroup( "Target " .. TargetUnit:GetTypeName() "out of LOS. Cancelling lase!", 5, self.AttackSet, self.DesignateName )
|
||||
end
|
||||
else
|
||||
MarkedCount = MarkedCount + 1
|
||||
MarkingCount = MarkingCount + 1
|
||||
local TargetUnitType = TargetUnit:GetTypeName()
|
||||
if not MarkedTypes[TargetUnitType] then
|
||||
MarkedTypes[TargetUnitType] = true
|
||||
@ -1043,7 +1127,7 @@ do -- DESIGNATE
|
||||
end
|
||||
end
|
||||
else
|
||||
MarkedCount = MarkedCount + 1
|
||||
MarkingCount = MarkingCount + 1
|
||||
local TargetUnitType = TargetUnit:GetTypeName()
|
||||
if not MarkedTypes[TargetUnitType] then
|
||||
MarkedTypes[TargetUnitType] = true
|
||||
@ -1060,7 +1144,7 @@ do -- DESIGNATE
|
||||
local MarkedTypesText = ReportTypes:Text(', ')
|
||||
local MarkedLaserCodesText = ReportLaserCodes:Text(', ')
|
||||
for MarkedType, MarketCount in pairs( MarkedTypes ) do
|
||||
self.CC:GetPositionable():MessageToSetGroup( "Marking " .. MarkedCount .. " x " .. MarkedTypesText .. " with lasers " .. MarkedLaserCodesText .. ".", 5, self.AttackSet, self.DesignateName )
|
||||
self.CC:GetPositionable():MessageToSetGroup( "Marking " .. MarkingCount .. " x " .. MarkedTypesText .. " with lasers " .. MarkedLaserCodesText .. ".", 5, self.AttackSet, self.DesignateName )
|
||||
end
|
||||
|
||||
self:__Lasing( -30, Index, Duration )
|
||||
|
||||
@ -305,7 +305,7 @@ do -- DETECTION_BASE
|
||||
-- @field #number ID -- The identifier of the detected area.
|
||||
-- @field #boolean FriendliesNearBy Indicates if there are friendlies within the detected area.
|
||||
-- @field Wrapper.Unit#UNIT NearestFAC The nearest FAC near the Area.
|
||||
|
||||
-- @field Core.Point#COORDINATE Coordinate The last known coordinate of the DetectedItem.
|
||||
|
||||
--- DETECTION constructor.
|
||||
-- @param #DETECTION_BASE self
|
||||
@ -604,6 +604,14 @@ do -- DETECTION_BASE
|
||||
|
||||
DetectionAccepted = self._.FilterCategories[DetectedUnitCategory] ~= nil and DetectionAccepted or false
|
||||
|
||||
-- if Distance > 15000 then
|
||||
-- if DetectedUnitCategory == Unit.Category.GROUND_UNIT or DetectedUnitCategory == Unit.Category.SHIP then
|
||||
-- if DetectedObject:hasSensors( Unit.SensorType.RADAR, Unit.RadarType.AS ) == false then
|
||||
-- DetectionAccepted = false
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
if self.AcceptRange and Distance > self.AcceptRange then
|
||||
DetectionAccepted = false
|
||||
end
|
||||
@ -1101,8 +1109,8 @@ do -- DETECTION_BASE
|
||||
DetectedItem.Changes[ChangeCode].ID = ID
|
||||
DetectedItem.Changes[ChangeCode].ItemUnitType = ItemUnitType
|
||||
|
||||
self:T( { "Change on Detection Item:", DetectedItem.ID, ChangeCode, ItemUnitType } )
|
||||
|
||||
self:E( { "Change on Detection Item:", DetectedItem.ID, ChangeCode, ItemUnitType } )
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
@ -1124,7 +1132,7 @@ do -- DETECTION_BASE
|
||||
DetectedItem.Changes[ChangeCode][ChangeUnitType] = DetectedItem.Changes[ChangeCode][ChangeUnitType] + 1
|
||||
DetectedItem.Changes[ChangeCode].ID = ID
|
||||
|
||||
self:T( { "Change on Detection Item:", DetectedItem.ID, ChangeCode, ChangeUnitType } )
|
||||
self:E( { "Change on Detection Item:", DetectedItem.ID, ChangeCode, ChangeUnitType } )
|
||||
|
||||
return self
|
||||
end
|
||||
@ -1353,6 +1361,32 @@ do -- DETECTION_BASE
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
--- Gets a detected unit type name, taking into account the detection results.
|
||||
-- @param #DETECTION_BASE self
|
||||
-- @param Wrapper.Unit#UNIT DetectedUnit
|
||||
-- @return #string The type name
|
||||
function DETECTION_BASE:GetDetectedUnitTypeName( DetectedUnit )
|
||||
--self:F2( ObjectName )
|
||||
|
||||
if DetectedUnit and DetectedUnit:IsAlive() then
|
||||
local DetectedUnitName = DetectedUnit:GetName()
|
||||
local DetectedObject = self.DetectedObjects[DetectedUnitName]
|
||||
|
||||
if DetectedObject then
|
||||
if DetectedObject.KnowType then
|
||||
return DetectedUnit:GetTypeName()
|
||||
else
|
||||
return "Unknown"
|
||||
end
|
||||
end
|
||||
else
|
||||
return "Dead:" .. DetectedUnit:GetName()
|
||||
end
|
||||
|
||||
return "Undetected:" .. DetectedUnit:GetName()
|
||||
end
|
||||
|
||||
|
||||
--- Adds a new DetectedItem to the DetectedItems list.
|
||||
-- The DetectedItem is a table and contains a SET_UNIT in the field Set.
|
||||
@ -1538,15 +1572,78 @@ do -- DETECTION_BASE
|
||||
|
||||
end
|
||||
|
||||
|
||||
--- Set the detected item coordinate.
|
||||
-- @param #DETECTION_BASE self
|
||||
-- @param #DETECTION_BASE.DetectedItem The DetectedItem to set the coordinate at.
|
||||
-- @param Core.Point#COORDINATE Coordinate The coordinate to set the last know detected position at.
|
||||
-- @param Wrapper.Unit#UNIT DetectedItemUnit The unit to set the heading and altitude from.
|
||||
-- @return #DETECTION_BASE
|
||||
function DETECTION_BASE:SetDetectedItemCoordinate( DetectedItem, Coordinate, DetectedItemUnit )
|
||||
self:F( { Coordinate = Coordinate } )
|
||||
|
||||
if DetectedItem then
|
||||
if DetectedItemUnit then
|
||||
DetectedItem.Coordinate = Coordinate
|
||||
DetectedItem.Coordinate:SetHeading( DetectedItemUnit:GetHeading() )
|
||||
DetectedItem.Coordinate.y = DetectedItemUnit:GetAltitude()
|
||||
DetectedItem.Coordinate.Speed = DetectedItemUnit:GetVelocityMPS()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Get the detected item coordinate.
|
||||
-- @param #DETECTION_BASE self
|
||||
-- @param Index
|
||||
-- @param #number Index
|
||||
-- @return Core.Point#COORDINATE
|
||||
function DETECTION_BASE:GetDetectedItemCoordinate( Index )
|
||||
self:F( { Index = Index } )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( Index )
|
||||
|
||||
if DetectedItem then
|
||||
return DetectedItem.Coordinate
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Set the detected item threatlevel.
|
||||
-- @param #DETECTION_BASE self
|
||||
-- @param #DETECTION_BASE.DetectedItem The DetectedItem to calculate the threatlevel for.
|
||||
-- @return #DETECTION_BASE
|
||||
function DETECTION_BASE:SetDetectedItemThreatLevel( DetectedItem )
|
||||
|
||||
local DetectedSet = DetectedItem.Set
|
||||
|
||||
if DetectedItem then
|
||||
DetectedItem.ThreatLevel = DetectedSet:CalculateThreatLevelA2G()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
--- Get the detected item coordinate.
|
||||
-- @param #DETECTION_BASE self
|
||||
-- @param #number Index
|
||||
-- @return #number ThreatLevel
|
||||
function DETECTION_BASE:GetDetectedItemThreatLevel( Index )
|
||||
self:F( { Index = Index } )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( Index )
|
||||
|
||||
if DetectedItem then
|
||||
return DetectedItem.ThreatLevel or 0
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--- Menu of a detected item using a given numeric index.
|
||||
-- @param #DETECTION_BASE self
|
||||
@ -1639,27 +1736,6 @@ do -- DETECTION_UNITS
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get the detected item coordinate.
|
||||
-- @param #DETECTION_UNITS self
|
||||
-- @param Index
|
||||
-- @return Core.Point#COORDINATE
|
||||
function DETECTION_UNITS:GetDetectedItemCoordinate( Index )
|
||||
self:F( { Index = Index } )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( Index )
|
||||
local DetectedSet = self:GetDetectedSet( Index )
|
||||
|
||||
if DetectedSet then
|
||||
local DetectedItemUnit = DetectedSet:GetFirst() -- Wrapper.Unit#UNIT
|
||||
if DetectedItemUnit and DetectedItemUnit:IsAlive() then
|
||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||
DetectedItemCoordinate:SetHeading( DetectedItemUnit:GetHeading() )
|
||||
return DetectedItemCoordinate
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Make text documenting the changes of the detected zone.
|
||||
-- @param #DETECTION_UNITS self
|
||||
-- @param #DETECTION_UNITS.DetectedItem DetectedItem
|
||||
@ -1727,6 +1803,7 @@ do -- DETECTION_UNITS
|
||||
|
||||
-- Update the detection with the new data provided.
|
||||
DetectedItem.TypeName = DetectedUnit:GetTypeName()
|
||||
DetectedItem.CategoryName = DetectedUnit:GetCategoryName()
|
||||
DetectedItem.Name = DetectedObject.Name
|
||||
DetectedItem.IsVisible = DetectedObject.IsVisible
|
||||
DetectedItem.LastTime = DetectedObject.LastTime
|
||||
@ -1781,8 +1858,14 @@ do -- DETECTION_UNITS
|
||||
local DetectedItem = DetectedItemData -- #DETECTION_BASE.DetectedItem
|
||||
local DetectedSet = DetectedItem.Set
|
||||
|
||||
-- Set the last known coordinate.
|
||||
local DetectedFirstUnit = DetectedSet:GetFirst()
|
||||
local DetectedFirstUnitCoord = DetectedFirstUnit:GetCoordinate()
|
||||
self:SetDetectedItemCoordinate( DetectedItem, DetectedFirstUnitCoord, DetectedFirstUnit )
|
||||
|
||||
self:ReportFriendliesNearBy( { DetectedItem = DetectedItem, ReportSetGroup = self.DetectionSetGroup } ) -- Fill the Friendlies table
|
||||
--self:NearestFAC( DetectedItem )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
@ -1804,21 +1887,14 @@ do -- DETECTION_UNITS
|
||||
local UnitDistanceText = ""
|
||||
local UnitCategoryText = ""
|
||||
|
||||
local DetectedItemUnit = DetectedSet:GetFirst() -- Wrapper.Unit#UNIT
|
||||
|
||||
if DetectedItemUnit and DetectedItemUnit:IsAlive() then
|
||||
self:T(DetectedItemUnit)
|
||||
|
||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||
|
||||
ReportSummary = string.format(
|
||||
"%s - %s",
|
||||
DetectedItemID,
|
||||
DetectedItemCoordText
|
||||
)
|
||||
end
|
||||
|
||||
local DetectedItemCoordinate = self:GetDetectedItemCoordinate( Index )
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||
|
||||
ReportSummary = string.format(
|
||||
"%s - %s",
|
||||
DetectedItemID,
|
||||
DetectedItemCoordText
|
||||
)
|
||||
self:T( ReportSummary )
|
||||
|
||||
return ReportSummary
|
||||
@ -1835,54 +1911,46 @@ do -- DETECTION_UNITS
|
||||
self:F( { Index, self.DetectedItems } )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( Index )
|
||||
local DetectedSet = self:GetDetectedSet( Index )
|
||||
local DetectedItemID = self:GetDetectedItemID( Index )
|
||||
|
||||
self:T( DetectedSet )
|
||||
if DetectedSet then
|
||||
if DetectedItem then
|
||||
local ReportSummary = ""
|
||||
local UnitDistanceText = ""
|
||||
local UnitCategoryText = ""
|
||||
|
||||
local DetectedItemUnit = DetectedSet:GetFirst() -- Wrapper.Unit#UNIT
|
||||
|
||||
if DetectedItemUnit and DetectedItemUnit:IsAlive() then
|
||||
self:T(DetectedItemUnit)
|
||||
|
||||
|
||||
if DetectedItem.KnowType then
|
||||
local UnitCategoryName = DetectedItemUnit:GetCategoryName()
|
||||
if UnitCategoryName then
|
||||
UnitCategoryText = UnitCategoryName
|
||||
end
|
||||
if DetectedItem.TypeName then
|
||||
UnitCategoryText = UnitCategoryText .. " (" .. DetectedItem.TypeName .. ")"
|
||||
end
|
||||
else
|
||||
UnitCategoryText = "Unknown"
|
||||
if DetectedItem.KnowType then
|
||||
local UnitCategoryName = DetectedItem.CategoryName
|
||||
if UnitCategoryName then
|
||||
UnitCategoryText = UnitCategoryName
|
||||
end
|
||||
|
||||
if DetectedItem.KnowDistance then
|
||||
if DetectedItem.IsVisible then
|
||||
UnitDistanceText = " at " .. string.format( "%.2f", DetectedItem.Distance ) .. " km"
|
||||
end
|
||||
else
|
||||
if DetectedItem.IsVisible then
|
||||
UnitDistanceText = " at +/- " .. string.format( "%.0f", DetectedItem.Distance ) .. " km"
|
||||
end
|
||||
if DetectedItem.TypeName then
|
||||
UnitCategoryText = UnitCategoryText .. " (" .. DetectedItem.TypeName .. ")"
|
||||
end
|
||||
|
||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup, Settings )
|
||||
|
||||
local ThreatLevelA2G = DetectedItemUnit:GetThreatLevel( DetectedItem )
|
||||
|
||||
local Report = REPORT:New()
|
||||
Report:Add(DetectedItemID .. ", " .. DetectedItemCoordText)
|
||||
Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ) ) )
|
||||
Report:Add( string.format("Type: %s%s", UnitCategoryText, UnitDistanceText ) )
|
||||
return Report
|
||||
else
|
||||
UnitCategoryText = "Unknown"
|
||||
end
|
||||
|
||||
if DetectedItem.KnowDistance then
|
||||
if DetectedItem.IsVisible then
|
||||
UnitDistanceText = " at " .. string.format( "%.2f", DetectedItem.Distance ) .. " km"
|
||||
end
|
||||
else
|
||||
if DetectedItem.IsVisible then
|
||||
UnitDistanceText = " at +/- " .. string.format( "%.0f", DetectedItem.Distance ) .. " km"
|
||||
end
|
||||
end
|
||||
|
||||
--TODO: solve Index reference
|
||||
local DetectedItemCoordinate = self:GetDetectedItemCoordinate( Index )
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup, Settings )
|
||||
|
||||
local ThreatLevelA2G = self:GetDetectedItemThreatLevel( Index )
|
||||
|
||||
local Report = REPORT:New()
|
||||
Report:Add(DetectedItemID .. ", " .. DetectedItemCoordText)
|
||||
Report:Add( string.format( "Threat: [%s]", string.rep( "■", ThreatLevelA2G ) ) )
|
||||
Report:Add( string.format("Type: %s%s", UnitCategoryText, UnitDistanceText ) )
|
||||
return Report
|
||||
end
|
||||
return nil
|
||||
end
|
||||
@ -1900,7 +1968,7 @@ do -- DETECTION_UNITS
|
||||
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
||||
local ReportSummary = self:DetectedItemReportSummary( DetectedItemID, AttackGroup )
|
||||
Report:SetTitle( "Detected units:" )
|
||||
Report:Add( ReportSummary )
|
||||
Report:Add( ReportSummary:Text() )
|
||||
end
|
||||
|
||||
local ReportText = Report:Text()
|
||||
@ -1944,25 +2012,6 @@ do -- DETECTION_TYPES
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get the detected item coordinate.
|
||||
-- @param #DETECTION_TYPES self
|
||||
-- @param DetectedTypeName
|
||||
-- @return #Core.Point#COORDINATE
|
||||
function DETECTION_TYPES:GetDetectedItemCoordinate( DetectedTypeName )
|
||||
self:F( { DetectedTypeName = DetectedTypeName } )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( DetectedTypeName )
|
||||
local DetectedSet = self:GetDetectedSet( DetectedTypeName )
|
||||
|
||||
if DetectedItem then
|
||||
local DetectedItemUnit = DetectedSet:GetFirst()
|
||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||
DetectedItemCoordinate:SetHeading( DetectedItemUnit:GetHeading() )
|
||||
return DetectedItemCoordinate
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Make text documenting the changes of the detected zone.
|
||||
-- @param #DETECTION_TYPES self
|
||||
-- @param #DETECTION_TYPES.DetectedItem DetectedItem
|
||||
@ -2067,10 +2116,16 @@ do -- DETECTION_TYPES
|
||||
local DetectedItem = DetectedItemData -- #DETECTION_BASE.DetectedItem
|
||||
local DetectedSet = DetectedItem.Set
|
||||
|
||||
-- Set the last known coordinate.
|
||||
local DetectedFirstUnit = DetectedSet:GetFirst()
|
||||
local DetectedUnitCoord = DetectedFirstUnit:GetCoordinate()
|
||||
self:SetDetectedItemCoordinate( DetectedItem, DetectedUnitCoord, DetectedFirstUnit )
|
||||
|
||||
self:ReportFriendliesNearBy( { DetectedItem = DetectedItem, ReportSetGroup = self.DetectionSetGroup } ) -- Fill the Friendlies table
|
||||
--self:NearestFAC( DetectedItem )
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
@ -2082,20 +2137,13 @@ do -- DETECTION_TYPES
|
||||
self:F( DetectedTypeName )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( DetectedTypeName )
|
||||
local DetectedSet = self:GetDetectedSet( DetectedTypeName )
|
||||
local DetectedItemID = self:GetDetectedItemID( DetectedTypeName )
|
||||
|
||||
self:T( DetectedItem )
|
||||
if DetectedItem then
|
||||
|
||||
local DetectedItemUnit = DetectedSet:GetFirst()
|
||||
|
||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||
local DetectedItemCoordinate = self:GetDetectedItemCoordinate( DetectedTypeName )
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup )
|
||||
|
||||
--self:E( { DetectedItemID,
|
||||
-- DetectedItemCoordText } )
|
||||
|
||||
local ReportSummary = string.format(
|
||||
"%s - %s",
|
||||
DetectedItemID,
|
||||
@ -2123,13 +2171,11 @@ do -- DETECTION_TYPES
|
||||
self:T( DetectedItem )
|
||||
if DetectedItem then
|
||||
|
||||
local ThreatLevelA2G = DetectedSet:CalculateThreatLevelA2G()
|
||||
local ThreatLevelA2G = self:GetDetectedItemThreatLevel( DetectedTypeName )
|
||||
local DetectedItemsCount = DetectedSet:Count()
|
||||
local DetectedItemType = DetectedItem.TypeName
|
||||
|
||||
local DetectedItemUnit = DetectedSet:GetFirst()
|
||||
|
||||
local DetectedItemCoordinate = DetectedItemUnit:GetCoordinate()
|
||||
local DetectedItemCoordinate = self:GetDetectedItemCoordinate( DetectedTypeName )
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup, Settings )
|
||||
|
||||
local Report = REPORT:New()
|
||||
@ -2152,7 +2198,7 @@ do -- DETECTION_TYPES
|
||||
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
||||
local ReportSummary = self:DetectedItemReportSummary( DetectedItemTypeName, AttackGroup )
|
||||
Report:SetTitle( "Detected types:" )
|
||||
Report:Add( ReportSummary )
|
||||
Report:Add( ReportSummary:Text() )
|
||||
end
|
||||
|
||||
local ReportText = Report:Text()
|
||||
@ -2228,32 +2274,6 @@ do -- DETECTION_AREAS
|
||||
return self
|
||||
end
|
||||
|
||||
--- Get the detected item coordinate.
|
||||
-- In this case, the coordinate is the center of the zone of the area, not the center unit!
|
||||
-- So if units move, the retrieved coordinate can be different from the units positions.
|
||||
-- @param #DETECTION_AREAS self
|
||||
-- @param Index
|
||||
-- @return Core.Point#COORDINATE The coordinate.
|
||||
function DETECTION_AREAS:GetDetectedItemCoordinate( Index )
|
||||
self:F( { Index = Index } )
|
||||
|
||||
local DetectedItem = self:GetDetectedItem( Index )
|
||||
local DetectedItemSet = self:GetDetectedSet( Index )
|
||||
local FirstUnit = DetectedItemSet:GetFirst()
|
||||
|
||||
if DetectedItem then
|
||||
local DetectedZone = self:GetDetectedItemZone( Index )
|
||||
-- TODO: Rework to COORDINATE. Problem with SetAlt.
|
||||
local DetectedItemCoordinate = DetectedZone:GetPointVec2()
|
||||
-- These need to be done to understand the heading and altitude of the first unit in the zone.
|
||||
DetectedItemCoordinate:SetHeading( FirstUnit:GetHeading() )
|
||||
DetectedItemCoordinate:SetAlt( FirstUnit:GetAltitude() )
|
||||
|
||||
return DetectedItemCoordinate
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
--- Menu of a detected item using a given numeric index.
|
||||
-- @param #DETECTION_AREAS self
|
||||
@ -2305,7 +2325,7 @@ do -- DETECTION_AREAS
|
||||
local DetectedItemCoordinate = DetectedZone:GetCoordinate()
|
||||
local DetectedItemCoordText = DetectedItemCoordinate:ToString( AttackGroup, Settings )
|
||||
|
||||
local ThreatLevelA2G = self:GetTreatLevelA2G( DetectedItem )
|
||||
local ThreatLevelA2G = self:GetDetectedItemThreatLevel( Index )
|
||||
local DetectedItemsCount = DetectedSet:Count()
|
||||
local DetectedItemsTypes = DetectedSet:GetTypeNames()
|
||||
|
||||
@ -2332,7 +2352,7 @@ do -- DETECTION_AREAS
|
||||
local DetectedItem = DetectedItem -- #DETECTION_BASE.DetectedItem
|
||||
local ReportSummary = self:DetectedItemReportSummary( DetectedItemIndex, AttackGroup )
|
||||
Report:SetTitle( "Detected areas:" )
|
||||
Report:Add( ReportSummary )
|
||||
Report:Add( ReportSummary:Text() )
|
||||
end
|
||||
|
||||
local ReportText = Report:Text()
|
||||
@ -2341,48 +2361,26 @@ do -- DETECTION_AREAS
|
||||
end
|
||||
|
||||
|
||||
--- Calculate the maxium A2G threat level of the DetectedItem.
|
||||
-- @param #DETECTION_AREAS self
|
||||
-- @param #DETECTION_BASE.DetectedItem DetectedItem
|
||||
function DETECTION_AREAS:CalculateThreatLevelA2G( DetectedItem )
|
||||
|
||||
local MaxThreatLevelA2G = 0
|
||||
for UnitName, UnitData in pairs( DetectedItem.Set:GetSet() ) do
|
||||
local ThreatUnit = UnitData -- Wrapper.Unit#UNIT
|
||||
local ThreatLevelA2G = ThreatUnit:GetThreatLevel()
|
||||
if ThreatLevelA2G > MaxThreatLevelA2G then
|
||||
MaxThreatLevelA2G = ThreatLevelA2G
|
||||
end
|
||||
end
|
||||
|
||||
self:T3( MaxThreatLevelA2G )
|
||||
DetectedItem.MaxThreatLevelA2G = MaxThreatLevelA2G
|
||||
|
||||
end
|
||||
|
||||
--- Calculate the optimal intercept point of the DetectedItem.
|
||||
-- @param #DETECTION_AREAS self
|
||||
-- @param #DETECTION_BASE.DetectedItem DetectedItem
|
||||
function DETECTION_AREAS:CalculateIntercept( DetectedItem )
|
||||
|
||||
local DetectedSpeed = DetectedItem.Coordinate.Speed
|
||||
local DetectedHeading = DetectedItem.Coordinate.Heading
|
||||
local DetectedCoord = DetectedItem.Coordinate
|
||||
|
||||
if self.Intercept then
|
||||
local DetectedSet = DetectedItem.Set
|
||||
local DetectedUnit = DetectedSet:GetFirst() -- Wrapper.Unit#UNIT
|
||||
if DetectedUnit then
|
||||
local UnitSpeed = DetectedUnit:GetVelocityMPS()
|
||||
local UnitHeading = DetectedUnit:GetHeading()
|
||||
local UnitCoord = DetectedUnit:GetCoordinate()
|
||||
|
||||
local TranslateDistance = UnitSpeed * self.InterceptDelay
|
||||
|
||||
local InterceptCoord = UnitCoord:Translate( TranslateDistance, UnitHeading )
|
||||
|
||||
DetectedItem.InterceptCoord = InterceptCoord
|
||||
else
|
||||
DetectedItem.InterceptCoord = nil
|
||||
end
|
||||
-- todo: speed
|
||||
|
||||
local TranslateDistance = DetectedSpeed * self.InterceptDelay
|
||||
|
||||
local InterceptCoord = DetectedCoord:Translate( TranslateDistance, DetectedHeading )
|
||||
|
||||
DetectedItem.InterceptCoord = InterceptCoord
|
||||
else
|
||||
DetectedItem.InterceptCoord = nil
|
||||
DetectedItem.InterceptCoord = DetectedCoord
|
||||
end
|
||||
|
||||
end
|
||||
@ -2415,18 +2413,6 @@ do -- DETECTION_AREAS
|
||||
|
||||
end
|
||||
|
||||
--- Returns the A2G threat level of the units in the DetectedItem
|
||||
-- @param #DETECTION_AREAS self
|
||||
-- @param #DETECTION_BASE.DetectedItem DetectedItem
|
||||
-- @return #number a scale from 0 to 10.
|
||||
function DETECTION_AREAS:GetTreatLevelA2G( DetectedItem )
|
||||
|
||||
self:T3( DetectedItem.MaxThreatLevelA2G )
|
||||
return DetectedItem.MaxThreatLevelA2G
|
||||
end
|
||||
|
||||
|
||||
|
||||
--- Smoke the detected units
|
||||
-- @param #DETECTION_AREAS self
|
||||
-- @return #DETECTION_AREAS self
|
||||
@ -2571,13 +2557,14 @@ do -- DETECTION_AREAS
|
||||
-- First remove the center unit from the set.
|
||||
DetectedSet:RemoveUnitsByName( DetectedItem.Zone.ZoneUNIT.UnitName )
|
||||
|
||||
self:AddChangeItem( DetectedItem, 'RAU', "Dummy" )
|
||||
self:AddChangeItem( DetectedItem, 'RAU', self:GetDetectedUnitTypeName( DetectedItem.Zone.ZoneUNIT ) )
|
||||
|
||||
-- Then search for a new center area unit within the set. Note that the new area unit candidate must be within the area range.
|
||||
for DetectedUnitName, DetectedUnitData in pairs( DetectedSet:GetSet() ) do
|
||||
|
||||
local DetectedUnit = DetectedUnitData -- Wrapper.Unit#UNIT
|
||||
local DetectedObject = self:GetDetectedObject( DetectedUnit.UnitName )
|
||||
local DetectedUnitTypeName = self:GetDetectedUnitTypeName( DetectedUnit )
|
||||
|
||||
-- The DetectedObject can be nil when the DetectedUnit is not alive anymore or it is not in the DetectedObjects map.
|
||||
-- If the DetectedUnit was already identified, DetectedObject will be nil.
|
||||
@ -2590,13 +2577,13 @@ do -- DETECTION_AREAS
|
||||
-- Assign the Unit as the new center unit of the detected area.
|
||||
DetectedItem.Zone = ZONE_UNIT:New( DetectedUnit:GetName(), DetectedUnit, self.DetectionZoneRange )
|
||||
|
||||
self:AddChangeItem( DetectedItem, "AAU", DetectedItem.Zone.ZoneUNIT:GetTypeName() )
|
||||
self:AddChangeItem( DetectedItem, "AAU", DetectedUnitTypeName )
|
||||
|
||||
-- We don't need to add the DetectedObject to the area set, because it is already there ...
|
||||
break
|
||||
else
|
||||
DetectedSet:Remove( DetectedUnitName )
|
||||
self:AddChangeUnit( DetectedItem, "RU", DetectedUnit:GetTypeName() )
|
||||
self:AddChangeUnit( DetectedItem, "RU", DetectedUnitTypeName )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2612,13 +2599,15 @@ do -- DETECTION_AREAS
|
||||
for DetectedUnitName, DetectedUnitData in pairs( DetectedSet:GetSet() ) do
|
||||
|
||||
local DetectedUnit = DetectedUnitData -- Wrapper.Unit#UNIT
|
||||
local DetectedUnitTypeName = self:GetDetectedUnitTypeName( DetectedUnit )
|
||||
|
||||
local DetectedObject = nil
|
||||
if DetectedUnit:IsAlive() then
|
||||
--self:E(DetectedUnit:GetName())
|
||||
DetectedObject = self:GetDetectedObject( DetectedUnit:GetName() )
|
||||
end
|
||||
if DetectedObject then
|
||||
|
||||
|
||||
-- Check if the DetectedUnit is within the DetectedItem.Zone
|
||||
if DetectedUnit:IsInZone( DetectedItem.Zone ) then
|
||||
|
||||
@ -2628,7 +2617,7 @@ do -- DETECTION_AREAS
|
||||
else
|
||||
-- No, the DetectedUnit is not within the DetectedItem.Zone, remove DetectedUnit from the Set.
|
||||
DetectedSet:Remove( DetectedUnitName )
|
||||
self:AddChangeUnit( DetectedItem, "RU", DetectedUnit:GetTypeName() )
|
||||
self:AddChangeUnit( DetectedItem, "RU", DetectedUnitTypeName )
|
||||
end
|
||||
|
||||
else
|
||||
@ -2665,6 +2654,7 @@ do -- DETECTION_AREAS
|
||||
|
||||
-- We found an unidentified unit outside of any existing detection area.
|
||||
local DetectedUnit = UNIT:FindByName( DetectedUnitName ) -- Wrapper.Unit#UNIT
|
||||
local DetectedUnitTypeName = self:GetDetectedUnitTypeName( DetectedUnit )
|
||||
|
||||
local AddedToDetectionArea = false
|
||||
|
||||
@ -2678,7 +2668,7 @@ do -- DETECTION_AREAS
|
||||
self:IdentifyDetectedObject( DetectedObject )
|
||||
DetectedSet:AddUnit( DetectedUnit )
|
||||
AddedToDetectionArea = true
|
||||
self:AddChangeUnit( DetectedItem, "AU", DetectedUnit:GetTypeName() )
|
||||
self:AddChangeUnit( DetectedItem, "AU", DetectedUnitTypeName )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2692,7 +2682,7 @@ do -- DETECTION_AREAS
|
||||
)
|
||||
--self:E( DetectedItem.Zone.ZoneUNIT.UnitName )
|
||||
DetectedItem.Set:AddUnit( DetectedUnit )
|
||||
self:AddChangeItem( DetectedItem, "AA", DetectedUnit:GetTypeName() )
|
||||
self:AddChangeItem( DetectedItem, "AA", DetectedUnitTypeName )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -2704,13 +2694,19 @@ do -- DETECTION_AREAS
|
||||
|
||||
local DetectedItem = DetectedItemData -- #DETECTION_BASE.DetectedItem
|
||||
local DetectedSet = DetectedItem.Set
|
||||
local DetectedFirstUnit = DetectedSet:GetFirst()
|
||||
local DetectedZone = DetectedItem.Zone
|
||||
|
||||
-- Set the last known coordinate to the detection item.
|
||||
local DetectedZoneCoord = DetectedZone:GetCoordinate()
|
||||
self:SetDetectedItemCoordinate( DetectedItem, DetectedZoneCoord, DetectedFirstUnit )
|
||||
|
||||
self:CalculateIntercept( DetectedItem )
|
||||
|
||||
self:ReportFriendliesNearBy( { DetectedItem = DetectedItem, ReportSetGroup = self.DetectionSetGroup } ) -- Fill the Friendlies table
|
||||
self:CalculateThreatLevelA2G( DetectedItem ) -- Calculate A2G threat level
|
||||
self:SetDetectedItemThreatLevel( DetectedItem ) -- Calculate A2G threat level
|
||||
self:NearestFAC( DetectedItem )
|
||||
|
||||
|
||||
if DETECTION_AREAS._SmokeDetectedUnits or self._SmokeDetectedUnits then
|
||||
DetectedZone.ZoneUNIT:SmokeRed()
|
||||
|
||||
@ -1163,7 +1163,7 @@ function ESCORT:_ReportTargetsScheduler()
|
||||
local ClientEscortTargets = EscortGroupData.Detection
|
||||
--local EscortUnit = EscortGroupData:GetUnit( 1 )
|
||||
|
||||
for DetectedItemID, DetectedItem in ipairs( DetectedItems ) do
|
||||
for DetectedItemID, DetectedItem in pairs( DetectedItems ) do
|
||||
self:E( { DetectedItemID, DetectedItem } )
|
||||
-- Remove the sub menus of the Attack menu of the Escort for the EscortGroup.
|
||||
|
||||
@ -1171,10 +1171,13 @@ function ESCORT:_ReportTargetsScheduler()
|
||||
|
||||
if ClientEscortGroupName == EscortGroupName then
|
||||
|
||||
DetectedMsgs[#DetectedMsgs+1] = DetectedItemReportSummary:Text("\n")
|
||||
local DetectedMsg = DetectedItemReportSummary:Text("\n")
|
||||
DetectedMsgs[#DetectedMsgs+1] = DetectedMsg
|
||||
|
||||
self:T( DetectedMsg )
|
||||
|
||||
MENU_CLIENT_COMMAND:New( self.EscortClient,
|
||||
DetectedItemReportSummary,
|
||||
DetectedMsg,
|
||||
self.EscortMenuAttackNearbyTargets,
|
||||
ESCORT._AttackTarget,
|
||||
self,
|
||||
@ -1183,10 +1186,12 @@ function ESCORT:_ReportTargetsScheduler()
|
||||
else
|
||||
if self.EscortMenuTargetAssistance then
|
||||
|
||||
self:T( DetectedItemReportSummary )
|
||||
local DetectedMsg = DetectedItemReportSummary:Text("\n")
|
||||
self:T( DetectedMsg )
|
||||
|
||||
local MenuTargetAssistance = MENU_CLIENT:New( self.EscortClient, EscortGroupData.EscortName, self.EscortMenuTargetAssistance )
|
||||
MENU_CLIENT_COMMAND:New( self.EscortClient,
|
||||
DetectedItemReportSummary,
|
||||
DetectedMsg,
|
||||
MenuTargetAssistance,
|
||||
ESCORT._AssistTarget,
|
||||
self,
|
||||
|
||||
@ -860,8 +860,9 @@ end
|
||||
|
||||
--- Create a summary report of the Mission (one line).
|
||||
-- @param #MISSION self
|
||||
-- @param Wrapper.Group#GROUP ReportGroup
|
||||
-- @return #string
|
||||
function MISSION:ReportSummary()
|
||||
function MISSION:ReportSummary( ReportGroup )
|
||||
|
||||
local Report = REPORT:New()
|
||||
|
||||
@ -874,9 +875,9 @@ function MISSION:ReportSummary()
|
||||
Report:Add( string.format( '%s - %s - Task Overview Report', Name, Status ) )
|
||||
|
||||
-- Determine how many tasks are remaining.
|
||||
for TaskID, Task in pairs( self:GetTasks() ) do
|
||||
for TaskID, Task in UTILS.spairs( self:GetTasks(), function( t, a, b ) return t[a]:ReportOrder( ReportGroup ) < t[b]:ReportOrder( ReportGroup ) end ) do
|
||||
local Task = Task -- Tasking.Task#TASK
|
||||
Report:Add( "- " .. Task:ReportSummary() )
|
||||
Report:Add( "- " .. Task:ReportSummary( ReportGroup ) )
|
||||
end
|
||||
|
||||
return Report:Text()
|
||||
@ -898,13 +899,17 @@ function MISSION:ReportOverview( ReportGroup, TaskStatus )
|
||||
Report:Add( string.format( '%s - %s - %s Tasks Report', Name, Status, TaskStatus ) )
|
||||
|
||||
-- Determine how many tasks are remaining.
|
||||
local TasksRemaining = 0
|
||||
local Tasks = 0
|
||||
for TaskID, Task in UTILS.spairs( self:GetTasks(), function( t, a, b ) return t[a]:ReportOrder( ReportGroup ) < t[b]:ReportOrder( ReportGroup ) end ) do
|
||||
local Task = Task -- Tasking.Task#TASK
|
||||
if Task:Is( TaskStatus ) then
|
||||
Report:Add( string.rep( "-", 140 ) )
|
||||
Report:Add( " - " .. Task:ReportOverview( ReportGroup ) )
|
||||
end
|
||||
Tasks = Tasks + 1
|
||||
if Tasks >= 8 then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
return Report:Text()
|
||||
@ -963,7 +968,7 @@ end
|
||||
-- @param Wrapper.Group#GROUP ReportGroup
|
||||
function MISSION:MenuReportTasksSummary( ReportGroup )
|
||||
|
||||
local Report = self:ReportSummary()
|
||||
local Report = self:ReportSummary( ReportGroup )
|
||||
|
||||
self:GetCommandCenter():MessageToGroup( Report, ReportGroup )
|
||||
end
|
||||
|
||||
@ -1343,7 +1343,7 @@ function TASK:onbeforeTimeOut( From, Event, To )
|
||||
return false
|
||||
end
|
||||
|
||||
do -- Dispatcher
|
||||
do -- Links
|
||||
|
||||
--- Set dispatcher of a task
|
||||
-- @param #TASK self
|
||||
@ -1353,6 +1353,19 @@ do -- Dispatcher
|
||||
self.Dispatcher = Dispatcher
|
||||
end
|
||||
|
||||
--- Set detection of a task
|
||||
-- @param #TASK self
|
||||
-- @param Function.Detection#DETECTION_BASE Detection
|
||||
-- @param #number DetectedItemIndex
|
||||
-- @return #TASK
|
||||
function TASK:SetDetection( Detection, DetectedItemIndex )
|
||||
|
||||
self:E({DetectedItemIndex,Detection})
|
||||
|
||||
self.Detection = Detection
|
||||
self.DetectedItemIndex = DetectedItemIndex
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
do -- Reporting
|
||||
@ -1360,36 +1373,38 @@ do -- Reporting
|
||||
--- Create a summary report of the Task.
|
||||
-- List the Task Name and Status
|
||||
-- @param #TASK self
|
||||
-- @param Wrapper.Group#GROUP ReportGroup
|
||||
-- @return #string
|
||||
function TASK:ReportSummary() --R2.1 fixed report. Now nicely formatted and contains the info required.
|
||||
function TASK:ReportSummary( ReportGroup )
|
||||
|
||||
local Report = REPORT:New()
|
||||
|
||||
-- List the name of the Task.
|
||||
local Name = self:GetName()
|
||||
Report:Add( self:GetName() )
|
||||
|
||||
-- Determine the status of the Task.
|
||||
local Status = "<" .. self:GetState() .. ">"
|
||||
Report:Add( "State: <" .. self:GetState() .. ">" )
|
||||
|
||||
Report:Add( 'Task ' .. Name .. ' - State ' .. Status )
|
||||
|
||||
return Report:Text()
|
||||
if self.TaskInfo["Coordinates"] then
|
||||
local TaskInfoIDText = string.format( "%s: ", "Coordinate" )
|
||||
local TaskCoord = self.TaskInfo["Coordinates"].TaskInfoText -- Core.Point#COORDINATE
|
||||
Report:Add( TaskInfoIDText .. TaskCoord:ToString( ReportGroup, nil, self ) )
|
||||
end
|
||||
|
||||
return Report:Text( ', ' )
|
||||
end
|
||||
|
||||
--- Create an overiew report of the Task.
|
||||
-- List the Task Name and Status
|
||||
-- @param #TASK self
|
||||
-- @return #string
|
||||
function TASK:ReportOverview( ReportGroup ) --R2.1 fixed report. Now nicely formatted and contains the info required.
|
||||
function TASK:ReportOverview( ReportGroup )
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
-- List the name of the Task.
|
||||
local TaskName = self:GetName()
|
||||
local Report = REPORT:New()
|
||||
|
||||
-- Determine the status of the Task.
|
||||
local Status = "<" .. self:GetState() .. ">"
|
||||
|
||||
local Line = 0
|
||||
local LineReport = REPORT:New()
|
||||
@ -1402,7 +1417,7 @@ function TASK:ReportOverview( ReportGroup ) --R2.1 fixed report. Now nicely form
|
||||
if Line ~= 0 then
|
||||
Report:AddIndent( LineReport:Text( ", " ) )
|
||||
else
|
||||
Report:Add( TaskName .. " - " .. LineReport:Text( ", " ) )
|
||||
Report:Add( TaskName .. ", " .. LineReport:Text( ", " ) )
|
||||
end
|
||||
LineReport = REPORT:New()
|
||||
Line = math.floor( TaskInfo.TaskInfoOrder / 10 )
|
||||
@ -1414,7 +1429,6 @@ function TASK:ReportOverview( ReportGroup ) --R2.1 fixed report. Now nicely form
|
||||
LineReport:Add( TaskInfoIDText .. TaskInfo.TaskInfoText )
|
||||
elseif type(TaskInfo) == "table" then
|
||||
if TaskInfoID == "Coordinates" then
|
||||
local FromCoordinate = ReportGroup:GetUnit(1):GetCoordinate()
|
||||
local ToCoordinate = TaskInfo.TaskInfoText -- Core.Point#COORDINATE
|
||||
--Report:Add( TaskInfoIDText )
|
||||
LineReport:Add( TaskInfoIDText .. ToCoordinate:ToString( ReportGroup, nil, self ) )
|
||||
@ -1422,8 +1436,6 @@ function TASK:ReportOverview( ReportGroup ) --R2.1 fixed report. Now nicely form
|
||||
else
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
Report:AddIndent( LineReport:Text( ", " ) )
|
||||
|
||||
@ -328,17 +328,39 @@ do -- TASK_A2A_INTERCEPT
|
||||
"Intercept incoming intruders.\n"
|
||||
)
|
||||
|
||||
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
local DetectedItemsCount = TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
function TASK_A2A_INTERCEPT:UpdateTaskInfo()
|
||||
|
||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 0 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local ReportTypes = REPORT:New()
|
||||
local TargetTypes = {}
|
||||
for TargetUnitName, TargetUnit in pairs( self.TargetSetUnit:GetSet() ) do
|
||||
local TargetType = self.Detection:GetDetectedUnitTypeName( TargetUnit )
|
||||
if not TargetTypes[TargetType] then
|
||||
TargetTypes[TargetType] = TargetType
|
||||
ReportTypes:Add( TargetType )
|
||||
end
|
||||
end
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, ReportTypes:Text( ", " ) ), 10 )
|
||||
else
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
--- @param #TASK_A2A_INTERCEPT self
|
||||
-- @param Wrapper.Group#GROUP ReportGroup
|
||||
function TASK_A2A_INTERCEPT:ReportOrder( ReportGroup )
|
||||
@ -461,17 +483,40 @@ do -- TASK_A2A_SWEEP
|
||||
"Perform a fighter sweep. Incoming intruders were detected and could be hiding at the location.\n"
|
||||
)
|
||||
|
||||
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
|
||||
|
||||
self:SetInfo( "Assumed Threat", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
local DetectedItemsCount = TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Lost Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
function TASK_A2A_SWEEP:UpdateTaskInfo()
|
||||
|
||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 0 )
|
||||
|
||||
self:SetInfo( "Assumed Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local ReportTypes = REPORT:New()
|
||||
local TargetTypes = {}
|
||||
for TargetUnitName, TargetUnit in pairs( self.TargetSetUnit:GetSet() ) do
|
||||
local TargetType = self.Detection:GetDetectedUnitTypeName( TargetUnit )
|
||||
if not TargetTypes[TargetType] then
|
||||
TargetTypes[TargetType] = TargetType
|
||||
ReportTypes:Add( TargetType )
|
||||
end
|
||||
end
|
||||
self:SetInfo( "Lost Targets", string.format( "%d of %s", DetectedItemsCount, ReportTypes:Text( ", " ) ), 10 )
|
||||
else
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Lost Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
function TASK_A2A_SWEEP:ReportOrder( ReportGroup )
|
||||
local Coordinate = self.TaskInfo.Coordinates.TaskInfoText
|
||||
local Distance = ReportGroup:GetCoordinate():Get2DDistance( Coordinate )
|
||||
@ -587,17 +632,39 @@ do -- TASK_A2A_ENGAGE
|
||||
"Bogeys are nearby! Players close by are ordered to ENGAGE the intruders!\n"
|
||||
)
|
||||
|
||||
local TargetCoordinate = TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 10 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
local DetectedItemsCount = TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 0 )
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
function TASK_A2A_ENGAGE:UpdateTaskInfo()
|
||||
|
||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 0 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local ReportTypes = REPORT:New()
|
||||
local TargetTypes = {}
|
||||
for TargetUnitName, TargetUnit in pairs( self.TargetSetUnit:GetSet() ) do
|
||||
local TargetType = self.Detection:GetDetectedUnitTypeName( TargetUnit )
|
||||
if not TargetTypes[TargetType] then
|
||||
TargetTypes[TargetType] = TargetType
|
||||
ReportTypes:Add( TargetType )
|
||||
end
|
||||
end
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, ReportTypes:Text( ", " ) ), 10 )
|
||||
else
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function TASK_A2A_ENGAGE:ReportOrder( ReportGroup )
|
||||
local Coordinate = self.TaskInfo.Coordinates.TaskInfoText
|
||||
local Distance = ReportGroup:GetCoordinate():Get2DDistance( Coordinate )
|
||||
|
||||
@ -382,9 +382,7 @@ do -- TASK_A2A_DISPATCHER
|
||||
end
|
||||
|
||||
if DetectedItemChanged == true or Remove then
|
||||
--self:E( "Removing Tasking: " .. Task:GetTaskName() )
|
||||
Mission:RemoveTask( Task )
|
||||
self.Tasks[DetectedItemIndex] = nil
|
||||
Task = self:RemoveTask( DetectedItemIndex )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -482,6 +480,11 @@ do -- TASK_A2A_DISPATCHER
|
||||
return PlayersCount, PlayerTypesReport
|
||||
end
|
||||
|
||||
function TASK_A2A_DISPATCHER:RemoveTask( TaskIndex )
|
||||
self.Mission:RemoveTask( self.Tasks[TaskIndex] )
|
||||
self.Tasks[TaskIndex] = nil
|
||||
end
|
||||
|
||||
|
||||
--- Assigns tasks in relation to the detected items to the @{Set#SET_GROUP}.
|
||||
-- @param #TASK_A2A_DISPATCHER self
|
||||
@ -510,8 +513,7 @@ do -- TASK_A2A_DISPATCHER
|
||||
for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do
|
||||
Mission:GetCommandCenter():MessageToGroup( string.format( "Obsolete A2A task %s for %s removed.", TaskText, Mission:GetName() ), TaskGroup )
|
||||
end
|
||||
Mission:RemoveTask( Task )
|
||||
self.Tasks[TaskIndex] = nil
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -538,21 +540,24 @@ do -- TASK_A2A_DISPATCHER
|
||||
local TargetSetUnit = self:EvaluateENGAGE( DetectedItem ) -- Returns a SetUnit if there are targets to be INTERCEPTed...
|
||||
if TargetSetUnit then
|
||||
Task = TASK_A2A_ENGAGE:New( Mission, self.SetGroup, string.format( "ENGAGE.%03d", DetectedID ), TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
else
|
||||
local TargetSetUnit = self:EvaluateINTERCEPT( DetectedItem ) -- Returns a SetUnit if there are targets to be INTERCEPTed...
|
||||
if TargetSetUnit then
|
||||
Task = TASK_A2A_INTERCEPT:New( Mission, self.SetGroup, string.format( "INTERCEPT.%03d", DetectedID ), TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
else
|
||||
local TargetSetUnit = self:EvaluateSWEEP( DetectedItem ) -- Returns a SetUnit
|
||||
if TargetSetUnit then
|
||||
Task = TASK_A2A_SWEEP:New( Mission, self.SetGroup, string.format( "SWEEP.%03d", DetectedID ), TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if Task then
|
||||
self.Tasks[TaskIndex] = Task
|
||||
Task:SetTargetZone( DetectedZone, DetectedSet:GetFirst():GetAltitude(), DetectedSet:GetFirst():GetHeading() )
|
||||
Task:SetTargetZone( DetectedZone, DetectedItem.Coordinate.y, DetectedItem.Coordinate.Heading )
|
||||
Task:SetDispatcher( self )
|
||||
Mission:AddTask( Task )
|
||||
|
||||
|
||||
@ -317,7 +317,7 @@ do -- TASK_A2G_SEAD
|
||||
-- @param Core.Set#SET_UNIT TargetSetUnit
|
||||
-- @param #string TaskBriefing The briefing of the task.
|
||||
-- @return #TASK_A2G_SEAD self
|
||||
function TASK_A2G_SEAD:New( Mission, SetGroup, TaskName, TargetSetUnit, TaskBriefing )
|
||||
function TASK_A2G_SEAD:New( Mission, SetGroup, TaskName, TargetSetUnit, TaskBriefing)
|
||||
local self = BASE:Inherit( self, TASK_A2G:New( Mission, SetGroup, TaskName, TargetSetUnit, "SEAD", TaskBriefing ) ) -- #TASK_A2G_SEAD
|
||||
self:F()
|
||||
|
||||
@ -335,13 +335,29 @@ do -- TASK_A2G_SEAD
|
||||
|
||||
function TASK_A2G_SEAD:UpdateTaskInfo()
|
||||
|
||||
local TargetCoordinate = self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
|
||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 0 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local ReportTypes = REPORT:New()
|
||||
local TargetTypes = {}
|
||||
for TargetUnitName, TargetUnit in pairs( self.TargetSetUnit:GetSet() ) do
|
||||
local TargetType = self.Detection:GetDetectedUnitTypeName( TargetUnit )
|
||||
if not TargetTypes[TargetType] then
|
||||
TargetTypes[TargetType] = TargetType
|
||||
ReportTypes:Add( TargetType )
|
||||
end
|
||||
end
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, ReportTypes:Text( ", " ) ), 10 )
|
||||
else
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -462,13 +478,30 @@ do -- TASK_A2G_BAI
|
||||
|
||||
function TASK_A2G_BAI:UpdateTaskInfo()
|
||||
|
||||
local TargetCoordinate = self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:E({self.Detection, self.DetectedItemIndex})
|
||||
|
||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 0 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local ReportTypes = REPORT:New()
|
||||
local TargetTypes = {}
|
||||
for TargetUnitName, TargetUnit in pairs( self.TargetSetUnit:GetSet() ) do
|
||||
local TargetType = self.Detection:GetDetectedUnitTypeName( TargetUnit )
|
||||
if not TargetTypes[TargetType] then
|
||||
TargetTypes[TargetType] = TargetType
|
||||
ReportTypes:Add( TargetType )
|
||||
end
|
||||
end
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, ReportTypes:Text( ", " ) ), 10 )
|
||||
else
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -590,13 +623,28 @@ do -- TASK_A2G_CAS
|
||||
|
||||
function TASK_A2G_CAS:UpdateTaskInfo()
|
||||
|
||||
local TargetCoordinate = self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or self.TargetSetUnit:GetFirst():GetCoordinate()
|
||||
self:SetInfo( "Coordinates", TargetCoordinate, 0 )
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local ReportTypes = REPORT:New()
|
||||
local TargetTypes = {}
|
||||
for TargetUnitName, TargetUnit in pairs( self.TargetSetUnit:GetSet() ) do
|
||||
local TargetType = self.Detection:GetDetectedUnitTypeName( TargetUnit )
|
||||
if not TargetTypes[TargetType] then
|
||||
TargetTypes[TargetType] = TargetType
|
||||
ReportTypes:Add( TargetType )
|
||||
end
|
||||
end
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, ReportTypes:Text( ", " ) ), 10 )
|
||||
else
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
local DetectedItemsTypes = self.TargetSetUnit:GetTypeNames()
|
||||
self:SetInfo( "Targets", string.format( "%d of %s", DetectedItemsCount, DetectedItemsTypes ), 10 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -121,8 +121,9 @@ do -- TASK_A2G_DISPATCHER
|
||||
-- Determine if the set has radar targets. If it does, construct a SEAD task.
|
||||
local GroundUnitCount = DetectedSet:HasGroundUnits()
|
||||
local FriendliesNearBy = self.Detection:IsFriendliesNearBy( DetectedItem )
|
||||
local RadarCount = DetectedSet:HasSEAD()
|
||||
|
||||
if GroundUnitCount > 0 and FriendliesNearBy == true then
|
||||
if RadarCount == 0 and GroundUnitCount > 0 and FriendliesNearBy == true then
|
||||
|
||||
-- Copy the Set
|
||||
local TargetSetUnit = SET_UNIT:New()
|
||||
@ -150,8 +151,9 @@ do -- TASK_A2G_DISPATCHER
|
||||
-- Determine if the set has radar targets. If it does, construct a SEAD task.
|
||||
local GroundUnitCount = DetectedSet:HasGroundUnits()
|
||||
local FriendliesNearBy = self.Detection:IsFriendliesNearBy( DetectedItem )
|
||||
local RadarCount = DetectedSet:HasSEAD()
|
||||
|
||||
if GroundUnitCount > 0 and FriendliesNearBy == false then
|
||||
if RadarCount == 0 and GroundUnitCount > 0 and FriendliesNearBy == false then
|
||||
|
||||
-- Copy the Set
|
||||
local TargetSetUnit = SET_UNIT:New()
|
||||
@ -164,6 +166,12 @@ do -- TASK_A2G_DISPATCHER
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
function TASK_A2G_DISPATCHER:RemoveTask( TaskIndex )
|
||||
self.Mission:RemoveTask( self.Tasks[TaskIndex] )
|
||||
self.Tasks[TaskIndex] = nil
|
||||
end
|
||||
|
||||
--- Evaluates the removal of the Task from the Mission.
|
||||
-- Can only occur when the DetectedItem is Changed AND the state of the Task is "Planned".
|
||||
-- @param #TASK_A2G_DISPATCHER self
|
||||
@ -177,8 +185,7 @@ do -- TASK_A2G_DISPATCHER
|
||||
if Task then
|
||||
if ( Task:IsStatePlanned() and DetectedItemChanged == true ) or Task:IsStateCancelled() then
|
||||
--self:E( "Removing Tasking: " .. Task:GetTaskName() )
|
||||
Mission:RemoveTask( Task )
|
||||
self.Tasks[TaskIndex] = nil
|
||||
self:RemoveTask( TaskIndex )
|
||||
end
|
||||
end
|
||||
|
||||
@ -213,6 +220,7 @@ do -- TASK_A2G_DISPATCHER
|
||||
for TaskGroupID, TaskGroup in pairs( self.SetGroup:GetSet() ) do
|
||||
Mission:GetCommandCenter():MessageToGroup( string.format( "Obsolete A2G task %s for %s removed.", TaskText, Mission:GetName() ), TaskGroup )
|
||||
end
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
Mission:RemoveTask( Task )
|
||||
self.Tasks[TaskIndex] = nil
|
||||
end
|
||||
@ -232,10 +240,11 @@ do -- TASK_A2G_DISPATCHER
|
||||
local TaskIndex = DetectedItem.Index
|
||||
local DetectedItemChanged = DetectedItem.Changed
|
||||
|
||||
self:E( { DetectedItemChanged = DetectedItemChanged, DetectedItemID = DetectedItemID, TaskIndex = TaskIndex } )
|
||||
|
||||
local Task = self.Tasks[TaskIndex] -- Tasking.Task_A2G#TASK_A2G
|
||||
|
||||
if Task then
|
||||
|
||||
-- If there is a Task and the task was assigned, then we check if the task was changed ... If it was, we need to reevaluate the targets.
|
||||
if Task:IsStateAssigned() then
|
||||
if DetectedItemChanged == true then -- The detection has changed, thus a new TargetSet is to be evaluated and set
|
||||
@ -254,24 +263,24 @@ do -- TASK_A2G_DISPATCHER
|
||||
if TargetSetUnit then
|
||||
if Task:IsInstanceOf( TASK_A2G_CAS ) then
|
||||
Task:SetTargetSetUnit( TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
Task:UpdateTaskInfo()
|
||||
TargetsReport:Add( Detection:GetChangeText( DetectedItem ) )
|
||||
else
|
||||
Task:Cancel()
|
||||
Task = nil
|
||||
self.Tasks[TaskIndex] = nil
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
else
|
||||
local TargetSetUnit = self:EvaluateBAI( DetectedItem ) -- Returns a SetUnit if there are targets to be BAIed...
|
||||
if TargetSetUnit then
|
||||
if Task:IsInstanceOf( TASK_A2G_BAI ) then
|
||||
Task:SetTargetSetUnit( TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
Task:UpdateTaskInfo()
|
||||
TargetsReport:Add( Detection:GetChangeText( DetectedItem ) )
|
||||
else
|
||||
Task:Cancel()
|
||||
Task = nil
|
||||
self.Tasks[TaskIndex] = nil
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -288,14 +297,56 @@ do -- TASK_A2G_DISPATCHER
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Task = self:EvaluateRemoveTask( Mission, Task, TaskIndex, DetectedItemChanged ) -- Task will be removed if it is planned and changed.
|
||||
if Task then
|
||||
if Task:IsStatePlanned() then
|
||||
if DetectedItemChanged == true then -- The detection has changed, thus a new TargetSet is to be evaluated and set
|
||||
if Task:IsInstanceOf( TASK_A2G_SEAD ) then
|
||||
local TargetSetUnit = self:EvaluateSEAD( DetectedItem ) -- Returns a SetUnit if there are targets to be SEADed...
|
||||
if TargetSetUnit then
|
||||
Task:SetTargetSetUnit( TargetSetUnit )
|
||||
Task:UpdateTaskInfo()
|
||||
else
|
||||
Task:Cancel()
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
else
|
||||
if Task:IsInstanceOf( TASK_A2G_CAS ) then
|
||||
local TargetSetUnit = self:EvaluateCAS( DetectedItem ) -- Returns a SetUnit if there are targets to be CASed...
|
||||
if TargetSetUnit then
|
||||
Task:SetTargetSetUnit( TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
Task:UpdateTaskInfo()
|
||||
else
|
||||
Task:Cancel()
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
else
|
||||
if Task:IsInstanceOf( TASK_A2G_BAI ) then
|
||||
local TargetSetUnit = self:EvaluateBAI( DetectedItem ) -- Returns a SetUnit if there are targets to be BAIed...
|
||||
if TargetSetUnit then
|
||||
Task:SetTargetSetUnit( TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
Task:UpdateTaskInfo()
|
||||
else
|
||||
Task:Cancel()
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
else
|
||||
Task:Cancel()
|
||||
Task = self:RemoveTask( TaskIndex )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Evaluate SEAD
|
||||
if not Task then
|
||||
local TargetSetUnit = self:EvaluateSEAD( DetectedItem ) -- Returns a SetUnit if there are targets to be SEADed...
|
||||
if TargetSetUnit then
|
||||
Task = TASK_A2G_SEAD:New( Mission, self.SetGroup, string.format( "SEAD.%03d", DetectedItemID ), TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
end
|
||||
|
||||
-- Evaluate CAS
|
||||
@ -303,6 +354,7 @@ do -- TASK_A2G_DISPATCHER
|
||||
local TargetSetUnit = self:EvaluateCAS( DetectedItem ) -- Returns a SetUnit if there are targets to be CASed...
|
||||
if TargetSetUnit then
|
||||
Task = TASK_A2G_CAS:New( Mission, self.SetGroup, string.format( "CAS.%03d", DetectedItemID ), TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
end
|
||||
|
||||
-- Evaluate BAI
|
||||
@ -310,6 +362,7 @@ do -- TASK_A2G_DISPATCHER
|
||||
local TargetSetUnit = self:EvaluateBAI( DetectedItem, self.Mission:GetCommandCenter():GetPositionable():GetCoalition() ) -- Returns a SetUnit if there are targets to be BAIed...
|
||||
if TargetSetUnit then
|
||||
Task = TASK_A2G_BAI:New( Mission, self.SetGroup, string.format( "BAI.%03d", DetectedItemID ), TargetSetUnit )
|
||||
Task:SetDetection( Detection, TaskIndex )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -379,7 +379,7 @@ function CONTROLLABLE:SetTask( DCSTask, WaitTime )
|
||||
end
|
||||
|
||||
if not WaitTime or WaitTime == 0 then
|
||||
self:SetTask( DCSTask )
|
||||
SetTask( DCSTask )
|
||||
else
|
||||
self.TaskScheduler:Schedule( self, SetTask, { DCSTask }, WaitTime )
|
||||
end
|
||||
|
||||
@ -83,15 +83,8 @@ end
|
||||
function IDENTIFIABLE:GetName()
|
||||
self:F2( self.IdentifiableName )
|
||||
|
||||
local DCSIdentifiable = self:GetDCSObject()
|
||||
|
||||
if DCSIdentifiable then
|
||||
local IdentifiableName = self.IdentifiableName
|
||||
return IdentifiableName
|
||||
end
|
||||
|
||||
self:E( self.ClassName .. " " .. self.IdentifiableName .. " not found!" )
|
||||
return nil
|
||||
local IdentifiableName = self.IdentifiableName
|
||||
return IdentifiableName
|
||||
end
|
||||
|
||||
|
||||
|
||||
@ -713,7 +713,7 @@ Per one, two, three, four?</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER).SetDefenderTask">AI_A2A_DISPATCHER:SetDefenderTask(Defender, Type, Fsm, Target)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(AI_A2A_DISPATCHER).SetDefenderTask">AI_A2A_DISPATCHER:SetDefenderTask(SquadronName, Defender, Type, Fsm, Target)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -3895,7 +3895,7 @@ A string defining the group name of the Tanker as defined within the Mission Edi
|
||||
<dt>
|
||||
|
||||
<a id="#(AI_A2A_DISPATCHER).SetDefenderTask" >
|
||||
<strong>AI_A2A_DISPATCHER:SetDefenderTask(Defender, Type, Fsm, Target)</strong>
|
||||
<strong>AI_A2A_DISPATCHER:SetDefenderTask(SquadronName, Defender, Type, Fsm, Target)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -3906,6 +3906,11 @@ A string defining the group name of the Tanker as defined within the Mission Edi
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> SquadronName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> Defender </em></code>: </p>
|
||||
|
||||
</li>
|
||||
|
||||
@ -926,9 +926,6 @@ 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>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -164,6 +164,12 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<h2><a id="#(DESIGNATE)">Type <code>DESIGNATE</code></a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).AddMenuLaserCode">DESIGNATE:AddMenuLaserCode(LaserCode, MenuText)</a></td>
|
||||
<td class="summary">
|
||||
<p>Add a specific lase code to the designate lase menu to lase targets with a specific laser code.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).AttackSet">DESIGNATE.AttackSet</a></td>
|
||||
<td class="summary">
|
||||
|
||||
@ -185,6 +191,12 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).CoordinateLase">DESIGNATE:CoordinateLase()</a></td>
|
||||
<td class="summary">
|
||||
<p>Coordinates the Auto Lase.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).DesignateName">DESIGNATE.DesignateName</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -257,12 +269,42 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).LaserCodesUsed">DESIGNATE.LaserCodesUsed</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MarkScheduler">DESIGNATE.MarkScheduler</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MaximumDesignations">DESIGNATE.MaximumDesignations</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MaximumDistanceAirDesignation">DESIGNATE.MaximumDistanceAirDesignation</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MaximumDistanceDesignations">DESIGNATE.MaximumDistanceDesignations</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MaximumDistanceGroundDesignation">DESIGNATE.MaximumDistanceGroundDesignation</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MaximumMarkings">DESIGNATE.MaximumMarkings</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -293,6 +335,12 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MenuIlluminate">DESIGNATE:MenuIlluminate(Index)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MenuLaseCode">DESIGNATE:MenuLaseCode(Index, Duration, LaserCode)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -305,6 +353,12 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MenuLaseOn">DESIGNATE:MenuLaseOn(Index, Duration)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).MenuLaserCodes">DESIGNATE.MenuLaserCodes</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -413,6 +467,12 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).Recces">DESIGNATE.Recces</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).RemoveMenuLaserCode">DESIGNATE:RemoveMenuLaserCode(LaserCode)</a></td>
|
||||
<td class="summary">
|
||||
<p>Removes a specific lase code from the designate lase menu.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -422,7 +482,7 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetAutoLase">DESIGNATE:SetAutoLase(AutoLase)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetAutoLase">DESIGNATE:SetAutoLase(AutoLase, Message)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set auto lase.</p>
|
||||
</td>
|
||||
@ -431,6 +491,12 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetDesignateMenu">DESIGNATE:SetDesignateMenu()</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets the Designate Menu.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetDesignateName">DESIGNATE:SetDesignateName(DesignateName)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the name of the designation.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -449,6 +515,30 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetMaximumDesignations">DESIGNATE:SetMaximumDesignations(MaximumDesignations)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the maximum amount of designations.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetMaximumDistanceAirDesignation">DESIGNATE:SetMaximumDistanceAirDesignation(MaximumDistanceAirDesignation)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the maximum air designation distance.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetMaximumDistanceDesignations">DESIGNATE:SetMaximumDistanceDesignations(MaximumDistanceDesignations)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the overall maximum distance when designations can be accepted.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetMaximumDistanceGroundDesignation">DESIGNATE:SetMaximumDistanceGroundDesignation(MaximumDistanceGroundDesignation)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the maximum ground designation distance.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).SetMaximumMarkings">DESIGNATE:SetMaximumMarkings(MaximumMarkings)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the maximum amount of markings FACs will do, per designated target group.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -542,13 +632,13 @@ each detected set of potential targets can be lased or smoked...</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).onafterLaseOn">DESIGNATE:onafterLaseOn(From, Event, To, Index, Duration)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).onafterLaseOn">DESIGNATE:onafterLaseOn(From, Event, To, Index, Duration, LaserCode)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).onafterLasing">DESIGNATE:onafterLasing(From, Event, To, Index, Duration)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DESIGNATE).onafterLasing">DESIGNATE:onafterLasing(From, Event, To, Index, Duration, LaserCodeRequested)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -685,7 +775,7 @@ Using the menu system, the player can "forget" a designation, so that gradually
|
||||
|
||||
<h2>4. Laser codes</h2>
|
||||
|
||||
<h3>4.1 Set possible laser codes</h3>
|
||||
<h3>4.1. Set possible laser codes</h3>
|
||||
|
||||
<p>An array of laser codes can be provided, that will be used by the DESIGNATE when lasing.
|
||||
The laser code is communicated by the Recce when it is lasing a larget.
|
||||
@ -705,10 +795,19 @@ One laser code can be given or an sequence of laser codes through an table...</p
|
||||
|
||||
<p>The above sets a collection of possible laser codes that can be assigned. <strong>Note the { } notation!</strong></p>
|
||||
|
||||
<h3>4.2 Auto generate laser codes</h3>
|
||||
<h3>4.2. Auto generate laser codes</h3>
|
||||
|
||||
<p>Use the method <a href="##(DESIGNATE).GenerateLaserCodes">DESIGNATE.GenerateLaserCodes</a>() to generate all possible laser codes. Logic implemented and advised by Ciribob!</p>
|
||||
|
||||
<h3>4.3. Add specific lase codes to the lase menu</h3>
|
||||
|
||||
<p>Certain plane types can only drop laser guided ordonnance when targets are lased with specific laser codes.
|
||||
The SU-25T needs targets to be lased using laser code 1113.
|
||||
The A-10A needs targets to be lased using laser code 1680.</p>
|
||||
|
||||
<p>The method <a href="##(DESIGNATE).AddMenuLaserCode">DESIGNATE.AddMenuLaserCode</a>() to allow a player to lase a target using a specific laser code.
|
||||
Remove such a lase menu option using <a href="##(DESIGNATE).RemoveMenuLaserCode">DESIGNATE.RemoveMenuLaserCode</a>().</p>
|
||||
|
||||
<h2>5. Autolase to automatically lase detected targets.</h2>
|
||||
|
||||
<p>DetectionItems can be auto lased once detected by Recces. As such, there is almost no action required from the Players using the Designate Menu.
|
||||
@ -766,6 +865,47 @@ Use the method <a href="##(DESIGNATE).SetMission">DESIGNATE.SetMission</a>() to
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).AddMenuLaserCode" >
|
||||
<strong>DESIGNATE:AddMenuLaserCode(LaserCode, MenuText)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Add a specific lase code to the designate lase menu to lase targets with a specific laser code.</p>
|
||||
|
||||
|
||||
<p>The MenuText will appear in the lase menu.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number LaserCode </em></code>:
|
||||
The specific laser code to be added to the lase menu.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#string MenuText </em></code>:
|
||||
The text to be shown to the player. If you specify a %d in the MenuText, the %d will be replaced with the LaserCode specified.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
<h3>Usage:</h3>
|
||||
<pre class="example"><code> RecceDesignation:AddMenuLaserCode( 1113, "Lase with %d for Su-25T" )
|
||||
RecceDesignation:AddMenuLaserCode( 1680, "Lase with %d for A-10A" )
|
||||
</code></pre>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).AttackSet" >
|
||||
<strong>DESIGNATE.AttackSet</strong>
|
||||
@ -780,7 +920,6 @@ Use the method <a href="##(DESIGNATE).SetMission">DESIGNATE.SetMission</a>() to
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).AutoLase" >
|
||||
<strong>DESIGNATE.AutoLase</strong>
|
||||
</a>
|
||||
@ -821,6 +960,19 @@ Use the method <a href="##(DESIGNATE).SetMission">DESIGNATE.SetMission</a>() to
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).DesignateName" >
|
||||
<strong>DESIGNATE.DesignateName</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1000,6 +1152,20 @@ function below will use the range 1-7 just in case</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).MarkScheduler" >
|
||||
<strong>DESIGNATE.MarkScheduler</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1014,6 +1180,62 @@ function below will use the range 1-7 just in case</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).MaximumDistanceAirDesignation" >
|
||||
<strong>DESIGNATE.MaximumDistanceAirDesignation</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).MaximumDistanceDesignations" >
|
||||
<strong>DESIGNATE.MaximumDistanceDesignations</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).MaximumDistanceGroundDesignation" >
|
||||
<strong>DESIGNATE.MaximumDistanceGroundDesignation</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).MaximumMarkings" >
|
||||
<strong>DESIGNATE.MaximumMarkings</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1121,6 +1343,37 @@ function below will use the range 1-7 just in case</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).MenuLaseCode" >
|
||||
<strong>DESIGNATE:MenuLaseCode(Index, Duration, LaserCode)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Index </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> Duration </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> LaserCode </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).MenuLaseOff" >
|
||||
<strong>DESIGNATE:MenuLaseOff(Index, Duration)</strong>
|
||||
</a>
|
||||
@ -1168,6 +1421,23 @@ function below will use the range 1-7 just in case</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DESIGNATE).MenuLaserCodes" >
|
||||
<strong>DESIGNATE.MenuLaserCodes</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
|
||||
<p> This map contains the laser codes that will be shown in the designate menu to lase with specific laser codes.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1710,6 +1980,37 @@ The Attack collection of GROUP objects to designate and report for.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).RemoveMenuLaserCode" >
|
||||
<strong>DESIGNATE:RemoveMenuLaserCode(LaserCode)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Removes a specific lase code from the designate lase menu.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number LaserCode </em></code>:
|
||||
The specific laser code that was set to be added to the lase menu.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
<h3>Usage:</h3>
|
||||
<pre class="example"><code> RecceDesignation:RemoveMenuLaserCode( 1113 )
|
||||
</code></pre>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1753,7 +2054,7 @@ The time in seconds the report should be visible.</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).SetAutoLase" >
|
||||
<strong>DESIGNATE:SetAutoLase(AutoLase)</strong>
|
||||
<strong>DESIGNATE:SetAutoLase(AutoLase, Message)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1763,11 +2064,18 @@ The time in seconds the report should be visible.</p>
|
||||
|
||||
<p>Auto lase will start lasing targets immediately when these are in range.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#boolean AutoLase </em></code>: </p>
|
||||
<p><code><em>#boolean AutoLase </em></code>:
|
||||
(optional) true sets autolase on, false off. Default is off.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#boolean Message </em></code>:
|
||||
(optional) true is send message, false or nil won't send a message. Default is no message sent.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
@ -1794,6 +2102,36 @@ The time in seconds the report should be visible.</p>
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).SetDesignateName" >
|
||||
<strong>DESIGNATE:SetDesignateName(DesignateName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the name of the designation.</p>
|
||||
|
||||
|
||||
<p>The name will appear in the menu.
|
||||
This method can be used to control different designations for different plane types.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#string DesignateName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1882,6 +2220,114 @@ number> LaserCodes</p>
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).SetMaximumDistanceAirDesignation" >
|
||||
<strong>DESIGNATE:SetMaximumDistanceAirDesignation(MaximumDistanceAirDesignation)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the maximum air designation distance.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number MaximumDistanceAirDesignation </em></code>:
|
||||
Maximum air designation distance in meters.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).SetMaximumDistanceDesignations" >
|
||||
<strong>DESIGNATE:SetMaximumDistanceDesignations(MaximumDistanceDesignations)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the overall maximum distance when designations can be accepted.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number MaximumDistanceDesignations </em></code>:
|
||||
Maximum distance in meters to accept designations.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).SetMaximumDistanceGroundDesignation" >
|
||||
<strong>DESIGNATE:SetMaximumDistanceGroundDesignation(MaximumDistanceGroundDesignation)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the maximum ground designation distance.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number MaximumDistanceGroundDesignation </em></code>:
|
||||
Maximum ground designation distance in meters.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).SetMaximumMarkings" >
|
||||
<strong>DESIGNATE:SetMaximumMarkings(MaximumMarkings)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the maximum amount of markings FACs will do, per designated target group.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number MaximumMarkings </em></code>:
|
||||
Maximum markings FACs will do, per designated target group.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DESIGNATE)">#DESIGNATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -2251,7 +2697,7 @@ The MISSION object.</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).onafterLaseOn" >
|
||||
<strong>DESIGNATE:onafterLaseOn(From, Event, To, Index, Duration)</strong>
|
||||
<strong>DESIGNATE:onafterLaseOn(From, Event, To, Index, Duration, LaserCode)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -2284,6 +2730,11 @@ The MISSION object.</p>
|
||||
|
||||
<p><code><em> Duration </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> LaserCode </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
@ -2292,7 +2743,7 @@ The MISSION object.</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(DESIGNATE).onafterLasing" >
|
||||
<strong>DESIGNATE:onafterLasing(From, Event, To, Index, Duration)</strong>
|
||||
<strong>DESIGNATE:onafterLasing(From, Event, To, Index, Duration, LaserCodeRequested)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -2325,6 +2776,11 @@ The MISSION object.</p>
|
||||
|
||||
<p><code><em> Duration </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> LaserCodeRequested </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
@ -190,12 +190,6 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).CalculateIntercept">DETECTION_AREAS:CalculateIntercept(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Calculate the optimal intercept point of the DetectedItem.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).CalculateThreatLevelA2G">DETECTION_AREAS:CalculateThreatLevelA2G(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Calculate the maxium A2G threat level of the DetectedItem.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -262,18 +256,6 @@ DETECTION uses the in-built detection capabilities of DCS World, but adds new fu
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).GetChangeText">DETECTION_AREAS:GetChangeText(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Make text documenting the changes of the detected zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).GetDetectedItemCoordinate">DETECTION_AREAS:GetDetectedItemCoordinate(Index)</a></td>
|
||||
<td class="summary">
|
||||
<p>Get the detected item coordinate.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_AREAS).GetTreatLevelA2G">DETECTION_AREAS:GetTreatLevelA2G(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns the A2G threat level of the units in the DetectedItem</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -583,6 +565,12 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedItemID">DETECTION_BASE:GetDetectedItemID(Index)</a></td>
|
||||
<td class="summary">
|
||||
<p>Get a detected ItemID using a given numeric index.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedItemThreatLevel">DETECTION_BASE:GetDetectedItemThreatLevel(Index)</a></td>
|
||||
<td class="summary">
|
||||
<p>Get the detected item coordinate.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -613,6 +601,12 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedSet">DETECTION_BASE:GetDetectedSet(Index)</a></td>
|
||||
<td class="summary">
|
||||
<p>Get the <a href="Set.html##(SET_UNIT)">Set#SET_UNIT</a> of a detecttion area using a given numeric index.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetDetectedUnitTypeName">DETECTION_BASE:GetDetectedUnitTypeName(DetectedUnit)</a></td>
|
||||
<td class="summary">
|
||||
<p>Gets a detected unit type name, taking into account the detection results.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -643,12 +637,6 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).GetPlayersNearBy">DETECTION_BASE:GetPlayersNearBy(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns friendly units nearby the FAC units ...</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).HasDetectedItemLOS">DETECTION_BASE:HasDetectedItemLOS(Index)</a></td>
|
||||
<td class="summary">
|
||||
<p>Has the detected item LOS (Line Of Sight) with one of the Recce?</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -865,6 +853,18 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).SetAlphaAngleProbability">DETECTION_BASE:SetAlphaAngleProbability(AlphaAngleProbability)</a></td>
|
||||
<td class="summary">
|
||||
<p>Upon a <strong>visual</strong> detection, the higher the unit is during the detecting process, the more likely the detected unit is to be detected properly.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).SetDetectedItemCoordinate">DETECTION_BASE:SetDetectedItemCoordinate(The, Coordinate, DetectedItemUnit, DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the detected item coordinate.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE).SetDetectedItemThreatLevel">DETECTION_BASE:SetDetectedItemThreatLevel(The, DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set the detected item threatlevel.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -995,6 +995,18 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).Changes">DETECTION_BASE.DetectedItem.Changes</a></td>
|
||||
<td class="summary">
|
||||
<p>A list of the changes reported on the detected area. (It is up to the user of the detected area to consume those changes).</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).Coordinate">DETECTION_BASE.DetectedItem.Coordinate</a></td>
|
||||
<td class="summary">
|
||||
<p>The last known coordinate of the DetectedItem.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).DistanceRecce">DETECTION_BASE.DetectedItem.DistanceRecce</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1013,12 +1025,6 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).InterceptCoord">DETECTION_BASE.DetectedItem.InterceptCoord</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).MaxThreatLevelA2G">DETECTION_BASE.DetectedItem.MaxThreatLevelA2G</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1031,6 +1037,12 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).Set">DETECTION_BASE.DetectedItem.Set</a></td>
|
||||
<td class="summary">
|
||||
<p>-- The Set of Units in the detected area.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_BASE.DetectedItem).ThreatLevel">DETECTION_BASE.DetectedItem.ThreatLevel</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1147,12 +1159,6 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_TYPES).GetChangeText">DETECTION_TYPES:GetChangeText(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Make text documenting the changes of the detected zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_TYPES).GetDetectedItemCoordinate">DETECTION_TYPES:GetDetectedItemCoordinate(DetectedTypeName)</a></td>
|
||||
<td class="summary">
|
||||
<p>Get the detected item coordinate.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1235,12 +1241,6 @@ The different values of Unit.Category can be:</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_UNITS).GetChangeText">DETECTION_UNITS:GetChangeText(DetectedItem)</a></td>
|
||||
<td class="summary">
|
||||
<p>Make text documenting the changes of the detected zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(DETECTION_UNITS).GetDetectedItemCoordinate">DETECTION_UNITS:GetDetectedItemCoordinate(Index)</a></td>
|
||||
<td class="summary">
|
||||
<p>Get the detected item coordinate.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1571,8 +1571,6 @@ a DetectedItem. The default range is 6000 meters. For air detections, it is advi
|
||||
</dl>
|
||||
<h2><a id="#(Detection)" >Type <code>Detection</code></a></h2>
|
||||
|
||||
<h2><a id="#(Core.Point)" >Type <code>Core.Point</code></a></h2>
|
||||
|
||||
<h2><a id="#(DETECTION_AREAS)" >Type <code>DETECTION_AREAS</code></a></h2>
|
||||
|
||||
<p> # 4) DETECTION_AREAS class, extends <a href="Detection.html##(DETECTION_BASE)">Detection#DETECTION_BASE</a></p>
|
||||
@ -1646,27 +1644,6 @@ self</p>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(DETECTION_BASE.DetectedItem)">#DETECTION_BASE.DetectedItem</a> DetectedItem </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_AREAS).CalculateThreatLevelA2G" >
|
||||
<strong>DETECTION_AREAS:CalculateThreatLevelA2G(DetectedItem)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Calculate the maxium A2G threat level of the DetectedItem.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(DETECTION_BASE.DetectedItem)">#DETECTION_BASE.DetectedItem</a> DetectedItem </em></code>: </p>
|
||||
|
||||
</li>
|
||||
@ -1911,62 +1888,6 @@ The Changes text</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_AREAS).GetDetectedItemCoordinate" >
|
||||
<strong>DETECTION_AREAS:GetDetectedItemCoordinate(Index)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Get the detected item coordinate.</p>
|
||||
|
||||
|
||||
<p>In this case, the coordinate is the center of the zone of the area, not the center unit!
|
||||
So if units move, the retrieved coordinate can be different from the units positions.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Index </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em>
|
||||
The coordinate.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_AREAS).GetTreatLevelA2G" >
|
||||
<strong>DETECTION_AREAS:GetTreatLevelA2G(DetectedItem)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns the A2G threat level of the units in the DetectedItem</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(DETECTION_BASE.DetectedItem)">#DETECTION_BASE.DetectedItem</a> DetectedItem </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#number:</em>
|
||||
a scale from 0 to 10. </p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_AREAS).NearestFAC" >
|
||||
<strong>DETECTION_AREAS:NearestFAC(DetectedItem)</strong>
|
||||
</a>
|
||||
@ -2943,7 +2864,7 @@ DetectedItemID</p>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Index </em></code>: </p>
|
||||
<p><code><em>#number Index </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
@ -2983,6 +2904,32 @@ DetectedItemID</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).GetDetectedItemThreatLevel" >
|
||||
<strong>DETECTION_BASE:GetDetectedItemThreatLevel(Index)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Get the detected item coordinate.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number Index </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#number:</em>
|
||||
ThreatLevel</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).GetDetectedItemZone" >
|
||||
<strong>DETECTION_BASE:GetDetectedItemZone(Index)</strong>
|
||||
</a>
|
||||
@ -3097,6 +3044,32 @@ DetectedSet</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).GetDetectedUnitTypeName" >
|
||||
<strong>DETECTION_BASE:GetDetectedUnitTypeName(DetectedUnit)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Gets a detected unit type name, taking into account the detection results.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Wrapper.Unit.html##(UNIT)">Wrapper.Unit#UNIT</a> DetectedUnit </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#string:</em>
|
||||
The type name</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).GetDetectionSetGroup" >
|
||||
<strong>DETECTION_BASE:GetDetectionSetGroup()</strong>
|
||||
</a>
|
||||
@ -3219,32 +3192,6 @@ The distance. </p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).HasDetectedItemLOS" >
|
||||
<strong>DETECTION_BASE:HasDetectedItemLOS(Index)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Has the detected item LOS (Line Of Sight) with one of the Recce?</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Index </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true is LOS, false if no LOS.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).IdentifyDetectedObject" >
|
||||
<strong>DETECTION_BASE:IdentifyDetectedObject(DetectedObject)</strong>
|
||||
</a>
|
||||
@ -4250,6 +4197,82 @@ The probability factor.</p>
|
||||
<p><em><a href="##(DETECTION_BASE)">#DETECTION_BASE</a>:</em>
|
||||
self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).SetDetectedItemCoordinate" >
|
||||
<strong>DETECTION_BASE:SetDetectedItemCoordinate(The, Coordinate, DetectedItemUnit, DetectedItem)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the detected item coordinate.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(DETECTION_BASE.DetectedItem)">#DETECTION_BASE.DetectedItem</a> The </em></code>:
|
||||
DetectedItem to set the coordinate at.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a> Coordinate </em></code>:
|
||||
The coordinate to set the last know detected position at.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Wrapper.Unit.html##(UNIT)">Wrapper.Unit#UNIT</a> DetectedItemUnit </em></code>:
|
||||
The unit to set the heading and altitude from.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DetectedItem </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DETECTION_BASE)">#DETECTION_BASE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_BASE).SetDetectedItemThreatLevel" >
|
||||
<strong>DETECTION_BASE:SetDetectedItemThreatLevel(The, DetectedItem)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set the detected item threatlevel.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="##(DETECTION_BASE.DetectedItem)">#DETECTION_BASE.DetectedItem</a> The </em></code>:
|
||||
DetectedItem to calculate the threatlevel for.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> DetectedItem </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(DETECTION_BASE)">#DETECTION_BASE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -4775,6 +4798,34 @@ The To State string.</p>
|
||||
|
||||
<p>A list of the changes reported on the detected area. (It is up to the user of the detected area to consume those changes).</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a></em>
|
||||
<a id="#(DETECTION_BASE.DetectedItem).Coordinate" >
|
||||
<strong>DETECTION_BASE.DetectedItem.Coordinate</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>The last known coordinate of the DetectedItem.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DETECTION_BASE.DetectedItem).DistanceRecce" >
|
||||
<strong>DETECTION_BASE.DetectedItem.DistanceRecce</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -4817,20 +4868,6 @@ The To State string.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DETECTION_BASE.DetectedItem).MaxThreatLevelA2G" >
|
||||
<strong>DETECTION_BASE.DetectedItem.MaxThreatLevelA2G</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -4859,6 +4896,20 @@ The To State string.</p>
|
||||
|
||||
<p>-- The Set of Units in the detected area.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(DETECTION_BASE.DetectedItem).ThreatLevel" >
|
||||
<strong>DETECTION_BASE.DetectedItem.ThreatLevel</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -5219,32 +5270,6 @@ The Changes text</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_TYPES).GetDetectedItemCoordinate" >
|
||||
<strong>DETECTION_TYPES:GetDetectedItemCoordinate(DetectedTypeName)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Get the detected item coordinate.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> DetectedTypeName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(Core.Point)">#Core.Point</a>:</em>
|
||||
COORDINATE</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_TYPES).New" >
|
||||
<strong>DETECTION_TYPES:New(DetectionSetGroup)</strong>
|
||||
</a>
|
||||
@ -5523,32 +5548,6 @@ The group to generate the report for.</p>
|
||||
<p><em>#string:</em>
|
||||
The Changes text</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(DETECTION_UNITS).GetDetectedItemCoordinate" >
|
||||
<strong>DETECTION_UNITS:GetDetectedItemCoordinate(Index)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Get the detected item coordinate.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> Index </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="Core.Point.html##(COORDINATE)">Core.Point#COORDINATE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -1598,7 +1598,7 @@ A string defining the start state.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<em>#string</em>
|
||||
<a id="#(FSM)._StartState" >
|
||||
<strong>FSM._StartState</strong>
|
||||
</a>
|
||||
@ -1897,7 +1897,6 @@ A string defining the start state.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(FSM).current" >
|
||||
<strong>FSM.current</strong>
|
||||
</a>
|
||||
|
||||
@ -194,6 +194,7 @@ On top, MOOSE implements <strong>variable parameter</strong> passing for command
|
||||
<hr/>
|
||||
<p>The MENU<em>COMMAND</em>BASE class defines the main MENU class where other MENU COMMAND_
|
||||
classes are derived from, in order to set commands.</p>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -369,6 +370,24 @@ classes are derived from, in order to set commands.</p>
|
||||
<td class="name" nowrap="nowrap"><a href="##(MENU_COMMAND_BASE).New">MENU_COMMAND_BASE.New(#, self, MenuText, ParentMenu, CommandMenuFunction, CommandMenuArguments)</a></td>
|
||||
<td class="summary">
|
||||
<p>Constructor</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(MENU_COMMAND_BASE).SetCommandMenuArguments">MENU_COMMAND_BASE.SetCommandMenuArguments(#, self, CommandMenuArguments)</a></td>
|
||||
<td class="summary">
|
||||
<p>This sets the new command arguments of a menu,
|
||||
so that if a menu is regenerated, or if command arguments change,
|
||||
that the arguments set for the menu are loosely coupled with the menu itself!!!
|
||||
If the arguments change, no new menu needs to be generated if the menu text is the same!!!</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(MENU_COMMAND_BASE).SetCommandMenuFunction">MENU_COMMAND_BASE.SetCommandMenuFunction(#, self, CommandMenuFunction)</a></td>
|
||||
<td class="summary">
|
||||
<p>This sets the new command function of a menu,
|
||||
so that if a menu is regenerated, or if command function changes,
|
||||
that the function set for the menu is loosely coupled with the menu itself!!!
|
||||
If the function changes, no new menu needs to be generated if the menu text is the same!!!</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -729,6 +748,7 @@ Using this object reference, you can then remove ALL the menus and submenus unde
|
||||
<p>The MENU<em>COMMAND</em>BASE class defines the main MENU class where other MENU COMMAND_
|
||||
classes are derived from, in order to set commands.</p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1452,6 +1472,86 @@ ENU<em>COMMAND</em>BASE</p>
|
||||
<p><em><a href="##(MENU_COMMAND_BASE)">#MENU<em>COMMAND</em>BASE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(MENU_COMMAND_BASE).SetCommandMenuArguments" >
|
||||
<strong>MENU_COMMAND_BASE.SetCommandMenuArguments(#, self, CommandMenuArguments)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>This sets the new command arguments of a menu,
|
||||
so that if a menu is regenerated, or if command arguments change,
|
||||
that the arguments set for the menu are loosely coupled with the menu itself!!!
|
||||
If the arguments change, no new menu needs to be generated if the menu text is the same!!!</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> # </em></code>:
|
||||
ENU<em>COMMAND</em>BASE</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> self </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> CommandMenuArguments </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(MENU_COMMAND_BASE)">#MENU<em>COMMAND</em>BASE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(MENU_COMMAND_BASE).SetCommandMenuFunction" >
|
||||
<strong>MENU_COMMAND_BASE.SetCommandMenuFunction(#, self, CommandMenuFunction)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>This sets the new command function of a menu,
|
||||
so that if a menu is regenerated, or if command function changes,
|
||||
that the function set for the menu is loosely coupled with the menu itself!!!
|
||||
If the function changes, no new menu needs to be generated if the menu text is the same!!!</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> # </em></code>:
|
||||
ENU<em>COMMAND</em>BASE</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> self </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> CommandMenuFunction </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(MENU_COMMAND_BASE)">#MENU<em>COMMAND</em>BASE</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
@ -544,7 +544,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(MISSION).ReportSummary">MISSION:ReportSummary()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(MISSION).ReportSummary">MISSION:ReportSummary(ReportGroup)</a></td>
|
||||
<td class="summary">
|
||||
<p>Create a summary report of the Mission (one line).</p>
|
||||
</td>
|
||||
@ -2489,13 +2489,21 @@ self</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(MISSION).ReportSummary" >
|
||||
<strong>MISSION:ReportSummary()</strong>
|
||||
<strong>MISSION:ReportSummary(ReportGroup)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Create a summary report of the Mission (one line).</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a> ReportGroup </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#string:</em></p>
|
||||
|
||||
@ -416,9 +416,15 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).ToStringLL">COORDINATE:ToStringLL(Settings)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).ToStringLLDDM">COORDINATE:ToStringLLDDM(Settings)</a></td>
|
||||
<td class="summary">
|
||||
<p>Provides a Lat Lon string</p>
|
||||
<p>Provides a Lat Lon string in Degree Decimal Minute format.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(COORDINATE).ToStringLLDMS">COORDINATE:ToStringLLDMS(Settings)</a></td>
|
||||
<td class="summary">
|
||||
<p>Provides a Lat Lon string in Degree Minute Second format.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -2111,13 +2117,13 @@ The coordinate Text in the configured coordinate system.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(COORDINATE).ToStringLL" >
|
||||
<strong>COORDINATE:ToStringLL(Settings)</strong>
|
||||
<a id="#(COORDINATE).ToStringLLDDM" >
|
||||
<strong>COORDINATE:ToStringLLDDM(Settings)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Provides a Lat Lon string</p>
|
||||
<p>Provides a Lat Lon string in Degree Decimal Minute format.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
@ -2131,7 +2137,34 @@ The coordinate Text in the configured coordinate system.</p>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#string:</em>
|
||||
The LL Text</p>
|
||||
The LL DDM Text</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(COORDINATE).ToStringLLDMS" >
|
||||
<strong>COORDINATE:ToStringLLDMS(Settings)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Provides a Lat Lon string in Degree Minute Second format.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Core.Settings.html##(SETTINGS)">Core.Settings#SETTINGS</a> Settings </em></code>:
|
||||
(optional) Settings</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#string:</em>
|
||||
The LL DMS Text</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
@ -2829,7 +2862,6 @@ The y coordinate.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(POINT_VEC2).z" >
|
||||
<strong>POINT_VEC2.z</strong>
|
||||
</a>
|
||||
|
||||
@ -416,7 +416,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(POSITIONABLE).Smoke">POSITIONABLE:Smoke(SmokeColor, Range)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(POSITIONABLE).Smoke">POSITIONABLE:Smoke(SmokeColor, Range, AddHeight)</a></td>
|
||||
<td class="summary">
|
||||
<p>Smoke the POSITIONABLE.</p>
|
||||
</td>
|
||||
@ -1738,7 +1738,7 @@ self</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(POSITIONABLE).Smoke" >
|
||||
<strong>POSITIONABLE:Smoke(SmokeColor, Range)</strong>
|
||||
<strong>POSITIONABLE:Smoke(SmokeColor, Range, AddHeight)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1749,12 +1749,20 @@ self</p>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> SmokeColor </em></code>: </p>
|
||||
<p><code><em><a href="Utilities.Utils.html##(SMOKECOLOR)">Utilities.Utils#SMOKECOLOR</a> SmokeColor </em></code>:
|
||||
The color to smoke to positionable.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> Range </em></code>: </p>
|
||||
<p><code><em>#number Range </em></code>:
|
||||
The range in meters to randomize the smoking around the positionable.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number AddHeight </em></code>:
|
||||
The height in meters to add to the altitude of the positionable.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
@ -1828,6 +1836,7 @@ self</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Core.Spot.html##(SPOT)">Core.Spot#SPOT</a></em>
|
||||
<a id="#(POSITIONABLE).Spot" >
|
||||
<strong>POSITIONABLE.Spot</strong>
|
||||
</a>
|
||||
|
||||
@ -172,6 +172,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).Clear">SCHEDULER:Clear()</a></td>
|
||||
<td class="summary">
|
||||
<p>Clears all pending schedules.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SCHEDULER).MasterObject">SCHEDULER.MasterObject</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -414,6 +420,20 @@ The schedule will stop after <strong>300</strong> seconds.</p>
|
||||
|
||||
<p>Clears all pending schedules.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(SCHEDULER).MasterObject" >
|
||||
<strong>SCHEDULER.MasterObject</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -4567,6 +4567,11 @@ self</p>
|
||||
|
||||
<p>Calculate the maxium A2G threat level of the SET_UNIT.</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#number:</em>
|
||||
The maximum threatlevel</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -172,15 +172,9 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).GetLL_Accuracy">SETTINGS:GetLL_Accuracy()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).GetLL_DDM_Accuracy">SETTINGS:GetLL_DDM_Accuracy()</a></td>
|
||||
<td class="summary">
|
||||
<p>Gets the SETTINGS LL accuracy.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).GetLL_DMS">SETTINGS:GetLL_DMS()</a></td>
|
||||
<td class="summary">
|
||||
<p>Gets the SETTINGS LL DMS.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -202,9 +196,15 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).IsA2A_LL">SETTINGS:IsA2A_LL()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).IsA2A_LL_DDM">SETTINGS:IsA2A_LL_DDM()</a></td>
|
||||
<td class="summary">
|
||||
<p>Is LL</p>
|
||||
<p>Is LL DDM</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).IsA2A_LL_DMS">SETTINGS:IsA2A_LL_DMS()</a></td>
|
||||
<td class="summary">
|
||||
<p>Is LL DMS</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -220,9 +220,15 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).IsA2G_LL">SETTINGS:IsA2G_LL()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).IsA2G_LL_DDM">SETTINGS:IsA2G_LL_DDM()</a></td>
|
||||
<td class="summary">
|
||||
<p>Is LL</p>
|
||||
<p>Is LL DDM</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).IsA2G_LL_DMS">SETTINGS:IsA2G_LL_DMS()</a></td>
|
||||
<td class="summary">
|
||||
<p>Is LL DMS</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -274,13 +280,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).MenuGroupLL_AccuracySystem">SETTINGS:MenuGroupLL_AccuracySystem(PlayerUnit, PlayerGroup, PlayerName, LL_Accuracy)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).MenuGroupLL_DMSSystem">SETTINGS:MenuGroupLL_DMSSystem(PlayerUnit, PlayerGroup, PlayerName, LL_DMS)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).MenuGroupLL_DDM_AccuracySystem">SETTINGS:MenuGroupLL_DDM_AccuracySystem(PlayerUnit, PlayerGroup, PlayerName, LL_Accuracy)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -298,13 +298,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).MenuLL_Accuracy">SETTINGS:MenuLL_Accuracy(MenuGroup, RootMenu, LL_Accuracy)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).MenuLL_DMS">SETTINGS:MenuLL_DMS(MenuGroup, RootMenu, LL_DMS)</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).MenuLL_DDM_Accuracy">SETTINGS:MenuLL_DDM_Accuracy(MenuGroup, RootMenu, LL_Accuracy)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
@ -358,9 +352,15 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetA2A_LL">SETTINGS:SetA2A_LL()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetA2A_LL_DDM">SETTINGS:SetA2A_LL_DDM()</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets A2A LL</p>
|
||||
<p>Sets A2A LL DDM</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetA2A_LL_DMS">SETTINGS:SetA2A_LL_DMS()</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets A2A LL DMS</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -376,9 +376,15 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetA2G_LL">SETTINGS:SetA2G_LL()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetA2G_LL_DDM">SETTINGS:SetA2G_LL_DDM()</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets A2G LL</p>
|
||||
<p>Sets A2G LL DDM</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetA2G_LL_DMS">SETTINGS:SetA2G_LL_DMS()</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets A2G LL DMS</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -397,12 +403,6 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetLL_Accuracy">SETTINGS:SetLL_Accuracy(LL_Accuracy)</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets the SETTINGS LL accuracy.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SETTINGS).SetLL_DMS">SETTINGS:SetLL_DMS(LL_DMS)</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets the SETTINGS LL DMS.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -544,8 +544,8 @@
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).GetLL_Accuracy" >
|
||||
<strong>SETTINGS:GetLL_Accuracy()</strong>
|
||||
<a id="#(SETTINGS).GetLL_DDM_Accuracy" >
|
||||
<strong>SETTINGS:GetLL_DDM_Accuracy()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -557,24 +557,6 @@
|
||||
<p><em>#number:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).GetLL_DMS" >
|
||||
<strong>SETTINGS:GetLL_DMS()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Gets the SETTINGS LL DMS.</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#number:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -634,18 +616,36 @@ true if BULLS</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).IsA2A_LL" >
|
||||
<strong>SETTINGS:IsA2A_LL()</strong>
|
||||
<a id="#(SETTINGS).IsA2A_LL_DDM" >
|
||||
<strong>SETTINGS:IsA2A_LL_DDM()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Is LL</p>
|
||||
<p>Is LL DDM</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if LL</p>
|
||||
true if LL DDM</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).IsA2A_LL_DMS" >
|
||||
<strong>SETTINGS:IsA2A_LL_DMS()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Is LL DMS</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if LL DMS</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
@ -688,18 +688,36 @@ true if BRA</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).IsA2G_LL" >
|
||||
<strong>SETTINGS:IsA2G_LL()</strong>
|
||||
<a id="#(SETTINGS).IsA2G_LL_DDM" >
|
||||
<strong>SETTINGS:IsA2G_LL_DDM()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Is LL</p>
|
||||
<p>Is LL DDM</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if LL</p>
|
||||
true if LL DDM</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).IsA2G_LL_DMS" >
|
||||
<strong>SETTINGS:IsA2G_LL_DMS()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Is LL DMS</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#boolean:</em>
|
||||
true if LL DMS</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
@ -874,8 +892,8 @@ true if metric.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).MenuGroupLL_AccuracySystem" >
|
||||
<strong>SETTINGS:MenuGroupLL_AccuracySystem(PlayerUnit, PlayerGroup, PlayerName, LL_Accuracy)</strong>
|
||||
<a id="#(SETTINGS).MenuGroupLL_DDM_AccuracySystem" >
|
||||
<strong>SETTINGS:MenuGroupLL_DDM_AccuracySystem(PlayerUnit, PlayerGroup, PlayerName, LL_Accuracy)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -910,42 +928,6 @@ true if metric.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).MenuGroupLL_DMSSystem" >
|
||||
<strong>SETTINGS:MenuGroupLL_DMSSystem(PlayerUnit, PlayerGroup, PlayerName, LL_DMS)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> PlayerUnit </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> PlayerGroup </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> PlayerName </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> LL_DMS </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).MenuGroupMGRS_AccuracySystem" >
|
||||
<strong>SETTINGS:MenuGroupMGRS_AccuracySystem(PlayerUnit, PlayerGroup, PlayerName, MGRS_Accuracy)</strong>
|
||||
</a>
|
||||
@ -1018,8 +1000,8 @@ true if metric.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).MenuLL_Accuracy" >
|
||||
<strong>SETTINGS:MenuLL_Accuracy(MenuGroup, RootMenu, LL_Accuracy)</strong>
|
||||
<a id="#(SETTINGS).MenuLL_DDM_Accuracy" >
|
||||
<strong>SETTINGS:MenuLL_DDM_Accuracy(MenuGroup, RootMenu, LL_Accuracy)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -1049,37 +1031,6 @@ true if metric.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).MenuLL_DMS" >
|
||||
<strong>SETTINGS:MenuLL_DMS(MenuGroup, RootMenu, LL_DMS)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> MenuGroup </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> RootMenu </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em> LL_DMS </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).MenuMGRS_Accuracy" >
|
||||
<strong>SETTINGS:MenuMGRS_Accuracy(MenuGroup, RootMenu, MGRS_Accuracy)</strong>
|
||||
</a>
|
||||
@ -1263,13 +1214,31 @@ true if metric.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).SetA2A_LL" >
|
||||
<strong>SETTINGS:SetA2A_LL()</strong>
|
||||
<a id="#(SETTINGS).SetA2A_LL_DDM" >
|
||||
<strong>SETTINGS:SetA2A_LL_DDM()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Sets A2A LL</p>
|
||||
<p>Sets A2A LL DDM</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(SETTINGS)">#SETTINGS</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).SetA2A_LL_DMS" >
|
||||
<strong>SETTINGS:SetA2A_LL_DMS()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Sets A2A LL DMS</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
@ -1317,13 +1286,31 @@ true if metric.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).SetA2G_LL" >
|
||||
<strong>SETTINGS:SetA2G_LL()</strong>
|
||||
<a id="#(SETTINGS).SetA2G_LL_DDM" >
|
||||
<strong>SETTINGS:SetA2G_LL_DDM()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Sets A2G LL</p>
|
||||
<p>Sets A2G LL DDM</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(SETTINGS)">#SETTINGS</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).SetA2G_LL_DMS" >
|
||||
<strong>SETTINGS:SetA2G_LL_DMS()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Sets A2G LL DMS</p>
|
||||
|
||||
<h3>Return value</h3>
|
||||
|
||||
@ -1387,32 +1374,6 @@ true if metric.</p>
|
||||
<p><em><a href="##(SETTINGS)">#SETTINGS</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(SETTINGS).SetLL_DMS" >
|
||||
<strong>SETTINGS:SetLL_DMS(LL_DMS)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Sets the SETTINGS LL DMS.</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number LL_DMS </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(SETTINGS)">#SETTINGS</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -822,12 +822,6 @@ 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="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(SPAWN).uncontrolled">SPAWN.uncontrolled</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -2200,9 +2194,6 @@ 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">
|
||||
@ -2755,9 +2746,6 @@ when nothing was spawned.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<p> By default, no InitLimit</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -2793,7 +2781,7 @@ when nothing was spawned.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#number</em>
|
||||
<em></em>
|
||||
<a id="#(SPAWN).SpawnMaxGroups" >
|
||||
<strong>SPAWN.SpawnMaxGroups</strong>
|
||||
</a>
|
||||
@ -2810,7 +2798,7 @@ when nothing was spawned.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#number</em>
|
||||
<em></em>
|
||||
<a id="#(SPAWN).SpawnMaxUnitsAlive" >
|
||||
<strong>SPAWN.SpawnMaxUnitsAlive</strong>
|
||||
</a>
|
||||
@ -3138,7 +3126,7 @@ Spawn_BE_KA50 = SPAWN:New( 'BE KA-50@RAMP-Ground Defense' ):Schedule( 600, 0.5 )
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#boolean</em>
|
||||
<em></em>
|
||||
<a id="#(SPAWN).SpawnUnControlled" >
|
||||
<strong>SPAWN.SpawnUnControlled</strong>
|
||||
</a>
|
||||
@ -3742,20 +3730,6 @@ True = Continue Scheduler</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(SPAWN).uncontrolled" >
|
||||
<strong>SPAWN.uncontrolled</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
@ -436,6 +436,7 @@ ptional) The name of the new static.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em>#number</em>
|
||||
<a id="#(SPAWNSTATIC).SpawnIndex" >
|
||||
<strong>SPAWNSTATIC.SpawnIndex</strong>
|
||||
</a>
|
||||
|
||||
@ -765,7 +765,6 @@ true if it is lasing</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(SPOT).ScheduleID" >
|
||||
<strong>SPOT.ScheduleID</strong>
|
||||
</a>
|
||||
@ -779,7 +778,6 @@ true if it is lasing</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(SPOT).SpotIR" >
|
||||
<strong>SPOT.SpotIR</strong>
|
||||
</a>
|
||||
@ -793,7 +791,6 @@ true if it is lasing</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(SPOT).SpotLaser" >
|
||||
<strong>SPOT.SpotLaser</strong>
|
||||
</a>
|
||||
@ -807,7 +804,6 @@ true if it is lasing</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(SPOT).Target" >
|
||||
<strong>SPOT.Target</strong>
|
||||
</a>
|
||||
|
||||
@ -183,6 +183,18 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).CrashGroup">TASK:CrashGroup(PlayerUnit, PlayerGroup)</a></td>
|
||||
<td class="summary">
|
||||
<p>A PlayerUnit crashed in a Task.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).DetectedItemIndex">TASK.DetectedItemIndex</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).Detection">TASK.Detection</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -516,7 +528,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).ReportSummary">TASK:ReportSummary()</a></td>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).ReportSummary">TASK:ReportSummary(ReportGroup)</a></td>
|
||||
<td class="summary">
|
||||
<p>Create a summary report of the Task.</p>
|
||||
</td>
|
||||
@ -537,6 +549,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).SetBriefing">TASK:SetBriefing(TaskBriefing)</a></td>
|
||||
<td class="summary">
|
||||
<p>Sets a <a href="Task.html">Task</a> briefing.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK).SetDetection">TASK:SetDetection(Detection, DetectedItemIndex)</a></td>
|
||||
<td class="summary">
|
||||
<p>Set detection of a task</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1156,6 +1174,34 @@ The CLIENT or UNIT of the Player aborting the Task.</p>
|
||||
<p><em><a href="##(TASK)">#TASK</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(TASK).DetectedItemIndex" >
|
||||
<strong>TASK.DetectedItemIndex</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<a id="#(TASK).Detection" >
|
||||
<strong>TASK.Detection</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -2344,7 +2390,7 @@ self</p>
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK).ReportSummary" >
|
||||
<strong>TASK:ReportSummary()</strong>
|
||||
<strong>TASK:ReportSummary(ReportGroup)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
@ -2354,6 +2400,14 @@ self</p>
|
||||
|
||||
<p>List the Task Name and Status</p>
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Wrapper.Group.html##(GROUP)">Wrapper.Group#GROUP</a> ReportGroup </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em>#string:</em></p>
|
||||
@ -2429,6 +2483,37 @@ self</p>
|
||||
<p><em><a href="##(TASK)">#TASK</a>:</em>
|
||||
self</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK).SetDetection" >
|
||||
<strong>TASK:SetDetection(Detection, DetectedItemIndex)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Set detection of a task</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em><a href="Function.Detection.html##(DETECTION_BASE)">Function.Detection#DETECTION_BASE</a> Detection </em></code>: </p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number DetectedItemIndex </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="##(TASK)">#TASK</a>:</em></p>
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -274,6 +274,12 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_ENGAGE).TargetSetUnit">TASK_A2A_ENGAGE.TargetSetUnit</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_ENGAGE).UpdateTaskInfo">TASK_A2A_ENGAGE:UpdateTaskInfo()</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -320,6 +326,12 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_INTERCEPT).TargetSetUnit">TASK_A2A_INTERCEPT.TargetSetUnit</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_INTERCEPT).UpdateTaskInfo">TASK_A2A_INTERCEPT:UpdateTaskInfo()</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -366,6 +378,12 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_SWEEP).TargetSetUnit">TASK_A2A_SWEEP.TargetSetUnit</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_SWEEP).UpdateTaskInfo">TASK_A2A_SWEEP:UpdateTaskInfo()</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -1069,6 +1087,19 @@ The score in points.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK_A2A_ENGAGE).UpdateTaskInfo" >
|
||||
<strong>TASK_A2A_ENGAGE:UpdateTaskInfo()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1309,6 +1340,19 @@ The score in points.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK_A2A_INTERCEPT).UpdateTaskInfo" >
|
||||
<strong>TASK_A2A_INTERCEPT:UpdateTaskInfo()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
@ -1549,6 +1593,19 @@ The score in points.</p>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK_A2A_SWEEP).UpdateTaskInfo" >
|
||||
<strong>TASK_A2A_SWEEP:UpdateTaskInfo()</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -199,6 +199,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_DISPATCHER).ProcessDetected">TASK_A2A_DISPATCHER:ProcessDetected(Detection)</a></td>
|
||||
<td class="summary">
|
||||
<p>Assigns tasks in relation to the detected items to the <a href="Set.html##(SET_GROUP)">Set#SET_GROUP</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2A_DISPATCHER).RemoveTask">TASK_A2A_DISPATCHER:RemoveTask(TaskIndex)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -760,6 +766,27 @@ Return true if you want the task assigning to continue... false will cancel the
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK_A2A_DISPATCHER).RemoveTask" >
|
||||
<strong>TASK_A2A_DISPATCHER:RemoveTask(TaskIndex)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> TaskIndex </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK_A2A_DISPATCHER).SetEngageRadius" >
|
||||
<strong>TASK_A2A_DISPATCHER:SetEngageRadius(EngageRadius)</strong>
|
||||
</a>
|
||||
|
||||
@ -183,6 +183,12 @@
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2G_DISPATCHER).ProcessDetected">TASK_A2G_DISPATCHER:ProcessDetected(Detection)</a></td>
|
||||
<td class="summary">
|
||||
<p>Assigns tasks in relation to the detected items to the <a href="Set.html##(SET_GROUP)">Set#SET_GROUP</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(TASK_A2G_DISPATCHER).RemoveTask">TASK_A2G_DISPATCHER:RemoveTask(TaskIndex)</a></td>
|
||||
<td class="summary">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -542,6 +548,27 @@ The detection created by the <a href="Detection.html##(DETECTION_BASE)">Detectio
|
||||
<p><em>#boolean:</em>
|
||||
Return true if you want the task assigning to continue... false will cancel the loop.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(TASK_A2G_DISPATCHER).RemoveTask" >
|
||||
<strong>TASK_A2G_DISPATCHER:RemoveTask(TaskIndex)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
|
||||
|
||||
<h3>Parameter</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em> TaskIndex </em></code>: </p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
|
||||
@ -552,7 +552,7 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em><a href="Core.Cargo.html##(CARGO)">Core.Cargo#CARGO</a></em>
|
||||
<em><a href="Core.Cargo.html##(CARGO_GROUP)">Core.Cargo#CARGO_GROUP</a></em>
|
||||
<a id="#(FSM_PROCESS).Cargo" >
|
||||
<strong>FSM_PROCESS.Cargo</strong>
|
||||
</a>
|
||||
@ -631,7 +631,7 @@ based on the tasking capabilities defined in <a href="Task.html##(TASK)">Task#TA
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<em></em>
|
||||
<em>#number</em>
|
||||
<a id="#(TASK_CARGO).CargoLimit" >
|
||||
<strong>TASK_CARGO.CargoLimit</strong>
|
||||
</a>
|
||||
|
||||
@ -386,6 +386,12 @@
|
||||
<h2><a id="#(ZONE_GROUP)">Type <code>ZONE_GROUP</code></a></h2>
|
||||
<table class="function_list">
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_GROUP).GetRandomPointVec2">ZONE_GROUP:GetRandomPointVec2(inner, outer)</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns a <a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a> object reflecting a random 2D location within the zone.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="name" nowrap="nowrap"><a href="##(ZONE_GROUP).GetRandomVec2">ZONE_GROUP:GetRandomVec2()</a></td>
|
||||
<td class="summary">
|
||||
<p>Returns a random location within the zone of the <a href="Group.html">Group</a>.</p>
|
||||
@ -1425,6 +1431,39 @@ The smoke color.</p>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_GROUP).GetRandomPointVec2" >
|
||||
<strong>ZONE_GROUP:GetRandomPointVec2(inner, outer)</strong>
|
||||
</a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<p>Returns a <a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a> object reflecting a random 2D location within the zone.</p>
|
||||
|
||||
<h3>Parameters</h3>
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number inner </em></code>:
|
||||
(optional) Minimal distance from the center of the zone. Default is 0.</p>
|
||||
|
||||
</li>
|
||||
<li>
|
||||
|
||||
<p><code><em>#number outer </em></code>:
|
||||
(optional) Maximal distance from the outer edge of the zone. Default is the radius of the zone.</p>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<h3>Return value</h3>
|
||||
|
||||
<p><em><a href="Core.Point.html##(POINT_VEC2)">Core.Point#POINT_VEC2</a>:</em>
|
||||
The <a href="Point.html##(POINT_VEC2)">Point#POINT_VEC2</a> object reflecting the random 3D location within the zone.</p>
|
||||
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="function">
|
||||
<dt>
|
||||
|
||||
<a id="#(ZONE_GROUP).GetRandomVec2" >
|
||||
<strong>ZONE_GROUP:GetRandomVec2()</strong>
|
||||
</a>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user