Lock ON и железная кабина. — «Железные» кокпиты

1 2
Наконец заработали основные приборы!
Но некоторые параметры найти в ЛокОне пока не удалось.
Это индикация положения шасси.
Индикация положения закрылков,
Тормозной шиток.
Давление топлива.
Давление масла.
Мркер, ДПР,БПР.

Прикрепленные изображения

  • P1040234.JPG

ra3dcs (22 September 2012 — 18:00) писал:

Это индикация положения шасси.
Индикация положения закрылков,
Тормозной шиток.
…

LoGetMechInfo()

result_is =
{
gear          = {status,value,main = {left = {rod},right = {rod},nose =  {rod}}}
flaps   = {status,value}  
speedbrakes   = {status,value}
refuelingboom = {status,value}
airintake     = {status,value}
noseflap      = {status,value}
parachute     = {status,value}
wheelbrakes   = {status,value}
hook          = {status,value}
wing          = {status,value}
canopy        = {status,value}
controlsurfaces = {elevator = {left,right},eleron = {left,right},rudder = {left,right}} — relative vlues (-1,1) (min /max) (sorry:(
}

Еще бы пример записи этого в export.lua посмотреть!

Ну если совсем кратко то так

local MechInfo = LoGetMechInfo()

if MechInfo then
  local gVal = MechInfo.gear.value —состояние шасси (от 0 до 1)
  local bVal = MechInfo.speedbrakes.value  —воздушный тормоз (от 0 до 1)
  local fVal = MechInfo.flaps.value —положение закрылков (от 0 о1)
  local hStat = MechInfo.hook.status  — тормозной гак
end

положения упр. поверхностей выдаются значениями от 0 до 1

сложность была только одна, с индикацией положений закрылков и воздухозаборника. Насколько я помню, была зависимость от высоты полета (воздухозаборник) и угла атаки (закрылки)
гдето вот в этой теме http://forums.eagle….t=67613&page=17 полный код экспорта выкладывал, поищи там самый последний вариант, тамже есть ссылка на видео работы ППИ, вроде достаточно похоже получилось

Сообщение отредактировал kreml: 23 September 2012 — 06:54

Спасибо!
Работает если только вместо value поставить status.
И по шасси хотелось бы получить состояние раздельных стоек.

    R20 = «20=»..math.floor(MechInfo.gear.status)..»:»
    R21 = «21=»..math.floor(MechInfo.speedbrakes.status)..»:»
    R22 = «22=»..math.floor(MechInfo.flaps.status)..»:»

С отдельными стойками косяк в экспорте, вывести по отдельности неполучица.

Сообщение отредактировал kreml: 23 September 2012 — 15:28

Kreml, подскажите эти сигналы есть возможность вытащить?
«Триммер РВ».
«Пуск разрешен»
«Отворот»

По первым двум пунктам надо посмотреть, а вот «Отворот» думаю придется самим считать по параметрам полета.

Довольно интересно организован экспорт в ЛоскОне.
Сингал airintake = {status} (клин воздухозаборника) выводится одновременно с выпуском шасси.
wheelbrakes   = {status,value}  тормоз колес не выводится совсем!

Сообщение отредактировал ra3dcs: 26 September 2012 — 14:11

Еще интересный глюк с экспортом данных.
При сбросе тормозного парашюта пропадает сигнал выпущенного положения шасси.

Кто знает, есть в экспорте Lock On сигнал «пожар двигателя» и соответственно «пожаротушение»?

вот кусок мего кода

local MCPState = LoGetMCPState()

local FIRE_L = (MCPState.LeftEngineFailure and 1) or 0
local FIRE_R = (MCPState.RightEngineFailure and 1) or 0
local FIRE = ( ((FIRE_L == 1) or (FIRE_R == 1)) and 1) or 0

Сообщение отредактировал kreml: 13 October 2012 — 19:24

kreml (13 October 2012 — 19:24) писал:

вот кусок мего кода
………

Cпасибо, работает!

Прикрепленные изображения

  • Fire1.JPG
  • P1040244.JPG

На примере кода Kreml  еще получилась индикация нейтрального положения триммера РВ, ЭЛ. РН.

LoGetTrimmerStatus()

возвращает таблицу вида
{
ElevatorNeutral = true/false,
AileronNeutral = true/false,
RudderNeutral = true/false
}

local TrimmerStatus = LoGetTrimmerStatus()   — Индикация триммеров
  
local TRIM_RV = (TrimmerStatus.ElevatorNeutral and 1) or 0   — триммер РВ
local TRIM_EL = (TrimmerStatus. AileronNeutral and 1) or 0   — триммер ЭЛ
local TRIM_RN = (TrimmerStatus. RudderNeutral and 1) or 0   — триммер РН

Сообщение отредактировал ra3dcs: 14 October 2012 — 14:55

Kreml, подскажите сигнал запуска двигателей удалось  вытащить?

kreml (16 October 2012 — 17:17) писал:

((RPM_L > 100) and 1) or 0

В последних собщениях проскакивает эта конструкция. В чем ее глубокий физический смысл? Я не знаю Lua, руководствуюсь только здравым смыслом. Можно предположить, что результат операции «>» содержит единички не только в младшем бите (что очень странно и маловероятно) и тогда «and1» сбрасывает все биты кроме младшего. Но операция or 0 для любого второго операнда даст в результате тот же самый второй операнд, т.е. фактически только зря тратит процессорное время. Язык интерпретирющий, навряд ли имеет оптимизатор способный выкинуть подобный ничего не делающий код, но даже если и выкидывает — какой смысл писать этот лишний код в исходник?

Ну сам сигнал вытащить невыйдет, я его получал расчетным путем:
(если обороты двигателя <50% и они растут, то считаем что двигатели запускаются.)

код:
…

LastRPM_L = 0 — глобальные переменные для хранения предыдущего показания оборотов
LastRPM_R = 0

function GetOther()

local EngineInfo = LoGetEngineInfo()

local RPM_L = EngineInfo.RPM.left
local RPM_R = EngineInfo.RPM.right

local EngineLeftStart = ((RPM_L > LastRPM_L) and (RPM_L < 50) and 1) or 0  — если текущее показание больше предыдущего и обороты меньше 50%
local EngineRightStart = ((RPM_R > LastRPM_R) and (RPM_R < 50) and 1) or 0
LastRPM_L = RPM_L — запоминаем текущее показание
LastRPM_R = RPM_R

local LeftAfterburning = ((RPM_L > 100) and 1) or 0 — сигнал форсажа
local RightAfterburning = ((RPM_R > 100) and 1) or 0

end

Сообщение отредактировал kreml: 16 October 2012 — 17:18

Да, это особенности языка. в lua нет побитовых операций к каким мы привыкли (кстати все переменные изначально с плавающей запятой), мне даже пришлось писать спец. функции чтобы организовать побитовые И и ИЛИ.

А в луа вот как это работает:
выражение (X1 and X2) = X2 если X1 ИСТИНА, в противном случае равно X1 (т.е. = ЛОЖЬ)
(X1 or X2) = X2 если X1 ЛОЖЬ, в противном случае равно X1 (т.е. = ИСТИНА)
Если из выражения выкинуть or 0, тогда результатом может быть либо 1, либо ЛОЖЬ, а ЛОЖЬ нам в качестве итогового значения совсем ненужна, or 0 делает замену ЛОЖЬ на 0

в итоге вот что получаем:
1) X = ( (RPM_L > 100) and 1), если обороты > 100 то X = 1, иначе оно X = ЛОЖЬ
2) Y = (X or 0),  если X равен ЛОЖЬ, то результат выражения приравнивается к 0, иначе (а иначе Х может быть равен только 1) результат будет равен Х, т.е. 1

Сообщение отредактировал kreml: 16 October 2012 — 19:30

kreml (16 October 2012 — 18:27) писал:

в итоге вот что получаем:

«Вон оно как, Михалыч!». То есть у них ложь и 0 — это совершенно разные, автоматом не приводящиеся друг к другу значения? Хм, запишу себе на корочку.

ra3dcs (24 September 2012 — 19:47) писал:

Kreml, подскажите эти сигналы есть возможность вытащить?
«Триммер РВ».
«Пуск разрешен»
«Отворот»

Первый пункт уже решен. Теперь по второму:
Вытащить полностью идентичный игре сигнал «ПР» не получится, но кое что можно:
1. получил информацию по сопровождаемой цели
2. получил динамические данные по макс. и мин. дальности пуска выбранного оружия (ракет)
3. получил дальность до цели

Используя эти данные, можно вывести «ПР» если дистанция до цели находится между мин и макс дальностью пуска, теперь о том расхождениях с игрой

— дальности пуска рассчитаны только для управляемых ракет, применяемых по захваченной цели. Т.е. если. даже если мы ведем цель, но используем пушку, дальности пуска все равно выводятся для ракеты. Также если цель не захвачена  например при работе по земле, то дальности также не выводятся.
в принципе, этот пункт можно решить, нужно только будет прописать дальности применения неуправляемого оружия, и сравнивать его с дистанцией до цели, а в случае работы по земле, еще рассчитывать дальность до поверхности земли (по оси самолета)
— помехи. Тут сложнее, наша функция всегда выдает нам дистанцию до цели, и диапазон пусков. Мы в принципе имеем информацию, использует цель помехи или нет, также знаем, произошел «прожиг» помехи или нет. Но, в игре, когда захвачена «непроженная» помеха, дистанцию до цели можно ввести вручную, от этого будет зависеть сигнал «ПР», в экспорте введенную дальность мы получить не можем. Это первое расхождение которое не выйдет убрать.
— ракеты с ТГСН. тут сигнал «ПР» зависит не только от разрешенных дальностей пуска, но и того смогла ли ГСН ракеты захватить цель или нет. Информации по ГСН ракет в экспорте тоже нет. Это второе неразрешимое расхождение с игрой.

В итоге, если мое описание заинтересовало, и со всеми недочетами готов мирится, то по «ПР» смогу помочь.

kreml (18 October 2012 — 20:02) писал:

В итоге, если мое описание заинтересовало, и со всеми недочетами готов мирится, то по «ПР» смогу помочь.

Было бы полезно!

Дальность   до  цели   —   штука   то же  прикольная !  Можно  оживить  в  родном   прицеде  АСП-ПФД-21(да и не только в нём)    шкалу  дальности  и  соответственно   отработку   кольца (база цели ) .  Нужно  только  решить главную  проблему  ( для  адекватной  работы  прицела ) —  колимационную  визуалку (или  как  она  там  правильно  называется )  пардон  за  оффтоп.

1 2