mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-07-16 14:12:47 +00:00
Merge remote-tracking branch 'origin/master-ng' into develop
This commit is contained in:
@@ -43,6 +43,7 @@
|
|||||||
-- @field #boolean landingScheduled `true` once the debrief timer has been registered.
|
-- @field #boolean landingScheduled `true` once the debrief timer has been registered.
|
||||||
-- @field #number lastTakeoffTime Mission time of the last takeoff, used for debouncing.
|
-- @field #number lastTakeoffTime Mission time of the last takeoff, used for debouncing.
|
||||||
-- @field #TARS Callback The TARS Callback object for menu functions etc.
|
-- @field #TARS Callback The TARS Callback object for menu functions etc.
|
||||||
|
-- @field #boolean PilotParameterHelper If true, there will be messages about the correct parameters to the UNIT.
|
||||||
|
|
||||||
---
|
---
|
||||||
-- ## Tracks all states for a single recon sortie.
|
-- ## Tracks all states for a single recon sortie.
|
||||||
@@ -95,6 +96,7 @@ TARS_SESSION.debugunitsearch = false
|
|||||||
-- @field #number redMarkCount Next available mark ID for Red coalition marks.
|
-- @field #number redMarkCount Next available mark ID for Red coalition marks.
|
||||||
-- @field #number blueMarkCount Next available mark ID for Blue coalition marks.
|
-- @field #number blueMarkCount Next available mark ID for Blue coalition marks.
|
||||||
-- @field Functional.Scoring#SCORING scoring MOOSE SCORING instance (nil if mooseScoring is false).
|
-- @field Functional.Scoring#SCORING scoring MOOSE SCORING instance (nil if mooseScoring is false).
|
||||||
|
-- @field #boolean PilotParameterHelper If true, there will be messages about the correct parameters to the UNIT.
|
||||||
|
|
||||||
---
|
---
|
||||||
-- ## Simulates photo-reconnaissance and visual-observation missions in DCS World.
|
-- ## Simulates photo-reconnaissance and visual-observation missions in DCS World.
|
||||||
@@ -133,8 +135,8 @@ TARS_SESSION.debugunitsearch = false
|
|||||||
-- After the debrief the **TARS validation** item reappears for the next sortie.
|
-- After the debrief the **TARS validation** item reappears for the next sortie.
|
||||||
--
|
--
|
||||||
-- ## Localization
|
-- ## Localization
|
||||||
-- All player-facing strings are defined in `TARS.Messages` using a table.
|
|
||||||
--
|
--
|
||||||
|
-- All player-facing strings are defined in `TARS.Messages` using a table.
|
||||||
--
|
--
|
||||||
-- ## Platforms and Settings
|
-- ## Platforms and Settings
|
||||||
--
|
--
|
||||||
@@ -149,9 +151,14 @@ TARS_SESSION.debugunitsearch = false
|
|||||||
-- TARS_Instance.reconTypes["F-16C_50"] = true
|
-- TARS_Instance.reconTypes["F-16C_50"] = true
|
||||||
-- TARS_Instance.parameters["F-16C_50"] = {
|
-- TARS_Instance.parameters["F-16C_50"] = {
|
||||||
-- minAlt=300, maxAlt=8000, maxRoll=10, maxPitch=15, -- Note altitude is AGL!
|
-- minAlt=300, maxAlt=8000, maxRoll=10, maxPitch=15, -- Note altitude is AGL!
|
||||||
-- fov=35, duration=300, offset=math.rad(20),
|
-- fov=35, duration=300, offset=math.rad(20), -- fov = field of view, duration = # max of photos, offset = camera angle in Radians
|
||||||
-- name="F-16C with RECCE pod"
|
-- name="F-16C with RECCE pod"
|
||||||
-- }
|
-- }
|
||||||
|
--
|
||||||
|
-- ### Optical System Parameters Demonstrator
|
||||||
|
--
|
||||||
|
-- The optical system is like a torchlight, the further away from the ground you are, the larger is the area covered. One underestimated effect is however, that on flat land,
|
||||||
|
-- because at angle, you actually cover an elliptic area. [You can checkout the effects of various parameters on this demonstrator](https://applevangelist.github.io/TARS_Optical/tars_optics.html).
|
||||||
--
|
--
|
||||||
-- ### Available Platforms are
|
-- ### Available Platforms are
|
||||||
--
|
--
|
||||||
@@ -178,17 +185,20 @@ TARS_SESSION.debugunitsearch = false
|
|||||||
-- ### Film and detection settings
|
-- ### Film and detection settings
|
||||||
--
|
--
|
||||||
-- TARS.filmLimitEnabled = true
|
-- TARS.filmLimitEnabled = true
|
||||||
-- TARS.filmLimitMax = 25 -- max 25 captured objects
|
-- TARS.filmLimitMax = 25 -- max 25 captured objects
|
||||||
-- TARS.detectUnits = true -- capture UNIT objects
|
-- TARS.detectUnits = true -- capture UNIT objects
|
||||||
-- TARS.detectStatics = false -- capture STATIC objects incl. of FARPs
|
-- TARS.detectStatics = false -- capture STATIC objects incl. of FARPs
|
||||||
--
|
--
|
||||||
-- ### Target UNIT Filters
|
-- ### Target UNIT Filters
|
||||||
--
|
--
|
||||||
-- TARS.units = { air=false, ground=true, ship=true }
|
-- TARS.units = { air=false, ground=true, ship=true }
|
||||||
--
|
--
|
||||||
-- ### Target UNIT Name Filters
|
-- ### Target UNIT Name Filters
|
||||||
--
|
--
|
||||||
-- TARS.targetNameFilter = { enabled = true, keywords = { [coalition.side.BLUE] = { "USA" }, [coalition.side.RED] = { "USSR" },},}
|
-- You always only detect UNITs of the other coalition. E.g. below - a RED unit would only detect BLUE units which have "Hawk" somewhere in the UNIT name.
|
||||||
|
-- Name keywords are tested independent of capitalization, it doesn't matter if it is Hawk, HAWK, or hAwK.
|
||||||
|
--
|
||||||
|
-- TARS.targetNameFilter = { enabled = true, keywords = { [coalition.side.BLUE] = { "Hawk" }, [coalition.side.RED] = { "Scud" },},}
|
||||||
--
|
--
|
||||||
-- ### Target STATIC Filters
|
-- ### Target STATIC Filters
|
||||||
--
|
--
|
||||||
@@ -206,6 +216,7 @@ TARS_SESSION.debugunitsearch = false
|
|||||||
-- TARS.landingDelay = 30 -- check valid landing after this many seconds
|
-- TARS.landingDelay = 30 -- check valid landing after this many seconds
|
||||||
-- TARS.debriefDelay = 60 -- show debriefing after this many seconds
|
-- TARS.debriefDelay = 60 -- show debriefing after this many seconds
|
||||||
-- TARS.landingDistance = 2500 -- land closer than this many meters to a friendly base for debrief
|
-- TARS.landingDistance = 2500 -- land closer than this many meters to a friendly base for debrief
|
||||||
|
-- TARS.PilotParameterHelper = false -- show helper checks on pitch/roll/AGL parameters
|
||||||
--
|
--
|
||||||
-- ## SRS integration
|
-- ## SRS integration
|
||||||
-- All player messages route through `TARS:_MsgUnit()` and `TARS:_MsgCoalition()`.
|
-- All player messages route through `TARS:_MsgUnit()` and `TARS:_MsgCoalition()`.
|
||||||
@@ -283,7 +294,7 @@ TARS = {}
|
|||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
--- @field #string version
|
--- @field #string version
|
||||||
TARS.version = "v2.3.0"
|
TARS.version = "v2.3.1"
|
||||||
|
|
||||||
--- Active locale.
|
--- Active locale.
|
||||||
-- @field #string locale
|
-- @field #string locale
|
||||||
@@ -299,9 +310,10 @@ TARS.valueScoring = 100
|
|||||||
TARS.landingDelay = 30
|
TARS.landingDelay = 30
|
||||||
TARS.debriefDelay = 60
|
TARS.debriefDelay = 60
|
||||||
TARS.landingDistance = 2500
|
TARS.landingDistance = 2500
|
||||||
|
TARS.PilotParameterHelper = false -- If true, there will be messages about the correct parameters to the UNIT.
|
||||||
|
|
||||||
--- @field #number _vAltMin
|
--- @field #number _vAltMin
|
||||||
TARS._vAltMin = 10
|
TARS._vAltMin = 100
|
||||||
--- @field #number _vRangeMin
|
--- @field #number _vRangeMin
|
||||||
TARS._vRangeMin = TARS._vAltMin * 20 -- 200 m
|
TARS._vRangeMin = TARS._vAltMin * 20 -- 200 m
|
||||||
--- @field #number _vAltOpti
|
--- @field #number _vAltOpti
|
||||||
@@ -363,19 +375,19 @@ TARS.reconTypes = {
|
|||||||
-- @field #table parameters
|
-- @field #table parameters
|
||||||
TARS.parameters = {}
|
TARS.parameters = {}
|
||||||
|
|
||||||
TARS.parameters["F-4E-45MC"] = { minAlt=100, maxAlt=6096, maxRoll=10, maxPitch=15, fov=23, duration=120, offset=math.rad(60), overlap=0.25, min_interval=3, name="RF-4E with KS-87 Forward Oblique Camera" }
|
TARS.parameters["F-4E-45MC"] = { minAlt=100, maxAlt=8000, maxRoll=10, maxPitch=15, fov=23, duration=120, offset=math.rad(40), overlap=0.25, min_interval=3, name="RF-4E with KS-87 Forward Oblique Camera" }
|
||||||
TARS.parameters["MiG-21Bis"] = { minAlt=500, maxAlt=5000, maxRoll=10, maxPitch=15, fov=52, duration=140, offset=math.rad(10), overlap=0.25, min_interval=3, name="MiG-21R with Day recce pod" }
|
TARS.parameters["MiG-21Bis"] = { minAlt=500, maxAlt=8000, maxRoll=10, maxPitch=15, fov=52, duration=140, offset=math.rad(40), overlap=0.25, min_interval=3, name="MiG-21R with Day recce pod" }
|
||||||
TARS.parameters["AJS37"] = { minAlt=15, maxAlt=1524, maxRoll=10, maxPitch=15, fov=25, duration=120, offset=math.rad(10), overlap=0.25, min_interval=3, name="SF 37" }
|
TARS.parameters["AJS37"] = { minAlt=15, maxAlt=8000, maxRoll=10, maxPitch=15, fov=25, duration=120, offset=math.rad(40), overlap=0.25, min_interval=3, name="SF 37" }
|
||||||
TARS.parameters["Mirage-F1EE"] = { minAlt=1524, maxAlt=4572, maxRoll=10, maxPitch=15, fov=20, duration=588, offset=math.rad(10), overlap=0.25, min_interval=3, name="Mirage-F1CR with Omera 33" }
|
TARS.parameters["Mirage-F1EE"] = { minAlt=1524, maxAlt=8000, maxRoll=10, maxPitch=15, fov=20, duration=400, offset=math.rad(40), overlap=0.25, min_interval=3, name="Mirage-F1CR with Omera 33" }
|
||||||
TARS.parameters["F-5E-3"] = { minAlt=762, maxAlt=7620, maxRoll=15, maxPitch=15, fov=70, duration=300, offset=math.rad(40), overlap=0.25, min_interval=3, name="F-5E Tigereye" }
|
TARS.parameters["F-5E-3"] = { minAlt=762, maxAlt=8000, maxRoll=15, maxPitch=15, fov=70, duration=300, offset=math.rad(40), overlap=0.25, min_interval=3, name="F-5E Tigereye" }
|
||||||
TARS.parameters["F-14A-135-GR"] = { minAlt=750, maxAlt=5000, maxRoll=10, maxPitch=20, fov=14, duration=400, offset=math.rad(45), overlap=0.25, min_interval=3, name="F-14A TARPS KS-87D" }
|
TARS.parameters["F-14A-135-GR"] = { minAlt=750, maxAlt=8000, maxRoll=10, maxPitch=20, fov=14, duration=400, offset=math.rad(45), overlap=0.25, min_interval=3, name="F-14A TARPS KS-87D" }
|
||||||
TARS.parameters["F-14B"] = { minAlt=228, maxAlt=1524, maxRoll=10, maxPitch=20, fov=85, duration=80, offset=math.rad(10), overlap=0.25, min_interval=3, name="F-14B TARPS KA-99A" }
|
TARS.parameters["F-14B"] = { minAlt=228, maxAlt=8000, maxRoll=10, maxPitch=20, fov=85, duration=400, offset=math.rad(40), overlap=0.25, min_interval=3, name="F-14B TARPS KA-99A" }
|
||||||
TARS.parameters["TF-51D"] = { minAlt=250, maxAlt=5500, maxRoll=15, maxPitch=15, fov=60, duration=400, offset=math.rad(10), overlap=0.5, min_interval=5, name="TF-51D Mustang RF-51D Photo Recon" }
|
TARS.parameters["TF-51D"] = { minAlt=250, maxAlt=2500, maxRoll=15, maxPitch=15, fov=60, duration=400, offset=math.rad(10), overlap=0.5, min_interval=5, name="TF-51D Mustang RF-51D Photo Recon" }
|
||||||
TARS.parameters["P-51D"] = { minAlt=250, maxAlt=5500, maxRoll=15, maxPitch=15, fov=60, duration=400, offset=math.rad(10), overlap=0.5, min_interval=5,name="P-51D Mustang F-6D Photo Recon" }
|
TARS.parameters["P-51D"] = { minAlt=250, maxAlt=2500, maxRoll=15, maxPitch=15, fov=60, duration=400, offset=math.rad(10), overlap=0.5, min_interval=5,name="P-51D Mustang F-6D Photo Recon" }
|
||||||
TARS.parameters["P-51D-30-NA"] = { minAlt=250, maxAlt=6000, maxRoll=15, maxPitch=15, fov=60, duration=400, offset=math.rad(10), overlap=0.5, min_interval=5,name="P-51D-30 Mustang F-6D Photo Recon" }
|
TARS.parameters["P-51D-30-NA"] = { minAlt=250, maxAlt=2500, maxRoll=15, maxPitch=15, fov=60, duration=400, offset=math.rad(10), overlap=0.5, min_interval=5,name="P-51D-30 Mustang F-6D Photo Recon" }
|
||||||
TARS.parameters["SpitfireLFMkIX"]= { minAlt=150, maxAlt=5000, maxRoll=15, maxPitch=15, fov=55, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="Spitfire LF Mk IX PR Recon" }
|
TARS.parameters["SpitfireLFMkIX"]= { minAlt=150, maxAlt=2500, maxRoll=15, maxPitch=15, fov=55, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="Spitfire LF Mk IX PR Recon" }
|
||||||
TARS.parameters["FW-190A8"] = { minAlt=200, maxAlt=5500, maxRoll=15, maxPitch=15, fov=60, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="FW-190 A-8 Tactical Recon" }
|
TARS.parameters["FW-190A8"] = { minAlt=200, maxAlt=2500, maxRoll=15, maxPitch=15, fov=60, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="FW-190 A-8 Tactical Recon" }
|
||||||
TARS.parameters["FW-190D9"] = { minAlt=250, maxAlt=6000, maxRoll=15, maxPitch=15, fov=60, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="FW-190 D-9 Tactical Recon" }
|
TARS.parameters["FW-190D9"] = { minAlt=250, maxAlt=2500, maxRoll=15, maxPitch=15, fov=60, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="FW-190 D-9 Tactical Recon" }
|
||||||
TARS.parameters["SA342M"] = { minAlt=20, maxAlt=1000, maxRoll=35, maxPitch=25, fov=18, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="SA342M EO/IR LIGHT RECO" }
|
TARS.parameters["SA342M"] = { minAlt=20, maxAlt=1000, maxRoll=35, maxPitch=25, fov=18, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="SA342M EO/IR LIGHT RECO" }
|
||||||
TARS.parameters["SA342L"] = { minAlt=20, maxAlt=1000, maxRoll=35, maxPitch=25, fov=18, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="SA342L EO/IR LIGHT RECO" }
|
TARS.parameters["SA342L"] = { minAlt=20, maxAlt=1000, maxRoll=35, maxPitch=25, fov=18, duration=350, offset=math.rad(10), overlap=0.5, min_interval=5,name="SA342L EO/IR LIGHT RECO" }
|
||||||
TARS.parameters["OH58D"] = { minAlt=30, maxAlt=1200, maxRoll=35, maxPitch=25, fov=12, duration=350, offset=math.rad(12), overlap=0.5, min_interval=5,name="OH-58D MMS EO/IR RECO" }
|
TARS.parameters["OH58D"] = { minAlt=30, maxAlt=1200, maxRoll=35, maxPitch=25, fov=12, duration=350, offset=math.rad(12), overlap=0.5, min_interval=5,name="OH-58D MMS EO/IR RECO" }
|
||||||
@@ -705,8 +717,9 @@ function TARS_SESSION:New(unit, Callback)
|
|||||||
local self = BASE:Inherit(self, BASE:New())
|
local self = BASE:Inherit(self, BASE:New())
|
||||||
self.lid = string.format("TARS_SESSION %s | ", TARS.version)
|
self.lid = string.format("TARS_SESSION %s | ", TARS.version)
|
||||||
self.Callback = Callback
|
self.Callback = Callback
|
||||||
|
self.PilotParameterHelper = Callback.PilotParameterHelper
|
||||||
self:SetObjectParams(unit)
|
self:SetObjectParams(unit)
|
||||||
self:I("TARS_SESSION created — unit=" .. tostring(self.objectName)
|
self:T("TARS_SESSION created — unit=" .. tostring(self.objectName)
|
||||||
.. " type=" .. tostring(self.type))
|
.. " type=" .. tostring(self.type))
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
@@ -776,7 +789,7 @@ function TARS_SESSION:CaptureData()
|
|||||||
self.capturing = true
|
self.capturing = true
|
||||||
self.loop = true
|
self.loop = true
|
||||||
self.standby = false
|
self.standby = false
|
||||||
self:I("FILM START — film=" .. self.duration .. "s")
|
self:T("FILM START — film=" .. self.duration .. "s")
|
||||||
self.Callback:_MsgUnit(
|
self.Callback:_MsgUnit(
|
||||||
self.Callback:_Txt("TARS_FILM_START", self.duration), 5, self.playerName)
|
self.Callback:_Txt("TARS_FILM_START", self.duration), 5, self.playerName)
|
||||||
timer.scheduleFunction(TARS_SESSION.CaptureLoop, self, timer.getTime() + 2)
|
timer.scheduleFunction(TARS_SESSION.CaptureLoop, self, timer.getTime() + 2)
|
||||||
@@ -854,7 +867,7 @@ end
|
|||||||
-- @param Wrapper.Unit#UNIT _Object MOOSE UNIT or STATIC.
|
-- @param Wrapper.Unit#UNIT _Object MOOSE UNIT or STATIC.
|
||||||
-- @return #boolean
|
-- @return #boolean
|
||||||
function TARS_SESSION:_ValidateObjectFound(_Object)
|
function TARS_SESSION:_ValidateObjectFound(_Object)
|
||||||
self:I(self.lid.."_ValidateObjectFound " .. tostring(_Object:GetName()))
|
self:T(self.lid.."_ValidateObjectFound " .. tostring(_Object:GetName()))
|
||||||
|
|
||||||
if not (_Object and _Object:IsAlive()) then return false end
|
if not (_Object and _Object:IsAlive()) then return false end
|
||||||
if _Object:GetCoalition() == self.coa then return false end
|
if _Object:GetCoalition() == self.coa then return false end
|
||||||
@@ -862,10 +875,18 @@ function TARS_SESSION:_ValidateObjectFound(_Object)
|
|||||||
if self.Callback.targetNameFilter.enabled then
|
if self.Callback.targetNameFilter.enabled then
|
||||||
local keywords = self.Callback.targetNameFilter.keywords[_Object:GetCoalition()]
|
local keywords = self.Callback.targetNameFilter.keywords[_Object:GetCoalition()]
|
||||||
local targetName = string.lower(_Object:GetName() or "")
|
local targetName = string.lower(_Object:GetName() or "")
|
||||||
|
local targetGroup
|
||||||
|
local targetGroupName
|
||||||
|
if _Object:IsInstanceOf("UNIT") then
|
||||||
|
targetGroup = _Object:GetGroup()
|
||||||
|
if targetGroup then targetGroupName = string.lower(targetGroup:GetName()) end
|
||||||
|
end
|
||||||
if type(keywords) == "string" then keywords = { keywords } end
|
if type(keywords) == "string" then keywords = { keywords } end
|
||||||
local matched = false
|
local matched = false
|
||||||
for _, kw in pairs(keywords or {}) do
|
for _, kw in pairs(keywords or {}) do
|
||||||
if string.find(targetName, string.lower(kw)) then matched = true; break end
|
if string.find(targetName, string.lower(kw)) then matched = true; break end
|
||||||
|
-- noob catch
|
||||||
|
if targetGroupName and string.find(targetName, string.lower(kw)) then matched = true; break end
|
||||||
end
|
end
|
||||||
if not matched then return false end
|
if not matched then return false end
|
||||||
end
|
end
|
||||||
@@ -874,17 +895,17 @@ function TARS_SESSION:_ValidateObjectFound(_Object)
|
|||||||
local typeNameLower = string.lower(typeName)
|
local typeNameLower = string.lower(typeName)
|
||||||
local objCat = _Object:GetCategory()
|
local objCat = _Object:GetCategory()
|
||||||
|
|
||||||
self:I(self.lid.."_ValidateObjectFound Name Filter Passed!")
|
self:T(self.lid.."_ValidateObjectFound Name Filter Passed!")
|
||||||
|
|
||||||
if objCat == Object.Category.UNIT then
|
if objCat == Object.Category.UNIT then
|
||||||
local desc = _Object:GetDesc()
|
local desc = _Object:GetDesc()
|
||||||
local unitCat = desc and desc.category
|
local unitCat = desc and desc.category
|
||||||
self:I(self.lid.."_ValidateObjectFound Name Category Check "..tostring(unitCat))
|
self:T(self.lid.."_ValidateObjectFound Name Category Check "..tostring(unitCat))
|
||||||
if unitCat == Unit.Category.AIRPLANE or unitCat == Unit.Category.HELICOPTER then
|
if unitCat == Unit.Category.AIRPLANE or unitCat == Unit.Category.HELICOPTER then
|
||||||
return self.Callback.units.air
|
return self.Callback.units.air
|
||||||
elseif unitCat == Unit.Category.GROUND_UNIT then
|
elseif unitCat == Unit.Category.GROUND_UNIT then
|
||||||
return self.Callback.units.ground
|
return self.Callback.units.ground
|
||||||
elseif unitCat == Unit.Category.SHIP then
|
elseif unitCat == Unit.Category.SHIP then
|
||||||
return self.Callback.units.ship
|
return self.Callback.units.ship
|
||||||
end
|
end
|
||||||
elseif objCat == Object.Category.STATIC or objCat == Object.Category.BASE then
|
elseif objCat == Object.Category.STATIC or objCat == Object.Category.BASE then
|
||||||
@@ -941,7 +962,7 @@ function TARS_SESSION:CaptureLoop()
|
|||||||
|
|
||||||
-- Debug: show interval when debugunitsearch is active
|
-- Debug: show interval when debugunitsearch is active
|
||||||
if self.debugunitsearch then
|
if self.debugunitsearch then
|
||||||
self:I(self.lid .. string.format(
|
self:T(self.lid .. string.format(
|
||||||
"CaptureLoop interval=%.1fs duration=%.0fs", interval, self.duration))
|
"CaptureLoop interval=%.1fs duration=%.0fs", interval, self.duration))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -1062,7 +1083,7 @@ function TARS_SESSION:FindTargets()
|
|||||||
else
|
else
|
||||||
a = b -- Fallback: Kreis
|
a = b -- Fallback: Kreis
|
||||||
center_shift = 0
|
center_shift = 0
|
||||||
self:I(self.lid .. "FindTargets: elev-fov margin too small, fallback to circle")
|
self:T(self.lid .. "FindTargets: elev-fov margin too small, fallback to circle")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Offset-Punkt mit korrektem center_shift
|
-- Offset-Punkt mit korrektem center_shift
|
||||||
@@ -1074,7 +1095,7 @@ function TARS_SESSION:FindTargets()
|
|||||||
-- Erwarteter Offset-Punkt: Flugzeug + (d_ground+shift) in Flugrichtung
|
-- Erwarteter Offset-Punkt: Flugzeug + (d_ground+shift) in Flugrichtung
|
||||||
local expected_x = unit_pos.x + math.sin(math.rad(hdg)) * (d_ground + center_shift)
|
local expected_x = unit_pos.x + math.sin(math.rad(hdg)) * (d_ground + center_shift)
|
||||||
local expected_z = unit_pos.z + math.cos(math.rad(hdg)) * (d_ground + center_shift)
|
local expected_z = unit_pos.z + math.cos(math.rad(hdg)) * (d_ground + center_shift)
|
||||||
self:I(string.format(
|
self:T(string.format(
|
||||||
"OFFSET DRIFT: _OffsetCalc=(%.0f,%.0f) expected=(%.0f,%.0f) drift=(Δx=%.0f,Δz=%.0f)",
|
"OFFSET DRIFT: _OffsetCalc=(%.0f,%.0f) expected=(%.0f,%.0f) drift=(Δx=%.0f,Δz=%.0f)",
|
||||||
offset.x, offset.z,
|
offset.x, offset.z,
|
||||||
expected_x, expected_z,
|
expected_x, expected_z,
|
||||||
@@ -1099,13 +1120,15 @@ function TARS_SESSION:FindTargets()
|
|||||||
or ZONE_RADIUS:New("TARS Debug", coordinate:GetVec2(), scan_radius)
|
or ZONE_RADIUS:New("TARS Debug", coordinate:GetVec2(), scan_radius)
|
||||||
|
|
||||||
--if searchzone then
|
--if searchzone then
|
||||||
--if searchzone.DrawID then searchzone:UndrawZone() end
|
if searchzone.DrawID then searchzone:UndrawZone() end
|
||||||
searchzone:UpdateFromVec2(coordinate:GetVec2(), scan_radius)
|
searchzone:UpdateFromVec2(coordinate:GetVec2(), scan_radius)
|
||||||
searchzone:DrawZone(-1, {0, 0, 1}, 1, {0, 1, 0}, .2, 2, true)
|
searchzone:DrawZone(-1, {0, 0, 1}, 1, {0, 1, 0}, .2, 2, true)
|
||||||
self.searchzone = searchzone
|
self.searchzone = searchzone
|
||||||
--end
|
--end
|
||||||
|
end
|
||||||
self:I({ Roll = roll, Pitch = pitch, AGL = alt, a = a, b = b, shift = center_shift })
|
|
||||||
|
if self.PilotParameterHelper == true then
|
||||||
|
self:T({ Roll = roll, Pitch = pitch, AGL = alt, a = a, b = b, shift = center_shift })
|
||||||
|
|
||||||
if roll > params.maxRoll then
|
if roll > params.maxRoll then
|
||||||
MESSAGE:New(string.format("Roll - NOK out of parameters (%d°)!", roll), 9, "PARAM"):ToUnit(unit)
|
MESSAGE:New(string.format("Roll - NOK out of parameters (%d°)!", roll), 9, "PARAM"):ToUnit(unit)
|
||||||
@@ -1136,7 +1159,7 @@ function TARS_SESSION:FindTargets()
|
|||||||
local lx = dx * sin_h + dz * cos_h
|
local lx = dx * sin_h + dz * cos_h
|
||||||
local ly = -dx * cos_h + dz * sin_h
|
local ly = -dx * cos_h + dz * sin_h
|
||||||
local ellipse_val = (lx/a)^2 + (ly/b)^2
|
local ellipse_val = (lx/a)^2 + (ly/b)^2
|
||||||
self:I(string.format(
|
self:T(string.format(
|
||||||
"ELLIPSE CHECK '%s': dx=%.0f dz=%.0f lx=%.0f ly=%.0f val=%.2f %s",
|
"ELLIPSE CHECK '%s': dx=%.0f dz=%.0f lx=%.0f ly=%.0f val=%.2f %s",
|
||||||
u:GetName(), dx, dz, lx, ly, ellipse_val,
|
u:GetName(), dx, dz, lx, ly, ellipse_val,
|
||||||
ellipse_val <= 1 and "HIT ✓" or "MISS (außerhalb)"))
|
ellipse_val <= 1 and "HIT ✓" or "MISS (außerhalb)"))
|
||||||
@@ -1159,7 +1182,7 @@ function TARS_SESSION:FindTargets()
|
|||||||
|
|
||||||
-- Debug SET_UNIT (nur wenn debug flag gesetzt)
|
-- Debug SET_UNIT (nur wenn debug flag gesetzt)
|
||||||
if self.debug == true then
|
if self.debug == true then
|
||||||
self:I(self.lid .. "FindTargets Debug SET_UNIT created")
|
self:T(self.lid .. "FindTargets Debug SET_UNIT created")
|
||||||
local debugunitset = SET_UNIT:New():FilterCategories("ground"):FilterCoalitions("red"):FilterOnce()
|
local debugunitset = SET_UNIT:New():FilterCategories("ground"):FilterCoalitions("red"):FilterOnce()
|
||||||
for _, u in pairs(debugunitset and debugunitset.Set or {}) do
|
for _, u in pairs(debugunitset and debugunitset.Set or {}) do
|
||||||
if self:_ValidateObjectFound(u) then
|
if self:_ValidateObjectFound(u) then
|
||||||
@@ -1404,7 +1427,7 @@ function TARS:CheckTask(unit)
|
|||||||
TARS.groundMenus[playerName].playerName = playerName
|
TARS.groundMenus[playerName].playerName = playerName
|
||||||
|
|
||||||
if reconOk then
|
if reconOk then
|
||||||
self:I("VALIDATE OK — " .. unit:GetName() .. " / " .. tostring(playerName))
|
self:T("VALIDATE OK — " .. unit:GetName() .. " / " .. tostring(playerName))
|
||||||
self:_MenuRemoveValidation(playerName)
|
self:_MenuRemoveValidation(playerName)
|
||||||
-- Build the platform info block using localized labels
|
-- Build the platform info block using localized labels
|
||||||
local msg = self:_Txt("TARS_VALID_OK_HDR")
|
local msg = self:_Txt("TARS_VALID_OK_HDR")
|
||||||
@@ -1416,7 +1439,7 @@ function TARS:CheckTask(unit)
|
|||||||
.. self:_Txt("TARS_PLATFORM_FILM") .. " : " .. params.duration .. " expositions"
|
.. self:_Txt("TARS_PLATFORM_FILM") .. " : " .. params.duration .. " expositions"
|
||||||
self:_MsgUnit(msg, 15, playerName,true)
|
self:_MsgUnit(msg, 15, playerName,true)
|
||||||
else
|
else
|
||||||
self:I("VALIDATE REFUSED — " .. unit:GetName() .. " ammo=" .. tostring(refusedWeapon))
|
self:T("VALIDATE REFUSED — " .. unit:GetName() .. " ammo=" .. tostring(refusedWeapon))
|
||||||
local msg = self:_Txt("TARS_VALID_REFUSED_WPN")
|
local msg = self:_Txt("TARS_VALID_REFUSED_WPN")
|
||||||
if refusedWeapon then
|
if refusedWeapon then
|
||||||
msg = msg .. "\n" .. self:_Txt("TARS_VALID_REFUSED_AMMO", refusedWeapon)
|
msg = msg .. "\n" .. self:_Txt("TARS_VALID_REFUSED_AMMO", refusedWeapon)
|
||||||
@@ -1693,7 +1716,7 @@ end
|
|||||||
-- @param Wrapper.Unit#UNIT unit
|
-- @param Wrapper.Unit#UNIT unit
|
||||||
-- @param #string playerName
|
-- @param #string playerName
|
||||||
function TARS:AddBaseMenu(unit, playerName)
|
function TARS:AddBaseMenu(unit, playerName)
|
||||||
self:I(self.lid .. "AddBaseMenu — " .. unit:GetName()
|
self:T(self.lid .. "AddBaseMenu — " .. unit:GetName()
|
||||||
.. " / " .. tostring(playerName))
|
.. " / " .. tostring(playerName))
|
||||||
|
|
||||||
local typeName = unit:GetTypeName()
|
local typeName = unit:GetTypeName()
|
||||||
@@ -1754,7 +1777,7 @@ function TARS:AddBaseMenu(unit, playerName)
|
|||||||
|
|
||||||
self:_MenuAddValidation(playerName)
|
self:_MenuAddValidation(playerName)
|
||||||
|
|
||||||
self:I(self.lid .. "MENU created — " .. tostring(playerName)
|
self:T(self.lid .. "MENU created — " .. tostring(playerName)
|
||||||
.. " group=" .. grp:GetName())
|
.. " group=" .. grp:GetName())
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2055,4 +2078,3 @@ end
|
|||||||
function TARS:OnAfterDataProcessing(TargetSnap)
|
function TARS:OnAfterDataProcessing(TargetSnap)
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1620,7 +1620,7 @@ function MSRS:PlayText(Text, Delay, Coordinate, Speed, Speaker)
|
|||||||
else
|
else
|
||||||
|
|
||||||
local speaker = Speaker or self.Speaker
|
local speaker = Speaker or self.Speaker
|
||||||
|
|
||||||
if self.backend==MSRS.Backend.GRPC then
|
if self.backend==MSRS.Backend.GRPC then
|
||||||
self:T(self.lid.."Transmitting")
|
self:T(self.lid.."Transmitting")
|
||||||
self:_DCSgRPCtts(Text, nil, nil , nil, nil, nil, nil, Coordinate)
|
self:_DCSgRPCtts(Text, nil, nil , nil, nil, nil, nil, Coordinate)
|
||||||
@@ -2103,19 +2103,16 @@ function MSRS:_HoundTextToSpeech(Message,Frequencies,Modulations,Volume,Label,Co
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
Frequencies = UTILS.EnsureTable(Frequencies)
|
Frequencies = UTILS.EnsureTable(Frequencies or self.frequencies)
|
||||||
Modulations = UTILS.EnsureTable(Modulations)
|
Modulations = UTILS.EnsureTable(Modulations or self.modulations)
|
||||||
|
|
||||||
local ffs = {}
|
local ffs = {}
|
||||||
for _,_f in pairs(Frequencies or self.frequencies) do
|
for _,_f in pairs(Frequencies) do
|
||||||
table.insert(ffs,string.format("%.1f",_f))
|
table.insert(ffs,string.format("%.1f",_f))
|
||||||
end
|
end
|
||||||
|
|
||||||
local freqs = table.concat(ffs, ",")
|
local freqs = table.concat(ffs, ",")
|
||||||
|
local modus = table.concat(Modulations, ",")
|
||||||
|
|
||||||
|
|
||||||
local modus = table.concat(Modulations or self.modulations, ",")
|
|
||||||
|
|
||||||
local coal=Coalition or self.coalition
|
local coal=Coalition or self.coalition
|
||||||
local gender=Gender or self.gender
|
local gender=Gender or self.gender
|
||||||
@@ -2159,7 +2156,7 @@ function MSRS:_HoundTextToSpeech(Message,Frequencies,Modulations,Volume,Label,Co
|
|||||||
gender = gender,
|
gender = gender,
|
||||||
speaker = Speaker or self.Speaker,
|
speaker = Speaker or self.Speaker,
|
||||||
}
|
}
|
||||||
|
|
||||||
local speechtime = HoundTTS.Transmit(Message, TransmissionP, ProviderP)
|
local speechtime = HoundTTS.Transmit(Message, TransmissionP, ProviderP)
|
||||||
|
|
||||||
return speechtime
|
return speechtime
|
||||||
|
|||||||
Reference in New Issue
Block a user