CS2 Lua API

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)