Прибор для управления Xml-переменными при помощи джойстика — Avsim.Su

Разработчикам XML-приборов, а также строителям домашних коптиков известно, что из XML-прибора невозможно напрямую считывать состояние джойстика. Кроме того, напрямую, не используя дополнительных программ типа FSUIPC, а также различных мапперов, нельзя управлять многими системами самолета, управление которыми не предусмотрено в настройках симулятора. В FSX появился хороший интерфейс SimConnect, но и у него есть ограничения, больше 32 кнопоу в джойстике он не видит.

Довольно долго я пытался бороться с этой проблемой и вот что получилось. Предлагаю вариант своего решения. Сразу предупреждаю, что с такими самолетами, как ПТ Ту-154, этот прибор бесполезен.

Прибор работает как в FS9, так и в FSX. Сам он невидимый. Прописывается в файле panel.cfg в главной панели или 1 секции VC следующим образом:

gaugeXX=V_B.DXService!JoyToXMLVars, 0,0,10,10 Где XX — номер прибора в панели.

Разумеется, сам файл V_B.DXService.gau должен находиться в папке Gauges.

Логика работы прибора довольно проста, посредством функций DirectInput ищуться имеющиеся в системе джойстики (до 4), а затем, постоянно считывается состояние осей, кнопок и хаток этих четырех джойстиков. Посредством механизма _named_variable состояние органов управления джойстиков передаются в XML-переменные. И если эти XML-переменные присутствуют в XML-приборах или коде анимации визуальной модели, они соответствующим образом изменяються. Внимание, все переменные начинаються с нуля, проэтому переменные первого джойстика в системе будет начинаться с J0, второго с J1 и т.д. Нумерация кнопок также начинается с нуля, первая кнопка юудет _000, вторая _001.

Вот описание переменных. Все описания приведены для первого джойстика в системе, другие будут отличаться только числом после символа J.
Оси:

(L:J0AxisX, Number) — ось X
(L:J0AxisY, Number) — ось Y
(L:J0AxisZ, Number) — ось Z
(L:J0AxisRx, Number) — Вращение вокруг оси X
L:J0AxisRy, Number) — Вращение вокруг оси Y
L:J0AxisRz, Number) — Вращение вокруг оси Y

Движки:

(L:J0Slider_0, Number) — движок 0 (первый)
(L:J0Slider_1, Number) — движок 1 (второй)

Я сознательно не оптимизировал показания осей, передаеться то, что считывается из джойстика. Это уже на совести разработчика прибора алгоритм преобразования значения оси в свою переменную.

Хатки: Всего DirectX работает с 4 хатками в джойстике.

(L:J0Hat_0, Enum) — хатка 0 (первая)
(L:J0Hat_1, Enum) — хатка 1 (вторая)
(L:J0Hat_2, Enum) — хатка 2 (третья)
(L:J0Hat_3, Enum) — хатка 3 (четвертая)

Переменная каждой хатки может принимать 9 фиксированных значений: -1 центр, 0 вперед, 4500 вперед/вправо, 9000 вправо, 13500 вправо/назад, 18000 назад, 22500 назад/влево, 27000 влево, 31500 влево/вперед.

Кнопки: Можно работать со 128 кнопками, переменная кнопки принимает значение 1 если нажата 0, если отпущена.

(L:J0Button_000, number) …. (L:J0Button_127, number) от первой до 128 кнопки.

DirectInput также позволяет измерять скорость, ускорение и усилие на оси, но пока я еше сам не придумал, как это можно использовать, поэтому в приборе не реализовал.

Прикрепленный файл
 V_B.DXService.zip ( 47.97 килобайт )
Кол-во скачиваний: 51
 

Ответов: 3

Хорошее устройство для строителей домашних кокпитов! учитывая, что даже платники появились с XML приборами, можно много интересных вещей сделать. Появятся в приборе оси — будет просто совершенство…
Тогда возможно использование в 2 вариантах. Полетал на дефолтнике, выбрал «свой» самолет, отключил джой Ctrl K и все уже «настроено». Причем, сколько «своих» самолетов, столько и вариантов настрйки джойстиков.

А куда эти переменные прописать?
Например имеем прибор на ХМЛе «тумблер радиовысотомера»

<Gauge Name=»Radio Alt switch» Version=»1.0″>
<Element>
<Select>
<Value>(L:Radio alt switch,bool)</Value>
<Case Value=»0″>
<Image ImageSizes=»17,100″ Name=»ver_down.bmp»/>
</Case>
<Case Value=»1″>
<Image ImageSizes=»17,100″ Name=»ver_up.bmp»/>
</Case>
</Select>
</Element>
<Mouse>
<Cursor Type=»Hand»/>
<Click>(L:Radio alt switch,bool) ! (&gt;L:Radio alt switch,bool)</Click>
<Tooltip ID=»»>Radio altitude ind switch</Tooltip>
</Mouse>
</Gauge>

Цитата(Dexter @ 19.12.2008 23:37) *
А куда эти переменные прописать?
Например имеем прибор на ХМЛе «тумблер радиовысотомера»

<Gauge Name=»Radio Alt switch» Version=»1.0″>
<Element>
<Select>
<Value>(L:Radio alt switch,bool)</Value>
<Case Value=»0″>
<Image ImageSizes=»17,100″ Name=»ver_down.bmp»/>
</Case>
<Case Value=»1″>
<Image ImageSizes=»17,100″ Name=»ver_up.bmp»/>
</Case>
</Select>
</Element>
<Mouse>
<Cursor Type=»Hand»/>
<Click>(L:Radio alt switch,bool) ! (&gt;L:Radio alt switch,bool)</Click>
<Tooltip ID=»»>Radio altitude ind switch</Tooltip>
</Mouse>
</Gauge>

Ответил на ProTu форуме, в ветке «Новые горизонты Mjoy», но тут тоже продублирую:

Я для каждого самолета делаю свой XML-прибор, что-бы не изменять оригинал, а переменные все равно будут доступны. В этом приборе у меня прописаны все функции для обмена между кнопками и осями джойстика и XML-переменными. В Вашем случае переменная (L:Radio alt switch,bool) — вроде выключатель радиовысотомера, при щелчке мыши просто инвертируется, в зависимости от ее значения меняеться битмап виртуального тумблера. Для связи с «железным» тумблером прибор будет выглядеть примерно так:

Код
<Gauge Name=»JoyToVars» Version=»1.0″>
  <Size X=»3″ Y=»3″/>

  <Element>
     <Select>
        <Value>
         (L:J0Button_000, number) 1== if{
           1 (&gt;L:Radio alt switch,bool)
         } els{
           0 (&gt;L:Radio alt switch,bool)
         }
        </Value>
     </Select>
  </Element>

</Gauge>

Здесь считываеться положение кнопки и однозначно устанавливается значение переменной. В любом случае положение тумблера железного и виртуального будут синхронизированы. Конечно, в таком простом случае можно просто присваивать значение переменной кнопки значению вашей переменной типа так:

Код
(L:J0Button_000, number) (&gt;L:Radio alt switch,bool)

,
но при усложнении логики это может не сработать, поэтому все-же лучше первый вариант.

А вообще, прежде всего смотрите в приборе раздел мышинных функций, как раз, там и видео, что происходит с переменной и как она должна зависить от положения «железного» тумблера.