Модераторы: THandle, bems
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать простенький скрипт для игры ИЛ2 
:(
    Опции темы
PanzerFox
  Дата 5.10.2013, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.10.2013

Репутация: нет
Всего: нет



У меня есть скрипт для программы GlovePie. Программа позволяет управлять самолетом мышью, как ждостиком.
Есть оси Х и У. Мышь движется по ним, это передается в игру, соответственно я двигаю мышью. словно ручкой управления самолетом, штурвалом, если проще.
Но на этиже оси повешаны еще по оси. Оси триммеров. Они имеют одиннаковые значения. 
Мне нужно сделать так, чтобы оси триммеров не использовались до нажания кнопки. После нажатия использовались. Сейчас они используются всегда.
Еще одно: можно ли сделать так, чтобы ось триммера была не равна значению оси руля, а была ниже на конкретное значение? Что-то типа "если х = 10, то х1 = (х-5), если х=6, то х1=(х-5)".


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


// ============================================================
// Пример эмуляции джойстика и трекира с помощью мыши и клавиатуры

// ============================================================
// Для Ил-2 необходимо через "conf.ini" включить использование системного
// курсора (mouseUse=1), джойстика (joyUse=1) и трекира (trackIRUse=1). Обзор
// мышью нужно оставить включенным (SensitivityX=1.0 и SensitivityY=1.0), чтобы
// сохранить возможность управления турельными пулеметами при переключении на
// задних стрелков. Ил-2 автоматически отвязывает обзор от мыши (при сохранении
// мышиного управления турельными пулеметами) после каждого изменения состояния
// трекира.
//
// ...
// [rts]
// mouseUse=1
// joyUse=1
// trackIRUse=1
// ...
// [rts_mouse]
// SensitivityX=1.0
// SensitivityY=1.0
// ...
//
// Для Ил-2 в настройках управления необходимо не использовать клавиши [Q], [W],
// [E], [A], [S], [D], так как в скрипте они используются для управления
// клавотрекиром (в режиме пилотирования) и клаводжойстиком (во вспомогательном
// режиме).
//
// Для полноценного обзора с помощью клавотреикра в Ил-2 рекомендуется
// использовать следующие настройки кнопок и осей:
// - "Оружие 1+2" - кнопка [Пробел]
// - "Сменить сменить угол зрения" - кнопка [C]
// - "Смотреть через прицел. Вкл/Выкл" - кнопка [X]
// ...
// - "Элероны" - Ось X
// - "Руль высоты" - Ось Y
// - "Тяга" - Ось Z
// - "Руль высоты" - Вращение по оси Z
// - "Приближение" - Скольжение по оси U
//
// Для Ил-2 через "settings.ini" в подкаталоге "users\1\" можно совместить рули
// с соответствующими триммерами синхронно на одной оси (для бомбардировщиков
// важен только триммер руля направления на оси RZ, поскольку он позволяет
// доворачить по курсу в автогоризонте):
//
// ...
// [HotKey aircraftView]
// Space=Weapon01
// X=cockpitAim
// C=fovSwitch
// ...
// [HotKey move]
// JoystickDevice0 AXE_X=aileron
// JoystickDevice0 AXE_Y=elevator
// JoystickDevice0 AXE_Z=power
// JoystickDevice0 AXE_RZ=rudder
// JoystickDevice0 AXE_U=zoom
// AXE_X JoystickDevice0=trimaileron
// AXE_Y JoystickDevice0=trimelevator
// AXE_RZ JoystickDevice0=trimrudder
// ...
//
// ============================================================
// [F9] Режим пилотирования (клавотрекир + мышеджойстик)
// ============================================================
// При отжатой [ALT] любая мышь управляет только джойстиком
// (оси трекира сохраняют свое значение или управляются с клавиатуры)
// При зажатой [ALT] любая мышь управляет только трекиром
// (оси джойстика сохраняют свое значение, системный курсор свободен)
//
// В режиме пилотирования доступен клавотрекир, заточенный под левую руку:
// Комбинации [Q, W, E, A, S, D] - быстрый осмотр с клавиатуры (с автовозвратом)
// [SHIFT] + [Q, W, E, A, S, D] - плавный осмотр с клавиатуры (без автовозврата)
// [SHIFT] + [Q] + [E] - центровка по курсу и тангажу трекира
// Сдвиг головы в сторону поворота выполняется автоматически
//
// ============================================================
// [F10] Вспомогательный режим (клаводжойстик + мышь)
// ============================================================
// При отжатой [ALT] любая мышь управляет курсором, турельными пулеметами и т.п.
// (оси джойстика и трекира сохраняют свое значение, системный курсор свободен)
// При зажатой [ALT] любая мышь управляет только трекиром
// (оси джойстика сохраняют свое значение, системный курсор свободен)
//
// Во вспомогательном режиме доступен клаводжойстик, заточенный под левую руку:
// [A-D], [W-S], [Q-E] - быстрое дерганье элеронов, РВ и РН (с автовозвратом)
// [SHIFT] + [A-D], [W-S], [Q-E] - плавное подруливание (без автовозврата)
// [SHIFT] + [Q] + [E] - центровка элеронов, РВ и РН джойстика
//
// ============================================================
// [F11] Режим полета задом наперед (инвертированный клаводжойстик + мышь)
// ============================================================
// Данный режим полностью аналогичен вспомогательному режиму, но управление
// элеронами и рулями высоты на клаводжойстике инвертировано для удобства
// подруливания от лица заднего стрелка при полете задом как от лица пилота
// при полете вперед.
//
// ============================================================
// Управление мышеджойстиком (только в режиме пилотирования)
// ============================================================
// Оси "X Axis" (элероны) и "Z Rotation" (руль направления, РН) джойстика:
// Управляются горизонтальным движением любой мыши (при отжатой [ALT])
// При зажатой ЛКМ управляются только элероны без руля направления
// [мышь влево/вправо = РУС влево/вправо = крен влево/вправо]
// При зажатой ПКМ управляются только руля направления без элеронов
// [мышь влево/вправо = педали влево/вправо = рысканье влево/вправо]
// Центровка визуальная по горизонтальному положению курсора-крестика на экране,
// а при необходимости откалибровать оси точно по центру можно нажать [F12].
//
// Ось "Y Axis" (руль высоты, РВ) джойстика:
// Управляется вертикальным движением любой мыши (при отжатой [ALT])
// [мышь на себя = РУС на себя = увеличение угла атаки]
// Центровка визуальная по вертикальному положению курсора-крестика на экране,
// а при необходимости откалибровать оси точно по центру можно нажать [F12].
//
// Ось "Z Axis" (рычаг управления двигателем, РУД) джойстика:
// Управляется колесом прокрутки любой мыши (при отжатой ALT)
// При отжатой ПКМ управляется с шагом 5/110 (22 деления)
// При зажатой ПКМ управляется с шагом 25/110 (4-5 делений)
// Центровка РУД не нужна, в Ил-2 тяга от 0% до 110% пишется текстом
//
// ============================================================
// Управление мышетрекиром (во всех режимах при зажатой [ALT])
// ============================================================
// Ось "Yaw" (курс влево-вправо) трекира:
// Управляется горизонтальным движением мыши (при зажатой [ALT])
//
// Ось "Pitch" (тангаж вверх-вниз) трекира:
// Управляется вертикальным движением мыши (при зажатой [ALT])
//
// Ось "U"/"Slider" (скольжение) джойстика:
// Управляется колесом прокрутки любой мыши (при зажатой ALT)
// При отжатой ПКМ управляется с шагом 5/110 (22 деления)
// При зажатой ПКМ управляется с шагом 25/110 (4-5 делений)
// Центровка скольжения не нужна, если использовать эту ось для зума

// Если выполняется первая итерация скрипта (starting = 1) при запуске
// или зажата клавиша [F12] (Keyboard.F12 = 1) для калибровки центра осей,
// то инициализируем параметры скрипта и центруем оси джойстика и трекира
if ((starting = 1) or (Keyboard.F12 = 1)) then begin
    // ============================================================
    // Настраиваемые параметры, которые можно изменить по желанию
    // ============================================================

    // Указываем желаемое количество итераций в секунду
    PIE.FrameRate = 250;

    // Указываем желаемую амплитуду движения мыши (в сантиметрах по горизонтали
    // и по вертикали), которая будет соответствовать полному ходу осей
    // джойстика и трекира, а так же полному ходу скорректированной позиции
    // курсора относительно экрана при визуальной центровке осей джойстика.
    // Для повышения разрешения и точности осей джойстика и трекира необходимо
    // указать увеличенную амплитуду движения мышью (или завышенный dpi).
    var.JoystickCentimetersDX := 5.08;
    var.JoystickCentimetersDY := 2.85;
    var.TrackIRCentimetersDX := 5.08;
    var.TrackIRCentimetersDY := 2.85;

    // Указываем реальный DPI сенсора мыши (количество точек на линейный дюйм).
    // Возможные значения DPI: от 300 до 4000 (зависит от сенсора мыши).
    // Для повышения разрешения и точности осей джойстика и трекирe необходимо
    // использовать мышь с высоким dpi (или увеличить амплитуду движения мыши).
    var.DotsPerInch := 1000.0;

    // Указываем желаемое количество делений колеса прокрутки, которое будет
    // соответствовать полному ходу осей Z (РУД) и U (скольжение) джойстика.
    // Для управления тягой с шагом 5% в диапазоне от 0% до 110% необходимо
    // указать 22 деления (110% / 5%). Для повышения разрешения и точности осей
    // Z и U необходимо указать увеличенное число делений колеса прокрутки.
    var.PowerClicks := 22;
    var.ZoomClicks := 24;

    // Указываем желаемое количество секунд, которое будет соответствовать
    // полному ходу осей при управлении ими с клавиатуры в режиме плавного
    // триммирования без автовозврата.
    var.KeyDeltaTime := 2.0;

    // ============================================================
    // Вычисляемые параметры
    // ============================================================

    // Вычисляем разрешение осей джойстика и трекира
    // (2000 точек при 2-ух дюймовой амплитуде на мышке с 1000 dpi)
    var.JoystickDotsDX := (var.JoystickCentimetersDX / 2.54) * var.DotsPerInch;
    var.JoystickDotsDY := (var.JoystickCentimetersDY / 2.54) * var.DotsPerInch;
    var.TrackIRDotsDX := (var.TrackIRCentimetersDX / 2.54) * var.DotsPerInch;
    var.TrackIRDotsDY := (var.TrackIRCentimetersDY / 2.54) * var.DotsPerInch;

    // Вычисляем чувствительность мышеджойстика
    // (зависит от амплитуды движения и DPI сенсора мыши)
    var.MouseSensX := (2.0 / var.JoystickDotsDX);
    var.MouseSensY := (2.0 / var.JoystickDotsDY);
    var.MouseSensZ := (2.0 / var.PowerClicks);
    var.MouseSensZoom := (2.0 / var.ZoomClicks);

    // Вычисляем чувствительность мышетрекира
    // (зависит от амплитуды движения и DPI сенсора мыши)
    var.MouseSensYaw := (360.0 / var.TrackIRDotsDX);
    var.MouseSensPitch := (180.0 / var.TrackIRDotsDY);

    // Вычисляем чувствительность клаводжойстика за одну итерацию
    // (зависит от количества итераций в секунду)
    var.KeySensX = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensY = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensZ = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensRZ = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensZoom = (2.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));

    // Вычисляем чувствительность клавотрекира за одну итерацию
    // (зависит от количества итераций в секунду)
    var.KeySensYaw = (360.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));
    var.KeySensPitch = (180.0 / (var.KeyDeltaTime * RemoveUnits(PIE.FrameRate)));

    // Переключаемся в режим пилотирования (клавотрекир + мышеджойстик)
    var.Mode = 0;

    // Инициализируем триммирование осей джойстика
    var.TrimHorizontal := 0.0;
    var.TrimVertical := 0.0;
    var.TrimX := 0.0;
    var.TrimY := 0.0;
    var.TrimZ := 0.0;
    var.TrimRZ := 0.0;
    var.TrimZoom := 0.0;

    // Инициализируем триммирование осей трекира
    var.TrimYaw := 0.0;
    var.TrimPitch := 0.0;
    var.TrimRoll := 0.0;

    // Триммируем первые 8 осей джойстика
    PPJoy.Analog0 := var.TrimX;
    PPJoy.Analog1 := var.TrimY;
    PPJoy.Analog2 := var.TrimZ;
    PPJoy.Analog3 := var.TrimRZ;
    PPJoy.Analog4 := var.TrimZoom;
    PPJoy.Analog5 := 0.0;
    PPJoy.Analog6 := 0.0;
    PPJoy.Analog7 := 0.0;

    // Отжимаем первые 8 кнопок джойстика
    PPJoy.Digital0 := 0;
    PPJoy.Digital1 := 0;
    PPJoy.Digital2 := 0;
    PPJoy.Digital3 := 0;
    PPJoy.Digital4 := 0;
    PPJoy.Digital5 := 0;
    PPJoy.Digital6 := 0;
    PPJoy.Digital7 := 0;

    // Триммируем 6 осей трекира
    FakeTrackIR.Yaw = var.TrimYaw;
    FakeTrackIR.Pitch = var.TrimPitch;
    FakeTrackIR.Roll = var.TrimRoll;
    FakeTrackIR.X = 0.0;
    FakeTrackIR.Y = 0.0;
    FakeTrackIR.Z = 0.0;
end else begin
    // После нажатия клавиши [F9] переключаемся в режим пилотирования
    // После нажатия клавиши [F10] переключаемся во вспомогательный режим
    // После нажатия клавиши [F11] переключаемся в режим полета задом наперед
    // Клавиша может быть отжата, но режим запоминается для следующих итераций
    if (Key.F9 = 1) then var.Mode = 0;
    if (Key.F10 = 1) then var.Mode = 1;
    if (Key.F11 = 1) then var.Mode = 2;
    
    // Считываем точные изменения осей мыши через DirectInput
    // (используем RemoveUnits, чтобы единицы измерения не конвертировались)
    var.MouseDeltaX = RemoveUnits(Delta(Mouse.DirectInputX));
    var.MouseDeltaY = RemoveUnits(Delta(Mouse.DirectInputY));
    var.MouseDeltaZ = (RemoveUnits(Delta(Mouse.DirectInputZ)) / 120);
    var.MouseButton1 = RemoveUnits(Mouse.Button1);
    var.MouseButton2 = RemoveUnits(Mouse.Button2);

    // Если активен режим пилотирования и отжата клавиша [ALT],
    // то любая мышь управляет джойстиком
    if ((var.Mode = 0) and (Key.Alt = 0)) then begin
        // ============================================================
        // Эмулируем джойстик мышью (мышеджойстик)
        // ============================================================

        // Если мышь сдвинулась по горизонтали, то двигаем оси X и RZ
        // (при неподвижной мыши оси X и RZ сохранят свое значение)
        if (var.MouseDeltaX <> 0) then begin
            // Суммируем относительные сдвиги мыши по горизонтали
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimHorizontal := (var.TrimHorizontal + var.MouseSensX * var.MouseDeltaX);
            if (var.TrimHorizontal < -1.0) then var.TrimHorizontal := -1.0;
            if (var.TrimHorizontal > 1.0) then var.TrimHorizontal := 1.0;

            // Если отжата правая кнопка мыши (ПКМ),
            // то ось X мыши управляет осью X (элероны) джойстика
            // (при зажатой ПКМ элероны сохраняют свое положение)
            if (var.MouseButton2 = 0) then var.TrimX := var.TrimHorizontal;

            // Если отжата левая кнопка мыши (ЛКМ),
            // то ось X мыши управляет осью RZ (руль направления) джойстика
            // (при зажатой ЛКМ руль направления сохраняет свое положение)
            if (var.MouseButton1 = 0) then var.TrimRZ := var.TrimHorizontal;
        end;

        // Если мышь сдвинулась по вертикали, то двигаем ось Y (руль высоты)
        // (при неподвижной мыши ось Y сохранит свое значение)
        if (var.MouseDeltaY <> 0) then begin
            // Суммируем относительные сдвиги мыши по вертикали
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimVertical := (var.TrimVertical + var.MouseSensY * var.MouseDeltaY);
            if (var.TrimVertical < -1.0) then var.TrimVertical := -1.0;
            if (var.TrimVertical > 1.0) then var.TrimVertical := 1.0;

            var.TrimY := var.TrimVertical;
        end;

        // Если колесо прокрутки сдвинулось, то двигаем ось Z (РУД)
        // (при неподвижном колесе прокрутке ось Z сохранит свое значение)
        if (var.MouseDeltaZ <> 0) then begin
            // При зажатой ПКМ регулируем тягу в 5 раз быстрее
            if (var.MouseButton2 = 1) then var.MouseDeltaZ = 5.0 * var.MouseDeltaZ;

            // Суммируем относительные повороты колеса прокрутки
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimZ := (var.TrimZ + var.MouseSensZ * var.MouseDeltaZ);
            if (var.TrimZ < -1.0) then var.TrimZ := -1.0;
            if (var.TrimZ > 1.0) then var.TrimZ := 1.0;
        end;

        // ============================================================
        // Выполняем автоматический сдвиг курсора для визуальной центровки
        // ============================================================

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

        // Если мышь сдвинулась, то корректируем позицию курсора для визуальной центровки
        if ((var.MouseDeltaX <> 0) or (var.MouseDeltaY <> 0)) then begin
            // Отображаем абсолютную позицию осей джойстика из диапазона [-1..+1]
            // в абсолютную позицию курсора-крестика внутри основного экрана
            Mouse.CursorPosX := MapRange(var.TrimHorizontal, -1, 1, Screen.Left, Screen.Right);
            Mouse.CursorPosY := MapRange(var.TrimVertical, -1, 1, Screen.Top, Screen.Bottom);

            // Раскомментируйте эти строки для центровки курсора-крестика
            // внутри второго экрана (при наличии нескольких мониторов)
            //Mouse.CursorPosX := MapRange(var.TrimHorizontal, -1, 1, Screen2.Left, Screen2.Right);
            //Mouse.CursorPosY := MapRange(var.TrimVertical, -1, 1, Screen2.Top, Screen2.Bottom);

            // Раскомментируйте эти строки для центровки курсора-крестика
            // внутри расширенного рабочего стола на несколько экранов
            //Mouse.CursorPosX := MapRange(var.TrimHorizontal, -1, 1, Screen.DesktopLeft, Screen.DesktopRight);
            //Mouse.CursorPosY := MapRange(var.TrimVertical, -1, 1, Screen.DesktopTop, Screen.DesktopBottom);
        end;
    // Если в любом режиме зажата клавиша [ALT],
    // то любая мышь управляет трекиром
    end else if (Key.Alt = 1) then begin
        // ============================================================
        // Эмулируем трекир мышью (мышетрекир)
        // ============================================================

        // Если мышь сдвинулась по горизонтали, то двигаем ось Yaw (курс)
        // (при неподвижной мыши ось Yaw сохраняет свое значение)
        if (var.MouseDeltaX <> 0) then begin
            // Суммируем относительные сдвиги мыши по горизонтали
            // в масштабированное абсолютное значение в диапазоне [-180..+180]
            var.TrimYaw := (var.TrimYaw + var.MouseSensYaw * var.MouseDeltaX);
            if (var.TrimYaw < -180.0) then var.TrimYaw := (var.TrimYaw + 360.0);
            if (var.TrimYaw > 180.0) then var.TrimYaw := (var.TrimYaw - 360.0);
        end;

        // Если мышь сдвинулась по горизонтали, то двигаем ось Pitch (тангаж)
        // (при неподвижной мыши ось Pitch сохраняет свое значение)
        if (var.MouseDeltaY <> 0) then begin
            // Суммируем относительные сдвиги мыши по вертикали
            // в масштабированное абсолютное значение в диапазоне [-180..+180]
            var.TrimPitch := (var.TrimPitch - var.MouseSensPitch * var.MouseDeltaY);
            if (var.TrimPitch < -180.0) then var.TrimPitch := (var.TrimPitch + 360.0);
            if (var.TrimPitch > 180.0) then var.TrimPitch := (var.TrimPitch - 360.0);
        end;

        // Если колесо прокрутки сдвинулось, то двигаем ось U джойстика
        // (при неподвижном колесе прокрутке ось U сохраняет свое значение)
        if (var.MouseDeltaZ <> 0) then begin
            // При зажатой ПКМ регулируем ось U джойстика в 5 раз быстрее
            if (var.MouseButton2 = 1) then var.MouseDeltaZ = 5.0 * var.MouseDeltaZ;

            // Суммируем относительные сдвиги мыши по вертикали
            // в масштабированное абсолютное значение в диапазоне [-1..+1]
            var.TrimZoom := (var.TrimZoom - var.MouseSensZoom * var.MouseDeltaZ);
            if (var.TrimZoom < -1.0) then var.TrimZoom := -1.0;
            if (var.TrimZoom > 1.0) then var.TrimZoom := 1.0;
        end;

        // ============================================================
        // Отключаем автоматический сдвиг курсора
        // ============================================================

        // В режиме мышетрекира (при зажатой клавише [ALT]) любая мышь управляет
        // трекиром, а оси X, Y и RZ джойстика сохраняют свое фиксированное
        // положение (которое было перед зажатием [ALT]). Корректировать позицию
        // курсора в режиме мышетрекира нет никакой надобности, пусть его
        // позиция меняется с системными настройками скорости и ускорения.

        // В режиме мышеджойстика (после отжатия клавиши [ALT]) любая мышь снова
        // начнет управлять джойстиком и снова включится визуальная центровка,
        // так что системный курсор автоматически вернется в ту позицию внутри
        // экрана, которая соответствует текущей позиции осей джойстика.
    end;

    // ============================================================
    // Режим пилотирования (клавотрекир + мышеджойстик)
    // ============================================================
    if (var.Mode = 0) then begin
        // В режиме пилотирования клаводжойстик не используется,
        // поэтому используем текущее затриммированное положение джойстика
        var.JoyX := var.TrimX;
        var.JoyY := var.TrimY;
        var.JoyZ := var.TrimZ;
        var.JoyRZ := var.TrimRZ;

        // ============================================================
        // Эмулируем трекир клавиатурой (клавотрекир)
        // ============================================================

        // Если зажата клавиша [SHIFT] на клавиатуре,
        // то плавно дублируем мышетрекир с клавиатуры (без автовозврата)
        if (Key.Shift) then begin
            // [SHIFT] + [A] - курс левее
            // [SHIFT] + [D] - курс правее
            if (Key.A) then var.TrimYaw := (var.TrimYaw - var.KeySensYaw);
            if (Key.D) then var.TrimYaw := (var.TrimYaw + var.KeySensYaw);
            if (var.TrimYaw < -180.0) then var.TrimYaw := (var.TrimYaw + 360.0);
            if (var.TrimYaw > 180.0) then var.TrimYaw := (var.TrimYaw - 360.0);

            // [SHIFT] + [W] - тангаж выше
            // [SHIFT] + [S] - тангаж ниже
            if (Key.W) then var.TrimPitch := (var.TrimPitch + var.KeySensPitch);
            if (Key.S) then var.TrimPitch := (var.TrimPitch - var.KeySensPitch);
            if (var.TrimPitch < -180.0) then var.TrimPitch := (var.TrimPitch + 360.0);
            if (var.TrimPitch > 180.0) then var.TrimPitch := (var.TrimPitch - 360.0);

            // [SHIFT] + [Q] - угол обзора шире
            // [SHIFT] + [E] - угол обзора уже
            if (Key.Q) then var.TrimZoom := (var.TrimZoom + var.KeySensZoom);
            if (Key.E) then var.TrimZoom := (var.TrimZoom - var.KeySensZoom);
            if (var.TrimZoom < -1.0) then var.TrimZoom := -1.0;
            if (var.TrimZoom > 1.0) then var.TrimZoom := 1.0;

            // [SHIFT] + [Q] + [E] - центовка по курсу и тангажу трекира
            if ((Key.Q) and (Key.E)) then begin
               var.TrimYaw := 0.0;
               var.TrimPitch := 0.0;
               var.TrimRoll := 0.0;
            end;

            // Используем текущее затриммированное положение трекира
            var.JoyU := var.TrimZoom;

            var.ViewYaw := var.TrimYaw;
            var.ViewPitch := var.TrimPitch;
            var.ViewRoll := var.TrimRoll;
        // Если отжата клавиша [SHIFT] на клавиатуре,
        // то выполняем быстрый осмотр направлений с клавиатуры (с автовозвратом)
        end else begin
            // Выполняем автовозврат в затриммированное положение трекира
            var.JoyU := var.TrimZoom;

            var.ViewYaw := var.TrimYaw;
            var.ViewPitch := var.TrimPitch;
            var.ViewRoll := var.TrimRoll;

            if (Key.W) then begin
                // [W] + [Q] + [E] - влево 0, вверх 67
                if ((Key.Q) and (Key.E)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 67.5;
                // [W] + [Q] - влево 45, вверх 45
                end else if (Key.Q) then begin
                    var.ViewYaw := -45.0;
                    var.ViewPitch := 45.0;
                // [W] + [E] - вправо 45, вверх 45
                end else if (Key.E) then begin
                    var.ViewYaw := 45.0;
                    var.ViewPitch := 45.0;
                // [W] + [A] + [D] - влево 0, вверх 90
                end else if ((Key.A) and (Key.D)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 90.0;
                // [W] + [A] - влево 180, вверх 45
                end else if (Key.A) then begin
                    var.ViewYaw := -179.0;
                    var.ViewPitch := 45.0;
                // [W] + [D] - вправо 180, вверх 45
                end else if (Key.D) then begin
                    var.ViewYaw := 179.0;
                    var.ViewPitch := 45.0;
                // [W] + [S] - влево 0, вверх 45
                end else if (Key.S) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 45.0;
                // [W] - вправо 0, вверх 90
                end else begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 90.0;
                end;
            end else if (Key.S) then begin
                // [S] + [Q] + [E] - влево 0, вверх 0
                if ((Key.Q) and (Key.E)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 0.0;
                // [S] + [Q] - влево 22, вверх 45
                end else if (Key.Q) then begin
                    var.ViewYaw := -22.5;
                    var.ViewPitch := 45.0;
                // [S] + [E] - вправо 22, вверх 45
                end else if (Key.E) then begin
                    var.ViewYaw := 22.5;
                    var.ViewPitch := 45.0;
                // [S] + [A] + [D] - влево 0, вниз 22
                end else if ((Key.A) and (Key.D)) then begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := -22.5;
                // [S] + [A] - влево 90, вверх 0
                end else if (Key.A) then begin
                    var.ViewYaw := -90.0;
                    var.ViewPitch := 0.0;
                // [S] + [D] - вправо 90, вверх 0
                end else if (Key.D) then begin
                    var.ViewYaw := 90.0;
                    var.ViewPitch := 0.0;
                // [S] - вправо 0, вверх 22
                end else begin
                    var.ViewYaw := 0.0;
                    var.ViewPitch := 22.5;
                end;
            // [Q] + [E] - влево 0, вверх 67
            end else if ((Key.Q) and (Key.E)) then begin
                var.ViewYaw := 0.0;
                var.ViewPitch := 22.0;
            // [A] + [D] - влево 0, вверх 0
            end else if ((Key.A) and (Key.D)) then begin
                var.ViewYaw := 0.0;
                var.ViewPitch := 0.0;
            end else if (Key.A) then begin
                // [A] + [E] - влево 90, вверх 45
                if (Key.E) then begin
                    var.ViewYaw := -90.0;
                    var.ViewPitch := 45.0;
                // [A] - влево 180, вверх 0
                end else begin
                    var.ViewYaw := -179.0;
                    var.ViewPitch := 0.0;
                end;
            end else if (Key.D) then begin
                // [D] + [Q] - вправо 90, вверх 45
                if (Key.Q) then begin
                    var.ViewYaw := 90.0;
                    var.ViewPitch := 45.0;
                // [D] - вправо 180, вверх 0
                end else begin
                    var.ViewYaw := 179.0;
                    var.ViewPitch := 0.0;
                end;
            // [Q] - влево 90, вверх 22
            end else if (Key.Q) then begin
                var.ViewYaw := -90.0;
                var.ViewPitch := 22.5;
            // [E] - вправо 90, вверх 22
            end else if (Key.E) then begin
                var.ViewYaw := 90.0;
                var.ViewPitch := 22.5;
            end;
        end;   
    // ============================================================
    // Вспомогательный режим (клаводжойстик + мышь)
    // ============================================================
    end else begin
        // Во вспомогательном режиме клавотрекир не используется,
        // поэтому используем текущее затриммированное положение трекира
        var.JoyU := var.TrimZoom;

        var.ViewYaw := var.TrimYaw;
        var.ViewPitch := var.TrimPitch;
        var.ViewRoll := var.TrimRoll;

        // ============================================================
        // Эмулируем джойстик клавиатурой (клаводжойстик)
        // ============================================================

        // В режиме полета задом наперед инвертируем управление элеронами и РВ
        var.ScaleXY = 1.0;
        if (var.Mode = 2) then var.ScaleXY = -1.0;

        // Если зажата клавиша [SHIFT] на клавиатуре,
        // то плавно дублируем мышеджойстик с клавиатуры (без автовозврата)
        if (Key.Shift) then begin
            // [SHIFT] + [A] - крен левее
            // [SHIFT] + [D] - крен правее
            if (Key.A) then var.TrimX := var.TrimX - var.KeySensX * var.ScaleXY;
            if (Key.D) then var.TrimX := var.TrimX + var.KeySensX * var.ScaleXY;
            if (var.TrimX < -1.0) then var.TrimX = -1.0;
            if (var.TrimX > 1.0) then var.TrimX = 1.0;

            // [SHIFT] + [W] - тангаж ниже
            // [SHIFT] + [S] - тангаж выше
            if (Key.W) then var.TrimY := var.TrimY - var.KeySensY * var.ScaleXY;
            if (Key.S) then var.TrimY := var.TrimY + var.KeySensY * var.ScaleXY;
            if (var.TrimY < -1.0) then var.TrimY = -1.0;
            if (var.TrimY > 1.0) then var.TrimY = 1.0;

            // [SHIFT] + [Q] - рысканье левее
            // [SHIFT] + [E] - рысканье правее
            if (Key.Q) then var.TrimRZ := var.TrimRZ - var.KeySensRZ;
            if (Key.E) then var.TrimRZ := var.TrimRZ + var.KeySensRZ;
            if (var.TrimRZ < -1.0) then var.TrimRZ = -1.0;
            if (var.TrimRZ > 1.0) then var.TrimRZ = 1.0;

            // [SHIFT] + [Q] + [E] - центовка элеронов, РВ и РН
            if ((Key.Q) and (Key.E)) then begin
               var.TrimX := 0.0;
               var.TrimY := 0.0;
               var.TrimRZ := 0.0;
            end;

            // Используем текущее затриммированное положение джойстика
            var.JoyX := var.TrimX;
            var.JoyY := var.TrimY;
            var.JoyZ := var.TrimZ;
            var.JoyRZ := var.TrimRZ;
        // Если отжата клавиша [SHIFT] на клавиатуре,
        // то выполняем быстрое дерганье осей джойстика (с автовозвратом)
        end else begin
            // Выполняем автовозврат в затриммированное положение джойстика
            var.JoyX := var.TrimX;
            var.JoyY := var.TrimY;
            var.JoyZ := var.TrimZ;
            var.JoyRZ := var.TrimRZ;

            // [A] - крен влево
            // [D] - крен вправо
            if (Key.A) then var.JoyX := -1.0 * var.ScaleXY;
            if (Key.D) then var.JoyX := 1.0 * var.ScaleXY;

            // [W] - тангаж вниз
            // [S] - тангаж вверх
            if (Key.W) then var.JoyY := -1.0 * var.ScaleXY;
            if (Key.S) then var.JoyY := 1.0 * var.ScaleXY;

            // [Q] - рысканье влево
            // [E] - рысканье влево
            if (Key.Q) then var.JoyRZ := -1.0;
            if (Key.E) then var.JoyRZ:= 1.0;
        end;
    end;


PM MAIL   Вверх
Akella
Дата 10.10.2013, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 7
Всего: 329



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle

Добро пожаловать в форум группы "Delphi".

В разделе разрешается:

  • Флудить (в приемлемых величинах)
  • Обсуждать модерирование данного раздела (но не его модератора)
  • Добавлять свои правила если они не противоречат существующим
  • Делать наезды на пешеходов***

Строго запрещено:

  • Размещать рекламу
  • Совершать оскорбления личностей
  • Материться
  • *** Пешеходами не являются (ко)модераторы, админы, участники клуба.

Если Вам понравилась атмосфера форума, заходите к нам чаще! Люблю, целую, вечно Ваш, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Форум группы: delphi | Следующая тема »


 




[ Время генерации скрипта: 0.1246 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.