mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
Updates
This commit is contained in:
parent
5d62125245
commit
adb4befcdf
@ -485,12 +485,11 @@ do -- COORDINATE
|
|||||||
-- @param #COORDINATE self
|
-- @param #COORDINATE self
|
||||||
-- @return #string Heading text.
|
-- @return #string Heading text.
|
||||||
function COORDINATE:GetHeadingText( Settings )
|
function COORDINATE:GetHeadingText( Settings )
|
||||||
local Heading = self.Heading
|
local Heading = self:GetHeading()
|
||||||
local Settings = Settings or _SETTINGS
|
|
||||||
if Heading then
|
if Heading then
|
||||||
return string.format( " heading %3.2f °", Heading )
|
return string.format( " heading %3.2f °", Heading )
|
||||||
else
|
else
|
||||||
return ""
|
return " heading cannot be determined"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -217,7 +217,6 @@ function SET_BASE:Count()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Copies the Filter criteria from a given Set (for rebuilding a new Set based on an existing Set).
|
--- Copies the Filter criteria from a given Set (for rebuilding a new Set based on an existing Set).
|
||||||
-- @param #SET_BASE self
|
-- @param #SET_BASE self
|
||||||
-- @param #SET_BASE BaseSet
|
-- @param #SET_BASE BaseSet
|
||||||
@ -1803,6 +1802,111 @@ function SET_UNIT:CalculateThreatLevelA2G()
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Get the center coordinate of the SET_UNIT.
|
||||||
|
-- @param #SET_UNIT self
|
||||||
|
-- @return Core.Point#COORDINATE The center coordinate of all the units in the set, including heading in degrees and speed in mps in case of moving units.
|
||||||
|
function SET_UNIT:GetCoordinate()
|
||||||
|
|
||||||
|
local Coordinate = self:GetFirst():GetCoordinate()
|
||||||
|
|
||||||
|
local x1 = Coordinate.x
|
||||||
|
local x2 = Coordinate.x
|
||||||
|
local y1 = Coordinate.y
|
||||||
|
local y2 = Coordinate.y
|
||||||
|
local z1 = Coordinate.z
|
||||||
|
local z2 = Coordinate.z
|
||||||
|
local MaxVelocity = 0
|
||||||
|
local AvgHeading = nil
|
||||||
|
local MovingCount = 0
|
||||||
|
|
||||||
|
for UnitName, UnitData in pairs( self:GetSet() ) do
|
||||||
|
|
||||||
|
local Unit = UnitData -- Wrapper.Unit#UNIT
|
||||||
|
local Coordinate = Unit:GetCoordinate()
|
||||||
|
|
||||||
|
x1 = ( Coordinate.x < x1 ) and Coordinate.x or x1
|
||||||
|
x2 = ( Coordinate.x > x2 ) and Coordinate.x or x2
|
||||||
|
y1 = ( Coordinate.y < y1 ) and Coordinate.y or y1
|
||||||
|
y2 = ( Coordinate.y > y2 ) and Coordinate.y or y2
|
||||||
|
z1 = ( Coordinate.y < z1 ) and Coordinate.z or z1
|
||||||
|
z2 = ( Coordinate.y > z2 ) and Coordinate.z or z2
|
||||||
|
|
||||||
|
local Velocity = Coordinate:GetVelocity()
|
||||||
|
if Velocity ~= 0 then
|
||||||
|
MaxVelocity = ( MaxVelocity < Velocity ) and Velocity or MaxVelocity
|
||||||
|
local Heading = Coordinate:GetHeading()
|
||||||
|
AvgHeading = AvgHeading and ( AvgHeading + Heading ) or Heading
|
||||||
|
MovingCount = MovingCount + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
AvgHeading = AvgHeading and ( AvgHeading / MovingCount )
|
||||||
|
|
||||||
|
Coordinate.x = ( x2 - x1 ) / 2 + x1
|
||||||
|
Coordinate.y = ( y2 - y1 ) / 2 + y1
|
||||||
|
Coordinate.z = ( z2 - z1 ) / 2 + z1
|
||||||
|
Coordinate:SetHeading( AvgHeading )
|
||||||
|
Coordinate:SetVelocity( MaxVelocity )
|
||||||
|
|
||||||
|
self:F( { Coordinate = Coordinate } )
|
||||||
|
return Coordinate
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Get the maximum velocity of the SET_UNIT.
|
||||||
|
-- @param #SET_UNIT self
|
||||||
|
-- @return #number The speed in mps in case of moving units.
|
||||||
|
function SET_UNIT:GetVelocity()
|
||||||
|
|
||||||
|
local Coordinate = self:GetFirst():GetCoordinate()
|
||||||
|
|
||||||
|
local MaxVelocity = 0
|
||||||
|
|
||||||
|
for UnitName, UnitData in pairs( self:GetSet() ) do
|
||||||
|
|
||||||
|
local Unit = UnitData -- Wrapper.Unit#UNIT
|
||||||
|
local Coordinate = Unit:GetCoordinate()
|
||||||
|
|
||||||
|
local Velocity = Coordinate:GetVelocity()
|
||||||
|
if Velocity ~= 0 then
|
||||||
|
MaxVelocity = ( MaxVelocity < Velocity ) and Velocity or MaxVelocity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self:F( { MaxVelocity = MaxVelocity } )
|
||||||
|
return MaxVelocity
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Get the average heading of the SET_UNIT.
|
||||||
|
-- @param #SET_UNIT self
|
||||||
|
-- @return #number Heading Heading in degrees and speed in mps in case of moving units.
|
||||||
|
function SET_UNIT:GetHeading()
|
||||||
|
|
||||||
|
local AvgHeading = nil
|
||||||
|
local MovingCount = 0
|
||||||
|
|
||||||
|
for UnitName, UnitData in pairs( self:GetSet() ) do
|
||||||
|
|
||||||
|
local Unit = UnitData -- Wrapper.Unit#UNIT
|
||||||
|
local Coordinate = Unit:GetCoordinate()
|
||||||
|
|
||||||
|
local Velocity = Coordinate:GetVelocity()
|
||||||
|
if Velocity ~= 0 then
|
||||||
|
local Heading = Coordinate:GetHeading()
|
||||||
|
AvgHeading = AvgHeading and ( AvgHeading + Heading ) or Heading
|
||||||
|
MovingCount = MovingCount + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
AvgHeading = AvgHeading and ( AvgHeading / MovingCount )
|
||||||
|
|
||||||
|
self:F( { AvgHeading = AvgHeading } )
|
||||||
|
return AvgHeading
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Returns if the @{Set} has targets having a radar (of a given type).
|
--- Returns if the @{Set} has targets having a radar (of a given type).
|
||||||
-- @param #SET_UNIT self
|
-- @param #SET_UNIT self
|
||||||
|
|||||||
@ -1436,6 +1436,8 @@ do -- DETECTION_BASE
|
|||||||
else
|
else
|
||||||
return "Unknown"
|
return "Unknown"
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
return "Unknown"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return "Dead:" .. DetectedUnit:GetName()
|
return "Dead:" .. DetectedUnit:GetName()
|
||||||
|
|||||||
@ -867,13 +867,46 @@ function TASK:MenuMarkToGroup( TaskGroup )
|
|||||||
self:E( "Mark Task menu selected")
|
self:E( "Mark Task menu selected")
|
||||||
|
|
||||||
self:UpdateTaskInfo()
|
self:UpdateTaskInfo()
|
||||||
|
|
||||||
|
local Report = REPORT:New():SetIndent( 0 )
|
||||||
|
|
||||||
|
-- List the name of the Task.
|
||||||
|
local Name = self:GetName()
|
||||||
|
Report:Add( Name .. ": " .. self:GetTaskBriefing() )
|
||||||
|
|
||||||
|
for TaskInfoID, TaskInfo in pairs( self.TaskInfo, function( t, a, b ) return t[a].TaskInfoOrder < t[b].TaskInfoOrder end ) do
|
||||||
|
|
||||||
|
local TaskInfoIDText = "" --string.format( "%s: ", TaskInfoID )
|
||||||
|
|
||||||
|
if type( TaskInfo.TaskInfoText ) == "string" then
|
||||||
|
Report:Add( TaskInfoIDText .. TaskInfo.TaskInfoText )
|
||||||
|
elseif type(TaskInfo) == "table" then
|
||||||
|
if TaskInfoID == "Coordinates" then
|
||||||
|
local ToCoordinate = TaskInfo.TaskInfoText -- Core.Point#COORDINATE
|
||||||
|
Report:Add( TaskInfoIDText .. ToCoordinate:ToString() )
|
||||||
|
else
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
self:E("ok5")
|
||||||
|
|
||||||
local Coordinate = self:GetInfo( "Coordinates" ) -- Core.Point#COORDINATE
|
local Coordinate = self:GetInfo( "Coordinates" ) -- Core.Point#COORDINATE
|
||||||
local Briefing = self:GetTaskBriefing()
|
|
||||||
|
|
||||||
self:F( { Briefing = Briefing, Coordinate = Coordinate } )
|
local Velocity = self.TargetSetUnit:GetVelocity()
|
||||||
|
local Heading = self.TargetSetUnit:GetHeading()
|
||||||
|
|
||||||
Coordinate:MarkToGroup( Briefing, TaskGroup )
|
Coordinate:SetHeading( Heading )
|
||||||
|
Coordinate:SetVelocity( Velocity )
|
||||||
|
|
||||||
|
Report:Add( "Targets are" .. Coordinate:GetMovingText() .. "." )
|
||||||
|
|
||||||
|
local MarkText = Report:Text( ", " )
|
||||||
|
|
||||||
|
self:F( { Coordinate = Coordinate, MarkText = MarkText } )
|
||||||
|
|
||||||
|
Coordinate:MarkToGroup( MarkText, TaskGroup )
|
||||||
--Coordinate:MarkToAll( Briefing )
|
--Coordinate:MarkToAll( Briefing )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -323,16 +323,9 @@ do -- TASK_A2G_SEAD
|
|||||||
|
|
||||||
Mission:AddTask( self )
|
Mission:AddTask( self )
|
||||||
|
|
||||||
self:UpdateTaskInfo()
|
|
||||||
|
|
||||||
local ThreatLevel, ThreatText = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
local TargetUnit = TargetSetUnit:GetFirst()
|
|
||||||
local TargetCoord = TargetUnit:GetCoordinate() -- Core.Point#COORDINATE
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Execute a Suppression of Enemy Air Defenses. " ..
|
"Execute a Suppression of Enemy Air Defenses."
|
||||||
ThreatText .. " targets to be expected. Target is" .. TargetCoord:GetMovingText() .. "."
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
@ -344,7 +337,13 @@ do -- TASK_A2G_SEAD
|
|||||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or 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( "Coordinates", TargetCoordinate, 0 )
|
||||||
|
|
||||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
local ThreatLevel, ThreatText
|
||||||
|
if self.Detection then
|
||||||
|
ThreatLevel, ThreatText = self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex )
|
||||||
|
else
|
||||||
|
ThreatLevel, ThreatText = self.TargetSetUnit:CalculateThreatLevelA2G()
|
||||||
|
end
|
||||||
|
self:SetInfo( "Threat", ThreatText .. " [" .. string.rep( "■", ThreatLevel ) .. "]", 11 )
|
||||||
|
|
||||||
if self.Detection then
|
if self.Detection then
|
||||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||||
@ -471,16 +470,9 @@ do -- TASK_A2G_BAI
|
|||||||
|
|
||||||
Mission:AddTask( self )
|
Mission:AddTask( self )
|
||||||
|
|
||||||
self:UpdateTaskInfo()
|
|
||||||
|
|
||||||
local ThreatLevel, ThreatText = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
local TargetUnit = TargetSetUnit:GetFirst()
|
|
||||||
local TargetCoord = TargetUnit:GetCoordinate() -- Core.Point#COORDINATE
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Execute a Battlefield Air Interdiction of a group of enemy targets. " ..
|
"Execute a Battlefield Air Interdiction of a group of enemy targets."
|
||||||
ThreatText .. " targets to be expected. Target is" .. TargetCoord:GetMovingText() .. "."
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
@ -493,7 +485,13 @@ do -- TASK_A2G_BAI
|
|||||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or 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( "Coordinates", TargetCoordinate, 0 )
|
||||||
|
|
||||||
self:SetInfo( "Threat", "[" .. string.rep( "■", self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G() ) .. "]", 11 )
|
local ThreatLevel, ThreatText
|
||||||
|
if self.Detection then
|
||||||
|
ThreatLevel, ThreatText = self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex )
|
||||||
|
else
|
||||||
|
ThreatLevel, ThreatText = self.TargetSetUnit:CalculateThreatLevelA2G()
|
||||||
|
end
|
||||||
|
self:SetInfo( "Threat", ThreatText .. " [" .. string.rep( "■", ThreatLevel ) .. "]", 11 )
|
||||||
|
|
||||||
if self.Detection then
|
if self.Detection then
|
||||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||||
@ -620,18 +618,10 @@ do -- TASK_A2G_CAS
|
|||||||
|
|
||||||
Mission:AddTask( self )
|
Mission:AddTask( self )
|
||||||
|
|
||||||
self:UpdateTaskInfo()
|
|
||||||
|
|
||||||
local ThreatLevel, ThreatText = TargetSetUnit:CalculateThreatLevelA2G()
|
|
||||||
local TargetUnit = TargetSetUnit:GetFirst()
|
|
||||||
local TargetCoord = TargetUnit:GetCoordinate() -- Core.Point#COORDINATE
|
|
||||||
|
|
||||||
self:SetBriefing(
|
self:SetBriefing(
|
||||||
TaskBriefing or
|
TaskBriefing or
|
||||||
"Execute a Close Air Support for a group of enemy targets. " ..
|
"Execute a Close Air Support for a group of enemy targets. " ..
|
||||||
"Beware of friendlies at the vicinity! " ..
|
"Beware of friendlies at the vicinity! "
|
||||||
ThreatText .. " targets to be expected. Target is" .. TargetCoord:GetMovingText() .. "."
|
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -643,9 +633,13 @@ do -- TASK_A2G_CAS
|
|||||||
local TargetCoordinate = self.Detection and self.Detection:GetDetectedItemCoordinate( self.DetectedItemIndex ) or 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( "Coordinates", TargetCoordinate, 0 )
|
||||||
|
|
||||||
local ThreatLevel = self.Detection and self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex ) or self.TargetSetUnit:CalculateThreatLevelA2G()
|
local ThreatLevel, ThreatText
|
||||||
|
if self.Detection then
|
||||||
self:SetInfo( "Threat", "[" .. string.rep( "■", ThreatLevel ) .. "]", 11 )
|
ThreatLevel, ThreatText = self.Detection:GetDetectedItemThreatLevel( self.DetectedItemIndex )
|
||||||
|
else
|
||||||
|
ThreatLevel, ThreatText = self.TargetSetUnit:CalculateThreatLevelA2G()
|
||||||
|
end
|
||||||
|
self:SetInfo( "Threat", ThreatText .. " [" .. string.rep( "■", ThreatLevel ) .. "]", 11 )
|
||||||
|
|
||||||
if self.Detection then
|
if self.Detection then
|
||||||
local DetectedItemsCount = self.TargetSetUnit:Count()
|
local DetectedItemsCount = self.TargetSetUnit:Count()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user