angle
Углы поворота: x — pitch (наклон), y — yaw (поворот), z — roll (крен), в градусах.
angle(pitch?: number, yaw?: number, roll?: number)#
Создаёт углы. Незаданные компоненты равны 0. angle(a) — копия. То же самое — angle.new(...).
| Параметр | Тип | Описание |
|---|---|---|
pitch, yaw, roll |
number |
углы, по умолчанию 0 |
Возвращает: angle.
local view = angle(10, 90, 0)
print(view:pitch(), " ", view:yaw()) --> 10 90
Операторы#
| Выражение | Результат |
|---|---|
a + b, a - b |
покомпонентно |
a * n, n * a, a / n |
масштаб на число — только pitch и yaw, roll не меняется |
a * b, a / b |
покомпонентно |
-a |
углы с обратным знаком |
У angle нет оператора длины #.
local a = angle(10, 20, 30) * 2
print(a) -- (20, 40, 30)
a:pitch(), a:yaw(), a:roll()#
Возвращает: number — соответствующую компоненту.
local me = entity.local_pawn()
if me then print("Смотрю под углом ", me:eye_angles():pitch()) end
a:unpack()#
Возвращает: number, number, number — x, y, z.
local p, y, r = angle(1, 2, 3):unpack()
a:init(...), src:copy(dst: angle)#
init переинициализирует углы на месте (аргументы как у конструктора). copy копирует src в dst.
| Параметр | Тип | Описание |
|---|---|---|
dst |
angle |
куда копировать |
Возвращает: ничего.
local a, b = angle(), angle()
a:init(0, 180, 0)
a:copy(b)
print(b) -- (0, 180, 0)
a:forward()#
Единичный вектор направления по pitch и yaw.
Возвращает: vector.
local me = entity.local_pawn()
if me then
local eye = me:eye_position()
local r = trace.ray(eye, eye + me:eye_angles():forward() * 8192, trace.filter(me))
print("Смотрю на ", r.hitpos)
end
a:vectors()#
Векторы направления с учётом крена.
Возвращает: vector, vector, vector — forward, right, up.
local fwd, right, up = angle(0, 90, 0):vectors()
print(fwd, " ", right, " ", up)
a:normalize()#
Приводит каждую компоненту к диапазону [-180, 180) на месте.
Возвращает: ничего.
local a = angle(10, 370, 0)
a:normalize()
print(a) -- (10, 10, 0)
angle.normalize(x: number)#
Приводит число к диапазону [-180, 180).
| Параметр | Тип | Описание |
|---|---|---|
x |
number |
угол, градусы |
Возвращает: number.
print(angle.normalize(-190)) --> 170
a:normalized()#
Возвращает: angle — нормализованную копию, исходные углы не меняются.
-- Разница по yaw между взглядом и направлением на врага
local me = entity.local_pawn()
local enemy = entity.pawns(true)[1]
if me and enemy then
local need = (enemy:eye_position() - me:eye_position()):angles()
local diff = (need - me:eye_angles()):normalized()
print("Повернуть на ", math.floor(diff.y), "°")
end
a:length(), a:lengthsqr()#
Длина как у вектора из трёх компонент и её квадрат.
Возвращает: number.
print(angle(3, 4, 0):length()) --> 5
a:negate()#
Меняет знак всех компонент на месте.
Возвращает: ничего.
local a = angle(10, -20, 0)
a:negate()
print(a) -- (-10, 20, 0)