mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
commit
c70b587936
@ -301,9 +301,55 @@ do -- COORDINATE
|
||||
end
|
||||
|
||||
|
||||
--- Set the heading of the coordinate, if applicable.
|
||||
-- @param #COORDINATE self
|
||||
function COORDINATE:SetHeading( Heading )
|
||||
self.Heading = Heading
|
||||
end
|
||||
|
||||
|
||||
--- Get the heading of the coordinate, if applicable.
|
||||
-- @param #COORDINATE self
|
||||
-- @return #number or nil
|
||||
function COORDINATE:GetHeading()
|
||||
return self.Heading
|
||||
end
|
||||
|
||||
|
||||
--- Set the velocity of the COORDINATE.
|
||||
-- @param #COORDINATE self
|
||||
-- @param #string Velocity Velocity in meters per second.
|
||||
function COORDINATE:SetVelocity( Velocity )
|
||||
self.Velocity = Velocity
|
||||
end
|
||||
|
||||
|
||||
--- Return the velocity of the COORDINATE.
|
||||
-- @param #COORDINATE self
|
||||
-- @return #number Velocity in meters per second.
|
||||
function COORDINATE:GetVelocity()
|
||||
local Velocity = self.Velocity
|
||||
return Velocity or 0
|
||||
end
|
||||
|
||||
|
||||
--- Return velocity text of the COORDINATE.
|
||||
-- @param #COORDINATE self
|
||||
-- @return #string
|
||||
function COORDINATE:GetMovingText( Settings )
|
||||
|
||||
local MovingText = ""
|
||||
|
||||
local Velocity = self:GetVelocity()
|
||||
|
||||
if Velocity == 0 then
|
||||
MovingText = MovingText .. "stationary "
|
||||
else
|
||||
MovingText = MovingText .. "moving at " .. self:GetVelocityText( Settings ) .. " " .. self:GetHeadingText( Settings )
|
||||
end
|
||||
|
||||
return MovingText
|
||||
end
|
||||
|
||||
|
||||
--- Return a direction vector Vec3 from COORDINATE to the COORDINATE.
|
||||
@ -359,6 +405,7 @@ do -- COORDINATE
|
||||
return ( ( TargetVec3.x - SourceVec3.x ) ^ 2 + ( TargetVec3.z - SourceVec3.z ) ^ 2 ) ^ 0.5
|
||||
end
|
||||
|
||||
|
||||
--- Return the 3D distance in meters between the target COORDINATE and the COORDINATE.
|
||||
-- @param #COORDINATE self
|
||||
-- @param #COORDINATE TargetCoordinate The target COORDINATE.
|
||||
@ -425,6 +472,39 @@ do -- COORDINATE
|
||||
end
|
||||
|
||||
|
||||
|
||||
--- Return the velocity text of the COORDINATE.
|
||||
-- @param #COORDINATE self
|
||||
-- @return #string Velocity text.
|
||||
function COORDINATE:GetVelocityText( Settings )
|
||||
local Velocity = self:GetVelocity()
|
||||
local Settings = Settings or _SETTINGS
|
||||
if Velocity then
|
||||
if Settings:IsMetric() then
|
||||
return UTILS.MpsToKmph( Velocity ) .. " km/h"
|
||||
else
|
||||
return UTILS.MpsToKmph( Velocity ) / 1.852 .. " mph"
|
||||
end
|
||||
else
|
||||
return ""
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Return the heading text of the COORDINATE.
|
||||
-- @param #COORDINATE self
|
||||
-- @return #string Heading text.
|
||||
function COORDINATE:GetHeadingText( Settings )
|
||||
local Heading = self.Heading
|
||||
local Settings = Settings or _SETTINGS
|
||||
if Heading then
|
||||
return Heading .. "°"
|
||||
else
|
||||
return ""
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- Provides a Bearing / Range string
|
||||
-- @param #COORDINATE self
|
||||
-- @param #number AngleRadians The angle in randians
|
||||
@ -723,7 +803,7 @@ do -- COORDINATE
|
||||
-- local TargetCoord = TargetGroup:GetCoordinate()
|
||||
-- local MarkGroup = GROUP:FindByName( "AttackGroup" )
|
||||
-- local MarkID = TargetCoord:MarkToGroup( "This is a target for the attack group", AttackGroup )
|
||||
function COORDINATE:MarkToCoalition( MarkText, MarkGroup )
|
||||
function COORDINATE:MarkToGroup( MarkText, MarkGroup )
|
||||
local MarkID = UTILS.GetMarkID()
|
||||
trigger.action.markToGroup( MarkID, MarkText, self:GetVec3(), MarkGroup:GetID() )
|
||||
return MarkID
|
||||
|
||||
@ -1788,16 +1788,18 @@ end
|
||||
function SET_UNIT:CalculateThreatLevelA2G()
|
||||
|
||||
local MaxThreatLevelA2G = 0
|
||||
local MaxThreatText = ""
|
||||
for UnitName, UnitData in pairs( self:GetSet() ) do
|
||||
local ThreatUnit = UnitData -- Wrapper.Unit#UNIT
|
||||
local ThreatLevelA2G = ThreatUnit:GetThreatLevel()
|
||||
local ThreatLevelA2G, ThreatText = ThreatUnit:GetThreatLevel()
|
||||
if ThreatLevelA2G > MaxThreatLevelA2G then
|
||||
MaxThreatLevelA2G = ThreatLevelA2G
|
||||
MaxThreatText = ThreatText
|
||||
end
|
||||
end
|
||||
|
||||
self:T3( MaxThreatLevelA2G )
|
||||
return MaxThreatLevelA2G
|
||||
self:F( { MaxThreatLevelA2G = MaxThreatLevelA2G, MaxThreatText = MaxThreatText } )
|
||||
return MaxThreatLevelA2G, MaxThreatText
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -1644,7 +1644,7 @@ do -- DETECTION_BASE
|
||||
DetectedItem.Coordinate = Coordinate
|
||||
DetectedItem.Coordinate:SetHeading( DetectedItemUnit:GetHeading() )
|
||||
DetectedItem.Coordinate.y = DetectedItemUnit:GetAltitude()
|
||||
DetectedItem.Coordinate.Speed = DetectedItemUnit:GetVelocityMPS()
|
||||
DetectedItem.Coordinate:SetVelocity( DetectedItemUnit:GetVelocityMPS() )
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1675,7 +1675,7 @@ do -- DETECTION_BASE
|
||||
local DetectedSet = DetectedItem.Set
|
||||
|
||||
if DetectedItem then
|
||||
DetectedItem.ThreatLevel = DetectedSet:CalculateThreatLevelA2G()
|
||||
DetectedItem.ThreatLevel, DetectedItem.ThreatText = DetectedSet:CalculateThreatLevelA2G()
|
||||
end
|
||||
end
|
||||
|
||||
@ -1691,10 +1691,10 @@ do -- DETECTION_BASE
|
||||
local DetectedItem = self:GetDetectedItem( Index )
|
||||
|
||||
if DetectedItem then
|
||||
return DetectedItem.ThreatLevel or 0
|
||||
return DetectedItem.ThreatLevel or 0, DetectedItem.ThreatText or ""
|
||||
end
|
||||
|
||||
return nil
|
||||
return nil, ""
|
||||
end
|
||||
|
||||
|
||||
@ -2423,9 +2423,9 @@ do -- DETECTION_AREAS
|
||||
-- @param #DETECTION_BASE.DetectedItem DetectedItem
|
||||
function DETECTION_AREAS:CalculateIntercept( DetectedItem )
|
||||
|
||||
local DetectedSpeed = DetectedItem.Coordinate.Speed
|
||||
local DetectedHeading = DetectedItem.Coordinate.Heading
|
||||
local DetectedCoord = DetectedItem.Coordinate
|
||||
local DetectedSpeed = DetectedCoord:GetVelocity()
|
||||
local DetectedHeading = DetectedCoord:GetHeading()
|
||||
|
||||
if self.Intercept then
|
||||
local DetectedSet = DetectedItem.Set
|
||||
|
||||
@ -870,13 +870,11 @@ function TASK:MenuMarkToGroup( TaskGroup )
|
||||
|
||||
local Coordinate = self:GetInfo( "Coordinates" ) -- Core.Point#COORDINATE
|
||||
local Briefing = self:GetTaskBriefing()
|
||||
local GroupID = TaskGroup:GetID()
|
||||
local Vec3 = Coordinate:GetVec3()
|
||||
|
||||
self:F( { Coordinate = Vec3, Briefing = Briefing, GroupID = GroupID } )
|
||||
self:F( { Briefing = Briefing, Coordinate = Coordinate } )
|
||||
|
||||
trigger.action.markToGroup( 1, Briefing, Vec3, GroupID )
|
||||
--trigger.action.markToAll( 1, Briefing, Vec3 )
|
||||
--Coordinate:MarkToGroup( Briefing, TaskGroup )
|
||||
Coordinate:MarkToAll( Briefing )
|
||||
end
|
||||
|
||||
--- Report the task status.
|
||||
|
||||
@ -323,13 +323,18 @@ do -- TASK_A2G_SEAD
|
||||
|
||||
Mission:AddTask( self )
|
||||
|
||||
self:SetBriefing(
|
||||
TaskBriefing or
|
||||
"Execute a Suppression of Enemy Air Defenses.\n"
|
||||
)
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
local ThreatLevel, ThreatText = TargetSetUnit:CalculateThreatLevelA2G()
|
||||
local TargetUnit = TargetSetUnit:GetFirst()
|
||||
local TargetCoord = TargetUnit:GetCoordinate() -- Core.Point#COORDINATE
|
||||
|
||||
self:SetBriefing(
|
||||
TaskBriefing or
|
||||
"Execute a Suppression of Enemy Air Defenses. " ..
|
||||
ThreatText .. " targets to be expected. Target is " .. TargetCoord:GetMovingText() .. "."
|
||||
)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
@ -466,12 +471,17 @@ do -- TASK_A2G_BAI
|
||||
|
||||
Mission:AddTask( self )
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
local ThreatLevel, ThreatText = TargetSetUnit:CalculateThreatLevelA2G()
|
||||
local TargetUnit = TargetSetUnit:GetFirst()
|
||||
local TargetCoord = TargetUnit:GetCoordinate() -- Core.Point#COORDINATE
|
||||
|
||||
self:SetBriefing(
|
||||
TaskBriefing or
|
||||
"Execute a Battlefield Air Interdiction of a group of enemy targets.\n"
|
||||
"Execute a Battlefield Air Interdiction of a group of enemy targets. " ..
|
||||
ThreatText .. " targets to be expected. Target is " .. TargetCoord:GetMovingText() .. "."
|
||||
)
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
return self
|
||||
end
|
||||
@ -610,13 +620,20 @@ do -- TASK_A2G_CAS
|
||||
|
||||
Mission:AddTask( self )
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
local ThreatLevel, ThreatText = TargetSetUnit:CalculateThreatLevelA2G()
|
||||
local TargetUnit = TargetSetUnit:GetFirst()
|
||||
local TargetCoord = TargetUnit:GetCoordinate() -- Core.Point#COORDINATE
|
||||
|
||||
self:SetBriefing(
|
||||
TaskBriefing or
|
||||
"Execute a Close Air Support for a group of enemy targets.\n" ..
|
||||
"Beware of friendlies at the vicinity!\n"
|
||||
"Execute a Close Air Support for a group of enemy targets. " ..
|
||||
"Beware of friendlies at the vicinity! " ..
|
||||
ThreatText .. " targets to be expected. Target is " .. TargetCoord:GetMovingText() .. "."
|
||||
|
||||
)
|
||||
|
||||
self:UpdateTaskInfo()
|
||||
|
||||
return self
|
||||
end
|
||||
@ -626,7 +643,9 @@ do -- TASK_A2G_CAS
|
||||
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 )
|
||||
local ThreatLevel = self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G()
|
||||
|
||||
self:SetInfo( "Threat", "[" .. string.rep( "■", ThreatLevel ) .. "]", 11 )
|
||||
|
||||
if self.Detection then
|
||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||
|
||||
@ -32,7 +32,7 @@ FLARECOLOR = trigger.flareColor -- #FLARECOLOR
|
||||
--- Utilities static class.
|
||||
-- @type UTILS
|
||||
UTILS = {
|
||||
_MarkID = 0
|
||||
_MarkID = 1
|
||||
}
|
||||
|
||||
--- Function to infer instance of an object
|
||||
|
||||
@ -166,6 +166,7 @@ function POSITIONABLE:GetCoordinate()
|
||||
|
||||
local PositionableCoordinate = COORDINATE:NewFromVec3( PositionableVec3 )
|
||||
PositionableCoordinate:SetHeading( self:GetHeading() )
|
||||
PositionableCoordinate:SetVelocity( self:GetVelocityMPS() )
|
||||
|
||||
self:T2( PositionableCoordinate )
|
||||
return PositionableCoordinate
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user