vector2
Двумерный вектор: координаты и размеры на экране. Поля x, y.
vector2(x?: number, y?: number)#
Создаёт вектор. Незаданные компоненты равны 0. vector2(v) — копия.
| Параметр | Тип | Описание |
|---|---|---|
x, y |
number |
компоненты, по умолчанию 0 |
Возвращает: vector2.
local pos = vector2(100, 50)
local size = vector2(120, 30)
local center = pos + size / 2
print(center) -- (160, 65)
Операторы#
+, -, *, / (с числом или покомпонентно), унарный -, # (длина) и == — как у vector.
local p = vector2(100, 50) + vector2(10, 10) * 2
print(p) -- (120, 70)
v:unpack()#
Возвращает: number, number — x, y.
local w, h = render.screen_size():unpack()
print(w, "x", h)
v:init(...), src:copy(dst: vector2)#
init переинициализирует вектор на месте. copy копирует src в dst.
| Параметр | Тип | Описание |
|---|---|---|
dst |
vector2 |
куда копировать |
Возвращает: ничего.
local p = vector2()
p:init(5, 5)
v:length(), v:lengthsqr()#
Длина и её квадрат.
Возвращает: number.
print(vector2(3, 4):length()) --> 5
a:dist(b: vector2), a:distsqr(b: vector2)#
Расстояние между точками и его квадрат.
| Параметр | Тип | Описание |
|---|---|---|
b |
vector2 |
вторая точка |
Возвращает: number.
-- Враг, ближайший к центру экрана
events.render:set(function()
local center = render.screen_size() / 2
local best, best_d = nil, math.huge
for _, pawn in ipairs(entity.pawns(true)) do
local p = render.world_to_screen(pawn:eye_position())
if p and p:dist(center) < best_d then best, best_d = p, p:dist(center) end
end
if best then render.line(center, best, color(255, 255, 0, 255)) end
end)
a:dot(b: vector2)#
Скалярное произведение.
| Параметр | Тип | Описание |
|---|---|---|
b |
vector2 |
второй вектор |
Возвращает: number.
print(vector2(1, 0):dot(vector2(0, 1))) --> 0
a:cross(b: vector2)#
Псевдоскалярное произведение a.x * b.y - a.y * b.x.
| Параметр | Тип | Описание |
|---|---|---|
b |
vector2 |
второй вектор |
Возвращает: number.
print(vector2(1, 0):cross(vector2(0, 1))) --> 1
a:lerp(b: vector2, t: number)#
Линейная интерполяция.
| Параметр | Тип | Описание |
|---|---|---|
b |
vector2 |
вторая точка |
t |
number |
доля, 0–1 |
Возвращает: vector2.
-- Плавное движение плашки к цели
local pos = vector2(0, 0)
events.render:set(function()
pos = pos:lerp(render.screen_size() / 2, 0.1)
render.rect(pos, vector2(10, 10), color(255, 255, 255, 255))
end)
v:normalize(), v:normalized()#
normalize делает вектор единичным на месте и возвращает прежнюю длину; normalized возвращает единичную копию.
Возвращает: normalize — number; normalized — vector2.
print(vector2(10, 0):normalized()) -- (1, 0)
v:scale(s: number), v:scaled(s: number)#
Масштаб на месте и масштабированная копия.
| Параметр | Тип | Описание |
|---|---|---|
s |
number |
множитель |
Возвращает: scale — ничего; scaled — vector2.
print(vector2(2, 3):scaled(10)) -- (20, 30)
v:as_vector(z?: number)#
Переводит в трёхмерный вектор.
| Параметр | Тип | Описание |
|---|---|---|
z |
number |
третья компонента, по умолчанию 0 |
Возвращает: vector.
print(vector2(120, 70):as_vector(5)) -- (120, 70, 5)