mirror of
https://github.com/weyne85/DCS-ExportScripts.git
synced 2025-10-29 16:58:18 +00:00
Add Help functions: ExportScript.Tools.getListIndicatorValue() ExportScript.Tools.RoundFreqeuncy() replace previous code with calls to the new functions. Add new PDF Documenation Last version for DCS World 1.5.8 and 2.5.0
3014 lines
125 KiB
Lua
3014 lines
125 KiB
Lua
-- Flaming Cliffs Auxiliary Functons
|
||
-- Version 1.0.2
|
||
|
||
-- Workaround for engine start-up
|
||
ExportScript.AF.LeftEngineOn = false
|
||
ExportScript.AF.RightEngineOn = false
|
||
|
||
-- Weapon Panel for Su-25A and Su-25T
|
||
function ExportScript.AF.FC_WeaponPanel_SU25(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
|
||
if ExportScript.AF.TmpWeaponPanelPresend == nil then
|
||
ExportScript.AF.TmpWeaponPanelPresend = {[101] = 0, [102] = 0, [103] = 0, [104] = 0, [105] = 0, [106] = 0, [107] = 0, [108] = 0, [109] = 0, [110] = 0}
|
||
end
|
||
|
||
if ExportScript.AF.TmpWeaponPanelActive == nil then
|
||
ExportScript.AF.TmpWeaponPanelActive = {[201] = 0, [202] = 0, [203] = 0, [204] = 0, [205] = 0, [206] = 0, [207] = 0, [208] = 0, [209] = 0, [210] = 0}
|
||
end
|
||
|
||
if ExportScript.AF.TmpWeaponPanel == nil then
|
||
ExportScript.AF.TmpWeaponPanel = {[231] = 0, [232] = 0, [233] = 0, [234] = 0, [235] = 0}
|
||
end
|
||
|
||
if ExportScript.AF.EventNumberFC_WeaponPanel == nil then
|
||
ExportScript.AF.EventNumberFC_WeaponPanel = 0
|
||
end
|
||
|
||
if(ExportScript.AF.EventNumberFC_WeaponPanel < ExportScript.AF.EventNumber) then
|
||
ExportScript.AF.EventNumberFC_WeaponPanel = ExportScript.AF.EventNumber
|
||
-- defination
|
||
ExportScript.AF.PayloadInfo = LoGetPayloadInfo()
|
||
if ExportScript.AF.PayloadInfo ~= nil then
|
||
if ExportScript.AF.CurrentStationTmp == nil then
|
||
ExportScript.AF.CurrentStationTmp = -1
|
||
end
|
||
if ExportScript.AF.CannonContainer == nil then -- Find Cannon-Containers, aka SPPU_22
|
||
ExportScript.AF.CannonContainer = {}
|
||
ExportScript.AF.CannonContainer.counter = 0
|
||
table.foreach(ExportScript.AF.PayloadInfo.Stations, ExportScript.AF.WeaponStatusPanel_FindCannonContainer)
|
||
end
|
||
|
||
if ExportScript.AF.PayloadInfo.CurrentStation > 0 and
|
||
ExportScript.AF.CurrentStationTmp ~= ExportScript.AF.PayloadInfo.CurrentStation then
|
||
ExportScript.AF.CurrentStationTmp = ExportScript.AF.PayloadInfo.CurrentStation
|
||
|
||
ExportScript.AF.TmpStationToPanel = {}
|
||
ExportScript.AF.TmpStationToPanel[1] = {Panel = 1, StationID = 101, CurrentID = 201 } -- left
|
||
ExportScript.AF.TmpStationToPanel[2] = {Panel = 10, StationID = 110, CurrentID = 210 } -- right
|
||
ExportScript.AF.TmpStationToPanel[3] = {Panel = 2, StationID = 102, CurrentID = 202 }
|
||
ExportScript.AF.TmpStationToPanel[4] = {Panel = 9, StationID = 109, CurrentID = 209 }
|
||
ExportScript.AF.TmpStationToPanel[5] = {Panel = 3, StationID = 103, CurrentID = 203 }
|
||
ExportScript.AF.TmpStationToPanel[6] = {Panel = 8, StationID = 108, CurrentID = 208 }
|
||
ExportScript.AF.TmpStationToPanel[7] = {Panel = 4, StationID = 104, CurrentID = 204 }
|
||
ExportScript.AF.TmpStationToPanel[8] = {Panel = 7, StationID = 107, CurrentID = 207 }
|
||
ExportScript.AF.TmpStationToPanel[9] = {Panel = 5, StationID = 105, CurrentID = 205 }
|
||
ExportScript.AF.TmpStationToPanel[10] = {Panel = 6, StationID = 106, CurrentID = 206 }
|
||
|
||
-- ExportScript.AF.TmpWeaponPanelActive reset
|
||
for i = 201, 210, 1 do
|
||
ExportScript.AF.TmpWeaponPanelActive[i] = 0
|
||
end
|
||
|
||
if ExportScript.AF.TmpStationToPanel[ExportScript.AF.PayloadInfo.CurrentStation] ~= nil then
|
||
ExportScript.AF.TmpWeaponPanelActive[ExportScript.AF.TmpStationToPanel[ExportScript.AF.PayloadInfo.CurrentStation].CurrentID] = 1 -- currrent value
|
||
|
||
table.foreach(ExportScript.AF.PayloadInfo.Stations, ExportScript.AF.WeaponStatusPanel_selectCurrentPayloadStation) -- corresponding station
|
||
end
|
||
|
||
end
|
||
|
||
local lMainGun = 1.0 -- Full max 250 Rounds "F"
|
||
local lReserve = 1.0
|
||
if ExportScript.AF.PayloadInfo.Cannon.shells == 0 then
|
||
lMainGun = 0.0 -- transversely striped
|
||
lReserve = 0.0 -- transversely striped
|
||
elseif ExportScript.AF.PayloadInfo.Cannon.shells < 65 then
|
||
lMainGun = 0.1 -- "E"
|
||
elseif ExportScript.AF.PayloadInfo.Cannon.shells < 125 then
|
||
lMainGun = 0.3 -- "1/2" -- "3/4"
|
||
elseif ExportScript.AF.PayloadInfo.Cannon.shells < 187 then
|
||
lMainGun = 0.6 -- "1/4"
|
||
end
|
||
|
||
local lWeaponType = 0.0 -- transversely striped
|
||
if ExportScript.AF.PayloadInfo.CurrentStation > 0 then
|
||
if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level1 == 4 then
|
||
if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level2 == 4 then -- Weapon type Missle
|
||
lWeaponType = 0.1 -- MSL
|
||
elseif ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level2 == 7 then -- Weapon type NURS with Container
|
||
if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level3 == 33 then -- Weapon type Rocket
|
||
lWeaponType = 0.2 -- RCT
|
||
end
|
||
elseif ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].weapon.level2 == 5 then -- Weapon type Bomb
|
||
lWeaponType = 0.3 -- BB
|
||
end
|
||
end
|
||
end
|
||
|
||
local lOuterCannon = 0.0 -- transversely striped
|
||
local lInnerCannon = 0.0 -- transversely striped
|
||
if ExportScript.AF.CannonContainer.counter > 0 then
|
||
for i = 7, 10, 1 do
|
||
if ExportScript.AF.CannonContainer[i] == "{E92CBFE5-C153-11d8-9897-000476191836}" then -- SPPU_22 with 260 rounds
|
||
if i == 7 or i == 8 then
|
||
lOuterCannon = 1.0 -- Full max 260 Rounds "F"
|
||
if ExportScript.AF.PayloadInfo.Stations[i].count == 0 then
|
||
lOuterCannon = 0.0 -- transversely striped
|
||
ExportScript.AF.CannonContainer[i] = "empty" -- do not check
|
||
elseif ExportScript.AF.PayloadInfo.Stations[i].count < 65 then
|
||
lOuterCannon = 0.1 -- "E"
|
||
elseif ExportScript.AF.PayloadInfo.Stations[i].count < 130 then
|
||
lOuterCannon = 0.3 -- "3/4" -- "1/2"
|
||
elseif ExportScript.AF.PayloadInfo.Stations[i].count < 195 then
|
||
lOuterCannon = 0.6 -- "1/4"
|
||
end
|
||
else
|
||
lInnerCannon = 1.0 -- Full max 260 Rounds "F"
|
||
if ExportScript.AF.PayloadInfo.Stations[i].count == 0 then
|
||
lInnerCannon = 0.0 -- transversely striped
|
||
ExportScript.AF.CannonContainer[i] = "empty" -- do not check
|
||
elseif ExportScript.AF.PayloadInfo.Stations[i].count < 65 then
|
||
lInnerCannon = 0.1 -- "E"
|
||
elseif ExportScript.AF.PayloadInfo.Stations[i].count < 130 then
|
||
lInnerCannon = 0.3 -- "3/4" -- "1/2"
|
||
elseif ExportScript.AF.PayloadInfo.Stations[i].count < 195 then
|
||
lInnerCannon = 0.6 -- "1/4"
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
--[[
|
||
Weapon Panel
|
||
|
|
||
---------------------------------------------------
|
||
| | | | | | | | | | |
|
||
1 2 3 4 5 C 6 7 8 9 10 -- display
|
||
1 3 5 7 9 10 8 6 4 2 -- Payload ID
|
||
]]
|
||
-- Payload Info
|
||
-- weapon stations (panel) 1 (left) - 10 (right), no lamp for center station
|
||
|
||
-- WeaponPresend1 {0, 1}
|
||
-- WeaponPresend2 {0, 1}
|
||
-- WeaponPresend3 {0, 1}
|
||
-- WeaponPresend4 {0, 1}
|
||
-- WeaponPresend5 {0, 1}
|
||
-- WeaponPresend6 {0, 1}
|
||
-- WeaponPresend7 {0, 1}
|
||
-- WeaponPresend8 {0, 1}
|
||
-- WeaponPresend9 {0, 1}
|
||
-- WeaponPresend10 {0, 1}
|
||
-- WeaponActive1 {0, 1}
|
||
-- WeaponActive2 {0, 1}
|
||
-- WeaponActive3 {0, 1}
|
||
-- WeaponActive4 {0, 1}
|
||
-- WeaponActive5 {0, 1}
|
||
-- WeaponActive6 {0, 1}
|
||
-- WeaponActive7 {0, 1}
|
||
-- WeaponActive8 {0, 1}
|
||
-- WeaponActive9 {0, 1}
|
||
-- WeaponActive10 {0, 1}
|
||
-- MainCannon {transversely striped = 0.0, 1/4 = 01, 1/2 = 03, 3/4 = 0.6, Full = 1.0}
|
||
-- WeaponType {transversely striped = 0.0, Missle = 0.1, Rocket = 0.2, Bomb = 0.3}
|
||
-- OuterCannon {transversely striped = 0.0, 1/4 = 01, 1/2 = 03, 3/4 = 0.6, Full = 1.0}
|
||
-- InnerCannon {transversely striped = 0.0, 1/4 = 01, 1/2 = 03, 3/4 = 0.6, Full = 1.0}
|
||
-- ReserveWeapon {transversely striped = 0.0, Gun = 1.0}
|
||
|
||
ExportScript.AF.TmpWeaponPanel = {}
|
||
ExportScript.AF.TmpWeaponPanel[231] = lMainGun -- main cannon shells
|
||
ExportScript.AF.TmpWeaponPanelPresend[101] = (ExportScript.AF.PayloadInfo.Stations[1].count > 0 and 1 or 0) -- weapon presend panel 1
|
||
ExportScript.AF.TmpWeaponPanelPresend[102] = (ExportScript.AF.PayloadInfo.Stations[3].count > 0 and 1 or 0) -- weapon presend panel 2
|
||
ExportScript.AF.TmpWeaponPanelPresend[103] = (ExportScript.AF.PayloadInfo.Stations[5].count > 0 and 1 or 0) -- weapon presend panel 3
|
||
ExportScript.AF.TmpWeaponPanelPresend[104] = (ExportScript.AF.PayloadInfo.Stations[7].count > 0 and 1 or 0) -- weapon presend panel 4
|
||
ExportScript.AF.TmpWeaponPanelPresend[105] = (ExportScript.AF.PayloadInfo.Stations[9].count > 0 and 1 or 0) -- weapon presend panel 5
|
||
ExportScript.AF.TmpWeaponPanelPresend[106] = (ExportScript.AF.PayloadInfo.Stations[10].count > 0 and 1 or 0) -- weapon presend panel 6
|
||
ExportScript.AF.TmpWeaponPanelPresend[107] = (ExportScript.AF.PayloadInfo.Stations[8].count > 0 and 1 or 0) -- weapon presend panel 7
|
||
ExportScript.AF.TmpWeaponPanelPresend[108] = (ExportScript.AF.PayloadInfo.Stations[6].count > 0 and 1 or 0) -- weapon presend panel 8
|
||
ExportScript.AF.TmpWeaponPanelPresend[109] = (ExportScript.AF.PayloadInfo.Stations[4].count > 0 and 1 or 0) -- weapon presend panel 9
|
||
ExportScript.AF.TmpWeaponPanelPresend[110] = (ExportScript.AF.PayloadInfo.Stations[2].count > 0 and 1 or 0) -- weapon presend panel 10
|
||
--ExportScript.AF.TmpWeaponPanelActive[201] -- weapon active panel 1
|
||
--ExportScript.AF.TmpWeaponPanelActive[202] -- weapon active panel 2
|
||
--ExportScript.AF.TmpWeaponPanelActive[203] -- weapon active panel 3
|
||
--ExportScript.AF.TmpWeaponPanelActive[204] -- weapon active panel 4
|
||
--ExportScript.AF.TmpWeaponPanelActive[205] -- weapon active panel 5
|
||
--ExportScript.AF.TmpWeaponPanelActive[206] -- weapon active panel 6
|
||
--ExportScript.AF.TmpWeaponPanelActive[207] -- weapon active panel 7
|
||
--ExportScript.AF.TmpWeaponPanelActive[208] -- weapon active panel 8
|
||
--ExportScript.AF.TmpWeaponPanelActive[209] -- weapon active panel 9
|
||
--ExportScript.AF.TmpWeaponPanelActive[210] -- weapon active panel 10
|
||
ExportScript.AF.TmpWeaponPanel[232] = lWeaponType -- current weapon type
|
||
ExportScript.AF.TmpWeaponPanel[233] = lOuterCannon -- outer cannon shells
|
||
ExportScript.AF.TmpWeaponPanel[234] = lInnerCannon -- inner cannon shells
|
||
ExportScript.AF.TmpWeaponPanel[235] = lReserve -- reserve weapon
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelPresend) do
|
||
ExportScript.Tools.SendData(key, value)
|
||
end
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelActive) do
|
||
ExportScript.Tools.SendData(key, value)
|
||
end
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanel) do
|
||
ExportScript.Tools.SendData(key, value)
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelPresend) do
|
||
ExportScript.Tools.SendDataDAC(key, value)
|
||
end
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelActive) do
|
||
ExportScript.Tools.SendDataDAC(key, value)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- Weapon Panel for MiG-29A and MiG-29S
|
||
function ExportScript.AF.FC_WeaponPanel_MiG29(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
-- The weapon status panel, quantity and readiness of the currently selected weapon and the remaining gun ammunition are indicated.
|
||
if ExportScript.AF.TmpWeaponPanelPresend == nil then
|
||
ExportScript.AF.TmpWeaponPanelPresend = {[100] = 0, [101] = 0, [102] = 0, [103] = 0, [104] = 0, [105] = 0, [106] = 0}
|
||
end
|
||
|
||
if ExportScript.AF.TmpWeaponPanelActive == nil then
|
||
ExportScript.AF.TmpWeaponPanelActive = {[201] = 0, [202] = 0, [203] = 0, [204] = 0, [205] = 0, [206] = 0}
|
||
end
|
||
|
||
if ExportScript.AF.EventNumberFC_WeaponPanel == nil then
|
||
ExportScript.AF.EventNumberFC_WeaponPanel = 0
|
||
end
|
||
|
||
if(ExportScript.AF.EventNumberFC_WeaponPanel < ExportScript.AF.EventNumber) then
|
||
ExportScript.AF.EventNumberFC_WeaponPanel = ExportScript.AF.EventNumber
|
||
|
||
-- defination
|
||
ExportScript.AF.PayloadInfo = LoGetPayloadInfo()
|
||
if ExportScript.AF.PayloadInfo ~= nil then
|
||
if ExportScript.AF.CurrentStationTmp == nil then
|
||
ExportScript.AF.CurrentStationTmp = -1
|
||
end
|
||
|
||
if ExportScript.AF.PayloadInfo.CurrentStation > 0 and
|
||
ExportScript.AF.CurrentStationTmp ~= ExportScript.AF.PayloadInfo.CurrentStation then
|
||
ExportScript.AF.CurrentStationTmp = ExportScript.AF.PayloadInfo.CurrentStation
|
||
|
||
ExportScript.AF.TmpStationToPanel = {}
|
||
ExportScript.AF.TmpStationToPanel[1] = {Panel = 1, StationID = 101, CurrentID = 201 } -- left
|
||
ExportScript.AF.TmpStationToPanel[3] = {Panel = 2, StationID = 102, CurrentID = 202 }
|
||
ExportScript.AF.TmpStationToPanel[5] = {Panel = 3, StationID = 103, CurrentID = 203 }
|
||
ExportScript.AF.TmpStationToPanel[6] = {Panel = 4, StationID = 104, CurrentID = 204 }
|
||
ExportScript.AF.TmpStationToPanel[4] = {Panel = 5, StationID = 105, CurrentID = 205 }
|
||
ExportScript.AF.TmpStationToPanel[2] = {Panel = 6, StationID = 106, CurrentID = 206 } -- right
|
||
|
||
-- ExportScript.AF.TmpWeaponPanelActive reset
|
||
for i = 201, 206, 1 do
|
||
ExportScript.AF.TmpWeaponPanelActive[i] = 0
|
||
end
|
||
|
||
if ExportScript.AF.TmpStationToPanel[ExportScript.AF.PayloadInfo.CurrentStation] ~= nil then
|
||
ExportScript.AF.TmpWeaponPanelActive[ExportScript.AF.TmpStationToPanel[ExportScript.AF.PayloadInfo.CurrentStation].CurrentID] = 1 -- currrent value
|
||
|
||
table.foreach(ExportScript.AF.PayloadInfo.Stations, ExportScript.AF.WeaponStatusPanel_selectCurrentPayloadStation) -- corresponding station
|
||
end
|
||
end
|
||
--[[
|
||
Weapon Panel
|
||
|
|
||
-------------------------------
|
||
| | | | | | |
|
||
1 2 3 C 4 5 6
|
||
]]
|
||
ExportScript.AF.TmpWeaponPanelPresend[100] = ExportScript.AF.PayloadInfo.Cannon.shells
|
||
ExportScript.AF.TmpWeaponPanelPresend[101] = (ExportScript.AF.PayloadInfo.Stations[1].count > 0 and 1 or 0) -- weapon presend panel 1
|
||
ExportScript.AF.TmpWeaponPanelPresend[102] = (ExportScript.AF.PayloadInfo.Stations[3].count > 0 and 1 or 0) -- weapon presend panel 2
|
||
ExportScript.AF.TmpWeaponPanelPresend[103] = (ExportScript.AF.PayloadInfo.Stations[5].count > 0 and 1 or 0) -- weapon presend panel 3
|
||
ExportScript.AF.TmpWeaponPanelPresend[104] = (ExportScript.AF.PayloadInfo.Stations[6].count > 0 and 1 or 0) -- weapon presend panel 4
|
||
ExportScript.AF.TmpWeaponPanelPresend[105] = (ExportScript.AF.PayloadInfo.Stations[4].count > 0 and 1 or 0) -- weapon presend panel 5
|
||
ExportScript.AF.TmpWeaponPanelPresend[106] = (ExportScript.AF.PayloadInfo.Stations[2].count > 0 and 1 or 0) -- weapon presend panel 6
|
||
--ExportScript.AF.TmpWeaponPanelActive[201] -- weapon active panel 1
|
||
--ExportScript.AF.TmpWeaponPanelActive[202] -- weapon active panel 2
|
||
--ExportScript.AF.TmpWeaponPanelActive[203] -- weapon active panel 3
|
||
--ExportScript.AF.TmpWeaponPanelActive[204] -- weapon active panel 4
|
||
--ExportScript.AF.TmpWeaponPanelActive[205] -- weapon active panel 5
|
||
--ExportScript.AF.TmpWeaponPanelActive[206] -- weapon active panel 6
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelPresend) do
|
||
ExportScript.Tools.SendData(key, value)
|
||
end
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelActive) do
|
||
ExportScript.Tools.SendData(key, value)
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelPresend) do
|
||
ExportScript.Tools.SendDataDAC(key, value)
|
||
end
|
||
for key, value in pairs(ExportScript.AF.TmpWeaponPanelActive) do
|
||
ExportScript.Tools.SendDataDAC(key, value)
|
||
end
|
||
end
|
||
end
|
||
|
||
-- HSI for SU25T, SU-27, SU-33, MIG-29
|
||
function ExportScript.AF.FC_Russian_HSI(distancetoway)
|
||
local lDistanceToWay = distancetoway or 999
|
||
|
||
local lDefaultOne = 1.0
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSunsignd = math.pi * 2
|
||
local lPitch,lBank,lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
local lHSI_RMI = LoGetControlPanel_HSI().RMI_raw -- VOR1 OBS (Radian)
|
||
local lHSI_ADF = LoGetControlPanel_HSI().ADF_raw -- ADF OBS (Radian)
|
||
local lHSI_Curse = LoGetControlPanel_HSI().Course -- HSI Course (Radian)
|
||
local lGlide = LoGetGlideDeviation() -- VOR1 HORIZONTAL DEFLECTION (-1 +1)
|
||
local lSide = LoGetSideDeviation() -- VOR1 VERTICAL DEFLECTION (-1 +1)
|
||
local lHeading = LoGetSelfData().Heading -- HEADING (Radian)
|
||
lPitch, lBank = nil
|
||
--[[
|
||
[Course] = number: "0.76548692098835"
|
||
[CourseDeviation] = number: "0"
|
||
[ADF_raw] = number: "5.5811524391174"
|
||
[BearingPointer] = number: "0.80134677481978"
|
||
[RMI_raw] = number: "5.4092655181885"
|
||
[HeadingPointer] = number: "0.098191173578347"
|
||
[Heading_raw] = number: "6.2831854820251"
|
||
]]
|
||
--[[
|
||
Ka-50 HSI
|
||
[112] = "%.4f", -- HSI_heading {0.0, 1.0}
|
||
[118] = "%.4f", -- HSI_commanded_course_needle {0.0, 1.0}
|
||
[124] = "%.4f", -- HSI_commanded_heading_needle {0.0, 1.0}
|
||
[115] = "%.4f", -- HSI_bearing_needle {0.0, 1.0}
|
||
[119] = "%0.1f", -- HSI_heading_warning_flag{0.0,1.0}
|
||
[114] = "%0.1f", -- HSI_course_warning_flag{0.0, 1.0}
|
||
[125] = "%0.1f", -- HSI_glideslope_warning_flag{0.0, 1.0}
|
||
[117] = "%0.4f", -- HSI_range_counter_100 {0.0,1.0}
|
||
[527] = "%0.4f", -- HSI_range_counter_10 {0.0,1.0}
|
||
[528] = "%0.4f", -- HSI_range_counter_1 {0.0,1.0}
|
||
[127] = "%.4f", -- HSI_longitudinal_deviation{-1.0, 1.0}
|
||
[128] = "%.4f", -- HSI_lateral_deviation{-1.0, 1.0}
|
||
[116] = "%0.1f", -- HSI_range_unavailable_flag{0.0, 1.0}
|
||
[121] = "%0.1f", -- HSI_course_unavailable_flag{0.0, 1.0}
|
||
]]
|
||
local lAltCounter = {[0] = 0.0, [1] = 0.11, [2] = 0.22, [3] = 0.33, [4] = 0.44, [5] = 0.55, [6] = 0.66, [7] = 0.77, [8] = 0.88, [9] = 0.99}
|
||
lDistanceToWay = ExportScript.Tools.round(lDistanceToWay / 1000, 1)
|
||
local lDistanceToWayTmp = string.format("%03d", lDistanceToWay)
|
||
local lRangeCounter1 = 0
|
||
local lRangeCounter2 = 0
|
||
local lRangeCounter3 = 0
|
||
if lDistanceToWay > 100 then
|
||
lRangeCounter1 = ExportScript.Tools.round((lDistanceToWay / 100), 0, "floor") * 0.11
|
||
lRangeCounter1 = lRangeCounter1 - ExportScript.Tools.round(lRangeCounter1, 0, "floor")
|
||
end
|
||
if lDistanceToWay > 10 then
|
||
if lDistanceToWay > 100 then
|
||
lRangeCounter2 = (ExportScript.Tools.round((lDistanceToWay - (ExportScript.Tools.round(lDistanceToWay / 100, 0, "floor") * 100)), 0, "floor") / 10) * 0.11
|
||
else
|
||
lRangeCounter2 = (lDistanceToWay / 10) * 0.11
|
||
lRangeCounter2 = lRangeCounter2 - ExportScript.Tools.round(lRangeCounter2, 0, "floor")
|
||
end
|
||
end
|
||
if lDistanceToWay > 10 then
|
||
lRangeCounter3 = (lDistanceToWay - (ExportScript.Tools.round(lDistanceToWay / 10, 0, "floor") * 10)) * 0.11
|
||
else
|
||
lRangeCounter3 = lDistanceToWay * 0.11
|
||
end
|
||
|
||
lHeading = (lHeading / lRadToDCSunsignd)
|
||
-- HSI_heading {0.0, 1.0}
|
||
-- HSI_commanded_course_needle {0.0, 1.0}
|
||
-- HSI_commanded_heading_needle {0.0, 1.0}
|
||
-- HSI_bearing_needle {0.0, 1.0}
|
||
-- HSI_heading_warning_flag{0.0,1.0}
|
||
-- HSI_course_warning_flag{0.0, 1.0}
|
||
-- HSI_glideslope_warning_flag{0.0, 1.0}
|
||
-- HSI_range_counter_100 {0.0,1.0}
|
||
-- HSI_range_counter_10 {0.0,1.0}
|
||
-- HSI_range_counter_1 {0.0,1.0}
|
||
-- HSI_longitudinal_deviation{-1.0, 1.0}
|
||
-- HSI_lateral_deviation{-1.0, 1.0}
|
||
-- HSI_range_unavailable_flag{0.0, 1.0}
|
||
-- HSI_course_unavailable_flag{0.0, 1.0}
|
||
|
||
ExportScript.Tools.SendData(11, string.format("%.4f", lHeading)) -- compass card
|
||
ExportScript.Tools.SendData(12, string.format("%.4f", ((lHeading + (lHSI_Curse / lRadToDCSunsignd)) - 1))) -- double arrow
|
||
ExportScript.Tools.SendData(13, string.format("%.4f", lHeading)) -- yellow triangle
|
||
ExportScript.Tools.SendData(14, string.format("%.4f", (0 - (lHeading + (lHSI_ADF / lRadToDCSunsignd))))) -- yellow arrow
|
||
ExportScript.Tools.SendData(15, lDefaultNull) -- KC Flag
|
||
ExportScript.Tools.SendData(16, lDefaultOne) -- K Flag
|
||
ExportScript.Tools.SendData(17, lDefaultOne) -- L Flag
|
||
ExportScript.Tools.SendData(18, string.format("%.4f", lAltCounter[tonumber(string.sub(lDistanceToWayTmp, 1, 1))]))
|
||
ExportScript.Tools.SendData(19, string.format("%.4f", lAltCounter[tonumber(string.sub(lDistanceToWayTmp, 2, 2))]))
|
||
ExportScript.Tools.SendData(20, string.format("%.4f", lRangeCounter3))
|
||
ExportScript.Tools.SendData(21, string.format("%.4f", lGlide))
|
||
ExportScript.Tools.SendData(22, string.format("%.4f", lSide))
|
||
ExportScript.Tools.SendData(23, lDefaultNull)
|
||
ExportScript.Tools.SendData(24, lDefaultNull)
|
||
end
|
||
|
||
-- HSI for SU25A
|
||
function ExportScript.AF.FC_Russian_HSI_old()
|
||
|
||
local lDefaultOne = 1.0
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSsignd = math.pi
|
||
local lRadToDCSunsignd = math.pi * 2
|
||
local lHSI_ADF = LoGetControlPanel_HSI().ADF_raw -- ADF OBS (Radian)
|
||
local lHSI_Curse = LoGetControlPanel_HSI().Course -- HSI Course (Radian)
|
||
local lGlide = LoGetGlideDeviation() -- VOR1 HORIZONTAL DEFLECTION (-1 +1)
|
||
local lSide = LoGetSideDeviation() -- VOR1 VERTICAL DEFLECTION (-1 +1)
|
||
local lHeading = LoGetSelfData().Heading -- HEADING (Radian)
|
||
--ExportScript.Tools.WriteToLog('LoGetControlPanel_HSI: '..ExportScript.Tools.dump(LoGetControlPanel_HSI()))
|
||
--[[
|
||
[Course] = number: "0.76548692098835"
|
||
[CourseDeviation] = number: "0"
|
||
[ADF_raw] = number: "5.5811524391174"
|
||
[BearingPointer] = number: "0.80134677481978"
|
||
[RMI_raw] = number: "5.4092655181885"
|
||
[HeadingPointer] = number: "0.098191173578347"
|
||
[Heading_raw] = number: "6.2831854820251"
|
||
]]
|
||
|
||
lHeading = (lHeading / lRadToDCSunsignd)
|
||
-- HSI_heading {0.0, 1.0} compass card
|
||
-- HSI_commanded_course_needle {0.0, 1.0} (Required heading) white needle
|
||
-- HSI_bearing_needle {0.0, 1.0} (RMI bearing) yellow needle
|
||
-- Flag Г (T){0.0,1.0}
|
||
-- Flag К (K){0.0,1.0}
|
||
-- ILS needle horizontal{-1.0, 1.0}
|
||
-- ILS needle vertical{-1.0, 1.0}
|
||
|
||
ExportScript.Tools.SendData(11, string.format("%.4f", lHeading)) -- compass card
|
||
ExportScript.Tools.SendData(12, string.format("%.4f", ((lHeading + (lHSI_Curse / lRadToDCSunsignd)) - 0.5))) -- white needle
|
||
--ExportScript.Tools.SendData(12, string.format("%.4f", ((lHeading + (lHSI_Curse / lRadToDCSunsignd)) - 1))) -- white needle
|
||
--ExportScript.Tools.SendData(12, string.format("%.4f", (lHeading + (lHSI_Curse / lRadToDCSsignd)))) -- white needle
|
||
--ExportScript.Tools.SendData(13, string.format("%.4f", (0 - (lHeading + (lHSI_ADF / lRadToDCSunsignd))))) -- yellow needle
|
||
--ExportScript.Tools.SendData(13, string.format("%.4f", (0 - (lHeading + (lHSI_ADF / lRadToDCSsignd))))) -- yellow needle
|
||
ExportScript.Tools.SendData(13, string.format("%.4f", (0 - (lHSI_ADF / lRadToDCSunsignd)))) -- yellow needle
|
||
ExportScript.Tools.SendData(16, lDefaultOne) -- T Flag
|
||
ExportScript.Tools.SendData(17, lDefaultOne) -- K Flag
|
||
ExportScript.Tools.SendData(21, string.format("%.4f", lGlide))
|
||
ExportScript.Tools.SendData(22, string.format("%.4f", lSide))
|
||
end
|
||
|
||
-- HSI-Distance for SU25A
|
||
function ExportScript.AF.FC_Russian_HSI_Distance_old(distancetoway)
|
||
local lDistanceToWay = distancetoway or 999
|
||
|
||
local lAltCounter = {[0] = 0.0, [1] = 0.11, [2] = 0.22, [3] = 0.33, [4] = 0.44, [5] = 0.55, [6] = 0.66, [7] = 0.77, [8] = 0.88, [9] = 0.99}
|
||
lDistanceToWay = ExportScript.Tools.round(lDistanceToWay / 1000, 1)
|
||
local lDistanceToWayTmp = string.format("%03d", lDistanceToWay)
|
||
local lRangeCounter1 = 0
|
||
local lRangeCounter2 = 0
|
||
local lRangeCounter3 = 0
|
||
if lDistanceToWay > 100 then
|
||
lRangeCounter1 = ExportScript.Tools.round((lDistanceToWay / 100), 0, "floor") * 0.11
|
||
lRangeCounter1 = lRangeCounter1 - ExportScript.Tools.round(lRangeCounter1, 0, "floor")
|
||
end
|
||
if lDistanceToWay > 10 then
|
||
if lDistanceToWay > 100 then
|
||
lRangeCounter2 = (ExportScript.Tools.round((lDistanceToWay - (ExportScript.Tools.round(lDistanceToWay / 100, 0, "floor") * 100)), 0, "floor") / 10) * 0.11
|
||
else
|
||
lRangeCounter2 = (lDistanceToWay / 10) * 0.11
|
||
lRangeCounter2 = lRangeCounter2 - ExportScript.Tools.round(lRangeCounter2, 0, "floor")
|
||
end
|
||
end
|
||
if lDistanceToWay > 10 then
|
||
lRangeCounter3 = (lDistanceToWay - (ExportScript.Tools.round(lDistanceToWay / 10, 0, "floor") * 10)) * 0.11
|
||
else
|
||
lRangeCounter3 = lDistanceToWay * 0.11
|
||
end
|
||
|
||
ExportScript.Tools.SendData(18, string.format("%.4f", lAltCounter[tonumber(string.sub(lDistanceToWayTmp, 1, 1))]))
|
||
ExportScript.Tools.SendData(19, string.format("%.4f", lAltCounter[tonumber(string.sub(lDistanceToWayTmp, 2, 2))]))
|
||
ExportScript.Tools.SendData(20, string.format("%.4f", lRangeCounter3))
|
||
end
|
||
|
||
-- ADI for SU-25, SU-25T, SU-27, MIG-29A and MIG-29S
|
||
function ExportScript.AF.FC_Russian_ADI_Old()
|
||
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSsignd = math.pi
|
||
local lNavInfo = LoGetNavigationInfo()
|
||
local lNavInfoPitch = lNavInfo.Requirements.pitch -- AP REQUIRED PITCH (Radian)
|
||
local lNavInfoRoll = lNavInfo.Requirements.roll -- AP REQUIRED BANK (Radian)
|
||
local lPitch, lBank, lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
local lSlipBallPosition = LoGetSlipBallPosition() -- SLIP BALL (-1 +1)
|
||
local lSteeringWarningFlag = 0
|
||
local lAttitudeWarningFlag = 0
|
||
-- ADI (IKP-81)
|
||
---------------------------------------------------
|
||
--[[
|
||
Bank
|
||
Pitch
|
||
Slip indicator
|
||
steering warning flag
|
||
attitude warnng flag
|
||
Required bank
|
||
Required pitch
|
||
Required heading
|
||
Required altitude
|
||
]]
|
||
lNavInfoRoll = (lNavInfoRoll > 0.5625 and 0.5625 or lNavInfoRoll)
|
||
lNavInfoRoll = (lNavInfoRoll < -0.5625 and -0.5625 or lNavInfoRoll)
|
||
lPitch = lPitch / (lRadToDCSsignd / 2)
|
||
lBank = lBank / lRadToDCSsignd
|
||
|
||
if lNavInfo.SystemMode.submode == "ROUTE" then
|
||
lNavInfoPitch = lNavInfoPitch * lRadToDCSsignd
|
||
elseif lNavInfo.SystemMode.submode == "ARRIVAL" then
|
||
lNavInfoPitch = lNavInfoPitch * 2
|
||
elseif lNavInfo.SystemMode.submode == "LANDING" then
|
||
lNavInfoPitch = lNavInfoPitch * (lRadToDCSsignd * 0.75)
|
||
elseif lNavInfo.SystemMode.submode == "OFF" then
|
||
lSteeringWarningFlag = 1
|
||
lAttitudeWarningFlag = 1
|
||
end
|
||
|
||
lNavInfoPitch = (lNavInfoPitch > 1.0 and 1 or lNavInfoPitch)
|
||
lNavInfoPitch = (lNavInfoPitch < -1.0 and -1 or lNavInfoPitch)
|
||
|
||
ExportScript.Tools.SendData(1, string.format("%.4f", lBank))
|
||
ExportScript.Tools.SendData(2, string.format("%.4f", lPitch))
|
||
ExportScript.Tools.SendData(3, string.format("%.4f", ExportScript.Tools.negate(lSlipBallPosition))) -- negate
|
||
ExportScript.Tools.SendData(4, lSteeringWarningFlag)
|
||
ExportScript.Tools.SendData(5, lAttitudeWarningFlag)
|
||
ExportScript.Tools.SendData(6, string.format("%.4f", lNavInfoRoll))
|
||
ExportScript.Tools.SendData(7, string.format("%.4f", lNavInfoPitch))
|
||
ExportScript.Tools.SendData(8, lDefaultNull)
|
||
ExportScript.Tools.SendData(9, lDefaultNull)
|
||
end
|
||
|
||
-- ADI for SU-33
|
||
function ExportScript.AF.FC_Russian_ADI_New()
|
||
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSsignd = math.pi
|
||
local lNavInfoPitch = LoGetNavigationInfo().Requirements.pitch -- AP REQUIRED PITCH (Radian)
|
||
local lNavInfoRoll = LoGetNavigationInfo().Requirements.roll -- AP REQUIRED BANK (Radian)
|
||
local lPitch, lBank, lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
local lSlipBallPosition = LoGetSlipBallPosition() -- SLIP BALL (-1 +1)
|
||
-- ADI
|
||
---------------------------------------------------
|
||
--[[
|
||
[100] = "%.4f", -- ADI_Roll {-1.0,1.0}
|
||
[101] = "%.4f", -- ADI_Pitch {-math.pi/2.0,math.pi/2.0}{1.0,-1.0}
|
||
[102] = "%0.1f", -- ADI_steering_warning_flag {0.0,1.0}
|
||
[109] = "%0.1f", -- ADI_attitude_warning_flag {0.0,1.0}
|
||
[107] = "%.4f", -- ADI_bank_steering {-1.0,1.0}
|
||
[106] = "%.4f", -- ADI_pitch_steering {-1.0,1.0}
|
||
[111] = "%.4f", -- ADI_airspeed_deviation {-1.0,1.0}
|
||
[103] = "%.4f", -- ADI_track_deviation {-1.0,1.0}
|
||
[526] = "%.4f", -- ADI_height_deviation {-1.0,1.0}
|
||
[108] = "%.4f", -- ADI_sideslip {-1.0,1.0}
|
||
]]
|
||
lNavInfoPitch = lNavInfoPitch / lRadToDCSsignd
|
||
lNavInfoRoll = lNavInfoRoll / lRadToDCSsignd
|
||
lPitch = lPitch / (lRadToDCSsignd / 2)
|
||
lBank = lBank / lRadToDCSsignd
|
||
|
||
ExportScript.Tools.SendData(1, string.format("%.4f", lBank))
|
||
ExportScript.Tools.SendData(2, string.format("%.4f", ExportScript.Tools.negate(lPitch))) -- negate
|
||
ExportScript.Tools.SendData(3, lDefaultNull)
|
||
ExportScript.Tools.SendData(4, lDefaultNull)
|
||
ExportScript.Tools.SendData(5, string.format("%.4f", lNavInfoRoll))
|
||
ExportScript.Tools.SendData(6, string.format("%.4f", lNavInfoPitch))
|
||
ExportScript.Tools.SendData(7, lDefaultNull)
|
||
ExportScript.Tools.SendData(8, lDefaultNull)
|
||
ExportScript.Tools.SendData(9, lDefaultNull)
|
||
ExportScript.Tools.SendData(10, string.format("%.4f", lSlipBallPosition))
|
||
end
|
||
|
||
-- Radar Altimeter for SU-25A, SU-25T, SU-27, SU-33
|
||
function ExportScript.AF.FC_Russian_RadarAltimeter_1500m(warningflag)
|
||
local lWarning_Flag = warningflag or 100
|
||
|
||
local lScaleValue = 1500
|
||
local lAltRad = LoGetAltitudeAboveGroundLevel() -- ALTITUDE GROUND LEVEL (Meter)
|
||
|
||
lAltRad = lAltRad / lScaleValue -- (1500 m ist die maximalhoehe des Messgeraetes)
|
||
lAltRad = (lAltRad > 1.0 and 1.0 or lAltRad) -- the result is limited to 1.0
|
||
local lDangerRALT = lWarning_Flag / lScaleValue -- 0.14 -- 50m ((50 * 1) / 350)
|
||
local lWarning_Flag = (lAltRad == 1.0 and 1.0 or 0.0) -- (Flag an wenn Hoehe auf 1.0 ist)
|
||
local lDangerRALT_Lamp = (lAltRad < lDangerRALT and 1.0 or 0.0) -- (Flag an wenn Hoehe niedriger als 0.14)
|
||
-- AltRad {0.0,1.0}
|
||
-- DangerRALT {0.0,1.0}
|
||
-- Warning_Flag {0, 1}
|
||
-- DangerRALT_Lamp {0, 1}
|
||
|
||
ExportScript.Tools.SendData(25, string.format("%.4f", lAltRad))
|
||
ExportScript.Tools.SendData(26, string.format("%.4f", lDangerRALT))
|
||
ExportScript.Tools.SendData(27, lWarning_Flag)
|
||
ExportScript.Tools.SendData(28, lDangerRALT_Lamp)
|
||
end
|
||
|
||
-- Radar Altimeter for MiG-29A/G/S
|
||
function ExportScript.AF.FC_Russian_RadarAltimeter_1000m(warningflag)
|
||
local lWarning_Flag = warningflag or 100
|
||
|
||
local lScaleValue = 1000
|
||
local lAltRad = LoGetAltitudeAboveGroundLevel() -- ALTITUDE GROUND LEVEL (Meter)
|
||
|
||
lAltRad = lAltRad / lScaleValue -- (1000 m ist die maximalhoehe des Messgeraetes)
|
||
lAltRad = (lAltRad > 1.0 and 1.0 or lAltRad) -- the result is limited to 1.0
|
||
local lDangerRALT = lWarning_Flag / lScaleValue -- 0.14 -- 50m ((50 * 1) / 350)
|
||
local lWarning_Flag = (lAltRad == 1.0 and 1.0 or 0.0) -- (Flag an wenn Hoehe auf 1.0 ist)
|
||
local lDangerRALT_Lamp = (lAltRad < lDangerRALT and 1.0 or 0.0) -- (Flag an wenn Hoehe niedriger als 0.14)
|
||
-- AltRad {0.0,1.0}
|
||
-- DangerRALT {0.0,1.0}
|
||
-- Warning_Flag {0, 1}
|
||
-- DangerRALT_Lamp {0, 1}
|
||
|
||
ExportScript.Tools.SendData(25, string.format("%.4f", lAltRad))
|
||
ExportScript.Tools.SendData(26, string.format("%.4f", lDangerRALT))
|
||
ExportScript.Tools.SendData(27, lWarning_Flag)
|
||
ExportScript.Tools.SendData(28, lDangerRALT_Lamp)
|
||
end
|
||
|
||
-- Barometric Altimeter for SU-25A, SU25-T
|
||
function ExportScript.AF.FC_Russian_BarometricAltimeter_late()
|
||
|
||
local lBasicAtmospherePressure = LoGetBasicAtmospherePressure() -- BAROMETRIC PRESSURE (mm Hg)
|
||
local lAltBar = LoGetAltitudeAboveSeaLevel() -- ALTITUDE SEA LEVEL (Meter)
|
||
local lAltBar_kilometer_needle = 0
|
||
local lAltBar_meter_needle = 0
|
||
|
||
lAltBar = lAltBar - ((9.5 * (760 - lBasicAtmospherePressure)) / 2) -- 9.5 m per 1mmHg difference
|
||
|
||
-- if lAltBar > 10000 then
|
||
-- lAltBar_kilometer_needle = lAltBar / 100000
|
||
-- else
|
||
lAltBar_kilometer_needle = lAltBar / 10000
|
||
-- end
|
||
-- if lAltBar > 1000 then
|
||
-- lAltBar_meter_needle = lAltBar / 1000
|
||
-- lAltBar_meter_needle = lAltBar_meter_needle - ExportScript.Tools.round(lAltBar_meter_needle, 0, "floor")
|
||
-- else
|
||
lAltBar_meter_needle = lAltBar / 1000
|
||
-- end
|
||
lAltBar = lAltBar / 1000
|
||
|
||
-- AltBar_kilometer_needle {0.0,1.0}
|
||
-- AltBar_meter_needle {0.0,1.0}
|
||
-- BasicAtmospherePressure {600.0, 800.0}
|
||
-- AltBar_kilometer {0.0, 99.9}
|
||
|
||
ExportScript.Tools.SendData(30, string.format("%.4f", lAltBar_kilometer_needle))
|
||
ExportScript.Tools.SendData(31, string.format("%.4f", lAltBar_meter_needle))
|
||
ExportScript.Tools.SendData(32, string.format("%.4f", lBasicAtmospherePressure))
|
||
ExportScript.Tools.SendData(33, string.format("%.4f", lAltBar))
|
||
end
|
||
|
||
-- Barometric Altimeter for SU-27, SU-33
|
||
function ExportScript.AF.FC_Russian_BarometricAltimeter_20000()
|
||
|
||
local lBasicAtmospherePressure = LoGetBasicAtmospherePressure() -- BAROMETRIC PRESSURE (mm Hg)
|
||
local lAltBar = LoGetAltitudeAboveSeaLevel() -- ALTITUDE SEA LEVEL (Meter)
|
||
local lAltBar_kilometer_needle = 0
|
||
local lAltBar_meter_needle = 0
|
||
|
||
lAltBar = lAltBar - ((9.5 * (760 - lBasicAtmospherePressure)) / 2) -- 9.5 m per 1mmHg difference
|
||
|
||
-- if lAltBar > 10000 then
|
||
-- lAltBar_kilometer_needle = lAltBar / 200000
|
||
-- else
|
||
lAltBar_kilometer_needle = lAltBar / 20000
|
||
-- end
|
||
-- if lAltBar > 1000 then
|
||
-- lAltBar_meter_needle = lAltBar / 1000
|
||
-- lAltBar_meter_needle = lAltBar_meter_needle - ExportScript.Tools.round(lAltBar_meter_needle, 0, "floor")
|
||
-- else
|
||
lAltBar_meter_needle = lAltBar / 1000
|
||
-- end
|
||
lBasicAtmospherePressure = (lBasicAtmospherePressure - 600) / 200
|
||
|
||
-- AltBar_kilometer_needle {0.0,1.0}
|
||
-- AltBar_meter_needle {0.0,1.0}
|
||
-- BasicAtmospherePressure {0.0, 1.0}={600.0, 800.0}
|
||
|
||
ExportScript.Tools.SendData(30, string.format("%.4f", lAltBar_kilometer_needle))
|
||
ExportScript.Tools.SendData(31, string.format("%.4f", lAltBar_meter_needle))
|
||
ExportScript.Tools.SendData(32, string.format("%.4f", lBasicAtmospherePressure))
|
||
end
|
||
|
||
-- Barometric Altimeter for MiG-29A/G/S
|
||
function ExportScript.AF.FC_Russian_BarometricAltimeter_30000()
|
||
|
||
local lBasicAtmospherePressure = LoGetBasicAtmospherePressure() -- BAROMETRIC PRESSURE (mm Hg)
|
||
local lAltBar = LoGetAltitudeAboveSeaLevel() -- ALTITUDE SEA LEVEL (Meter)
|
||
local lAltBar_kilometer_needle = 0
|
||
local lAltBar_meter_needle = 0
|
||
|
||
lAltBar = lAltBar - ((9.5 * (760 - lBasicAtmospherePressure)) / 2) -- 9.5 m per 1mmHg difference
|
||
|
||
lAltBar_kilometer_needle = lAltBar / 30000
|
||
|
||
lAltBar_meter_needle = lAltBar / 1000
|
||
|
||
lBasicAtmospherePressure = (lBasicAtmospherePressure - 600) / 200
|
||
|
||
-- AltBar_kilometer_needle {0.0,1.0}
|
||
-- AltBar_meter_needle {0.0,1.0}
|
||
-- BasicAtmospherePressure {0.0, 1.0}={600.0, 800.0}
|
||
|
||
ExportScript.Tools.SendData(30, string.format("%.4f", lAltBar_kilometer_needle))
|
||
ExportScript.Tools.SendData(31, string.format("%.4f", lAltBar_meter_needle))
|
||
ExportScript.Tools.SendData(32, string.format("%.4f", lBasicAtmospherePressure))
|
||
end
|
||
|
||
-- Air Speed Indicator for SU-25A, SU-25T
|
||
function ExportScript.AF.FC_Russian_AirSpeed_1100hkm()
|
||
|
||
local lIAS = LoGetIndicatedAirSpeed() * 3.6 -- INDICATED AIRSPEED (Meter/Second to Km/h)
|
||
local lTAS = LoGetTrueAirSpeed() * 3.6 -- TRUE AIRSPEED (Meter/Second to Km/h)
|
||
|
||
--[[
|
||
y_min = 0.0 0.09 -- minimaler Ausgabewert
|
||
y_max = 0.09 1.0 -- maximaler Ausgabewert
|
||
x_min = 0 100 -- minimaler Eingangswert
|
||
x_max = 100 1100 -- maximaler Eingangswert
|
||
x = 50 700 -- aktueller Eingangswert
|
||
|
||
d_y = 0.09 0.91 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 100 1000 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.0009 0.00091 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -0.001 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0,0171875 0,636 -- Ergebnis (m * x + n)
|
||
]]
|
||
if lIAS > 100 then
|
||
lIAS = 0.00091 * lIAS + -0.001
|
||
else
|
||
lIAS = 0.0009 * lIAS
|
||
end
|
||
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 400 -- minimaler Eingangswert
|
||
x_max = 1100 -- maximaler Eingangswert
|
||
x = 800 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 700 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00142857142857142857142857142857 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -0.571428571428571428571428571427 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.571428571428571428571428571429 -- Ergebnis (m * x + n)
|
||
]]
|
||
if lTAS > 400 then
|
||
lTAS = 0.00142857142857142857142857142857 * lTAS + -0.571428571428571428571428571427
|
||
else
|
||
lTAS = 0.0
|
||
end
|
||
|
||
-- IAS {0.0,1.0}
|
||
-- TAS {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(35, string.format("%.4f", lIAS))
|
||
ExportScript.Tools.SendData(36, string.format("%.4f", lTAS))
|
||
end
|
||
|
||
-- Air Speed Indicator for SU-27, SU-33
|
||
function ExportScript.AF.FC_Russian_AirSpeed_1600hkm()
|
||
|
||
local lScaleValueIAS = 1600
|
||
local lScaleValueMach = 3.5
|
||
local lIAS = LoGetIndicatedAirSpeed() * 3.6 -- INDICATED AIRSPEED (Meter/Second to Km/h)
|
||
local lMACH = LoGetMachNumber() -- MACH
|
||
local lMACHtmp = 0
|
||
local lIAStmp = 0
|
||
|
||
if lIAS > 0 and lIAS <= 100 then
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 0.03125 -- maximaler Ausgabewert
|
||
x_min = 0 -- minimaler Eingangswert
|
||
x_max = 100 -- maximaler Eingangswert
|
||
x = 55 -- aktueller Eingangswert
|
||
|
||
d_y = 0.03125 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 100 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.0003125 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0,0171875 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAStmp = 0.0003125 * lIAS
|
||
elseif lIAS > 100 and lIAS <= 500 then
|
||
--[[
|
||
y_min = 0.03125 -- minimaler Ausgabewert
|
||
y_max = 0.427 -- maximaler Ausgabewert
|
||
x_min = 100 -- minimaler Eingangswert
|
||
x_max = 500 -- maximaler Eingangswert
|
||
x = 250 -- aktueller Eingangswert
|
||
|
||
d_y = 0.39575 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 400 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.000989375 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -0.0676875 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0,0171875 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAStmp = 0.000989375 * lIAS + -0.0676875
|
||
elseif lIAS > 500 and lIAS <= 600 then
|
||
--[[
|
||
y_min = 0.427 -- minimaler Ausgabewert
|
||
y_max = 0.51 -- maximaler Ausgabewert
|
||
x_min = 500 -- minimaler Eingangswert
|
||
x_max = 600 -- maximaler Eingangswert
|
||
x = 550 -- aktueller Eingangswert
|
||
|
||
d_y = 0.083 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 100 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00083 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.012 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.4685 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAStmp = 0.00083 * lIAS + 0.012
|
||
elseif lIAS > 600 and lIAS <= 1000 then
|
||
--[[
|
||
y_min = 0.51 -- minimaler Ausgabewert
|
||
y_max = 0.753 -- maximaler Ausgabewert
|
||
x_min = 600 -- minimaler Eingangswert
|
||
x_max = 1000 -- maximaler Eingangswert
|
||
x = 800 -- aktueller Eingangswert
|
||
|
||
d_y = 0.243 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 400 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.0006075 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.1455 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.6315 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAStmp = 0.0006075 * lIAS + 0.1455
|
||
elseif lIAS > 1000 and lIAS <= 1200 then
|
||
--[[
|
||
y_min = 0.753 -- minimaler Ausgabewert
|
||
y_max = 0.84375 -- maximaler Ausgabewert
|
||
x_min = 1000 -- minimaler Eingangswert
|
||
x_max = 1200 -- maximaler Eingangswert
|
||
x = 1100 -- aktueller Eingangswert
|
||
|
||
d_y = 0.09075 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 200 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00045375 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.29925 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.798375 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAStmp = 0.00045375 * lIAS + 0.29925
|
||
elseif lIAS > 1200 and lIAS <= 1600 then
|
||
--[[
|
||
y_min = 0.84375 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 1200 -- minimaler Eingangswert
|
||
x_max = 1600 -- maximaler Eingangswert
|
||
x = 1400 -- aktueller Eingangswert
|
||
|
||
d_y = 0.15625 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 400 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.000390625 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.375 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.921875 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAStmp = 0.000390625 * lIAS + 0.375
|
||
end
|
||
|
||
if lMACH > 0.6 and lMACH <= 0.9 then
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 0.273 -- maximaler Ausgabewert
|
||
x_min = 0.6 -- minimaler Eingangswert
|
||
x_max = 0.9 -- maximaler Eingangswert
|
||
x = 0.75 -- aktueller Eingangswert
|
||
|
||
d_y = 0.273 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 0.3 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.91 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -0.546 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.1365 -- Ergebnis (m * x + n)
|
||
]]
|
||
lMACHtmp = 0.91 * lMACH + -0.546
|
||
elseif lMACH > 0.9 and lMACH <= 1.5 then
|
||
--[[
|
||
y_min = 0.273 -- minimaler Ausgabewert
|
||
y_max = 0.545 -- maximaler Ausgabewert
|
||
x_min = 0.9 -- minimaler Eingangswert
|
||
x_max = 1.5 -- maximaler Eingangswert
|
||
x = 1.3 -- aktueller Eingangswert
|
||
|
||
d_y = 0.272 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 0.6 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.45333333333333333333333333333333 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -0.135 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.45433333333333333333333333333333 -- Ergebnis (m * x + n)
|
||
]]
|
||
lMACHtmp = 0.45333333333333333333333333333333 * lMACH + -0.135
|
||
elseif lMACH > 1.5 and lMACH <= 3.5 then
|
||
--[[
|
||
y_min = 0.545 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 1.5 -- minimaler Eingangswert
|
||
x_max = 3.5 -- maximaler Eingangswert
|
||
x = 2.3 -- aktueller Eingangswert
|
||
|
||
d_y = 0.455 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 2.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.2275 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.20375 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.727 -- Ergebnis (m * x + n)
|
||
]]
|
||
lMACHtmp = 0.2275 * lMACH + 0.20375
|
||
end
|
||
|
||
-- IAS {0.0,1.0}
|
||
-- MACH {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(35, string.format("%.4f", lIAStmp))
|
||
ExportScript.Tools.SendData(36, string.format("%.4f", lMACHtmp))
|
||
end
|
||
|
||
-- Air Speed Indicator for MiG-29A, MiG-29S
|
||
function ExportScript.AF.FC_Russian_AirSpeed_1000hkm()
|
||
|
||
local lIAS = LoGetIndicatedAirSpeed() * 3.6 -- INDICATED AIRSPEED (Meter/Second to Km/h)
|
||
local lThousand = 0.0
|
||
|
||
if lIAS > 1000 then
|
||
lThousand = 1.0
|
||
elseif lIAS > 950 then
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 950 -- minimaler Eingangswert
|
||
x_max = 1001 -- maximaler Eingangswert
|
||
x = 980 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 51.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.01960784313725490196078431372549 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -18.627450980392156862745098039215 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.5882352941176470588235294117652 -- Ergebnis (m * x + n)
|
||
]]
|
||
lThousand = 0.01960784313725490196078431372549 * lIAS + -18.627450980392156862745098039215
|
||
end
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 1000 -- maximaler Eingangswert
|
||
x = 880 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 1000.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.001 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.88 -- Ergebnis (m * x + n)
|
||
]]
|
||
lIAS = 0.001 * lIAS
|
||
lIAS = (lIAS > 1.0 and 1.0 or lIAS) -- the result is limited to 1.0
|
||
|
||
-- IAS {0.0,1.0}
|
||
-- Thousand {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(35, string.format("%.4f", lIAS))
|
||
ExportScript.Tools.SendData(36, string.format("%.4f", lThousand))
|
||
end
|
||
|
||
-- Machmeter for MiG-29A, MiG-29S
|
||
function ExportScript.AF.FC_Russian_Mach_MiG29()
|
||
-- Mach {max, Mach}
|
||
local lMACH = LoGetMachNumber() -- MACH
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 3.0 -- maximaler Eingangswert
|
||
x = 1.65 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 3.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.33333333333333333333333333333333 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.00000000000000000000000000000001 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.55 -- Ergebnis (m * x + n)
|
||
]]
|
||
lMACH = 0.33333333333333333333333333333333 * lMACH + 0.00000000000000000000000000000001
|
||
|
||
ExportScript.Tools.SendData(37, string.format("%0.4f", lMACH)) -- Mach
|
||
ExportScript.Tools.SendData(38, 0) -- Mach max
|
||
end
|
||
|
||
-- Vertical Velocity Indicator (Old Style) for SU-25, SU-25T, SU-27, MIG-29A and MIG-29S
|
||
function ExportScript.AF.FC_Russian_VVI_Old()
|
||
|
||
local lVVI = LoGetVerticalVelocity() -- VERTICAL SPEED (Meter/Second)
|
||
local lPitch, lBank, lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
lBank = math.deg(lBank)
|
||
local lSlipBallPosition = LoGetSlipBallPosition() -- SLIP BALL (-1 +1)
|
||
--local lTAS = LoGetTrueAirSpeed() -- TRUE AIRSPEED (Meter/Second)
|
||
--local lTurn = 0
|
||
|
||
if lVVI > 0.0 then
|
||
lVVI = lVVI / 200
|
||
lVVI = (lVVI > 1.0 and 1.0 or lVVI)
|
||
else
|
||
lVVI = lVVI / 200
|
||
lVVI = (lVVI < -1.0 and -1.0 or lVVI)
|
||
end
|
||
|
||
if lBank >= 0.0 then
|
||
lBank = lBank / 45
|
||
lBank = (lBank > 1.0 and 1.0 or lBank) -- the result is limited to 1.0
|
||
else
|
||
lBank = lBank / 45
|
||
lBank = (lBank < -1.0 and -1.0 or lBank) -- the result is limited to -1.0
|
||
end
|
||
|
||
--lTurn = lTAS / 187.628865979 -- TRUE AIRSPEED (Meter/Second) / 187.628865979 m/s = Turn-Winkel or True Airspeed in Knots/min / 364 Knots
|
||
--ExportScript.Tools.WriteToLog('lTurn: '..ExportScript.Tools.dump(lTurn))
|
||
--ExportScript.Tools.WriteToLog('lVVI: '..ExportScript.Tools.dump(lVVI)..', lBank :'..ExportScript.Tools.dump(lBank))
|
||
-- lVVI {-1.0, 0.0, 1.0} {0.0=0, 0.05=10, 0.10=20, 0.24=50, 0.49=100, 0.74=150, 1.0=200}
|
||
-- lBank {-1.0, 0.0,1.0}
|
||
-- lSlipBallPosition {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(40, string.format("%.4f", lVVI))
|
||
ExportScript.Tools.SendData(41, string.format("%.4f", lBank))
|
||
ExportScript.Tools.SendData(42, string.format("%.4f", ExportScript.Tools.negate(lSlipBallPosition))) -- negate
|
||
end
|
||
|
||
-- VVI for SU-33
|
||
function ExportScript.AF.FC_Russian_VVI_New()
|
||
|
||
local lVVI = LoGetVerticalVelocity() -- VERTICAL SPEED (Meter/Second)
|
||
|
||
--[[
|
||
y_min = 0.0 0.325 -- minimaler Ausgabewert
|
||
y_max = 0.325 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 20.0 -- minimaler Eingangswert
|
||
x_max = 20.0 60.0 -- maximaler Eingangswert
|
||
x = 5.0 40.0 -- aktueller Eingangswert
|
||
|
||
d_y = 0.325 0.675 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 20.0 40.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.01625 0.016875 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -0.0125 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.08125 0,6625 -- Ergebnis (m * x + n)
|
||
]]
|
||
|
||
if lVVI >= 0.0 then
|
||
if lVVI >= 0.0 and lVVI < 20.0 then
|
||
lVVI = 0.01625 * lVVI
|
||
else
|
||
lVVI = 0.016875 * lVVI + -0.0125
|
||
end
|
||
lVVI = (lVVI > 1.0 and 1.0 or lVVI)
|
||
else
|
||
if lVVI <= 0.0 and lVVI < -20.0 then
|
||
lVVI = 0.01625 * lVVI
|
||
else
|
||
lVVI = 0.016875 * lVVI + -0.0125
|
||
end
|
||
lVVI = (lVVI < -1.0 and -1.0 or lVVI)
|
||
end
|
||
|
||
ExportScript.Tools.SendData(40, string.format("%.4f", lVVI))
|
||
end
|
||
|
||
-- Airintake for MiG-29A/S/G, SU-27 and SU-33
|
||
function ExportScript.AF.FC_Russian_AirIntake()
|
||
|
||
local lAirI = LoGetMechInfo().airintake.value
|
||
|
||
ExportScript.Tools.SendData(45, string.format("%.4f", lAirI))
|
||
ExportScript.Tools.SendData(46, string.format("%.4f", lAirI))
|
||
end
|
||
|
||
-- AOA Indicator and Accelerometer (AOA, GLoad) for SU-25A, SU25T
|
||
function ExportScript.AF.FC_Russian_AOA_Su25()
|
||
|
||
local lAoA = LoGetAngleOfAttack() -- ANGLE OF ATTACK AoA (Radian)
|
||
local lAccelerationUnits = LoGetAccelerationUnits().y -- G-LOAD
|
||
local lTrueAirSpeed = LoGetTrueAirSpeed() -- TRUE AIRSPEED (Meter/Second)
|
||
|
||
-- AOA Indicator and Accelerometer (AOA, GLoad)
|
||
if lTrueAirSpeed > 1.0 then
|
||
if lAoA > 0.0 then -- positive AOA
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 40.0 -- maximaler Eingangswert
|
||
x = 1.4 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 40.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.025 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.035 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAoA = 0.025 * lAoA
|
||
else
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = -0.28 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = -10.0 -- maximaler Eingangswert
|
||
x = -3.2 -- aktueller Eingangswert
|
||
|
||
d_y = -0.28 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -10.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.028 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.0896 -- Ergebnis (m * x + n)
|
||
]] --0.14
|
||
lAoA = 0.028 * lAoA
|
||
end
|
||
else
|
||
lAoA = 0.06
|
||
end
|
||
|
||
if lAccelerationUnits > 0.0 then -- positive AOA
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 11.0 -- maximaler Eingangswert
|
||
x = 2.5 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 11.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.09090909090909090909090909090909 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0,22727272727272727272727272727273 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAccelerationUnits = 0.09090909090909090909090909090909 * lAccelerationUnits
|
||
else
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = -0.40625 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = -2.2125720977783 -- maximaler Eingangswert
|
||
x = -0.5 -- aktueller Eingangswert
|
||
|
||
d_y = -0.40625 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -2.2125720977783 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.18360983599491558834620754850374 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 2.559143240842e-33 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.09180491799745779417310377425187 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAccelerationUnits = 0.18360983599491558834620754850374 * lAccelerationUnits + 2.559143240842e-33
|
||
end
|
||
|
||
ExportScript.Tools.SendData(50, string.format("%.4f", lAoA))
|
||
ExportScript.Tools.SendData(51, string.format("%.4f", lAccelerationUnits))
|
||
end
|
||
|
||
-- AOA Indicator and Accelerometer (AOA, GLoad) for SU-27, SU33
|
||
function ExportScript.AF.FC_Russian_AOA_Su2733()
|
||
|
||
local lAoA = LoGetAngleOfAttack() -- ANGLE OF ATTACK AoA (Radian)
|
||
local lAccelerationUnits = LoGetAccelerationUnits().y -- G-LOAD
|
||
local lTrueAirSpeed = LoGetTrueAirSpeed() -- TRUE AIRSPEED (Meter/Second)
|
||
|
||
if lTrueAirSpeed > 1.0 then
|
||
if lAoA > 0.0 then -- positive AOA
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 40.0 -- maximaler Eingangswert
|
||
x = 1.4 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 40.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.025 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.035 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAoA = 0.025 * lAoA
|
||
else
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = -0.28 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = -10.0 -- maximaler Eingangswert
|
||
x = -3.2 -- aktueller Eingangswert
|
||
|
||
d_y = -0.28 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -10.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.028 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.0896 -- Ergebnis (m * x + n)
|
||
]] --0.14
|
||
lAoA = 0.028 * lAoA
|
||
end
|
||
else
|
||
lAoA = 0.06
|
||
end
|
||
|
||
if lAccelerationUnits > 0.0 then -- positive AOA
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 11.0 -- maximaler Eingangswert
|
||
x = 2.5 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 11.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.09090909090909090909090909090909 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.22727272727272727272727272727273 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAccelerationUnits = 0.09090909090909090909090909090909 * lAccelerationUnits
|
||
else
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = -0.40625 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = -4.2 -- maximaler Eingangswert
|
||
x = -0.5 -- aktueller Eingangswert
|
||
|
||
d_y = -0.40625 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -4.2 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.09672619047619047619047619047619 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.09180491799745779417310377425187 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAccelerationUnits = 0.09672619047619047619047619047619 * lAccelerationUnits
|
||
end
|
||
|
||
ExportScript.Tools.SendData(50, string.format("%.4f", lAoA))
|
||
ExportScript.Tools.SendData(51, string.format("%.4f", lAccelerationUnits))
|
||
end
|
||
|
||
-- AOA Indicator and Accelerometer (AOA, GLoad) for MiG-29A, MiG-29S
|
||
function ExportScript.AF.FC_Russian_AOA_MiG29()
|
||
|
||
local lAoA = LoGetAngleOfAttack() -- ANGLE OF ATTACK AoA (Radian)
|
||
local lAccelerationUnits = LoGetAccelerationUnits().y -- G-LOAD
|
||
|
||
if lAoA > 0.0 then -- positive AOA
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 0.7812 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 30.0 -- maximaler Eingangswert
|
||
x = 5.4 -- aktueller Eingangswert
|
||
|
||
d_y = 0.7812 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 30.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.02604 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.1406 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAoA = 0.03333333333333333333333333333333 * lAoA
|
||
else
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = -0.28 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = -5.5 -- maximaler Eingangswert
|
||
x = -2.1 -- aktueller Eingangswert
|
||
|
||
d_y = -0.28 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -5.5 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0,05090909090909090909090909090909 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.10691 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAoA = 0.05090909090909090909090909090909 * lAoA
|
||
end
|
||
|
||
if lAccelerationUnits > 0.0 then -- positive AOA
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 11.0 -- maximaler Eingangswert
|
||
x = 2.5 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 11.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.09090909090909090909090909090909 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.22727272727272727272727272727273 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAccelerationUnits = 0.09090909090909090909090909090909 * lAccelerationUnits
|
||
else
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = -0.40625 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = -4.2 -- maximaler Eingangswert
|
||
x = -0.5 -- aktueller Eingangswert
|
||
|
||
d_y = -0.40625 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -4.2 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.09672619047619047619047619047619 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.09180491799745779417310377425187 -- Ergebnis (m * x + n)
|
||
]]
|
||
lAccelerationUnits = 0.09672619047619047619047619047619 * lAccelerationUnits
|
||
end
|
||
|
||
ExportScript.Tools.SendData(50, string.format("%.4f", lAoA))
|
||
ExportScript.Tools.SendData(51, string.format("%.4f", lAccelerationUnits))
|
||
end
|
||
|
||
-- Russian Clock ACS-1 for KA-50, SU-25A, MIG-29A , MIG-29S
|
||
function ExportScript.AF.FC_Russian_Clock_ACS1()
|
||
|
||
local lDefaultOne = 1.0
|
||
local lDefaultNull = 0.0
|
||
|
||
local lCurrentClock = LoGetMissionStartTime() + LoGetModelTime() -- in seconds
|
||
local lCurrentHours = lCurrentClock / 43200 -- (3600 * 12)
|
||
lCurrentHours = lCurrentHours - ExportScript.Tools.round(lCurrentHours, 0, "floor")
|
||
local lCurrentMinutes = lCurrentClock / 3600 -- (60 * 60)
|
||
lCurrentMinutes = lCurrentMinutes - ExportScript.Tools.round(lCurrentMinutes, 0, "floor")
|
||
local lCurrentSeconds = lCurrentClock / 60
|
||
lCurrentSeconds = lCurrentSeconds - ExportScript.Tools.round(lCurrentSeconds, 0, "floor")
|
||
local lFlightTimeHours = LoGetModelTime() / 43200
|
||
lFlightTimeHours = lFlightTimeHours - ExportScript.Tools.round(lFlightTimeHours, 0, "floor")
|
||
local lFlightTimeMinutes = LoGetModelTime() / 3600
|
||
lFlightTimeMinutes = lFlightTimeMinutes - ExportScript.Tools.round(lFlightTimeMinutes, 0, "floor")
|
||
-- currtime_hours {0.0,1.0}
|
||
-- currtime_minutes {0.0,1.0}
|
||
-- currtime_seconds {0.0,1.0}
|
||
-- flight_time_meter_status{0.0,0.2}
|
||
-- flight_hours {0.0,1.0}
|
||
-- flight_minutes {0.0,1.0}
|
||
-- seconds_meter_time_minutes {0.0,1.0}
|
||
-- seconds_meter_time_seconds {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(55, string.format("%.4f", lCurrentHours))
|
||
ExportScript.Tools.SendData(56, string.format("%.4f", lCurrentMinutes))
|
||
ExportScript.Tools.SendData(57, string.format("%.4f", lCurrentSeconds))
|
||
ExportScript.Tools.SendData(58, lDefaultNull) -- red/white flag
|
||
ExportScript.Tools.SendData(59, string.format("%.4f", lFlightTimeHours))
|
||
ExportScript.Tools.SendData(60, string.format("%.4f", lFlightTimeMinutes))
|
||
ExportScript.Tools.SendData(61, lDefaultNull)
|
||
ExportScript.Tools.SendData(62, lDefaultNull)
|
||
end
|
||
|
||
-- Russian Clock (latest Model) for SU-25T, SU-27, SU-33
|
||
function ExportScript.AF.FC_Russian_Clock_late()
|
||
local lDefaultOne = 1.0
|
||
local lDefaultNull = 0.0
|
||
|
||
local lCurrentClock = LoGetMissionStartTime() + LoGetModelTime() -- in seconds
|
||
local lCurrentHours = lCurrentClock / 43200 -- (3600 * 12)
|
||
lCurrentHours = lCurrentHours - ExportScript.Tools.round(lCurrentHours, 0, "floor")
|
||
local lCurrentMinutes = lCurrentClock / 3600 -- (60 * 60)
|
||
lCurrentMinutes = lCurrentMinutes - ExportScript.Tools.round(lCurrentMinutes, 0, "floor")
|
||
local lCurrentSeconds = lCurrentClock / 60
|
||
lCurrentSeconds = lCurrentSeconds - ExportScript.Tools.round(lCurrentSeconds, 0, "floor")
|
||
local lFlightTimeHours = LoGetModelTime() / 43200
|
||
lFlightTimeHours = lFlightTimeHours - ExportScript.Tools.round(lFlightTimeHours, 0, "floor")
|
||
local lFlightTimeMinutes = LoGetModelTime() / 3600
|
||
lFlightTimeMinutes = lFlightTimeMinutes - ExportScript.Tools.round(lFlightTimeMinutes, 0, "floor")
|
||
-- currtime_hours {0.0,1.0}
|
||
-- currtime_minutes {0.0,1.0}
|
||
-- currtime_seconds {0.0,1.0}
|
||
-- flight_time_meter_status{0.0,0.2}
|
||
-- flight_hours {0.0,1.0}
|
||
-- flight_minutes {0.0,1.0}
|
||
-- seconds_meter_time_seconds {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(55, string.format("%.4f", lCurrentHours))
|
||
ExportScript.Tools.SendData(56, string.format("%.4f", lCurrentMinutes))
|
||
ExportScript.Tools.SendData(57, string.format("%.4f", lCurrentSeconds))
|
||
ExportScript.Tools.SendData(58, lDefaultNull) -- red/white flag
|
||
ExportScript.Tools.SendData(59, string.format("%.4f", lFlightTimeHours))
|
||
ExportScript.Tools.SendData(60, string.format("%.4f", lFlightTimeMinutes))
|
||
ExportScript.Tools.SendData(61, string.format("%.4f", lCurrentSeconds))
|
||
end
|
||
|
||
-- Russian Enging RPM (Tachometer) for SU-25A+T, SU-27, SU-33, MIG-29
|
||
function ExportScript.AF.FC_Russian_EngineRPM()
|
||
|
||
local lScaleValue = 110
|
||
local lEngineRPMleft = LoGetEngineInfo().RPM.left -- ENG1 RPM %
|
||
local lEngineRPMright = LoGetEngineInfo().RPM.right -- ENG2 RPM %
|
||
|
||
lEngineRPMleft = lEngineRPMleft / lScaleValue
|
||
lEngineRPMleft = (lEngineRPMleft > 1.0 and 1.0 or lEngineRPMleft) -- the result is limited to 1.0
|
||
lEngineRPMright = lEngineRPMright / lScaleValue
|
||
lEngineRPMright = (lEngineRPMright > 1.0 and 1.0 or lEngineRPMright) -- the result is limited to 1.0
|
||
-- EngineRPMleft {0.0,1.0}
|
||
-- EngineRPMright {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(65, string.format("%.4f", lEngineRPMleft))
|
||
ExportScript.Tools.SendData(66, string.format("%.4f", lEngineRPMright))
|
||
end
|
||
|
||
-- Russian Exthaus Gas Temperature 1.000GradC for SU-25A, SU-25T, MIG-29
|
||
function ExportScript.AF.FC_Russian_EGT_1000gc(egttemp, exportid)
|
||
local lEGTtemp = egttemp or 1
|
||
local lExportID = exportid or 70
|
||
|
||
--[[
|
||
y_min = 0.0 0.068 -- minimaler Ausgabewert
|
||
y_max = 0.068 1.0 -- maximaler Ausgabewert
|
||
x_min = 0 200 -- minimaler Eingangswert
|
||
x_max = 200 1080 -- maximaler Eingangswert
|
||
x = 100 650 -- aktueller Eingangswert
|
||
|
||
d_y = 0.068 0.932 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 200 880 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00034 0.00105909090909090909090909090909 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0 -0.1438181818181818181818181818172 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.034 0.5445909090909090909090909090913 -- Ergebnis (m * x + n)
|
||
]]
|
||
|
||
if lEGTtemp < 200 then
|
||
lEGTtemp = 0.00034 * lEGTtemp
|
||
else
|
||
lEGTtemp = 0.00105909090909090909090909090909 * lEGTtemp + -0.1438181818181818181818181818172
|
||
end
|
||
|
||
-- ExthausGasTemperature {0.0,1.0}
|
||
ExportScript.Tools.SendData(lExportID, string.format("%.4f", lEGTtemp))
|
||
end
|
||
|
||
-- Russian Mechanical Device Indicator for SU-25A+T
|
||
function ExportScript.AF.FC_Russian_MDI_SU25(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
|
||
local lMechInfo = LoGetMechInfo() -- mechanical components, e.g. Flaps, Wheelbrakes,...
|
||
--ExportScript.Tools.WriteToLog('lMechInfo: '..ExportScript.Tools.dump(lMechInfo))
|
||
if lMechInfo == nil then
|
||
return
|
||
end
|
||
local lTrueAirSpeed = LoGetTrueAirSpeed()
|
||
if lTrueAirSpeed == nil then
|
||
return
|
||
end
|
||
|
||
local lWarningLight = 0.0
|
||
lWarningLight = ((lMechInfo.flaps.value > 0.93 and lTrueAirSpeed > 340) and 1.0 or 0.0) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
|
||
lWarningLight = (((lMechInfo.gear.status == 1 and lMechInfo.gear.value < 1) or (lMechInfo.gear.status == 0 and lMechInfo.gear.value > 0)) and 1.0 or lWarningLight ) -- gear warning light
|
||
-- WarningLight {0.0 = Off, 0.1 = blinking light, 0.2 = on}
|
||
-- WarningLight {0.0 = Off, no blinking light, 1.0 = on}
|
||
-- nose gear {0, 1}
|
||
-- left gear {0, 1}
|
||
-- right gear {0, 1}
|
||
-- speedbreakes on {0, 1}
|
||
-- flap 1. position {0, 1}
|
||
-- flap 2. position {0, 1}
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
ExportScript.Tools.SendData(500, string.format("%.1f", lWarningLight))
|
||
ExportScript.Tools.SendData(501, (lMechInfo.gear.value > 0.85 and 1 or 0)) -- nose gear
|
||
ExportScript.Tools.SendData(502, (lMechInfo.gear.value > 0.95 and 1 or 0)) -- left gear
|
||
ExportScript.Tools.SendData(503, (lMechInfo.gear.value == 1 and 1 or 0)) -- right gear
|
||
ExportScript.Tools.SendData(510, (lMechInfo.speedbrakes.value > 0.1 and 1 or 0)) -- speedbreakes on > 0.1 (0 - 1)
|
||
ExportScript.Tools.SendData(531, (lMechInfo.flaps.value > 0.25 and 1 or 0)) -- flap 1. position
|
||
ExportScript.Tools.SendData(532, (lMechInfo.flaps.value > 0.93 and 1 or 0)) -- flap 2. position
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
ExportScript.Tools.SendDataDAC(500, (((lMechInfo.gear.status == 1 and lMechInfo.gear.value < 1) or (lMechInfo.gear.status == 0 and lMechInfo.gear.value > 0)) and 1 or 0 ))
|
||
ExportScript.Tools.SendDataDAC(501, (lMechInfo.gear.value > 0.85 and 1 or 0)) -- nose gear
|
||
ExportScript.Tools.SendDataDAC(502, (lMechInfo.gear.value > 0.95 and 1 or 0)) -- left gear
|
||
ExportScript.Tools.SendDataDAC(503, (lMechInfo.gear.value == 1 and 1 or 0)) -- right gear
|
||
ExportScript.Tools.SendDataDAC(510, (lMechInfo.speedbrakes.value > 0.1 and 1 or 0)) -- speedbreakes on > 0.1 (0 - 1)
|
||
ExportScript.Tools.SendDataDAC(531, (lMechInfo.flaps.value > 0.25 and 1 or 0)) -- flap 1. position
|
||
ExportScript.Tools.SendDataDAC(532, (lMechInfo.flaps.value > 0.93 and 1 or 0)) -- flap 2. position
|
||
ExportScript.Tools.SendDataDAC(533, ((lMechInfo.flaps.value > 0.93 and lTrueAirSpeed > 340) and 1 or 0)) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
|
||
end
|
||
end
|
||
|
||
-- Russian Mechanical Device Indicator for MiG-29A/G/S
|
||
function ExportScript.AF.FC_Russian_MDI_MiG29(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
-- The mechanical devices indicator shows the position of the landing gear, flaps, leading edge flaps and airbrake
|
||
local lMechInfo = LoGetMechInfo() -- mechanical components, e.g. Flaps, Wheelbrakes,...
|
||
--ExportScript.Tools.WriteToLog('lMechInfo: '..ExportScript.Tools.dump(lMechInfo))
|
||
if lMechInfo == nil then
|
||
return
|
||
end
|
||
|
||
local lTrueAirSpeed = LoGetTrueAirSpeed()
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
ExportScript.Tools.SendDataDAC(500, (((lMechInfo.gear.status == 1 and lMechInfo.gear.value < 1) or (lMechInfo.gear.status == 0 and lMechInfo.gear.value > 0)) and 1 or 0 ) ) -- gear warning light
|
||
ExportScript.Tools.SendDataDAC(501, (lMechInfo.gear.value > 0.85 and 1 or 0) ) -- nose gear
|
||
ExportScript.Tools.SendDataDAC(502, (lMechInfo.gear.value > 0.95 and 1 or 0) ) -- left gear
|
||
ExportScript.Tools.SendDataDAC(503, (lMechInfo.gear.value > 0.97 and 1 or 0) ) -- right gear
|
||
|
||
ExportScript.Tools.SendDataDAC(510, (lMechInfo.speedbrakes.value > 0.1 and 1 or 0) ) -- speedbreakes on > 0.1 (0 - 1)
|
||
|
||
--ExportScript.Tools.SendDataDAC(531, (lMechInfo.flaps.value > 0.25 and 1 or 0) ) -- flap 1. position
|
||
--ExportScript.Tools.SendDataDAC(532, (lMechInfo.flaps.value > 0.93 and 1 or 0) ) -- flap 2. position
|
||
--ExportScript.Tools.SendDataDAC(533, ((lMechInfo.flaps.value > 0.93 and lTrueAirSpeed > 340) and 1 or 0) ) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
|
||
ExportScript.Tools.SendDataDAC(531, (lMechInfo.flaps.value > 0.24 and 1 or 0) ) -- flap 1. position
|
||
ExportScript.Tools.SendDataDAC(532, (lMechInfo.flaps.value > 0.49 and 1 or 0) ) -- flap 2. position
|
||
ExportScript.Tools.SendDataDAC(533, ((lMechInfo.flaps.value > 0.49 and lTrueAirSpeed > 340) and 1 or 0) ) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
|
||
--ExportScript.Tools.SendDataDAC(534, (lMechInfo.gear.value > 0.5 and 1 or 0) ) -- Intake FOD shields -- falscher Wert
|
||
|
||
ExportScript.Tools.SendDataDAC(541, (lMechInfo.parachute.value < 0.5 and 1 or 0) )
|
||
|
||
ExportScript.Tools.SendDataDAC(551, (lMechInfo.noseflap.value > 20.0 and 1 or 0) )
|
||
|
||
ExportScript.Tools.SendDataDAC(560, lMechInfo.airintake.status )
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
local lWarningLight = 0.0
|
||
|
||
if lTrueAirSpeed ~= nil then
|
||
--lWarningLight = ((lMechInfo.flaps.value > 0.93 and lTrueAirSpeed > 340) and 1.0 or 0.0) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
|
||
lWarningLight = ((lMechInfo.flaps.value > 0.49 and lTrueAirSpeed > 340) and 1.0 or 0.0) -- Speed Warning for Flaps, same light as gear warning light, but blinking light
|
||
lWarningLight = (((lMechInfo.gear.status == 1 and lMechInfo.gear.value < 1) or (lMechInfo.gear.status == 0 and lMechInfo.gear.value > 0)) and 1.0 or lWarningLight ) -- gear warning light
|
||
end
|
||
|
||
ExportScript.Tools.SendData(500, string.format("%.1f", lWarningLight))
|
||
ExportScript.Tools.SendData(501, (lMechInfo.gear.value > 0.85 and 1 or 0)) -- nose gear
|
||
ExportScript.Tools.SendData(502, (lMechInfo.gear.value > 0.95 and 1 or 0)) -- left gear
|
||
ExportScript.Tools.SendData(503, (lMechInfo.gear.value == 1 and 1 or 0)) -- right gear
|
||
ExportScript.Tools.SendData(510, (lMechInfo.speedbrakes.value > 0.1 and 1 or 0)) -- speedbreakes on > 0.1 (0 - 1)
|
||
--ExportScript.Tools.SendData(531, (lMechInfo.flaps.value > 0.25 and 1 or 0)) -- flap 1. position
|
||
--ExportScript.Tools.SendData(532, (lMechInfo.flaps.value > 0.93 and 1 or 0)) -- flap 2. position
|
||
ExportScript.Tools.SendData(531, (lMechInfo.flaps.value > 0.24 and 1 or 0)) -- flap 1. position
|
||
ExportScript.Tools.SendData(532, (lMechInfo.flaps.value > 0.49 and 1 or 0)) -- flap 2. position
|
||
--ExportScript.Tools.SendData(534, (lMechInfo.gear.value > 0.5 and 1 or 0)) -- Intake FOD shields -- falscher Wert
|
||
end
|
||
end
|
||
|
||
-- Russian Mechanical Device Indicator for MiG-29A/G/S
|
||
function ExportScript.AF.FC_Russian_FlareChaff_MiG29(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
local lSnares = LoGetSnares() -- Flare and Chaff
|
||
--ExportScript.Tools.WriteToLog('lSnares: '..ExportScript.Tools.dump(lSnares))
|
||
|
||
--[chaff] = number: "30"
|
||
--[flare] = number: "30"
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
ExportScript.Tools.SendDataDAC(800, lSnares.chaff + lSnares.flare )
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
ExportScript.Tools.SendDataDAC(800, lSnares.chaff + lSnares.flare )
|
||
end
|
||
end
|
||
|
||
-- Russian Fuel Quantity Indicator for MiG-29A/G/S
|
||
function ExportScript.AF.FuelQuantityIndicator_MiG29(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
-- Fuel quantity shows the fuel remaining in all tanks
|
||
local lEngineInfo = LoGetEngineInfo()
|
||
if lEngineInfo == nil then
|
||
return
|
||
end
|
||
--ExportScript.Tools.WriteToLog('lEngineInfo: '..ExportScript.Tools.dump(lEngineInfo))
|
||
--[[
|
||
[fuel_external] = number: "0"
|
||
[Temperature] = {
|
||
[left] = number: "626.99444580078"
|
||
[right] = number: "626.99444580078"
|
||
}
|
||
[RPM] = {
|
||
[left] = number: "87.453765869141"
|
||
[right] = number: "87.453758239746"
|
||
}
|
||
[FuelConsumption] = {
|
||
[left] = number: "0.1500396137767"
|
||
[right] = number: "0.1500396137767"
|
||
}
|
||
[fuel_internal] = number: "3773.2749023438"
|
||
[EngineStart] = {
|
||
[left] = number: "0"
|
||
[right] = number: "0"
|
||
}
|
||
[HydraulicPressure] = {
|
||
[left] = number: "210"
|
||
[right] = number: "210"
|
||
}
|
||
lPayloadInfo.Stations[7].CLSID == 2BEC576B-CDF5-4B7F-961F-B0FA4312B841 -- ext 1500l Fuel Tank
|
||
]]
|
||
|
||
local lTotalFuel = lEngineInfo.fuel_internal + lEngineInfo.fuel_external
|
||
--ExportScript.Tools.WriteToLog('lTotalFuel: '..ExportScript.Tools.dump(lTotalFuel))
|
||
|
||
-- Fuel value correction, difference 3D cockpit gauges and export value
|
||
-- 3000kg = 2740 1,10
|
||
-- 2500kg = 2260 <- Lamp 2 1,11
|
||
-- 1000kg = 890 1,12
|
||
-- 800kg = 700 <- Lamp 3 1,14
|
||
-- 650kg = 550 <- Lamp 4 1,18
|
||
if lTotalFuel > 2740 then
|
||
lTotalFuel = lTotalFuel * 1.1
|
||
elseif lTotalFuel > 2260 and lTotalFuel < 2740 then
|
||
lTotalFuel = lTotalFuel * 1.11
|
||
elseif lTotalFuel > 890 and lTotalFuel < 2260 then
|
||
lTotalFuel = lTotalFuel * 1.12
|
||
elseif lTotalFuel > 700 and lTotalFuel < 290 then
|
||
lTotalFuel = lTotalFuel * 1.14
|
||
elseif lTotalFuel > 0 and lTotalFuel < 700 then
|
||
lTotalFuel = lTotalFuel * 1.18
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
ExportScript.Tools.SendDataDAC("300", string.format("%d", ExportScript.Tools.round(((lTotalFuel) / 10), 0, "ceil") * 10) ) -- total fuel in kg
|
||
|
||
ExportScript.Tools.SendDataDAC("304", (lTotalFuel < 3800.0 and 1 or 0) ) -- Tank warning 1
|
||
ExportScript.Tools.SendDataDAC("305", (lTotalFuel < 2550.0 and 1 or 0) ) -- Tank warning 2
|
||
ExportScript.Tools.SendDataDAC("306", (lTotalFuel < 800.0 and 1 or 0) ) -- Tank warning 3
|
||
ExportScript.Tools.SendDataDAC("307", (lTotalFuel < 650.0 and 1 or 0) ) -- Tank warning 4
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
local lTotalFuel_5_4 = 0
|
||
local lTotalFuel_4_0 = 0
|
||
|
||
if lTotalFuel < 5500 then
|
||
if lTotalFuel > 4000 then
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 4000 -- minimaler Eingangswert
|
||
x_max = 5500 -- maximaler Eingangswert
|
||
|
||
x = 5000 -- aktueller Eingangswert
|
||
|
||
d_y = 1 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 1500 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00066667 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -2.666685 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.666665 -- Ergebnis (m * x + n)
|
||
]]
|
||
lTotalFuel_5_4 = 0.00066667 * lTotalFuel + -2.666685
|
||
else
|
||
lTotalFuel_5_4 = 0.0
|
||
end
|
||
else
|
||
lTotalFuel_5_4 = 1.0
|
||
end
|
||
if lTotalFuel < 4000 then
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 0 -- minimaler Eingangswert
|
||
x_max = 4000 -- maximaler Eingangswert
|
||
|
||
x = 3000 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 4000 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00025 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.75 -- Ergebnis (m * x + n)
|
||
]]
|
||
lTotalFuel_4_0 = 0.00025 * lTotalFuel
|
||
else
|
||
lTotalFuel_4_0 = 1.0
|
||
end
|
||
|
||
ExportScript.Tools.SendData(301, string.format("%0.4f", lTotalFuel_5_4) )
|
||
ExportScript.Tools.SendData(302, string.format("%0.4f", lTotalFuel_4_0) )
|
||
|
||
ExportScript.Tools.SendData(304, (lTotalFuel < 3800.0 and 1 or 0) ) -- Tank warning 1
|
||
ExportScript.Tools.SendData(305, (lTotalFuel < 2550.0 and 1 or 0) ) -- Tank warning 2
|
||
ExportScript.Tools.SendData(306, (lTotalFuel < 800.0 and 1 or 0) ) -- Tank warning 3
|
||
ExportScript.Tools.SendData(307, (lTotalFuel < 650.0 and 1 or 0) ) -- Tank warning 4
|
||
end
|
||
end
|
||
|
||
-- Russian Sighting System for MiG-29A/G/S (DAC only)
|
||
function ExportScript.AF.SightingSystem_MiG29()
|
||
local lSightingSystemInfo = LoGetSightingSystemInfo()
|
||
if lSightingSystemInfo == nil then
|
||
return
|
||
end
|
||
--ExportScript.Tools.WriteToLog('lSightingSystemInfo: '..ExportScript.Tools.dump(lSightingSystemInfo)9
|
||
--[[
|
||
[PRF] = {
|
||
[selection] = string: "ILV"
|
||
[current] = string: "MED"
|
||
}
|
||
[laser_on] = boolean: "false"
|
||
[scale] = {
|
||
[azimuth] = number: "0.52359873056412"
|
||
[distance] = number: "10000"
|
||
}
|
||
[radar_on] = boolean: "false"
|
||
[optical_system_on] = boolean: "false"
|
||
[LaunchAuthorized] = boolean: "false"
|
||
[ECM_on] = boolean: "false"
|
||
[Manufacturer] = string: "RUS"
|
||
[TDC] = {
|
||
[y] = number: "0"
|
||
[x] = number: "0"
|
||
}
|
||
[ScanZone] = {
|
||
[coverage_H] = {
|
||
[min] = number: "0"
|
||
[max] = number: "20000"
|
||
}
|
||
[size] = {
|
||
[azimuth] = number: "1.0471974611282"
|
||
[elevation] = number: "0.17453290522099"
|
||
}
|
||
[position] = {
|
||
[exceeding_manual] = number: "0"
|
||
[distance_manual] = number: "0"
|
||
[azimuth] = number: "0"
|
||
[elevation] = number: "0"
|
||
}
|
||
}
|
||
]]
|
||
ExportScript.Tools.SendDataDAC("600", lSightingSystemInfo.ECM_on == true and 1 or 0 )
|
||
ExportScript.Tools.SendDataDAC("601", lSightingSystemInfo.laser_on == true and 1 or 0 )
|
||
ExportScript.Tools.SendDataDAC("602", lSightingSystemInfo.optical_system_on == true and 1 or 0 )
|
||
ExportScript.Tools.SendDataDAC("603", lSightingSystemInfo.LaunchAuthorized == true and 1 or 0 )
|
||
ExportScript.Tools.SendDataDAC("604", lSightingSystemInfo.radar_on == true and 1 or 0 )
|
||
end
|
||
|
||
-- Russian System Test EKRAN
|
||
function ExportScript.AF.FC_EKRAN()
|
||
|
||
local lMCPState = LoGetMCPState() -- Warning Lights
|
||
if lMCPState == nil then
|
||
return
|
||
end
|
||
local lDisplayWindow = "" -- Message
|
||
local lFAILlight = "" -- FAILURE
|
||
local lMEMORYlight = "" -- MEMORY
|
||
local lTURNlight = "" -- TURN
|
||
if gDisplayWindow == nil then
|
||
gFC_EKRAN_active = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}
|
||
gDisplayWindow = ""
|
||
end
|
||
|
||
if lMCPState.LeftTailPlaneFailure and not gFC_EKRAN_active[1] then
|
||
lDisplayWindow = "LEFT\nTAIL\nPLANE\nFAILURE"
|
||
gFC_EKRAN_active[1] = true
|
||
elseif lMCPState.RightTailPlaneFailure and not gFC_EKRAN_active[2] then
|
||
lDisplayWindow = "RIGHT\nTAIL\nPLANE\nFAILURE"
|
||
gFC_EKRAN_active[2] = true
|
||
elseif lMCPState.MasterWarning and not gFC_EKRAN_active[3] then
|
||
---lDisplayWindow = "MASTER\nWARNING" -- don't display
|
||
gFC_EKRAN_active[3] = true
|
||
elseif lMCPState.LeftEngineFailure and not gFC_EKRAN_active[4] then
|
||
lDisplayWindow = "LEFT\nENGINE\nFAILURE"
|
||
gFC_EKRAN_active[4] = true
|
||
elseif lMCPState.RightEngineFailure and not gFC_EKRAN_active[5] then
|
||
lDisplayWindow = "RIGHT\nENGINE\nFAILURE"
|
||
gFC_EKRAN_active[5] = true
|
||
elseif lMCPState.RightAileronFailure and not gFC_EKRAN_active[6] then
|
||
lDisplayWindow = "RIGHT\nAILERON\nFAILURE"
|
||
gFC_EKRAN_active[6] = true
|
||
elseif lMCPState.LeftMainPumpFailure and not gFC_EKRAN_active[7] then
|
||
lDisplayWindow = "LEFT\nMAIN\nPUMP\nFAILURE"
|
||
gFC_EKRAN_active[7] = true
|
||
elseif lMCPState.RightMainPumpFailure and not gFC_EKRAN_active[8] then
|
||
lDisplayWindow = "RIGHT\nMAIN\nPUMP\nFAILURE"
|
||
gFC_EKRAN_active[8] = true
|
||
elseif lMCPState.LeftWingPumpFailure and not gFC_EKRAN_active[9] then
|
||
lDisplayWindow = "LEFT\nWING\nPUMP\nFAILURE"
|
||
gFC_EKRAN_active[10] = true
|
||
elseif lMCPState.RightWingPumpFailure and not gFC_EKRAN_active[10] then
|
||
lDisplayWindow = "RIGHT\nWING\nPUMP\nFAILURE"
|
||
gFC_EKRAN_active[10] = true
|
||
elseif lMCPState.EOSFailure and not gFC_EKRAN_active[11] then
|
||
lDisplayWindow = "EOS\nFAILURE"
|
||
gFC_EKRAN_active[11] = true
|
||
elseif lMCPState.ECMFailure and not gFC_EKRAN_active[12] then
|
||
lDisplayWindow = "ECM\nFAILURE"
|
||
gFC_EKRAN_active[12] = true
|
||
elseif lMCPState.CannonFailure and not gFC_EKRAN_active[13] then
|
||
lDisplayWindow = "CANNON\nFAILURE"
|
||
gFC_EKRAN_active[13] = true
|
||
elseif lMCPState.MLWSFailure and not gFC_EKRAN_active[14] then
|
||
lDisplayWindow = "MLWS\nFAILURE"
|
||
gFC_EKRAN_active[14] = true
|
||
elseif lMCPState.ACSFailure and not gFC_EKRAN_active[15] then
|
||
lDisplayWindow = "ACS\nFAILURE"
|
||
gFC_EKRAN_active[15] = true
|
||
elseif lMCPState.RadarFailure and not gFC_EKRAN_active[16] then
|
||
lDisplayWindow = "RADAR\nFAILURE"
|
||
gFC_EKRAN_active[16] = true
|
||
elseif lMCPState.HelmetFailure and not gFC_EKRAN_active[17] then
|
||
lDisplayWindow = "HELMET\nFAILURE"
|
||
gFC_EKRAN_active[17] = true
|
||
elseif lMCPState.HUDFailure and not gFC_EKRAN_active[18] then
|
||
lDisplayWindow = "HUD\nFAILURE"
|
||
gFC_EKRAN_active[18] = true
|
||
elseif lMCPState.MFDFailure and not gFC_EKRAN_active[19] then
|
||
lDisplayWindow = "MFD\nFAILURE"
|
||
gFC_EKRAN_active[19] = true
|
||
elseif lMCPState.RWSFailure and not gFC_EKRAN_active[20] then
|
||
lDisplayWindow = "RWS\nFAILURE"
|
||
gFC_EKRAN_active[20] = true
|
||
elseif lMCPState.GearFailure and not gFC_EKRAN_active[21] then
|
||
lDisplayWindow = "GEAR\nFAILURE"
|
||
gFC_EKRAN_active[21] = true
|
||
elseif lMCPState.HydraulicsFailure and not gFC_EKRAN_active[22] then
|
||
lDisplayWindow = "HYDRAULICS\nFAILURE"
|
||
gFC_EKRAN_active[22] = true
|
||
elseif lMCPState.AutopilotFailure and not gFC_EKRAN_active[23] then
|
||
--lDisplayWindow = "AUTOPILOT\nFAILURE" -- bug in DCS, error is always active
|
||
gFC_EKRAN_active[23] = true
|
||
elseif lMCPState.FuelTankDamage and not gFC_EKRAN_active[24] then
|
||
lDisplayWindow = "FUEL\nTANK\nDAMAGE"
|
||
gFC_EKRAN_active[24] = true
|
||
end
|
||
|
||
if lDisplayWindow ~= "" then
|
||
gDisplayWindow = lDisplayWindow
|
||
end
|
||
if gDisplayWindow ~= "" then
|
||
lFAILlight = " FAILURE"
|
||
end
|
||
-- DisplayWindow (main message)
|
||
-- FAILlight (failure text)
|
||
-- MEMORYlight (memmory text)
|
||
-- TURNlight (turn text)
|
||
|
||
ExportScript.Tools.SendData(80, string.format("%s;", gDisplayWindow))
|
||
ExportScript.Tools.SendData(81, string.format("%s;", lFAILlight))
|
||
ExportScript.Tools.SendData(82, string.format("%s;", lMEMORYlight))
|
||
ExportScript.Tools.SendData(83, string.format("%s;", lTURNlight))
|
||
end
|
||
|
||
-- ADI for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_ADI()
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSsignd = math.pi
|
||
local lNavInfoPitch = LoGetNavigationInfo().Requirements.pitch -- AP REQUIRED PITCH (Radian)
|
||
local lNavInfoRoll = LoGetNavigationInfo().Requirements.roll -- AP REQUIRED BANK (Radian)
|
||
local lPitch, lBank, lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
local lSlipBallPosition = LoGetSlipBallPosition() -- SLIP BALL (-1 +1)
|
||
local lGlide = LoGetGlideDeviation() -- VOR1 HORIZONTAL DEFLECTION (-1 +1)
|
||
--local lSide = LoGetSideDeviation() -- VOR1 VERTICAL DEFLECTION (-1 +1)
|
||
--[[ ADI from A-10C
|
||
[17] = "%.4f", -- ADI Pitch
|
||
[18] = "%.4f", -- ADI Bank
|
||
[24] = "%.4f", -- ADI Slip Ball
|
||
[20] = "%.4f", -- ADI Bank Steering Bar
|
||
[21] = "%.4f", -- ADI Pitch Steering Bar
|
||
[23] = "%.4f", -- ADI Turn Needle
|
||
[27] = "%.4f", -- ADI Glide-Slope Indicator
|
||
[26] = "%0.1f", -- ADI Glide-Slope Warning Flag
|
||
[25] = "%0.1f", -- ADI Attitude Warning Flag
|
||
[19] = "%0.1f", -- ADI Course Warning Flag
|
||
]]
|
||
lNavInfoPitch = lNavInfoPitch / (lRadToDCSsignd * -1) -- lNavInfoPitch / lRadToDCSsignd
|
||
lNavInfoRoll = lNavInfoRoll / lRadToDCSsignd
|
||
lPitch = lPitch / (lRadToDCSsignd / 2) -- lPitch / (lRadToDCSsignd / 1.5)
|
||
lBank = lBank / lRadToDCSsignd
|
||
|
||
ExportScript.Tools.SendData(2, string.format("%.4f", ExportScript.Tools.negate(lPitch))) -- negate
|
||
ExportScript.Tools.SendData(1, string.format("%.4f", lBank))
|
||
ExportScript.Tools.SendData(10, string.format("%.4f", lSlipBallPosition))
|
||
ExportScript.Tools.SendData(5, string.format("%.4f", lNavInfoRoll))
|
||
ExportScript.Tools.SendData(6, string.format("%.4f", ExportScript.Tools.negate(lNavInfoPitch))) -- negate
|
||
ExportScript.Tools.SendData(3, string.format("%.4f", lBank)) -- as Turn Needle
|
||
ExportScript.Tools.SendData(4, string.format("%.4f", lGlide))
|
||
ExportScript.Tools.SendData(7, 0)
|
||
ExportScript.Tools.SendData(8, 0)
|
||
ExportScript.Tools.SendData(9, 0)
|
||
end
|
||
|
||
-- Standby ADI for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_stbyADI()
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSsignd = math.pi
|
||
local lPitch, lBank, lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
--local lSide = LoGetSideDeviation() -- VOR1 VERTICAL DEFLECTION (-1 +1)
|
||
-- [63] = "%.4f", -- Standby Attitude Indicator pitch {-1.0, 1.0}
|
||
-- [64] = "%.4f", -- Standby Attitude Indicator bank {-1.0, 1.0}
|
||
-- [65] = "%0.1f", -- Standby Attitude Indicator warning flag {0.0, 1.0}
|
||
lPitch = lPitch / (lRadToDCSsignd / 1.5)
|
||
lBank = lBank / lRadToDCSsignd
|
||
|
||
ExportScript.Tools.SendData(34, string.format("%.4f", lPitch))
|
||
ExportScript.Tools.SendData(35, string.format("%.4f", ExportScript.Tools.negate(lBank))) -- negate
|
||
--ExportScript.Tools.SendData(0, 0) -- Warning Flag
|
||
end
|
||
|
||
-- HSI for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_HSI(distancetoway)
|
||
local lDistanceToWay = distancetoway or 999
|
||
|
||
local lDefaultOne = 1.0
|
||
local lDefaultNull = 0.0
|
||
local lRadToDCSunsignd = math.pi * 2
|
||
local lPitch,lBank,lYaw = LoGetADIPitchBankYaw() -- PITCH, BANK, YAW (Radian)
|
||
local lHSI_RMI = LoGetControlPanel_HSI().RMI_raw -- VOR1 OBS (Radian)
|
||
local lHSI_ADF = LoGetControlPanel_HSI().ADF_raw -- ADF OBS (Radian)
|
||
local lHSI_Curse = LoGetControlPanel_HSI().Course -- HSI Course (Radian)
|
||
local lHeading = LoGetSelfData().Heading -- HEADING (Radian)
|
||
lPitch, lBank = nil
|
||
--[[
|
||
[Course] = number: "0.76548692098835"
|
||
[CourseDeviation] = number: "0"
|
||
[ADF_raw] = number: "5.5811524391174"
|
||
[BearingPointer] = number: "0.80134677481978"
|
||
[RMI_raw] = number: "5.4092655181885"
|
||
[HeadingPointer] = number: "0.098191173578347"
|
||
[Heading_raw] = number: "6.2831854820251"
|
||
]]
|
||
--[[ HSI A-10C
|
||
[34] = "%.4f", -- HSI Heading
|
||
[33] = "%.4f", -- HSI Bearing #1
|
||
[35] = "%.4f", -- HSI Bearing #2
|
||
[36] = "%.4f", -- HSI Heading Marker
|
||
[47] = "%.4f", -- HSI Course Arrow
|
||
[41] = "%.4f", -- HSI Deviation
|
||
[29] = "%.2f", -- HSI range_counter_100
|
||
[30] = "%.2f", -- HSI range_counter_10
|
||
[31] = "%.2f", -- HSI range_counter_1
|
||
[42] = "%0.1f", -- HSI Bearing to_from_1
|
||
[43] = "%0.1f", -- HSI Bearing to_from_2
|
||
[46] = "%0.1f", -- HSI Bearing Flag
|
||
[40] = "%0.1f", -- HSI Power Flag
|
||
[32] = "%0.1f", -- HSI Range Flag
|
||
]]
|
||
lDistanceToWay = lDistanceToWay * 0.00062136994937697 -- meter to miles
|
||
--lDistanceToWay = ExportScript.Tools.round(lDistanceToWay / 1000, 1)
|
||
local lRangeCounter1 = 0
|
||
local lRangeCounter2 = 0
|
||
local lRangeCounter3 = 0
|
||
if lDistanceToWay > 100 then
|
||
lRangeCounter1 = ExportScript.Tools.round((lDistanceToWay / 100), 0, "floor") * 0.11
|
||
lRangeCounter1 = lRangeCounter1 - ExportScript.Tools.round(lRangeCounter1, 0, "floor")
|
||
end
|
||
if lDistanceToWay > 10 then
|
||
if lDistanceToWay > 100 then
|
||
lRangeCounter2 = (ExportScript.Tools.round((lDistanceToWay - (ExportScript.Tools.round(lDistanceToWay / 100, 0, "floor") * 100)), 0, "floor") / 10) * 0.11
|
||
else
|
||
lRangeCounter2 = (lDistanceToWay / 10) * 0.11
|
||
lRangeCounter2 = lRangeCounter2 - ExportScript.Tools.round(lRangeCounter2, 0, "floor")
|
||
end
|
||
end
|
||
if lDistanceToWay > 10 then
|
||
lRangeCounter3 = (lDistanceToWay - (ExportScript.Tools.round(lDistanceToWay / 10, 0, "floor") * 10)) * 0.11
|
||
else
|
||
lRangeCounter3 = lDistanceToWay * 0.11
|
||
end
|
||
|
||
lHeading = 1.0 - (lHeading / lRadToDCSunsignd)
|
||
lHSI_Curse = (lHSI_Curse / lRadToDCSunsignd)
|
||
lHSI_ADF = (lHSI_ADF / lRadToDCSunsignd)
|
||
-- HSI Heading {0.0, 1.0}
|
||
-- HSI Bearing #1 {0.0, 1.0}
|
||
-- HSI Bearing #2 {0.0, 1.0}
|
||
-- HSI Heading Marker {0.0, 1.0}
|
||
-- HSI Course Arrow {0.0, 1.0}
|
||
-- HSI Deviation {0.0, 1.0}
|
||
-- HSI range_counter_100
|
||
-- HSI range_counter_10
|
||
-- HSI range_counter_1
|
||
-- HSI Bearing to_from_1
|
||
-- HSI Bearing to_from_2
|
||
-- HSI Bearing Flag
|
||
-- HSI Power Flag
|
||
-- HSI Range Flag
|
||
|
||
ExportScript.Tools.SendData(11, string.format("%.4f", lHeading)) -- compass card
|
||
ExportScript.Tools.SendData(12, string.format("%.4f", lHSI_Curse)) -- Bearing #1
|
||
ExportScript.Tools.SendData(13, string.format("%.4f", lHSI_Curse)) -- Bearing #2
|
||
ExportScript.Tools.SendData(14, lDefaultNull)
|
||
ExportScript.Tools.SendData(15, string.format("%.4f", lHSI_Curse))
|
||
ExportScript.Tools.SendData(16, string.format("%.4f", lHSI_ADF))
|
||
ExportScript.Tools.SendData(17, string.format("%.4f", lRangeCounter1))
|
||
ExportScript.Tools.SendData(18, string.format("%.4f", lRangeCounter2))
|
||
ExportScript.Tools.SendData(19, string.format("%.4f", lRangeCounter3))
|
||
ExportScript.Tools.SendData(20, lDefaultNull)
|
||
ExportScript.Tools.SendData(21, lDefaultNull)
|
||
ExportScript.Tools.SendData(22, lDefaultNull)
|
||
ExportScript.Tools.SendData(23, lDefaultNull) -- deaktiviert die Course Anzeige
|
||
end
|
||
|
||
-- VVI for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_VVI()
|
||
local lVVITmp = LoGetVerticalVelocity() * 196.8504 -- VERTICAL SPEED (Meter/Second to Foots/Minute)
|
||
-- {-1.0, -0.5, -0.29, 0.29, 0.5, 1.0}
|
||
--{-6000, -2000, -1000, 1000, 2000, 6000}
|
||
--ExportScript.Tools.WriteToLog('lVVITmp 1: '..ExportScript.Tools.dump(lVVITmp))
|
||
if lVVITmp >= 0.0 then
|
||
--[[
|
||
y_min = 0.0 0.29 0.503 0.765 -- minimaler Ausgabewert
|
||
y_max = 0.29 0.503 0.765 1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 1000.0 2000.0 4000.0 -- minimaler Eingangswert
|
||
x_max = 1000.0 2000.0 4000.0 6000.0 -- maximaler Eingangswert
|
||
x = 500.0 1600.0 2250.0 5500.0 -- aktueller Eingangswert
|
||
|
||
d_y = 0.29 0.213 0.262 0.235 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 1000.0 1000.0 2000.0 2000.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00029 0.000213 0.000131 0.0001175 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 0.077 0.241 0.295 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.145 0.4178 0.53575 0.94125 -- Ergebnis (m * x + n)
|
||
]]
|
||
if lVVITmp >= 4000 then
|
||
lVVITmp = 0.0001175 * lVVITmp + 0.295
|
||
elseif lVVITmp >= 2000 then
|
||
lVVITmp = 0.000131 * lVVITmp + 0.241
|
||
elseif lVVITmp >= 1000 then
|
||
lVVITmp = 0.000213 * lVVITmp + 0.077
|
||
else
|
||
lVVITmp = 0.00029 * lVVITmp
|
||
end
|
||
lVVITmp = (lVVITmp > 1.0 and 1.0 or lVVITmp) -- the result is limited to 1.0
|
||
else
|
||
--[[
|
||
y_min = -0.0 -0.29 -0.503 -0.765 -- minimaler Ausgabewert
|
||
y_max = -0.29 -0.503 -0.765 -1.0 -- maximaler Ausgabewert
|
||
x_min = -0.0 -1000.0 -2000.0 -4000.0 -- minimaler Eingangswert
|
||
x_max = -1000.0 -2000.0 -4000.0 -6000.0 -- maximaler Eingangswert
|
||
x = -500.0 -1600.0 -2250.0 -5500.0 -- aktueller Eingangswert
|
||
|
||
d_y = -0.29 -0.213 -0.262 -0.235 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = -1000.0 -1000.0 -2000.0 -2000.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.00029 0.000213 0.000131 0.0001175 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0.0 -0.077 -0.241 -0.295 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = -0.145 -0.4178 -0.53575 -0.94125 -- Ergebnis (m * x + n)
|
||
]]
|
||
if lVVITmp <= 0 and lVVITmp > -1000 then
|
||
lVVITmp = 0.00029 * lVVITmp
|
||
elseif lVVITmp <= -1000 and lVVITmp > -2000 then
|
||
lVVITmp = 0.000213 * lVVITmp + -0.077
|
||
elseif lVVITmp <= -2000 and lVVITmp > -4000 then
|
||
lVVITmp = 0.000131 * lVVITmp + -0.241
|
||
else
|
||
lVVITmp = 0.0001175 * lVVITmp + -0.295
|
||
end
|
||
|
||
lVVITmp = (lVVITmp < -1.0 and -1.0 or lVVITmp) -- the result is limited to -1.0
|
||
end
|
||
|
||
ExportScript.Tools.SendData(24, string.format("%.4f", lVVITmp))
|
||
end
|
||
|
||
-- AOA Indicator (AOA) for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_AOA()
|
||
local lRadToDCSsignd = math.pi
|
||
local lAoA = LoGetAngleOfAttack() -- ANGLE OF ATTACK AoA (Radian)
|
||
--ExportScript.Tools.WriteToLog('lAoA 1: '..ExportScript.Tools.dump(lAoA))
|
||
lAoA = (lAoA / 0.3) + 0.38
|
||
--lAoA = ((lAoA / lRadToDCSsignd) * 10) + 0.38
|
||
--[[
|
||
lAoA = lAoA / (lRadToDCSsignd / 10)
|
||
if lAoA >= 0.0 then
|
||
lAoA = lAoA + 0.4
|
||
lAoA = lAoA / 18
|
||
else
|
||
lAoA = lAoA + 0.4
|
||
lAoA = lAoA / 12
|
||
end
|
||
]]
|
||
--ExportScript.Tools.WriteToLog('lAoA 2: '..ExportScript.Tools.dump(lAoA))
|
||
ExportScript.Tools.SendData(50, string.format("%.4f", lAoA) )
|
||
end
|
||
|
||
-- Accelerometer (GLoad) for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_GLOAD()
|
||
local lAccelerationUnits = LoGetAccelerationUnits().y -- G-LOAD
|
||
|
||
lAccelerationUnits = (lAccelerationUnits / 15) + 0.33
|
||
|
||
ExportScript.Tools.SendData(25, string.format("%.4f", lAccelerationUnits))
|
||
ExportScript.Tools.SendData(26, 0)
|
||
ExportScript.Tools.SendData(27, 0)
|
||
end
|
||
|
||
-- US Clock for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_Clock()
|
||
local lCurrentClock = LoGetMissionStartTime() + LoGetModelTime() -- in seconds
|
||
local lCurrentHours = lCurrentClock / 43200 -- (3600 * 12)
|
||
lCurrentHours = lCurrentHours - ExportScript.Tools.round(lCurrentHours, 0, "floor")
|
||
local lCurrentMinutes = lCurrentClock / 3600 -- (60 * 60)
|
||
lCurrentMinutes = lCurrentMinutes - ExportScript.Tools.round(lCurrentMinutes, 0, "floor")
|
||
local lCurrentSeconds = lCurrentClock / 60
|
||
lCurrentSeconds = lCurrentSeconds - ExportScript.Tools.round(lCurrentSeconds, 0, "floor")
|
||
-- currtime_hours {0.0,1.0}
|
||
-- currtime_minutes {0.0,1.0}
|
||
-- currtime_seconds {0.0,1.0}
|
||
|
||
ExportScript.Tools.SendData(28, string.format("%.4f", lCurrentHours))
|
||
ExportScript.Tools.SendData(29, string.format("%.4f", lCurrentMinutes))
|
||
ExportScript.Tools.SendData(30, string.format("%.4f", lCurrentSeconds))
|
||
end
|
||
|
||
-- US Standby Compass for A-10A, F-15C
|
||
function ExportScript.AF.FC_US_Compass()
|
||
local lDefaultNull = 0.0
|
||
local lHeading = math.deg(LoGetSelfData().Heading) -- HEADING (Radian to Grad)
|
||
--local lHeading = math.deg(LoGetMagneticYaw()) -- HEADING (Radian to Grad)
|
||
--lHeading = 360 - lHeading -- muss umgerechnet werden??
|
||
|
||
--[[
|
||
y_min = 1.0 -- minimaler Ausgabewert
|
||
y_max = -1.0 -- maximaler Ausgabewert
|
||
x_min = 0.0 -- minimaler Eingangswert
|
||
x_max = 360.00 -- maximaler Eingangswert
|
||
x = 185.5 -- aktueller Eingangswert
|
||
|
||
d_y = -2.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 360.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = -0,00555555555555555555555555555556 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 1.0 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.4995680345615518 -- Ergebnis (m * x + n)
|
||
]]
|
||
lHeading = -0.00555555555555555555555555555556 * lHeading + 1.0
|
||
|
||
ExportScript.Tools.SendData(31, string.format("%.4f", lHeading)) -- heading
|
||
ExportScript.Tools.SendData(32, string.format("%.4f", lDefaultNull)) -- pitch
|
||
ExportScript.Tools.SendData(33, string.format("%.4f", lDefaultNull)) -- bank
|
||
end
|
||
|
||
-- US F-15C Exaust Gas Temperature
|
||
function ExportScript.AF.FC_F15C_ExaustGasTemp(value, exportidNeedle, exportid100, exportid10, exportid1)
|
||
local lValue = value or 1
|
||
local lExportIDNeedle = exportidNeedle or 0
|
||
local lExportID100 = exportid100 or 0
|
||
local lExportID10 = exportid10 or 0
|
||
local lExportID1 = exportid1 or 0
|
||
local lValueTmp = lValue
|
||
|
||
local lCounter = {[0] = 0.0, [1] = 0.1, [2] = 0.2, [3] = 0.3, [4] = 0.4, [5] = 0.5, [6] = 0.6, [7] = 0.7, [8] = 0.8, [9] = 0.9}
|
||
local lCounter3 = 0
|
||
local lValueTmp2 = lValueTmp
|
||
|
||
lValueTmp2 = lValueTmp2 / 100
|
||
lValueTmp2 = string.format("%02d", lValueTmp2)
|
||
|
||
if lValueTmp > 100 then
|
||
lCounter3 = (lValueTmp - (ExportScript.Tools.round(lValueTmp / 100, 0, "floor") * 100)) * 0.01
|
||
else
|
||
lCounter3 = lValueTmp * 0.01
|
||
end
|
||
|
||
--[[
|
||
y_min = 0.0 0.08 -- minimaler Ausgabewert
|
||
y_max = 0.08 1.0 -- maximaler Ausgabewert
|
||
x_min = 0 200 -- minimaler Eingangswert
|
||
x_max = 200 1400 -- maximaler Eingangswert
|
||
x = 100 650 -- aktueller Eingangswert
|
||
|
||
d_y = 0.08 0.92 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 200 1200 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.0004 7.6666666666666666666666666666667e-4 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = 0 -0.07333333333333333333333333333333 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.04 0,425 -- Ergebnis (m * x + n)
|
||
]]
|
||
|
||
if lValueTmp > 200 then
|
||
lValue = 7.6666666666666666666666666666667e-4 * lValueTmp + -0.07333333333333333333333333333333
|
||
else
|
||
lValue = 0.0004 * lValueTmp
|
||
end
|
||
|
||
ExportScript.Tools.SendData(lExportIDNeedle, string.format("%.4f", lValue))
|
||
ExportScript.Tools.SendData(lExportID100, string.format("%.2f", lCounter[tonumber(string.sub(lValueTmp2, 1, 1))]))
|
||
ExportScript.Tools.SendData(lExportID10, string.format("%.2f", lCounter[tonumber(string.sub(lValueTmp2, 2, 2))]))
|
||
ExportScript.Tools.SendData(lExportID1, string.format("%.2f", lCounter3))
|
||
end
|
||
|
||
-- A-10A Exaust Gas Temperature
|
||
function ExportScript.AF.FC_A10A_ExaustGasTemp(value, exportidMain, exportidSecond)
|
||
local lValue = value or 1
|
||
local lExportIDMain = exportidMain or 0
|
||
local lExportIDSecond = exportidSecond or 0
|
||
local lValueTmp = lValue
|
||
|
||
--[[
|
||
y_min = 0.0 -- minimaler Ausgabewert
|
||
y_max = 1.0 -- maximaler Ausgabewert
|
||
x_min = 100.0 -- minimaler Eingangswert
|
||
x_max = 1100.00 -- maximaler Eingangswert
|
||
x = 605.5 -- aktueller Eingangswert
|
||
|
||
d_y = 1.0 -- Delta Ausgabewerte (y_max - y_min)
|
||
d_x = 1000.0 -- Delta Eingangswerte (x_max - x_min)
|
||
m = 0.001 -- Steigung der linearen Funktion (d_y / d_x)
|
||
n = -0.1 -- Schnittpunkt der Funktion mit y-Achse (y_max - m * x_max)
|
||
|
||
y = 0.5055 -- Ergebnis (m * x + n)
|
||
]]
|
||
lValue = 0.001 * lValue + -0.1
|
||
|
||
local lv1, lValueTmp = math.modf(lValueTmp / 100) -- 100 = Secound Scala
|
||
|
||
ExportScript.Tools.SendData(lExportIDMain, string.format("%.4f", lValue))
|
||
ExportScript.Tools.SendData(lExportIDSecond, string.format("%.4f", lValueTmp))
|
||
end
|
||
|
||
-- Gauges with 2 needles (small and large),
|
||
-- for example:
|
||
-- A-10A RPM Engine
|
||
-- Su-27/33 Exthaus Gas Temperature 1.200GradC
|
||
function ExportScript.AF.FC_TwoNeedlesGauge(value, mainscala, secondscale, exportidMain, exportidSecond)
|
||
local lValue = value or 1
|
||
local lMainScala = mainscala or 100
|
||
local lSecondScale = secondscale or 10
|
||
local lExportIDMain = exportidMain or 0
|
||
local lExportIDSecond = exportidSecond or 0
|
||
local lValueTmp = lValue
|
||
|
||
lValue = lValue / lMainScala
|
||
lValue = (lValue > 1.0 and 1.0 or lValue) -- the result is limited to 1.0
|
||
|
||
--lValueTmp = lValueTmp - (ExportScript.Tools.round((lValueTmp / lSecondScale), 0, "floor") * lSecondScale)
|
||
--lValueTmp = lValueTmp / lSecondScale
|
||
--lValueTmp = (lValueTmp > 1.0 and 1.0 or lValueTmp) -- the result is limited to 1.0
|
||
local lv1, lValueTmp = math.modf(lValueTmp / lSecondScale)
|
||
|
||
ExportScript.Tools.SendData(lExportIDMain, string.format("%.4f", lValue))
|
||
ExportScript.Tools.SendData(lExportIDSecond, string.format("%.4f", lValueTmp))
|
||
end
|
||
|
||
-- Gauges with 1 needle,
|
||
-- for example:
|
||
-- A-10A RPM FAN, RPM APU, Exaust Gas Temperature APU, Fuel Flow, Oil Pressure, Hydraulic Pressure
|
||
-- F-15C Oil Pressure, Hydraulic Pressure, Engine Exhaust Nozzle Position Indicator
|
||
-- Su-25A/T, Russian Hydraulic Pressure Gauges
|
||
function ExportScript.AF.FC_OneNeedleGauge(value, scala, exportid)
|
||
local lValue = value or 1
|
||
local lScala = scala or 100
|
||
local lExportID = exportid or 0
|
||
|
||
lValue = lValue / lScala
|
||
lValue = (lValue > 1.0 and 1.0 or lValue) -- the result is limited to 1.0
|
||
|
||
ExportScript.Tools.SendData(lExportID, string.format("%.4f", lValue))
|
||
end
|
||
|
||
-- Gauges with 1 needle and 2 digits display
|
||
-- for example:
|
||
--
|
||
function ExportScript.AF.FC_OneNeedleGauge2Digits(value, scala, fixdigits, exportid)
|
||
local lValue = value or 1
|
||
local lScala = scala or 100
|
||
local lExportID = exportid or 1
|
||
local lFixDigits = fixdigits or 0
|
||
local lValueTmp = lValue
|
||
|
||
--local lCounter = {[0] = 0.0, [1] = 0.11, [2] = 0.22, [3] = 0.33, [4] = 0.44, [5] = 0.55, [6] = 0.66, [7] = 0.77, [8] = 0.88, [9] = 0.99}
|
||
local lCounter = {[0] = 0.0, [1] = 0.1, [2] = 0.2, [3] = 0.3, [4] = 0.4, [5] = 0.5, [6] = 0.6, [7] = 0.7, [8] = 0.8, [9] = 0.9}
|
||
|
||
local lCounter1 = 0
|
||
local lCounter2 = 0
|
||
local lFormat = 2 - lFixDigits
|
||
lFormat = "%0"..lFormat.."d"
|
||
|
||
local lValueTmp2 = string.format(lFormat, lValueTmp)
|
||
--[[
|
||
if lValueTmp > 10 then
|
||
if lValueTmp > 100 then
|
||
lCounter1 = (ExportScript.Tools.round((lValueTmp - (ExportScript.Tools.round(lValueTmp / 100, 0, "floor") * 100)), 0, "floor") / 10) * 0.1
|
||
else
|
||
lCounter1 = (lValueTmp / 10) * 0.1
|
||
lCounter1 = lCounter2 - ExportScript.Tools.round(lCounter2, 0, "floor")
|
||
end
|
||
end]]
|
||
if lValueTmp > 10 then
|
||
lCounter2 = (lValueTmp - (ExportScript.Tools.round(lValueTmp / 10, 0, "floor") * 10)) * 0.1
|
||
else
|
||
lCounter2 = lValueTmp * 0.1
|
||
end
|
||
|
||
|
||
lValue = lValue / lScala
|
||
lValue = (lValue > 1.0 and 1.0 or lValue) -- the result is limited to 1.0
|
||
|
||
SendData(lExportID, string.format("%.4f;%.2f;%.2f",
|
||
lValue,
|
||
lCounter[tonumber(string.sub(lValueTmp2, 1, 1))],
|
||
lCounter2))
|
||
end
|
||
|
||
-- Gauges with 1 needle and 3 digits display
|
||
-- for example:
|
||
-- F-15C RPM, Fuel Flow
|
||
function ExportScript.AF.FC_OneNeedleGauge3Digits_alt(value, scala, fixdigits, exportidNeedle, exportid100, exportid10, exportid1)
|
||
local lValue = value or 1
|
||
local lScala = scala or 100
|
||
local lExportidNeedle = exportidNeedle or 0
|
||
local lExportid100 = exportid100 or 0
|
||
local lExportid10 = exportid10 or 0
|
||
local lExportid1 = exportid1 or 0
|
||
local lFixDigits = fixdigits or 0
|
||
local lValueTmp = lValue
|
||
|
||
local lCounter = {[0] = 0.0, [1] = 0.11, [2] = 0.22, [3] = 0.33, [4] = 0.44, [5] = 0.55, [6] = 0.66, [7] = 0.77, [8] = 0.88, [9] = 0.99}
|
||
--local lCounter = {[0] = 0.0, [1] = 0.1, [2] = 0.2, [3] = 0.3, [4] = 0.4, [5] = 0.5, [6] = 0.6, [7] = 0.7, [8] = 0.8, [9] = 0.9}
|
||
|
||
local lCounter3 = 0
|
||
local lValueTmp2 = lValueTmp
|
||
|
||
if lFixDigits > 0 then
|
||
lValueTmp2 = lValueTmp2 / math.pow(10, lFixDigits)
|
||
end
|
||
|
||
lValueTmp2 = string.format("%03d", lValueTmp2)
|
||
|
||
if lValueTmp > 1000 then
|
||
lCounter3 = (lValueTmp - (ExportScript.Tools.round(lValueTmp / 1000, 0, "floor") * 1000)) * math.pow(0.1, lFixDigits + 1) --0.1
|
||
else
|
||
lCounter3 = lValueTmp * math.pow(0.1, lFixDigits + 1) --0.1
|
||
end
|
||
|
||
lValue = lValue / lScala
|
||
lValue = (lValue > 1.0 and 1.0 or lValue) -- the result is limited to 1.0
|
||
|
||
ExportScript.Tools.SendData(lExportIDNeedle, string.format("%.4f", lValue))
|
||
ExportScript.Tools.SendData(lExportID100, string.format("%.2f", lCounter[tonumber(string.sub(lValueTmp2, 1, 1))]))
|
||
ExportScript.Tools.SendData(lExportID10, string.format("%.2f", lCounter[tonumber(string.sub(lValueTmp2, 2, 2))]))
|
||
ExportScript.Tools.SendData(lExportID1, string.format("%.2f", lCounter3))
|
||
end
|
||
|
||
-- Gauges with 1 needle and 3 digits display
|
||
-- for example:
|
||
-- F-15C RPM, Fuel Flow
|
||
function ExportScript.AF.FC_OneNeedleGauge3Digits(value, scala, fixdigits, exportidNeedle, exportid100, exportid10, exportid1)
|
||
local lValue = value or 1
|
||
local lScala = scala or 100
|
||
local lFixDigits = fixdigits or 0
|
||
--local lExportidNeedle = exportidNeedle or 0
|
||
--local lExportid100 = exportid100 or 0
|
||
--local lExportid10 = exportid10 or 0
|
||
--local lExportid1 = exportid1 or 0
|
||
|
||
local lValueTmp = lValue
|
||
local lFactor = string.len(tostring(lScala)) - 2
|
||
lFactor = math.pow(10, lFactor)
|
||
|
||
local lCounter = {[0] = 0.0, [1] = 0.1, [2] = 0.2, [3] = 0.3, [4] = 0.4, [5] = 0.5, [6] = 0.6, [7] = 0.7, [8] = 0.8, [9] = 0.9}
|
||
|
||
local lValueTmp2 = lValueTmp
|
||
|
||
if lFixDigits > 0 then
|
||
lValueTmp2 = lValueTmp2 / math.pow(10, lFixDigits)
|
||
end
|
||
|
||
lValueTmp2 = string.format("%03d", lValueTmp2)
|
||
|
||
local lv1, lCounter3 = math.modf(lValueTmp / lFactor)
|
||
|
||
lValue = lValue / lScala
|
||
lValue = (lValue > 1.0 and 1.0 or lValue) -- the result is limited to 1.0
|
||
|
||
ExportScript.Tools.SendData(exportidNeedle, string.format("%.4f", lValue))
|
||
ExportScript.Tools.SendData(exportid100, string.format("%.2f", lCounter[tonumber(string.sub(lValueTmp2, 1, 1))]))
|
||
ExportScript.Tools.SendData(exportid10, string.format("%.2f", lCounter[tonumber(string.sub(lValueTmp2, 2, 2))]))
|
||
ExportScript.Tools.SendData(exportid1, string.format("%.2f", lCounter3))
|
||
end
|
||
|
||
-- Gauges with 1 needle and 4 digits display
|
||
-- for example:
|
||
--
|
||
function ExportScript.AF.FC_OneNeedleGauge4Digits(value, scala, fixdigits, exportid)
|
||
local lValue = value or 1
|
||
local lScala = scala or 100
|
||
local lExportID = exportid or 1
|
||
local lFixDigits = fixdigits or 0
|
||
local lValueTmp = lValue
|
||
|
||
--local lCounter = {[0] = 0.0, [1] = 0.11, [2] = 0.22, [3] = 0.33, [4] = 0.44, [5] = 0.55, [6] = 0.66, [7] = 0.77, [8] = 0.88, [9] = 0.99}
|
||
local lCounter = {[0] = 0.0, [1] = 0.1, [2] = 0.2, [3] = 0.3, [4] = 0.4, [5] = 0.5, [6] = 0.6, [7] = 0.7, [8] = 0.8, [9] = 0.9}
|
||
|
||
local lCounter1 = 0
|
||
local lCounter2 = 0
|
||
local lCounter3 = 0
|
||
local lCounter4 = 0
|
||
local lValueTmp2 = lValueTmp
|
||
if lFixDigits > 0 then
|
||
lValueTmp2 = lValueTmp2 / math.pow(10, lFixDigits)
|
||
end
|
||
lValueTmp2 = string.format("%04d", lValueTmp2)
|
||
--[[
|
||
if lValueTmp > 10000 then
|
||
lCounter1 = ExportScript.Tools.round((lValueTmp / 1000), 0, "floor") * 0.1
|
||
lCounter1 = lCounter1 - ExportScript.Tools.round(lCounter1, 0, "floor")
|
||
end
|
||
if lValueTmp > 1000 then
|
||
if lValueTmp > 100 then
|
||
lCounter2 = (ExportScript.Tools.round((lValueTmp - (ExportScript.Tools.round(lValueTmp / 100, 0, "floor") * 100)), 0, "floor") / 10) * 0.1
|
||
else
|
||
lCounter2 = (lValueTmp / 10) * 0.1
|
||
lCounter2 = lCounter2 - ExportScript.Tools.round(lCounter2, 0, "floor")
|
||
end
|
||
end
|
||
if lValueTmp > 100 then
|
||
if lValueTmp > 10 then
|
||
lCounter3 = (ExportScript.Tools.round((lValueTmp - (ExportScript.Tools.round(lValueTmp / 100, 0, "floor") * 100)), 0, "floor") / 10) * 0.1
|
||
else
|
||
lCounter3 = (lValueTmp / 10) * 0.1
|
||
lCounter3 = lCounter3 - ExportScript.Tools.round(lCounter3, 0, "floor")
|
||
end
|
||
end]]
|
||
if lValueTmp > 10 then
|
||
lCounter4 = (lValueTmp - (ExportScript.Tools.round(lValueTmp / 10, 0, "floor") * 10)) * 0.1
|
||
else
|
||
lCounter4 = lValueTmp * 0.1
|
||
end
|
||
|
||
|
||
lValue = lValue / lScala
|
||
lValue = (lValue > 1.0 and 1.0 or lValue) -- the result is limited to 1.0
|
||
|
||
SendData(lExportID, string.format("%.4f;%.2f;%.2f;%.2f;%.2f",
|
||
lValue,
|
||
lCounter[tonumber(string.sub(lValueTmp2, 1, 1))],
|
||
lCounter[tonumber(string.sub(lValueTmp2, 2, 2))],
|
||
lCounter[tonumber(string.sub(lValueTmp2, 3, 3))],
|
||
lCounter4))
|
||
end
|
||
|
||
-- Engine Lamps, Start and Afterburner
|
||
-- with Workaround for engine start-up on Su-27/33
|
||
|
||
function ExportScript.AF.FC_EngineLamps_SU2733(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
|
||
local lEngineInfo = LoGetEngineInfo()
|
||
local lLeftEngineStart = 0
|
||
local lRightEngineStart = 0
|
||
|
||
if lEngineInfo == nil then
|
||
return
|
||
end
|
||
--ExportScript.Tools.WriteToLog('lEngineInfo: '..ExportScript.Tools.dump(lEngineInfo))
|
||
|
||
if ExportScript.AF.LeftEngineOn == false then
|
||
if (lEngineInfo.RPM.left > 0.1 and lEngineInfo.RPM.left < 49.0) then
|
||
lLeftEngineStart = 1
|
||
end
|
||
if lEngineInfo.RPM.left > 49.0 then
|
||
ExportScript.AF.LeftEngineOn = true
|
||
end
|
||
elseif ExportScript.AF.LeftEngineOn == true then
|
||
if lEngineInfo.RPM.left < 0.1 then
|
||
ExportScript.AF.LeftEngineOn = false
|
||
end
|
||
end
|
||
|
||
if ExportScript.AF.RightEngineOn == false then
|
||
if (lEngineInfo.RPM.right > 0.1 and lEngineInfo.RPM.right < 49.0) then
|
||
lRightEngineStart = 1
|
||
end
|
||
if lEngineInfo.RPM.right > 49.0 then
|
||
ExportScript.AF.RightEngineOn = true
|
||
end
|
||
elseif ExportScript.AF.RightEngineOn == true then
|
||
if lEngineInfo.RPM.right < 0.1 then
|
||
ExportScript.AF.RightEngineOn = false
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
--ExportScript.Tools.SendData(728, lEngineInfo.EngineStart.left ) -- lamp start left engine (0|1)
|
||
--ExportScript.Tools.SendData(729, lEngineInfo.EngineStart.right ) -- lamp start right engine (0|1)
|
||
ExportScript.Tools.SendData(728, lLeftEngineStart ) -- lamp start left engine (0|1)
|
||
ExportScript.Tools.SendData(729, lRightEngineStart ) -- lamp start right engine (0|1)
|
||
|
||
ExportScript.Tools.SendData(730, (lEngineInfo.RPM.left > 99.8 and 1 or 0) ) -- lamp after burner left engine
|
||
ExportScript.Tools.SendData(731, (lEngineInfo.RPM.right > 99.8 and 1 or 0) ) -- lam after burner right engine
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
--ExportScript.Tools.SendDataDAC("728", lEngineInfo.EngineStart.left ) -- lamp start left engine (0|1)
|
||
--ExportScript.Tools.SendDataDAC("729", lEngineInfo.EngineStart.right ) -- lamp start right engine (0|1)
|
||
ExportScript.Tools.SendDataDAC("728", lLeftEngineStart ) -- lamp start left engine (0|1)
|
||
ExportScript.Tools.SendDataDAC("729", lRightEngineStart ) -- lamp start right engine (0|1)
|
||
|
||
ExportScript.Tools.SendDataDAC("730", (lEngineInfo.RPM.left > 99.8 and 1 or 0) ) -- lamp after burner left engine
|
||
ExportScript.Tools.SendDataDAC("731", (lEngineInfo.RPM.right > 99.8 and 1 or 0) ) -- lam after burner right engine
|
||
end
|
||
end
|
||
|
||
|
||
-- Engine Lamps, Start and Afterburner
|
||
-- MiG29A/G/S
|
||
|
||
function ExportScript.AF.FC_EngineLamps_MiG29(FunctionTyp)
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
|
||
local lEngineInfo = LoGetEngineInfo()
|
||
local lLeftEngineStart = 0
|
||
local lRightEngineStart = 0
|
||
|
||
if lEngineInfo == nil then
|
||
return
|
||
end
|
||
--ExportScript.Tools.WriteToLog('lEngineInfo: '..ExportScript.Tools.dump(lEngineInfo))
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
ExportScript.Tools.SendData(728, lEngineInfo.EngineStart.left ) -- lamp start left engine (0|1)
|
||
ExportScript.Tools.SendData(729, lEngineInfo.EngineStart.right ) -- lamp start right engine (0|1)
|
||
|
||
ExportScript.Tools.SendData(730, (lEngineInfo.RPM.left > 100 and 1 or 0) ) -- lamp after burner left engine
|
||
ExportScript.Tools.SendData(731, (lEngineInfo.RPM.right > 100 and 1 or 0) ) -- lam after burner right engine
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
ExportScript.Tools.SendDataDAC("728", lEngineInfo.EngineStart.left ) -- lamp start left engine (0|1)
|
||
ExportScript.Tools.SendDataDAC("729", lEngineInfo.EngineStart.right ) -- lamp start right engine (0|1)
|
||
|
||
ExportScript.Tools.SendDataDAC("730", (lEngineInfo.RPM.left > 100 and 1 or 0) ) -- lamp after burner left engine
|
||
ExportScript.Tools.SendDataDAC("731", (lEngineInfo.RPM.right > 100 and 1 or 0) ) -- lam after burner right engine
|
||
end
|
||
end
|
||
|
||
-- Auxiliary Functions for Hardware export
|
||
|
||
function ExportScript.AF.FC_SPO15RWR(FunctionTyp)
|
||
-- The RWR display indicates any threat radars illuminating ("painting") the aircraft.
|
||
-- Information is presented as symbols representing the type and direction to the threat.
|
||
-- Six illuminated symbols at the bottom of the display notify the pilot of the threat radar type.
|
||
-- The system indicates both enemy and friendly radars
|
||
--
|
||
--[[
|
||
LoGetTWSInfo() -- return Threat Warning System status (result the table )
|
||
result_of_LoGetTWSInfo =
|
||
{
|
||
Mode = , -- current mode (0 - all ,1 - lock only,2 - launch only
|
||
Emitters = {table of emitters}
|
||
}
|
||
emitter_table =
|
||
{
|
||
ID =, -- world ID
|
||
Type = {level1,level2,level3,level4}, -- world database classification of emitter
|
||
Power =, -- power of signal
|
||
Azimuth =,
|
||
Priority =,-- priority of emitter (int)
|
||
SignalType =, -- string with vlues: "scan" ,"lock", "missile_radio_guided","track_while_scan";
|
||
}]]
|
||
|
||
local lFunctionTyp = FunctionTyp or "Ikarus"
|
||
local lTWSInfo = LoGetTWSInfo() -- SPO15 Information
|
||
if lTWSInfo == nil then
|
||
return
|
||
end
|
||
--ExportScript.Tools.WriteToLog('lTWSInfo: '..ExportScript.Tools.dump(lTWSInfo))
|
||
--[[
|
||
[Emitters] = {
|
||
[1] = {
|
||
[Type] = {
|
||
[level3] = number: "105"
|
||
[level1] = number: "2"
|
||
[level4] = number: "46"
|
||
[level2] = number: "16"
|
||
}
|
||
[Azimuth] = number: "1.8300691843033"
|
||
[Power] = number: "0.92326503992081"
|
||
[ID] = number: "16777472"
|
||
[Priority] = number: "230.92445373535"
|
||
[SignalType] = string: "lock"
|
||
}
|
||
[2] = {
|
||
[Type] = {
|
||
[level3] = number: "101"
|
||
[level1] = number: "2"
|
||
[level4] = number: "39"
|
||
[level2] = number: "16"
|
||
}
|
||
[Azimuth] = number: "2.6759564876556"
|
||
[Power] = number: "0.90609884262085"
|
||
[ID] = number: "16777728"
|
||
[Priority] = number: "140.90609741211"
|
||
[SignalType] = string: "scan"
|
||
}
|
||
}
|
||
[Mode] = number: "0"
|
||
]]
|
||
|
||
if ExportScript.AF.EventNumberFC_SPO15RWR == nil then
|
||
ExportScript.AF.EventNumberFC_SPO15RWR = 0
|
||
end
|
||
|
||
if(ExportScript.AF.EventNumberFC_SPO15RWR < ExportScript.AF.EventNumber) then
|
||
ExportScript.AF.EventNumberFC_SPO15RWR = ExportScript.AF.EventNumber
|
||
|
||
local lPriorityTmp = 0
|
||
local lPrimaryThreatTmp = 0
|
||
|
||
if ExportScript.AF.SPO15RWRData == nil then
|
||
ExportScript.AF.SPO15RWRData = {}
|
||
|
||
ExportScript.AF.SPO15RWRData[400] = 1 -- Power light
|
||
end
|
||
|
||
-- 10 x for Secondary Thread direction
|
||
ExportScript.AF.SPO15RWRData[451]=0
|
||
ExportScript.AF.SPO15RWRData[452]=0
|
||
ExportScript.AF.SPO15RWRData[453]=0
|
||
ExportScript.AF.SPO15RWRData[454]=0
|
||
ExportScript.AF.SPO15RWRData[455]=0
|
||
ExportScript.AF.SPO15RWRData[456]=0
|
||
ExportScript.AF.SPO15RWRData[457]=0
|
||
ExportScript.AF.SPO15RWRData[458]=0
|
||
ExportScript.AF.SPO15RWRData[459]=0
|
||
ExportScript.AF.SPO15RWRData[460]=0
|
||
|
||
if(#lTWSInfo.Emitters > 0) then
|
||
|
||
ExportScript.AF.SPO15_FoundErmitter = true
|
||
|
||
for EmitterIndex = 1, #lTWSInfo.Emitters, 1 do
|
||
if(lTWSInfo.Emitters[EmitterIndex].Priority > lPriorityTmp) then
|
||
lPriorityTmp = lTWSInfo.Emitters[EmitterIndex].Priority
|
||
lPrimaryThreatTmp = EmitterIndex
|
||
end
|
||
end
|
||
|
||
for EmitterIndex = 1, #lTWSInfo.Emitters, 1 do
|
||
|
||
local lAzimut = ExportScript.Tools.round(lTWSInfo.Emitters[EmitterIndex].Azimuth * 90, 1)
|
||
|
||
if EmitterIndex == lPrimaryThreatTmp then
|
||
-- primary threat
|
||
-- direction to the threat
|
||
ExportScript.AF.SPO15RWRData[401] = (lAzimut <= -170.0 and 1 or 0) -- left back side
|
||
ExportScript.AF.SPO15RWRData[402] = ((lAzimut <= -90.0 and lAzimut >= -170.0 ) and 1 or 0) -- left 90 degree
|
||
ExportScript.AF.SPO15RWRData[403] = ((lAzimut <= -55.0 and lAzimut >= -125.0 ) and 1 or 0) -- left 50 degree
|
||
ExportScript.AF.SPO15RWRData[404] = ((lAzimut <= -30.0 and lAzimut >= -70.0 ) and 1 or 0) -- left 30 degree
|
||
ExportScript.AF.SPO15RWRData[405] = ((lAzimut <= 5.0 and lAzimut >= -40.0 ) and 1 or 0) -- left 10 degree
|
||
ExportScript.AF.SPO15RWRData[406] = ((lAzimut >= -5.0 and lAzimut <= 40.0 ) and 1 or 0) -- right 10 degree
|
||
ExportScript.AF.SPO15RWRData[407] = ((lAzimut >= 30.0 and lAzimut <= 70.0 ) and 1 or 0) -- right 30 degree
|
||
ExportScript.AF.SPO15RWRData[408] = ((lAzimut >= 55.0 and lAzimut <= 125.0 ) and 1 or 0) -- right 50 degree
|
||
ExportScript.AF.SPO15RWRData[409] = ((lAzimut >= 90.0 and lAzimut <= 170.0 ) and 1 or 0) -- right 90 degree
|
||
ExportScript.AF.SPO15RWRData[410] = (lAzimut >= 170.0 and 1 or 0) -- right back side
|
||
|
||
-- power of the threat
|
||
local lPower = ExportScript.Tools.round(lTWSInfo.Emitters[EmitterIndex].Power * 15, 0, "ceil") + 1
|
||
--WriteToLog("lPower: "..lPower)
|
||
ExportScript.AF.SPO15RWRData[411] = (lPower <= 1 and 0 or 1) -- 1. power lamp
|
||
ExportScript.AF.SPO15RWRData[412] = (lPower <= 2 and 0 or 1) -- 2. power lamp
|
||
ExportScript.AF.SPO15RWRData[413] = (lPower <= 3 and 0 or 1) -- 3. power lamp
|
||
ExportScript.AF.SPO15RWRData[414] = (lPower <= 4 and 0 or 1) -- 4. power lamp
|
||
ExportScript.AF.SPO15RWRData[415] = (lPower <= 5 and 0 or 1) -- 5. power lamp
|
||
ExportScript.AF.SPO15RWRData[416] = (lPower <= 6 and 0 or 1) -- 6. power lamp
|
||
ExportScript.AF.SPO15RWRData[417] = (lPower <= 7 and 0 or 1) -- 7. power lamp
|
||
ExportScript.AF.SPO15RWRData[418] = (lPower <= 8 and 0 or 1) -- 8. power lamp
|
||
ExportScript.AF.SPO15RWRData[419] = (lPower <= 9 and 0 or 1) -- 9. power lamp
|
||
ExportScript.AF.SPO15RWRData[420] = (lPower <= 10 and 0 or 1) -- 10. power lamp
|
||
ExportScript.AF.SPO15RWRData[421] = (lPower <= 11 and 0 or 1) -- 11. power lamp
|
||
ExportScript.AF.SPO15RWRData[422] = (lPower <= 12 and 0 or 1) -- 12. power lamp
|
||
ExportScript.AF.SPO15RWRData[423] = (lPower <= 13 and 0 or 1) -- 13. power lamp
|
||
ExportScript.AF.SPO15RWRData[424] = (lPower <= 14 and 0 or 1) -- 14. power lamp
|
||
ExportScript.AF.SPO15RWRData[425] = (lPower <= 15 and 0 or 1) -- 15. power lamp
|
||
|
||
-- type of the threat
|
||
local lPrimaryTypeTmp = ExportScript.AF.FindRadarTypeForSPO15(lTWSInfo, lPrimaryThreatTmp)
|
||
ExportScript.AF.SPO15RWRData[430] = (lPrimaryTypeTmp.AIR == 1 and 1 or 0) -- primary Air or Weapon
|
||
ExportScript.AF.SPO15RWRData[431] = (lPrimaryTypeTmp.LRR == 1 and 1 or 0) -- long range radar
|
||
ExportScript.AF.SPO15RWRData[432] = (lPrimaryTypeTmp.MRR == 1 and 1 or 0) -- mid range radar
|
||
ExportScript.AF.SPO15RWRData[433] = (lPrimaryTypeTmp.SRR == 1 and 1 or 0) -- short range radar
|
||
ExportScript.AF.SPO15RWRData[434] = (lPrimaryTypeTmp.EWR == 1 and 1 or 0) -- EWR
|
||
ExportScript.AF.SPO15RWRData[435] = (lPrimaryTypeTmp.AWACS == 1 and 1 or 0) -- AWACS
|
||
|
||
-- look or missil on air
|
||
if lPrimaryTypeTmp.Lock == 0.1 then
|
||
ExportScript.AF.SPO15RWRData[440] = 0
|
||
ExportScript.AF.SPO15RWRData[441] = 1 -- blinking lights on
|
||
elseif lPrimaryTypeTmp.Lock == 0.2 then
|
||
ExportScript.AF.SPO15RWRData[440] = 1
|
||
ExportScript.AF.SPO15RWRData[441] = 0 -- blinking lights off
|
||
end
|
||
-- hemisphere
|
||
ExportScript.AF.SPO15RWRData[442] = lPrimaryTypeTmp.TopHemisphere -- top hemisphere
|
||
ExportScript.AF.SPO15RWRData[443] = lPrimaryTypeTmp.BottomHemisphere -- bottom hemisphere
|
||
|
||
lPrimaryTypeTmp = nil
|
||
end
|
||
|
||
ExportScript.AF.SPO15RWR_SendData(451, lAzimut <= -170.0) -- left back side
|
||
ExportScript.AF.SPO15RWR_SendData(452, (lAzimut <= -90.0 and lAzimut >= -170.0 )) -- left 90 degree
|
||
ExportScript.AF.SPO15RWR_SendData(453, (lAzimut <= -55.0 and lAzimut >= -125.0 )) -- left 50 degree
|
||
ExportScript.AF.SPO15RWR_SendData(454, (lAzimut <= -30.0 and lAzimut >= -70.0 )) -- left 30 degree
|
||
ExportScript.AF.SPO15RWR_SendData(455, (lAzimut <= 5.0 and lAzimut >= -40.0 )) -- left 10 degree
|
||
ExportScript.AF.SPO15RWR_SendData(456, (lAzimut >= -5.0 and lAzimut <= 40.0 )) -- right 10 degree
|
||
ExportScript.AF.SPO15RWR_SendData(457, (lAzimut >= 30.0 and lAzimut <= 70.0 )) -- right 30 degree
|
||
ExportScript.AF.SPO15RWR_SendData(458, (lAzimut >= 55.0 and lAzimut <= 125.0 )) -- right 50 degree
|
||
ExportScript.AF.SPO15RWR_SendData(459, (lAzimut >= 90.0 and lAzimut <= 170.0 )) -- right 90 degree
|
||
ExportScript.AF.SPO15RWR_SendData(460, lAzimut >= 170.0) -- right back side
|
||
end
|
||
|
||
-- type of the secondary threat
|
||
local lSecondaryTypeTmp = ExportScript.AF.FindRadarTypeForSPO15(lTWSInfo)
|
||
ExportScript.AF.SPO15RWRData[470] = (lSecondaryTypeTmp.AIR == 1 and 1 or 0) -- secondary Air or Weapon
|
||
ExportScript.AF.SPO15RWRData[471] = (lSecondaryTypeTmp.LRR == 1 and 1 or 0) -- long range radar
|
||
ExportScript.AF.SPO15RWRData[472] = (lSecondaryTypeTmp.MRR == 1 and 1 or 0) -- mid range radar
|
||
ExportScript.AF.SPO15RWRData[473] = (lSecondaryTypeTmp.SRR == 1 and 1 or 0) -- short range radar
|
||
ExportScript.AF.SPO15RWRData[474] = (lSecondaryTypeTmp.EWR == 1 and 1 or 0) -- EWR
|
||
ExportScript.AF.SPO15RWRData[475] = (lSecondaryTypeTmp.AWACS == 1 and 1 or 0) -- AWACS
|
||
lSecondaryTypeTmp = nil
|
||
|
||
|
||
if ExportScript.Config.IkarusExport then
|
||
-- Lock
|
||
ExportScript.AF.SPO15RWRData[444] = 0 -- off
|
||
if ExportScript.AF.SPO15RWRData[440] == 1 then
|
||
ExportScript.AF.SPO15RWRData[444] = 1 -- Lock
|
||
elseif ExportScript.AF.SPO15RWRData[441] == 1 then
|
||
ExportScript.AF.SPO15RWRData[444] = 0.5 -- Missle on air
|
||
end
|
||
|
||
-- Ermitter Power Triangle
|
||
if ExportScript.AF.SPO15RWRData[411] == 1 then
|
||
ExportScript.AF.SPO15RWRData[426] = 1
|
||
else
|
||
ExportScript.AF.SPO15RWRData[426] = 0
|
||
end
|
||
end
|
||
|
||
else
|
||
lPriorityTmp = 0
|
||
lPrimaryThreatTmp = 0
|
||
|
||
if ExportScript.AF.SPO15_FoundErmitter == nil or ExportScript.AF.SPO15_FoundErmitter then
|
||
ExportScript.AF.SPO15RWR_Reset(401, 480)
|
||
end
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.IkarusExport and lFunctionTyp == "Ikarus" then
|
||
if ExportScript.AF.SPO15RWRData ~= nil then
|
||
for key, value in pairs(ExportScript.AF.SPO15RWRData) do
|
||
ExportScript.Tools.SendData(key, value)
|
||
end
|
||
end
|
||
end
|
||
|
||
if ExportScript.Config.DACExport and lFunctionTyp == "DAC" then
|
||
if ExportScript.AF.SPO15RWRData ~= nil then
|
||
for key, value in pairs(ExportScript.AF.SPO15RWRData) do
|
||
ExportScript.Tools.SendDataDAC(key, value)
|
||
end
|
||
end
|
||
end
|
||
|
||
--[[
|
||
level: 2, 16, 101, 39
|
||
lNameByType: string: "hawk sr"
|
||
|
||
alle Level -> wsTypes.lua
|
||
oder
|
||
Nummer 101 -> AN-MPQ-51 HAWK SR.lua
|
||
Nummer 39 -> TechnicsTable.sht
|
||
|
||
lNameByType: string: "hawk sr" -> db_sensors.lua
|
||
|
||
]]
|
||
end
|
||
|
||
|
||
-- Auxiliary Functions
|
||
|
||
function ExportScript.AF.FindRadarTypeForSPO15(lTWSInfo, PrimaryThreat)
|
||
local lPrimaryThreat = PrimaryThreat or 0
|
||
local lReturn = {AIR = 0, LRR = 0, MRR = 0, SRR = 0, EWR = 0, AWACS = 0, Lock = 0, TopHemisphere = 0, BottomHemisphere = 0}
|
||
|
||
for EmitterIndex = 1, #lTWSInfo.Emitters, 1 do
|
||
if lPrimaryThreat ~= 0 then
|
||
EmitterIndex = lPrimaryThreat
|
||
end
|
||
local lType = lTWSInfo.Emitters[EmitterIndex].Type
|
||
--ExportScript.Tools.WriteToLog('level: '..lType.level1..', '..lType.level2..', '..lType.level3..', '..lType.level4)
|
||
local lNameByType = LoGetNameByType(lType.level1, lType.level2, lType.level3, lType.level4) -- world database classification of emitter, args 4 (number : level1,level2,level3,level4), result string
|
||
--ExportScript.Tools.WriteToLog('lNameByType: '..ExportScript.Tools.dump(lNameByType))
|
||
|
||
-- threat type
|
||
if (lType.level1 == 1 or lType.level1 == 4) and
|
||
not(lType.level4 == 26 or -- level4 26: A-50
|
||
lType.level4 == 27 or -- level4 27: E-3
|
||
lType.level4 == 41) then -- level4 41: E-2C
|
||
lReturn.AIR = 1 -- primary Air or Weapon
|
||
end
|
||
|
||
if lNameByType ~= nil then
|
||
if lType.level1 == 2 or lType.level1 == 3 then
|
||
-- ground or navy
|
||
if lType.level2 == 16 then
|
||
local lAn, lEn
|
||
-- Ground SAM
|
||
-- RU: s-300ps 64h6e sr,s-300ps 40b6m tr
|
||
-- US: patriot str
|
||
lAn, lEn = string.find("s-300ps 64h6e sr,s-300ps 40b6m tr,an/mpq-53,patriot str", lNameByType, 0, true)
|
||
-- long range radar
|
||
if lAn ~= nil then
|
||
lReturn.LRR = 1
|
||
end
|
||
|
||
-- US: hawk sr,hawk tr
|
||
-- Ru: s-300ps 40b6md sr,buk 9s18m1 sr,buk 9a310m1 ln,PATRIOT-RLS_P_1,MT-LB_P_1,kub 1s91 str
|
||
-- PATRIOT-RLS_P_1 = SA-3 S-125 SR
|
||
-- MT-LB_P_1 = SA-3-3 S-125 TR
|
||
lAn, lEn = string.find("s-300ps 40b6md sr,buk 9s18m1 sr,buk 9a310m1 ln,PATRIOT-RLS_P_1,MT-LB_P_1,kub 1s91 str,hawk sr,hawk tr", lNameByType, 0, true)
|
||
-- mid range radar
|
||
if lAn ~= nil then
|
||
lReturn.MRR = 1
|
||
end
|
||
|
||
-- US: M163 Vulcan,roland ads,roland radar,gepard
|
||
-- RU: Dog Ear Radar,tor 9a331,tunguska 2c6m,osa 9a33 ln,shilka zsu-23-4
|
||
lAn, lEn = string.find("M163 Vulcan,gepard,roland ads,roland radar,Dog Ear Radar,tor 9a331,tunguska 2c6m,osa 9a33 ln,shilka zsu-23-4", lNameByType, 0, true)
|
||
-- short range radar
|
||
if lAn ~= nil then
|
||
lReturn.SRR = 1
|
||
end
|
||
--[[ if lType.level4 == 27 or -- Dog Ear Radar
|
||
lType.level4 == 31 or -- roland ads
|
||
lType.level4 == 32 or -- roland radar
|
||
lType.level4 == 38 then -- gepard
|
||
lReturn.SRR = 1
|
||
end
|
||
]]
|
||
-- RU: 1l13 ewr station,55g6 ewr station
|
||
lAn, lEn = string.find("1l13 ewr station,55g6 ewr station", lNameByType, 0, true)
|
||
-- EWR
|
||
if lAn ~= nil then
|
||
lReturn.EWR = 1
|
||
end
|
||
|
||
elseif lType.level2 == 12 then
|
||
local lAn, lEn
|
||
-- Ship
|
||
-- RU Ships: Moscow,Piotr Velikiy,Rezky (Krivak-2)
|
||
-- US Ships: FFG-7 Oliver H. Perry class,SG-47 Ticonderoga class
|
||
lAn, lEn = string.find("Moscow,Piotr Velikiy,Rezky (Krivak-2),FFG-7 Oliver H. Perry class,SG-47 Ticonderoga class", lNameByType, 0, true)
|
||
-- long range radar
|
||
if lAn ~= nil then
|
||
lReturn.LRR = 1
|
||
end
|
||
|
||
-- RU Ships: Albatros (Grisha-5),TAKR Kuznetsov,Molniya (Tarantul-3),Neustrashimy
|
||
-- US Ships: CVN-70 Vinson
|
||
lAn, lEn = string.find("Albatros (Grisha-5),TAKR Kuznetsov,Molniya (Tarantul-3),Neustrashimy,CVN-70 Vinson", lNameByType, 0, true)
|
||
-- short range radar
|
||
if lAn ~= nil then
|
||
lReturn.SRR = 1
|
||
end
|
||
end
|
||
elseif lType.level1 == 1 and lType.level2 == 1 and lType.level3 == 5 then
|
||
if lType.level4 == 26 or lType.level4 == 27 or lType.level4 == 41 then
|
||
-- AWACS
|
||
-- level4 26: a-50
|
||
-- level4 27: e-3a
|
||
-- level4 41: e-2c hawkeye
|
||
lReturn.AWACS = 1
|
||
end
|
||
end
|
||
else -- if lNameByType == nil
|
||
if lType.level1 == 2 or lType.level1 == 3 then
|
||
-- ground or navy
|
||
if lType.level2 == 16 then
|
||
-- Ground SAM
|
||
-- long range radar
|
||
|
||
-- mid range radar
|
||
if lType.level4 == 42 then -- SAM Hawk CWAR /MPQ-55
|
||
lReturn.MRR = 1
|
||
end
|
||
|
||
-- short range radar
|
||
--[[ if lType.level4 == 27 or -- Dog Ear Radar
|
||
lType.level4 == 31 or -- roland ads
|
||
lType.level4 == 32 or -- roland radar
|
||
lType.level4 == 38 then -- gepard
|
||
lReturn.SRR = 1
|
||
end
|
||
]]
|
||
|
||
-- EWR
|
||
|
||
elseif lType.level2 == 12 then
|
||
-- long range radar
|
||
|
||
-- short range radar
|
||
end
|
||
elseif lType.level1 == 1 and lType.level2 == 1 and lType.level3 == 5 then
|
||
if lType.level4 == 26 or lType.level4 == 27 or lType.level4 == 41 then
|
||
-- AWACS
|
||
-- level4 26: a-50
|
||
-- level4 27: e-3a
|
||
-- level4 41: e-2c hawkeye
|
||
lReturn.AWACS = 1
|
||
end
|
||
end
|
||
end
|
||
-- primary threat handling only
|
||
if lPrimaryThreat ~= 0 then
|
||
if lTWSInfo.Emitters[lPrimaryThreat].SignalType == "lock" then
|
||
-- look
|
||
lReturn.Lock = 0.2
|
||
|
||
lReturn.TopHemisphere = 1 -- top hemisphere
|
||
lReturn.BottomHemisphere = 1 -- bottom hemisphere
|
||
elseif lTWSInfo.Emitters[lPrimaryThreat].SignalType == "missile_radio_guided" then
|
||
-- Rocket on air
|
||
lReturn.Lock = 0.1
|
||
elseif lTWSInfo.Emitters[lPrimaryThreat].SignalType == "scan" then
|
||
-- beep
|
||
elseif lTWSInfo.Emitters[lPrimaryThreat].SignalType == "track_while_scan" then
|
||
-- ???
|
||
else
|
||
lReturn.Lock = 0
|
||
end
|
||
|
||
local lErmitterObject = LoGetObjectById(lTWSInfo.Emitters[lPrimaryThreat].ID)
|
||
local lErmitterObjectAlt = 0
|
||
|
||
if lErmitterObject then
|
||
lErmitterObjectAlt = lErmitterObject.LatLongAlt.Alt
|
||
end
|
||
|
||
local lSelfData = LoGetSelfData()
|
||
local lSelfDataAlt = ExportScript.Tools.round(lSelfData.LatLongAlt.Alt, 0)
|
||
|
||
if lErmitterObjectAlt and lSelfDataAlt then
|
||
--ExportScript.Tools.WriteToLog('lErmitterObjectAlt: '..lErmitterObjectAlt..', lSelfDataAlt: '..lSelfDataAlt)
|
||
if lErmitterObjectAlt > (lSelfDataAlt + 400) then
|
||
lReturn.TopHemisphere = 1 -- top hemisphere
|
||
elseif lErmitterObjectAlt < (lSelfDataAlt - 400) then
|
||
lReturn.BottomHemisphere = 1 -- bottom hemisphere
|
||
else
|
||
lReturn.TopHemisphere = 1 -- top hemisphere
|
||
lReturn.BottomHemisphere = 1 -- bottom hemisphere
|
||
end
|
||
end
|
||
|
||
lErmitterObject, lErmitterObjectAlt, lSelfData, lSelfDataAlt = nil
|
||
|
||
break
|
||
end
|
||
end
|
||
|
||
return lReturn
|
||
end
|
||
|
||
function ExportScript.AF.SPO15RWR_Reset(lMinId, lMaxID)
|
||
--ExportScript.Tools.WriteToLog('SPO15RWR_Reset')
|
||
for lCounter = lMinId, lMaxID, 1 do
|
||
ExportScript.AF.SPO15RWRData[lCounter] = 0
|
||
end
|
||
|
||
ExportScript.AF.SPO15_FoundErmitter = false
|
||
end
|
||
|
||
function ExportScript.AF.SPO15RWR_SendData(lKey, lValue)
|
||
--ExportScript.Tools.WriteToLog('SPO15RWR_SendData: '..ExportScript.Tools.dump(lKey)..', '..ExportScript.Tools.dump(lValue))
|
||
if ExportScript.AF.SPO15RWRData[lKey] == 0 then
|
||
if lValue then
|
||
ExportScript.AF.SPO15RWRData[lKey] = 1
|
||
end
|
||
end
|
||
end
|
||
|
||
-- WeaponStatusPanel Reset for A-10A, F-15C
|
||
function ExportScript.AF.WeaponStatusPanel_Reset(lMinId, lMaxID)
|
||
--ExportScript.Tools.WriteToLog('WeaponStatusPanel_Reset')
|
||
for lCounter = lMinId, lMaxID, 1 do
|
||
ExportScript.Tools.SendDataDAC(lCounter, 0)
|
||
end
|
||
end
|
||
|
||
function ExportScript.AF.WeaponStatusPanel_selectCurrentPayloadStation(_index)
|
||
if ExportScript.AF.PayloadInfo.Stations[ExportScript.AF.PayloadInfo.CurrentStation].CLSID == ExportScript.AF.PayloadInfo.Stations[_index].CLSID and ExportScript.AF.PayloadInfo.CurrentStation ~= _index then
|
||
ExportScript.AF.TmpWeaponPanelActive[ExportScript.AF.TmpStationToPanel[_index].CurrentID] = 1
|
||
end
|
||
end
|
||
|
||
function ExportScript.AF.WeaponStatusPanel_FindCannonContainer(_index)
|
||
if ExportScript.AF.PayloadInfo.Stations[_index].weapon.level1 == 4 and -- weapon
|
||
ExportScript.AF.PayloadInfo.Stations[_index].weapon.level2 == 6 then -- Shell
|
||
ExportScript.AF.CannonContainer[_index] = ExportScript.AF.PayloadInfo.Stations[_index].CLSID
|
||
ExportScript.AF.CannonContainer.counter = ExportScript.AF.CannonContainer.counter + 1
|
||
end
|
||
end
|