DECORATE. Добавляем к оружию — отдачу.

Предисловие

Наше оружие coolGun из урока DECORATE. Делаем оружие., не ощущается как оружие, оно ощущается как какой-то игрушечный пистолет. Нет, той самой отдачи, которая присуща реальному оружию. В данном уроке, мы исправим эту проблему.

Добавляем вес, нашему оружию.

Замените стейт Fire, на следующий код:

Fire:
  CWEP B 2 offset(-1,0) {
    A_FireCustomMissile("blueProj");
    A_ZoomFactor(0.98);
    A_SetPitch(pitch-1.0);
    A_Recoil(0.5);
    A_FireCustomMissile("GunSleeveSpawner",0,0,0);
  }
  CWEP C 2 offset(1,0) A_SetPitch(pitch+1.0)
  CWEP D 5 A_ReFire
  CWEP E 0 A_ZoomFactor(1.0)
  CWEP E 5 
  Goto Ready

Здесь я использовал анонимные функции, они выполняют не одну комманду, а несколько. То-есть вместо того чтобы писать так:

NULL A 0 A_ZoomFactor(0.98)
NULL A 0 A_SetPitch(pitch-1.0)
NULL A 0 A_Recoil(0.5)
NULL A 0 A_FireCustomMissile("GunSleeveSpawner",0,0,0)
CWEP B 2 offset(-1,0)  A_FireCustomMissile("blueProj")

Я написал так.

CWEP B 2 offset(-1,0) {
    A_FireCustomMissile("blueProj");
    A_ZoomFactor(0.98);
    A_SetPitch(pitch-1.0);
    A_Recoil(0.5);
    A_FireCustomMissile("GunSleeveSpawner",0,0,0);
  }

Что, в разы удобнее.

А теперь, разберем комманды.

  • A_ZoomFactor — задает значение отдаление/приближение камеры игрока (зум), 1.0 — обычное состояние, 0.5 — камера отдалилась, 1.5 — камера приблизилась.
  • A_SetPitch — меняет текущий pitch, когда ты крутишь мышкой вверх/вниз — ты меняешь pitch.
  • A_Recoil — задает отталкивание игрока (перемещение назад)

В этой строке:

A_SetPitch(pitch-1.0);

Переменная pitch, указывает текущее значение pitch игрока.

Для лучшего понимания, советую ознакомится с уроком DECORATE. Добавляем гильзы., там я подробно объяснял yaw/pitch/roll.

Также можно задать смещение оружия (оружие переместится на несколько пикселей), это делается с помощью offsets. Синтаксис у offsets следующий:

offset(смещение_x,смещение_y)

Думаю, тут и так все понятно.

В нашем случае. Мы задали смещение «-1» по оси x, теперь оружие показывается чуть левее.

CWEP B 2 offset(-1,0) {

Хорошо, с этим закончили:

CWEP B 2 offset(-1,0) {
    A_FireCustomMissile("blueProj");
    A_ZoomFactor(0.98);
    A_SetPitch(pitch-1.0);
    A_Recoil(0.5);
    A_FireCustomMissile("GunSleeveSpawner",0,0,0);
  }

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

Как работает отдача?

В первом кадре выстрела:

1 кадр выстрела

Спрайт оружия смещается влево, на 1 пиксель.

offset(-1,0)

Затем:

  • спавнит снаряд
  • чуть-чуть отдаляет камеру
  • немного поворачивает камеру вверх
  • и отталкивает игрока, на небольшое расстояние

Во втором кадре выстрела:

2 кадр выстрела

Спрайт оружия смещается вправо:

offset(1,0)

Затем:Вертикальный поворот камеры (pitch), возвращает камеру в изначальное положение (в первом кадре мы прибавили убавили 1, в этом прибавили).

A_SetPitch(pitch+1.0)

После того, как законччили стрелять, зум вернулся в обычное состояние.

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

Итоговый результат.

На гифке, из-за ограничения кадров, не показывается тряска камеры (вверх/вниз).

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!