Jump to content

GlovePIE за всё хорошее, против всего плохого


Recommended Posts

Однако, здравствуйте!(с):hi:
Начну издалека.
Да здравствует Свобода, Равенство и Братство! 

Свобода. 
Это когда вирпил не связан с ограничениями (финансовыми, временными, пряморукостью и т.д., и т.п.) для приобретения, либо создания, оборудования для комфортных и результативных полётов.
Согласитесь, хороший джой стоит денег и времени, потраченного на его создание, либо на зарабатывание их, для покупки джоя или комплектующих для его постройки.
Удобно летать хочется всем, да не все могут это себе позволить.
Поэтому желательно, что бы было

Равенство. 
Надо всё же признать, что полного равенства между дешёвым джоем и ядрёным напольником от ВКБ (к примеру), всё равно не будет, но её ( разницу), можно минимизировать, путём расширения функциональности более простого джоя. 
Кроме того, у многих продвинутых джоев,  есть Софт от производителя, как к примеру на Сайтеках, СН-ах и других. 
Это удобно, можно настроить любую функцию управления по свому вкусу.
Но владельцы джоев попроще, в основном не имеют этих  удобств, которые кстати не являются читами, но очень помогают в полёте и в бою.
В конце концов, пусть уж будет некоторая разница в конструкциях, в кривых отклика,  в количестве отсчётов, но пусть её не будет (ну почти) в удобстве управления.
Для этого я и собираюсь написать цикл (скорее микст), посвящённый программе GlovePIE, которая позволят улучшить функциональность ЛЮБОГО  устройства управления.
Буду делать это исключительно для того ( 2 недели на работе сидеть, надо же чем то заняться), что бы создать условия для наступления

Братства.
Когда уважается любой, на чём бы он не летал, лишь бы в удовольствие.
Хоть я не настолько наивен, что бы всерьёз на это надеятся, вспомнить хотя бы перепирательства джоеводов и мышеводов.
До сих пор сентенции первых вызывают улыбку, по поводу их, якобы правдоподобия, настоящему управлению.
Как будто способ хвата и наличие загрузочных пружин, педалей, это чуть ли не реал, а их отсутствие, чуть ли не чит. 
Джойстик с обратной связью, ещё хоть как то можно считать похожим на реал (некое подобие взаимосвязи нагрузки на РУС от скорости полёта , угла атаки крыла и величины отклонения рулевых поверхностей ), но по опыту использования (MSWFFB), летать то можно и даже интересно, но воевать очень тяжело, особенно стрелять на критических режимах.
Так что, по большому счёту, даже то, что с обратной связью, имеет к реальному управлению такое же отношение, как пластилиновый макет к оригиналу, а уж без неё и вовсе, вроде рисунка (или фото).
Спорить же о том, чем "правильный" рисунок должен быть нарисован,карандашём или фломастером, извините, не серьёзно.
Поэтому, мне  всё равно, при помощи чего управляет человек, было бы ему удобно.
Это мой базовый принцип, оспаривать его БЕСПОЛЕЗНО, так как это вопрос веры.:ca:

Чего не будет.
Не буду рассказывать где взять и как установить гловпай и ппджой, в инете этого навалом, тем более, что у меня ХР, а не семёрка или десятка.
Не буду давать уроки написания скриптов, это скучно, да и не всем интересно., 
Не будет какой либо системы изложения, это не научный труд или пособие, можно считать подобием эссе, что в голову пришло, то и написал.
Не будет споров на предмет нужно не нужно, по принципу, не нравится - не читай.

Что будет.
Будет все рассказыватся на "языке домохозяйки", т.е. по максимуму просто.
Будет мотивация использования, т.е. почему надо так и как это поможет.
Будут выложены скрипты, с подробным обьяснением как и что назначить, что бы работало
Будет может быть, что то и на "заказ"
Будет наверное много текста, ну тут уж ничего не поделать, лирические отступления, как я полагаю помогут, мне в написании.
Будет как минимум по одной статье в день, начиная с завтрашнего дня, я так думаю.(с)


 

  • Upvote 1
Link to post
Share on other sites
 
  • Replies 60
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Однако, здравствуйте!(с) Начну издалека. Да здравствует Свобода, Равенство и Братство!  Свобода.  Это когда вирпил не связан с ограничениями (финансовыми, временными, пряморукостью и т.д.,

// Тумблер ON/OF CapsLock CapsLock = Mouse1.Button3 if (pressed(PPJoy1.Digital0)) { Mouse.CursorPosX = screen.Width/2 Mouse.CursorPosY = screen.Height /2 Mouse.Swallow = true } if (re

Управление разными осями одним устройством.   Управление виртуальными осями при помощи одной реальной. Например у вас есть Джойстик с одной осью управления тягой, т.е. обычный 4-х канал

Posted Images

А связка VJoy+FreePIE рассматриваться не будет?

Link to post
Share on other sites
 

Какая свобода, какое равенство, какое братство. Очередная демагогия, очередной мышильды. С целью расширить число адептов этой секты извращенцев.

Link to post
Share on other sites
 
1 час назад, BW=777 сказал:

Какая свобода, какое равенство, какое братство. Очередная демагогия, очередной мышильды. С целью расширить число адептов этой секты извращенцев.

А если прочитать внимательно?

 

2 часа назад, Kap сказал:

Для этого я и собираюсь написать цикл (скорее микст), посвящённый программе GlovePIE, которая позволят улучшить функциональность ЛЮБОГО  устройства управления.

 

Link to post
Share on other sites
 
4 часа назад, Kap сказал:

Однако, здравствуйте!(с):hi:
Начну издалека.
Да здравствует Свобода, Равенство и Братство! 

Свобода. 
Это когда вирпил не связан с ограничениями (финансовыми, временными, пряморукостью и т.д., и т.п.) для приобретения, либо создания, оборудования для комфортных и результативных полётов.
Согласитесь, хороший джой стоит денег и времени, потраченного на его создание, либо на зарабатывание их, для покупки джоя или комплектующих для его постройки.
Удобно летать хочется всем, да не все могут это себе позволить.
Поэтому желательно, что бы было

Равенство. 
Надо всё же признать, что полного равенства между дешёвым джоем и ядрёным напольником от ВКБ (к примеру), всё равно не будет, но её ( разницу), можно минимизировать, путём расширения функциональности более простого джоя. 
Кроме того, у многих продвинутых джоев,  есть Софт от производителя, как к примеру на Сайтеках, СН-ах и других. 
Это удобно, можно настроить любую функцию управления по свому вкусу.
Но владельцы джоев попроще, в основном не имеют этих  удобств, которые кстати не являются читами, но очень помогают в полёте и в бою.
В конце концов, пусть уж будет некоторая разница в конструкциях, в кривых отклика,  в количестве отсчётов, но пусть её не будет (ну почти) в удобстве управления.
Для этого я и собираюсь написать цикл (скорее микст), посвящённый программе GlovePIE, которая позволят улучшить функциональность ЛЮБОГО  устройства управления.
Буду делать это исключительно для того ( 2 недели на работе сидеть, надо же чем то заняться), что бы создать условия для наступления

Братства.
Когда уважается любой, на чём бы он не летал, лишь бы в удовольствие.
Хоть я не настолько наивен, что бы всерьёз на это надеятся, вспомнить хотя бы перепирательства джоеводов и мышеводов.
До сих пор сентенции первых вызывают улыбку, по поводу их, якобы правдоподобия, настоящему управлению.
Как будто способ хвата и наличие загрузочных пружин, педалей, это чуть ли не реал, а их отсутствие, чуть ли не чит. 
Джойстик с обратной связью, ещё хоть как то можно считать похожим на реал (некое подобие взаимосвязи нагрузки на РУС от скорости полёта , угла атаки крыла и величины отклонения рулевых поверхностей ), но по опыту использования (MSWFFB), летать то можно и даже интересно, но воевать очень тяжело, особенно стрелять на критических режимах.
Так что, по большому счёту, даже то, что с обратной связью, имеет к реальному управлению такое же отношение, как пластилиновый макет к оригиналу, а уж без неё и вовсе, вроде рисунка (или фото).
Спорить же о том, чем "правильный" рисунок должен быть нарисован,карандашём или фломастером, извините, не серьёзно.
Поэтому, мне  всё равно, при помощи чего управляет человек, было бы ему удобно.
Это мой базовый принцип, оспаривать его БЕСПОЛЕЗНО, так как это вопрос веры.:ca:

Чего не будет.
Не буду рассказывать где взять и как установить гловпай и ппджой, в инете этого навалом, тем более, что у меня ХР, а не семёрка или десятка.
Не буду давать уроки написания скриптов, это скучно, да и не всем интересно., 
Не будет какой либо системы изложения, это не научный труд или пособие, можно считать подобием эссе, что в голову пришло, то и написал.
Не будет споров на предмет нужно не нужно, по принципу, не нравится - не читай.

Что будет.
Будет все рассказыватся на "языке домохозяйки", т.е. по максимуму просто.
Будет мотивация использования, т.е. почему надо так и как это поможет.
Будут выложены скрипты, с подробным обьяснением как и что назначить, что бы работало
Будет может быть, что то и на "заказ"
Будет наверное много текста, ну тут уж ничего не поделать, лирические отступления, как я полагаю помогут, мне в написании.
Будет как минимум по одной статье в день, начиная с завтрашнего дня, я так думаю.(с)


 

Водку купил,пивас в нагрузку дали-начинай!!!Как раз к НГ )))Ёпрст Хоть один Адекватный человек!Kap-начинай Дружище!!!:hi:

Link to post
Share on other sites
 
5 часов назад, Kap сказал:

Будут выложены скрипты, с подробным обьяснением как и что назначить, что бы работало

Да чего "тянуть кота за хвост" попросите скрипты у соболя (вжика) и будет вам счастье.:pilot1:

Link to post
Share on other sites
 

А ну-ка, Булл, скажи-ка, будет ли считаться джойстик, с расширенным с помощью GlovePIE/FreePIE функционалом, читом и зашкваром для "настоящего симуляторщика"?

Link to post
Share on other sites
 

"А ну-ка" говори своей жене с тещей. Читай выше пост еще раз если не понял.

Link to post
Share on other sites
 
2 часа назад, NORD89 сказал:

До сих пор сентенции первых вызывают улыбку, по поводу их, якобы правдоподобия, настоящему управлению.

Разницу между симуляцией и правдоподобием улавливаешь? И где ты прочитал про "правдоподобие "настоящему управлению? Да елозить мышью по столу это ближе к управлению л\а .

Так определитесь уж мышеводы, вы симулировать полет или просто пострелять? 

Упс , цитату не там дернул).

Link to post
Share on other sites
 
40 минут назад, bull сказал:

"А ну-ка" говори своей жене с тещей. Читай выше пост еще раз если не понял.

Ну так здесь-то, как я понял, будут добавлять функционал обычному "железному" джою, а не мышеджою, а ты сам говорил, что джой - труЪ, а мышеджой - фу. Сигнал считывается с обычного джоя, а то, что он потом может как-то изменяться GlovePIE - так это мелочи. Для кучи джойстиков существуют дополнительные программы, тем или иным образом изменяющие их характеристики , и добавляющие новые возможности (о чём и упоминается в первом сообщении), а по-твоему получается, что владелец джойстика с такой программулиной автоматически превращается из ТруЪ-пилота в позорного читера, ведь, о ужас, информация к игре поступает не напрямую с джойстика? А то вдруг окажется, что многие здешние вирпилы пользуются подобными программами, а потому являются читерами в твоём понимании? Или они всё же не читеры, а труЪ-пилоты, несмотря на такие программы?

Link to post
Share on other sites
 

Вот наконец то добрался до компа, много написать не смогу, вставать то в 6.00. посему планирую писать на работе. Ну как вижу реакция уже есть, отрицательная (скорее насмешливая) в том числе, это славно, это лакмусовая бумажка. Критика того, чего ещё не видел, это здорово, как там: «не читал, но осуждаю». Ничего, каждый имеет право на собственное мнение и каждый может ошибаться, это нормально, в конце концов, кто не без греха? Я в том числе.

Теперь по сути, вджой и фрипи не в моей компетенции, т.е. я ими не занимался, но не думаю, что там очень уж большая разница.

Немного о том откуда ноги растут (у меня).

Первый раз столкнулся с софтом когда купил лоджитек зд.

Был он там примитивный, но кнопки шифт, альт и контрол, там назначить было можно, что автоматически увеличивало количество кнопок на джое почти в три раза!

Джой погиб (резюки), на замену был куплен Сайтек Х52, переделана механика и я познакомился с его софтом.

Было шикарно!

Можно было всё настроить под себя.

Например, длину очереди на одно нажатие, ручную уборку и выпуск шасси (включая и аварийную) всего парой нажатий, ну и много других вкусностей.

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

Боролся я, боролся.. и снёс все драйвера, и использую его исключительно в режиме «плуг энд плей», как простой не программируемый джой ( вернее использовал до гловпая), кстати по точности стрельбы не уступает ни мышам, ни напольникам.

Потом был куплен СН файтерстик, там роскошная скриптовая база, масса виртуальных осей и кнопок, сказка!

Но опять «НО», копм мой, в упор не видел этого софта, слюни капали не клаву, т.е. глаз видит, да зуб неймёт, по точности стрельбы он похуже Х52, в два раза меньше отсчётов на осях.

Однако бацилла уже проникла, хотелось комфорта, знаете, мозги тогда разгружены, летается легче.

И вот, лет наверное 6 назад, на тогда ещё живой корбине (песочнице) попался товарищ, ник не помню точно, толи кекс, то ли кокс или что то в этом роде.

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

Так вот от него я узнал про Гловпай, ну а дальше интернет, УХУ и т.д.

Таким образом, я нашёл то, чего мне не хватало, на Сайтеке и СН, надёжный софт, который делал всё тоже, что и прилагающиеся к эти двум джоям софты, только надёжно и без капризов.

Замечу, для чистоты эксперимента, об использовании мышей, речь не шла, ибо джоев имею (рабочих), аж три (Х52, СН, МСФФБ), плюс сайтековские педали (как то накопились с 2004 года).

 

 

Теперь приступим помолясь.

 

Из недавнего, простенького.

Как то, в начале года, меня спросили совета как помочь человеку, он летает кстати и на Алексе.

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

Но мышка за один щелчок изменяет тягу на 2 (или 3) %.

Представляете , от 0, до 110%% тяги …55 щелчков, постоянный перегрев или недобор мощности, а об оперативном сбросе газа вообще речи нет, дуэль-пытка, а хочется…

Как не помочь человеку, быстренько сделал скриптик.

Товарищ пожелал, что бы за один щелчок тяга изменялась на 20%, т.е. от 0 до 110 за 6 щелчков.

Надо сказать, что гловпай и ппджой у него уже был установлен.

Вот скрипт:

 

//Прямое управление  тягой с помощью колёсика мыши

 

 if ( Mouse.WheelDown ) {

  Key.NumpadMinus = true

  wait(50 ms)

  Key.NumpadMinus = false

  Key.NumpadMinus = true

  wait(50 ms)

  Key.NumpadMinus = false

  Key.NumpadMinus = true

  wait(50 ms)

  Key.NumpadMinus = false

  Key.NumpadMinus = true

  wait(50 ms)

  Key.NumpadMinus = false

  }

 if ( Mouse.WheelUp ) {

  Key.NumpadPlus = true

  wait(50 ms)

  Key.NumpadPlus = false

  Key.NumpadPlus = true

  wait(50 ms)

  Key.NumpadPlus = false

  Key.NumpadPlus = true

  wait(50 ms)

  Key.NumpadPlus = false

  Key.NumpadPlus = true

  wait(50 ms)

  Key.NumpadPlus = false

  }

 

Это конечно примитив, но очень простой и надёжный.

Алгоритм работы следующий: в Управлении игры на значении уменьшить тягу назначается клавиша NumpadMinus цифровой панели и соответственно на значение увеличить тягу назначается NumpadPlus.

Однако однократное нажатие этих клавиш изменяет тягу всего на 5%, следовательно, надо заставить программу делать за один щелчок мыши, 4 нажатия клавиш, что она и выполняет с интервалом между нажатиями в 50 миллисекунд.

 

Но после пошёл немного дальше, чем требовалось.

Обещал всё подробно обьяснять, значит выполняю, тут небольшое отступление.

 

Какой вообще принцип управления ВинтоМоторной Группой?

Зависит от задачи, на маршрутном полёте шаг должен соответствовать тяге, причём при тяге 80% и таком же шаге, радиатор можно открывать всего на 20% (управление радиатором отдельная тема, даст Бог, и до этого доберёмся), при этих же значениях и полностью открытом радиаторе, лучше всего остужать двигатель во время боя без большой потери тяги.

Для экономного полёта на дальность или с повреждённым двигателем, лучше 50 на 50.

Для устойчивого управления на глиссаде, в том числе и для посадки на авианосец, достаточно 30% тяги, но шаг должен быть 100%, потому, что при меньшем его значении ( опираюсь на определение шага, как его даёт игра), крафт будет очень летучий, даже с закрылками в посадку.

Кроме того при шаге 100, двигатель более приёмистый, т.е. быстрее наберёт обороты, если вдруг надо подтянуть или уйти на второй круг.

Ну и при тяге 100-110%, шаг тоже должен быть 100%, что бы можно было снять с мотора полную мощность.

Что у нас получилось?

На всё про всё (исключая полёты строем), нам необходимы такие параметры для ВМГ:

Тяга     0 – Шаг 100; (пропуск противника при торможении, касание и пробег при посадке)

Тяга   30 – Шаг 100; (посадочная глиссада)

Тяга   50 – Шаг 50;   (полёт на максимальную дальность, мало топлива, повреждённый двиг)

Тяга   80 – Шаг 80;   (полёт с максимальной мощностью мотора, без риска перегрева)

Тяга 100 – Шаг 100; (воздушный бой, плановый климб)

Тяга 110 – Шаг 110; ( здесь всё и взлёт, и бой, и климб на вторых режимах, и догон, и выход из боя)

Это на все случаи жизни и всего пять шелчков мыши.

Для гурманов можно добавить по одной позиции сверху и снизу списка:

Тяга 0 – Шаг 0; (для зуммером, для точного доворота перед стрельбой, тогда не возникает ощутимых реактивного и гироскопического моментов винта, которые этому довороту мешают, а так же для безмоторного планирования на максимальную дальность).

Тяга 110 – Шаг 0; ( кратковременный режим для любителей дырча, при догоне или отрыве, при необходимости ещё чуть чуть подпрыгнуть не вертикали, и для создания отрицательной перегрузки на самолётах с поплавковыми карбюраторами типа Ишаки и Спиты).

Правда в описываемом случае такая задача не стояла, об этом позже.

Здесь задача посложнее.

Колёсико одно, а управлять должно двумя осями, причём управлять специфичиски, изменяя шаг в противоположные стороны.

И, что самое противное, можно было бы назначить на значения шага и газа клавиши клавиатуры, но на тягу 110%  управляющей кнопки игрой не предусмотрено, не хотелось забирать клавиши и делать что то громоздкое, тем более, что надо было всё равно создавать ось которой будет управлять колесо мыши.

Итак напомню, что глопай и ппджой уже стояли.

Для осуществления задуманного понадобилось 3 оси ппджоя (их там можно 8 поставить).

Перво наперво, нужно отвязать колесо мыши от мыши (простите за тавтологию), вот скрипт:

 

 

 if (Mouse1.present) {

if (var.Mouse1_in = false) {

 

var.Mouse1_Wheel = 5  //На сколько щелчков колеса мыши разбить ось джойстика

var.Mouse1_mapZ = var.Mouse1_Wheel*120

var.Mouse1_Z = var.Mouse1_mapZ/1

var.Mouse1_in = true

}

var.Mouse1=1_deltaz = Delta(Mouse1.DirectInputZ)

var.Mouse1_Z = var.Mouse1_Z + (var.Mouse1_deltaz)

if var.Mouse1_Z < 0 then var.Mouse1_Z = 0

if var.Mouse1_Z > var.Mouse1_mapZ then var.Mouse1_Z = var.Mouse1_mapZ

Var.Mouse1_JZ = MapRange(var.Mouse1_Z, 0, var.Mouse1_mapZ, -1 ,1)

 

}

 

Всё мышь отвязана и при включенном скрипте ,вращение колеса, это вращение оси.

Далее нам понадобятся три оси, почему три, а не две?

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

 

 

PPJoy1.analog0 = Var.Mouse2_JZ       // Опорная ось управления Тяги и Шага

 

//Управление тягой и шагом совместно

 

var.int = round(MapRange(PPJoy1.analog0, -1, 1, 0, 50))

 

if ( INRANGE (var.int, 00, 09 ) ) {

PPJoy1.analog1 =  1.00

PPJoy1.analog2 =  -1.00

}

if ( INRANGE (var.int, 10, 19 ) ) {

PPJoy1.analog1 =  1.00

PPJoy1.analog2 =  -0.44

}

if ( INRANGE (var.int, 20, 29 ) ) {

PPJoy1.analog1 =  0.00

PPJoy1.analog2 =  -0.08

}

if ( INRANGE (var.int, 30, 39 ) ) {

PPJoy1.analog1 =  0.60

PPJoy1.analog2 =  0.45

}

if ( INRANGE (var.int, 40, 49 ) ) {

PPJoy1.analog1 =  1.00

PPJoy1.analog2 =  0.83

}

 

if ( INRANGE (var.int, 50, 60 ) ) {

PPJoy1.analog1 =  1.00

PPJoy1.analog2 =  1.00

}

 

 

Вот собственно и всё со скриптом, ось PPJoy1.analog1 будет осью шага, а ось PPJoy1.analog2 – осью тяги.

Ещё один момент, если в скрипте, оси поменять местами, ну вот так

 

if ( INRANGE (var.int, 50, 60 ) ) {

PPJoy1.analog2 =  1.00

PPJoy1.analog1 =  1.00

 

Тогда при вращении колёсика на мониторе будет прописываться значения шага, а не тяги, что согласитесь менее удобно.

Теперь надо всё это хозяйство засунуть в игру через конфиг. Через Тим вивер открыл конфиг, там в секции осей, была такая расфасовка девайсов:

Джойстик определялся как  JoystickDevice0;

Авто педали как                    JoystickDevice1

Вручную пришлось прописать оси ппджоя, т.е. добавить 2 строчки:

 

AXE_Y JoystickDevice2= pitch

AXE_Z JoystickDevice2=power

 

И на этом всё!

 

 

Link to post
Share on other sites
 

Пардон здесь ошибка

PPJoy1.analog0 = Var.Mouse2_JZ       // Опорная ось управления Тяги и Шага

должно быть

PPJoy1.analog0 = Var.Mouse1_JZ       // Опорная ось управления Тяги и Шага

Link to post
Share on other sites
 

На будущее: заключай код в соответствующий тег, а то читать неудобно.

Edited by Дюша
Link to post
Share on other sites
 

Полностью расписать тему не успел, поэтому закончу сейчас.

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

 if (Mouse1.present) {

if (var.Mouse1_in = false) {

var.Mouse1_Wheel = 5  //На сколько щелчков колеса мыши разбить ось джойстика

var.Mouse1_mapZ = var.Mouse1_Wheel*120

var.Mouse1_Z = var.Mouse1_mapZ/1

var.Mouse1_in = true

}

var.Mouse1=1_deltaz = Delta(Mouse1.DirectInputZ)

var.Mouse1_Z = var.Mouse1_Z + (var.Mouse1_deltaz)

if var.Mouse1_Z < 0 then var.Mouse1_Z = 0

if var.Mouse1_Z > var.Mouse1_mapZ then var.Mouse1_Z = var.Mouse1_mapZ

Var.Mouse1_JZ = MapRange(var.Mouse1_Z, 0, var.Mouse1_mapZ, -1 ,1)

}

 
//Управление тягой и шагом совместно

 
var.int = round(MapRange(PPJoy1.analog0, -1, 1, 0, 50)) // диапазон управляющей шкалы от 0 до 50 у.е. 

 
if ( INRANGE (var.int, 00, 09 ) ) {  // нулевое положение колеса 

PPJoy1.analog1 =  1.00  // шаг 100

PPJoy1.analog2 =  -1.00  // тяга 0

}

if ( INRANGE (var.int, 10, 19 ) ) {  // первые шелчок 

PPJoy1.analog1 =  1.00  // шаг 100

PPJoy1.analog2 =  -0.44  // тяга 30

}

if ( INRANGE (var.int, 20, 29 ) ) {  // второй щелчок

PPJoy1.analog1 =  0.00    // шаг 50

PPJoy1.analog2 =  -0.08   // тяга 50

}

if ( INRANGE (var.int, 30, 39 ) ) { //  третий щелчок

PPJoy1.analog1 =  0.60 //  шаг 80

PPJoy1.analog2 =  0.45  // тяга 80

}

if ( INRANGE (var.int, 40, 49 ) ) {  // четвёртый щелчок

PPJoy1.analog1 =  1.00  // шаг 100

PPJoy1.analog2 =  0.83  // тяга 100

}


 

if ( INRANGE (var.int, 50, 60 ) ) {  // пятый (последий) щелчок

PPJoy1.analog1 =  1.00  // шаг 100 (в данном случае эта строка не обязательна)

PPJoy1.analog2 =  1.00  // тяга 110ги 110

}

PPJoy1.analog0 = Var.Mouse1_JZ       // Опорная ось управления Тяги и Шага, присвоена колесу мыши


************************************************************************************************************
Как выглядит такое управление в игре?
Например старт с земли, перед запуском двигателя, крутим колесо к себе, неважно на сколько щелчков, главное, что бы их было не меньше 5.
Игра напишет "Тяга 0", далее действуем как обычным РУДом.
При старте в воздухе, наоборот, крутим колесо вперёд до тяги 110, далее как обычно. 
Для резкого увеличения или уменьшения тяги, просто крутим колесо в соответствующюю сторону, не заботясь о количестве щелчков.
Ось будет управляться сразу, без мёртвых щелчков, например при сбросе тяги сделано 15 щелчков, но всё равно при добавлении тяги значения будет изменятся сразу с первого щелчка . 
В общем имеем пульт управления по принципу обычного РУДа,  последовательно и сразу, задающего оптимальные значения для ВМГ..

Вышеприведенный скрипт, является адаптированной к колесу мыши версией скрипта, который я использую для управления ВМГ при помощи Сайтековского РУДа.
В принципе любой РУД может так работать. 


 

Link to post
Share on other sites
 

Будем двигаться дальше.
Предположим такой сценарий: был обычный себе джой, например Лоджитек Экстрим 3Д, который приказал долго жить, по причине износа механики и резисторов.
Джой был использован в качестве донора, для создания комплекта управления, состоящего из напольного РУСа, педалей и РУДа.
Использовано то, что можно, а именно, контроллер и рукоятка РУСа, на осях поставлены датчики Холла.
В наличии оказалось 3 оси по 512 отчётов, одна на 256, хатка и 12 кнопок, задача  - увеличить функциональость, такого скудного набора элементов.
Сразу оговорюсь, буду рассуждать исходя из того, что я считаю правильным, т.е. из своих личных предпочтений, принимать которые за аксиому, совсем не обязательно.
Значит начну с загрузки РУСа.
Вот цитата из учебника для лётного состава "Практическая аэродинамика маневренных самолётов." М. 1977г.
"...Лётная практика показывает, что лётчики дают хорошую оценку управляемости маневренного самолёта, если градиент усилия по перегрузке находится в пределах - (1 - 3) кгс, а значение градиента перемещения ручки не менее - (10-15) мм."
Перевожу на более понятный, это когда на создание перегрузки в 1 единицу необходимо приложить к ручке усилие от 1 до 3 кг, а перемещение её при этом,  должно лежать в пределах 10-15 мм.
Т.е. для создания перегрузки 3g необходимо (возьмём нижний предел) переместить РУС на 30мм, а он в свою очередь должен оказать сопротивление в 3кг.
Понятно, почему лётчики из боя мокрые прилетали если по верхнему пределу посчитать.
Мне это как то не очень нравится, вечер полётов будет равен походу в спорт зал.
Там же в учебнике написано, что меньшие (и большие) усилия уже не информативны и в принципе, если они  меньше 1кг, то тогда могут быть  равны о, разницы уже нет и самолёт считается непригодным к маневренным полётам.
Но такой случай рассматривается при отказах систем автоматического регулирования, и тогда лётчик вынужденно, должен пилотировать, опираясь только на величину перемещения РУСа.
Вот я с самого начала так и пилотирую, все мои джои без пружин.  
Но ручку без загрузки, нельзя отпустить, это не мышь (где остановил - там и лежит), она сразу падает и крафт естественно идёт за ручкой.
А если надо освободить руку, ответить в чате, что то сделать и т.п?
Значит надо предусмотреть эту возможность
Что ещё можно предпринять для РУСа?
По игре получается, что наиболее эффективное положение ручки, при котором потери Е на установившемся маневре минимальны, а перегрузка оптимальна,
находится в пределах 40-60%% хода ручки от центра.
Значит сделаем так, что когда ручка будет в нужном диапазоне, у нас будет звучать звуковой сигнал, и будет он звучать всё время, пока ручка из этого диапозона не выйдет.
Мне это как бы не надо, но для начинающих пилотов будет полезно, что бы ручку не перетягивали, даже если они и с загрузкой летают.
Ещё сделаем как на продвинутых джоях (например на СН), которые могут менять кривые на лету, т.е. при нажатии на кнопку джоя или клавишу, можно кратно уменьшить кривую отклика, для более прицельной стрельбы например.
С РУСом вроде всё, нет, ещё вот, что.
Привяжем-ка мы к нему триммера.
Но не совместим, а именно привяжем, поясню зачем.
Тут два фактора, на некоторых крафтах, МиГ-3 или Р-38, на большой скорости, поток зажимает руль высоты, РУС полностью выбран на себя, а руль не двигается, крафт нос не поднимает, тогда выкручивают триммер в помощь РВ.
Второй случай, когда пилот в блеке, рули не действуют, а триммера действуют и многие этим пользуются.
Для нашего случая это не подходит, нет под это физических осей, если создать виртуальные, то надо привлечь хотя бы 3 кнопки джоя для их управления.
Да и сомнительное это дело, в блеке кнопки нажимать.
Но и совмещать оси триммеров с основными осям не хорошо.
Триммера инертны, отклоняются не мгновенно, а с определённой скоростью, это будет мешать пилотированию и стрельбе.
И ещё, коль скоро джой без загрузки, то корректировочное триммирование не нужно, и триммера можно использовать только в том случае, если рули в крайних положениях.
Вот теперь с РУСом всё.
РУД сделаем по вышеизложенным принципам, на семь режимов ВМГ.
Причём режимы шаг 0 - тяга 0, и шаг 0 -тяга 100, будут озвучены.
Теперь обзор, предполагается использание Фритрека (дешево и сердито), но необходимо организовать ещё 3 функции, "смотреть через прицел",  "прильнуть к прицелу" и "широкоугольный обзор".
Для удобства и экономии кнопок джоя, эти функции будет выполнять одна кнопка.
Вот по такому алгоритму: кратковременное нажатие-"смотреть, через прицел"; удержание-"прильнуть к прицелу", после отпускания "широкоугольный обзор".
У меня так уже давно, довольно комфортно.
Ну и когда взгляд "прильнёт к прицелу", автоматически уменьшатся кривые отклика основных осей, например в 2раза, всё таки отсчётов то у нас маловато, так, что скомпенсируем откликом.
Ещё нам понадобится кнопка, для функции "взгляд по центру", эта функция задаётся во Фритреке назначением клавиши, кнопкой джоя её назначить нельзя, а нам надо время от временя "центровать" взгляд и кнопка должна быть под рукой, т.е. на джое, что мы и сделаем.
Теперь оружие, конкретно режимы огня, будем стрелять фиксированной очередью, одно нажатие гашетки - 3-5 выстрелов на ствол, как из пистолета, обосновывать почему так, не буду, много займёт места, если кому интересно, можете посмотреть в советском руководстве по стрельбе, главы "корректирование огня по трассе", "режимы огня" и "стрелковые расчёты" (лежит у нас на сервере в разделе "Учись студент" тема "пособия по которым учили стрелять...").
Далее уборка и выпуск шасси в том числе вручную и аварийно, повесив на одну кнопку, нажали кратковременно, шасси убрались, в том числе и вручную, нажали и подержали-выпустились.
Так же организуем управление закылками, и попробуем озвучить выпущеное положение (как у месса).
Сделаем как на Сайтеке или СН, переключатель модов, там правда можно три мода переключеть, и для определения какой именно включён  есть цветовая подсветка.
Нам, для удобства достаточно будет двух, а то можно запутаться.
Ну вот вроде всё, если ещё чего в голову придет, упомяну в описании.
Всё ожидаем скрипт, что то есть готовое, а что то надо придумывать, так, что займёт некоторое время.
Вот кстати наш предполагаемый девас из фитингов , труб ПВХ , и Лоджитека, человек утверждает, что обошлось это ему (с джоем), в 1500р. и один вечер работы.

 

 

 

222.jpg.14334098efcd5d7369e9318bfcca4145.jpg

Link to post
Share on other sites
 
 

Ждем дальнейшего описания.

Интересует: как присвоить несколько осей на одну ось джойстика. По нажатию кнопки (например)

Или как присвоить оси джойстика к виртуальному. Что то недопонимаю.

Link to post
Share on other sites
 

Ещё раз просьба: для кода использовать кнопку "Код" редактора (значок "<>"), а то читать невозможно.

 

3 часа назад, =SPb=Electric сказал:

Ждем дальнейшего описания.

Интересует: как присвоить несколько осей на одну ось джойстика. По нажатию кнопки (например)

Или как присвоить оси джойстика к виртуальному. Что то недопонимаю.

Присвоить несколько значений осям виртуального джойстика легко и просто, в том числе, по нажатию кнопки:
 

if (Pressed(key.A)) //Нажатие клавиши A.
{
	PPJoy.Analog0 = 1.0;
	PPJoy.Analog1 = 0.0;
	PPJoy.Analog3 = -1.0;
}

if (key.A) //Удержание клавиши A (для примера).
{
	PPJoy.Analog0 = 1.0;
	PPJoy.Analog1 = 0.0;
	PPJoy.Analog3 = -1.0;
}

А можно привязать ось виртуального джойстика к оси реального:
 

PPJoy.Analog0 = Joystick.x //Присваивает оси X виртуального джоя (крен), значение оси реального джойстика.


P.S. Кар, надеюсь, ты не против, что я "влез" в твою тему?

Link to post
Share on other sites
 

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

 

Link to post
Share on other sites
 
5 часов назад, Kap сказал:

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

 


 // Оси джойстика и включатель осей X Y Z при нажатии кнопки джоя № 12

if ( PPJoy1.Digital9== 1)  {
PPJoy1.analog0 = false
PPJoy1.analog1 = false
PPJoy1.analog2 =  false
}else {
PPJoy1.analog0 = Joystick1.X
PPJoy1.analog1 = Joystick1.Y
PPJoy1.analog2 = Joystick1.Z

}

if (  pressed(Joystick1.Button12) ) { // включатель осей X Y Z
toggle( PPJoy1.Digital9 )
}
//Список задействованных и свободных осей

//PPJoy1.analog0 = Joystick1.X
//PPJoy1.analog1 = Joystick1.Y
//PPJoy1.analog2 = Joystick1.Z
//PPJoy1.analog3
//PPJoy1.analog4   Шаг
//PPJoy1.analog5   Тяга
//PPJoy1.analog6   Опорная ось сигнализации закрылков
//PPJoy1.analog7  Радиатор

//PPJoy2.analog0   Триммер Элеронов
//PPJoy2.analog1   Триммер РВ
//PPJoy2.analog2   Триммер РН
//PPJoy2.analog3
//PPJoy2.analog4
//PPJoy2.analog5
//PPJoy2.analog6
//PPJoy2.analog7


// Назначаем кнопки


PPJoy1.Digital4 = Joystick1.Button7






// Сигнализация оптимального положения РВ (Звуковая загрузка)

var.int = round(MapRange(PPJoy1.analog1, -1, 1, 0, 200))
if ( INRANGE (var.int, 140, 160 ) ) {
playsound "d:\sounds\Windows XP Balloon"
wait(500 ms)
}

//Управление триммером элеронов,срабатывает при крайних положениях РУС по крену

var.int = round(MapRange(PPJoy1.analog0, -1, 1, 0, 100))
if ( INRANGE (var.int, 00, 05 ) ) {
PPJoy2.analog0 =  -1.00

}
if ( INRANGE (var.int, 10, 90 ) ) {
PPJoy2.analog0 =  0.00

}
if ( INRANGE (var.int, 95, 100 ) ) {
PPJoy2.analog0 =  1.00
}

//Управление триммером РВ,срабатывает при крайних положениях РВ

var.int = round(MapRange(PPJoy1.analog1, -1, 1, 0, 100))
if ( INRANGE (var.int, 00, 05 ) ) {
PPJoy2.analog1 =  1.00

}
if ( INRANGE (var.int, 10, 90 ) ) {
PPJoy2.analog1 =  0.00

}
if ( INRANGE (var.int, 95, 100 ) ) {
PPJoy2.analog1 =  -1.00

}

//Управление триммером РН,срабатывает при крайних положениях РН)
var.int = round(MapRange(PPJoy1.analog2, -1, 1, 0, 100))
if ( INRANGE (var.int, 00, 05 ) ) {
PPJoy2.analog2 =  -1.00
}
if ( INRANGE (var.int, 10, 90 ) ) {
PPJoy2.analog2 =  0.00
}
if ( INRANGE (var.int, 95, 100 ) ) {
PPJoy2.analog2 =  1.00
}


/* Управление приближением взгляда, взгляда через прицел
 и изменение кривых отклика при приближением взгляда*/

// Управление приближением взгляда всё работает при нажатии кнопки джоя № 7

 Key.Z = Pressed(PPJoy1.Digital4) /* назначить в ПУ кнопку "Z"
 на прильнуть к прицелу */
 Key.X  = Released(PPJoy1.Digital4) /* назначить в ПУ кнопку "X"
 на широкоугольный обзор */

}

// переключатель кривых отклика
if ( released(PPJoy1.Digital4) )     { // если отпущена то
PPJoy1.analog0 = Joystick1.X    // Ось Х кривые отклика по 100%
PPJoy1.analog1 = Joystick1.Y    // Ось Y кривые отклика по 100%
PPJoy1.analog2 = Joystick1.Z   // Ось Z кривые отклика по 100%
}
if (PPJoy1.Digital4 == 1 )     {                         // если нажата то
PPJoy1.analog0 = Joystick1.X /2   // Ось Х кривые отклика по 50%
PPJoy1.analog1 = Joystick1.Y /2   // Ось Y кривые отклика по 50%
PPJoy1.analog2 = Joystick1.Z /2  // Ось Z кривые отклика по 50%
}

// взгляд через прицел
if ( released( Joystick1.Button7) )     { /*если отпущена кнопка джоя № 7
переключается функция "смотреть чкрез прицел"
в ПУ назначить на неё клавишу NUMPAD8 */
    Key.NUMPAD8 = true
    wait(50 ms)    //время в течении которогобудет нажата клавиша
    Key.NUMPAD8 = false
}


// переключатель(быстрое нажатие-взгляд через прицел,длительное-приближение)

if (!var.running) {
var.t = 0.25        /*временной интервал после которого
                      взгляд будет приближен */
var.running = true
}
if (HeldDown(Joystick1.Button7, var.t)) { /* если время нажатия
                                 больше 0.25с, то выполняется */
var.b7HeldDown = true      /* прильнуть к прицелу и
                           кривые отклика по 50% */
PPJoy1.Digital4 = Joystick1.Button7 /*кнопка "смотреть через прицел"
                                     нажата, переключения ещё нет */
}
if (released(Joystick1.Button7)) { //если  кнопка джоя отпущена то

var.b7HeldDown = false /* выполняется команда "широкоугольный обзор"
                           и кривые отклика по 100% */
PPJoy1.Digital4 = false  /* кнопка "смотреть через прицел" отпущена,
                             переключение произошло */
}

// Взгляд по центру при нажатии кнопки джоя № 5

  if ( pressed(Joystick1.Button5) ) {  /*назначить в управление фритрека на функцию центр
  клавишу "Н" без фиксации*/
    Key.H = true
    wait(200 ms)
    Key.H = false
}


// Управление шагом - газом совмещённое с дырчем
var.int = round(MapRange(-Joystick1.RZ, -1, 1, 0, 220))
if ( INRANGE (var.int, 0, 10 ) ) {
PPJoy1.analog3 =  -1.00
playsound "d:\sounds\chimes"
wait(500 ms)
}

if ( INRANGE (var.int, 30, 40 ) ) {
PPJoy1.analog3 =  1.00
PPJoy1.analog4 =  1.00
}

if ( INRANGE (var.int, 60, 70 ) ) {
PPJoy1.analog3 =  1.00
PPJoy1.analog4 =  0.45
}

if ( INRANGE (var.int, 90, 100 ) ) {
PPJoy1.analog3 =  0.00
PPJoy1.analog4 =  0.09
}

if ( INRANGE (var.int, 120, 130 ) ) {
PPJoy1.analog3 =  0.60
PPJoy1.analog4 =  -0.44

}
if ( INRANGE (var.int, 150, 160 ) ) {
PPJoy1.analog3 =  1.00
PPJoy1.analog4 =  -0.82
}

if ( INRANGE (var.int, 180, 190  ) ) {
PPJoy1.analog3 =  1.00
PPJoy1.analog4 =  -1.00
}

if ( INRANGE (var.int, 210, 220 ) ) {
PPJoy1.analog3 =  -1.00
playsound "d:\sounds\chimes"
wait(500 ms)
}

// Фиксированная очередь


  if ( pressed(Joystick1.Button1) ) {  //при нажатии кнопки джоя № 1
    PPJoy1.Digital0 = true
    wait(230 ms)                       //длительность очереди в мс
    PPJoy1.Digital0 = false
 }
  if ( pressed(Joystick1.Button2) ) { //при нажатии кнопки джоя № 2

    PPJoy1.Digital1 = true            //длительность очереди в мс
    wait(250 ms)
    PPJoy1.Digital1 = false
 }

 Key.NUMPAD1 = PPJoy1.Digital0
 Key.NUMPAD2 = PPJoy1.Digital1
//в ПУ  назначить на клавиши "NUMPAD1" и "NUMPAD2" нужное оружие


//Управление радиатором  кнопка джоя № 9
if (!var.running) { //
var.t = 0.235       //
var.running = true  //
}
if (HeldDown(Joystick1.Button9, var.t)) {
var.b9HeldDown = true
PPJoy1.Digital12 = Joystick1.Button9
}else if ( pressed(Joystick1.Button9))  {
    PPJoy1.Digital13 = true
    wait(230 ms)
    PPJoy1.Digital13 = false
 }
  if (released(Joystick1.Button9)) {
var.b1HeldDown = false
PPJoy1.Digital12 = false
PPJoy1.Digital13 = false
}
if ( pressed(PPJoy1.Digital12) ) {
PPJoy1.analog7 = 0.5
}
if ( pressed(PPJoy1.Digital13) ) {
PPJoy1.analog7 =1.0
}



// Управление закрылками
   if ( pressed(Joystick1.Button3) ) {  // уборка кнопка джоя № 3
    Key.F = true                         // в ПУ клавиша F
    wait(250 ms)
    Key.F = false
    PPJoy1.analog6 = PPJoy1.analog6 -0.3
   }
    if ( pressed(Joystick1.Button4) ) {  // выпуск кнопка джоя № 4
    Key.V = true                          // в ПУ клавиша V 
    wait(250 ms)
    Key.V = false
    PPJoy1.analog6 = PPJoy1.analog6 +0.3
   }

//Сигнализация выпуска закрылков

var.int = round(MapRange(PPJoy1.analog6, 0, 1, 0, 100))
if ( INRANGE (var.int, 05, 100 ) ) {
playsound "d:\sounds\ding"
wait(500 ms)

}

// Управление уборкой и выпуском шасси в том чиcле и вручную при
// нажатии кнопки джоя № 8, кратковременное - уборка, длительное -выпуск
if (!var.running) {
var.t = 0.235
var.running = true
}
if (HeldDown(Joystick1.Button8, var.t)) {
var.b8HeldDown = true
PPJoy1.Digital10 = Joystick1.Button8
}else if ( pressed(Joystick1.Button8))  {
    PPJoy1.Digital11 = true
    wait(230 ms)
    PPJoy1.Digital11 = false
 }
  if (released(Joystick1.Button8)) {
var.b1HeldDown = false
PPJoy1.Digital10 = false
PPJoy1.Digital11 = false
}
 if ( pressed(PPJoy1.Digital10) ) {
Key.Y = true
    wait(50 ms)
    Key.Y = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
      Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
     Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
      Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
    Key.L = true
    wait(50 ms)
    Key.L = false
}


if ( pressed(PPJoy1.Digital11) ) {
    Key.G = true
    wait(50 ms)
    Key.G = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false
    Key.K = true
    wait(50 ms)
    Key.K = false


}

 

Link to post
Share on other sites
 
 

И.так., продолжим.

Я вообще то думал давать инфу по блочно, т.е. по каждой функции отдельно, но вышло вот так.

В принципе, что в лоб, что по лбу, можно теперь скрипт разбирать на цитаты.

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

И поскольку невозможно, используя одну кнопку , обойти первый цикл  (уборку), т.е. уборка включается и при первой,  и при второй инициализации, то алгоритм построен на том, что второй цикл (выпуск) при инициализации, идет параллельно с первым,  т.е. команды "убрать"- "выпустить" как бы компенсируют друг друга (на одно действие "убрать" следует действие "выпустить")., но за счёт более продолжительного цикла "выпустить", он перевешивает цикл уборки..

Link to post
Share on other sites
 
В 10.12.2017 в 22:19, =SPb=Electric сказал:

Ждем дальнейшего описания.

Интересует: как присвоить несколько осей на одну ось джойстика. По нажатию кнопки (например)

Или как присвоить оси джойстика к виртуальному. Что то недопонимаю.

Рассмотрим по порядку.

Присвоение осей  реального джоя виртуальному, в этих строчках

PPJoy1.analog0 = Joystick1.X
PPJoy1.analog1 = Joystick1.Y
PPJoy1.analog2 = Joystick1.Z

Означает, что оси виртуального джоя PPJoy1.analog№№ будут исполняться осями реального джоя Joystick1.№№

Соответственно в конфиге, что находится в папке User должно быть так;

AXE_RX JoystickDevice1=pitch
AXE_RY JoystickDevice1=-radiator
AXE_RZ JoystickDevice1=-power
AXE_X JoystickDevice1=aileron
AXE_Y JoystickDevice1=-elevator
AXE_Z JoystickDevice1=rudder

AXE_Y JoystickDevice2=trimrudder
AXE_RX JoystickDevice2=-trimelevator
AXE_X JoystickDevice2=trimaileron

Конкретные оси подчёркнуты.

Обратите внимание на номера девайсов.

  JoystickDevice1 это первый виртуальный джойстик.

JoystickDevice2 это второй виртуальный джойстик.

А вот настоящий джойстик (он обозначался бы так:  JoystickDevice0), вообще не прописывается.

Одним словом, назначать оси на виртуальные устройства, придётся вручную, средствами самой игры не получится, так как игра их не увидит.

Теперь как назначить несколько виртуальных осей на одну.

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

В нашем случае это  Joystick1.RZ- ось тяги реального джоя.

Она может быть как у нас, не прописана в конфиге, либо может быть прописана.

Можно сделать вот так:

PPJoy1.analog3 = Joystick1.RZ
PPJoy1.analog4 = Joystick1.RZ  

Т.е. напрямую повесить виртуальные оси на реальную.

Либо так:

PPJoy1.analog3 = PPJoy1.analog5

PPJoy1.analog4 =  PPJoy1.analog5

Т.е. назначить виртуальные оси на виртуальную же ось.

 

 

Link to post
Share on other sites
 

Ну, что, поехали по-блочно.

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

Виртуальный тумблер базируется на виртуальной же кнопке   №9 (PPJoy1.Digital9) , виртуального джоя №1.

Имеет два состояния: включено (PPJoy1.Digital9 ==1) и выключено (это состояние подразумевается логическим оператором (else) (иначе), т.е.  включено иначе выключено.

Виртуальным тумблером управляет кнопка №12  реального джоя (Joystick1.Button12), путем последовательных нажатий.

Первое нажатие включает тумблер, второе выключает, ещё раз напомню по умолчанию тумблер выключен.

 

 

// Оси джойстика и включатель осей X Y Z при нажатии кнопки джоя № 12

if ( PPJoy1.Digital9== 1)  {//кн №9 виртуального джоя №1 нажата, тогда:
PPJoy1.analog0 = false      //оси виртуальног джоя №1 отвязаны от осей 
PPJoy1.analog1 = false      // реального джоя
PPJoy1.analog2 =  false
}else {   // иначе (т.е. еслиPPJoy1.Digital9) не нажата, тогда:  
PPJoy1.analog0 = Joystick1.X // оси виртуальног джоя 
PPJoy1.analog1 = Joystick1.Y // привязаны к осям 
PPJoy1.analog2 = Joystick1.Z //реального (состояние по умолчанию)

}

if (  pressed(Joystick1.Button12) ) { // включатель осей X Y Z
toggle( PPJoy1.Digital9 ) // работает путём последовательного нажатия кн №12 реального джоя
}

 

Edited by Kap
Link to post
Share on other sites
 

 

 

 

//Список задействованных и свободных осей

//PPJoy1.analog0 = Joystick1.X
//PPJoy1.analog1 = Joystick1.Y
//PPJoy1.analog2 = Joystick1.Z
//PPJoy1.analog3
//PPJoy1.analog4   Шаг
//PPJoy1.analog5   Тяга
//PPJoy1.analog6   Опорная ось сигнализации закрылков
//PPJoy1.analog7  Радиатор

//PPJoy2.analog0   Триммер Элеронов
//PPJoy2.analog1   Триммер РВ
//PPJoy2.analog2   Триммер РН
//PPJoy2.analog3
//PPJoy2.analog4
//PPJoy2.analog5
//PPJoy2.analog6
//PPJoy2.analog7

// Назначаем кнопки


PPJoy1.Digital4 = Joystick1.Button7 

Список осей .
Этот блок не является командным, он нужен для контроля, что и куда назначено, т.е. для удобства и без него можно обойтись.
Назначение кнопок.
В данном случае назначена всего одна кнопка, т.е. на реальную кн № 7( Joystick1.Button7), назначена виртуальная №4 (PPJoy1.Digital4).
Подобным образом на реальную кнопку, можно присвоить любую виртуальную либо клавишу клавиатуры.

Link to post
Share on other sites
 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...