From 77a340808e622b4f15f4df498cf7f2e9648949a7 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 7 Sep 2025 21:12:50 +0300 Subject: [PATCH] add vec2.rotate --- doc/en/scripting/builtins/libvecn.md | 6 ++++++ doc/ru/scripting/builtins/libvecn.md | 6 ++++++ src/logic/scripting/lua/libs/libvecn.cpp | 13 +++++++++++++ 3 files changed, 25 insertions(+) diff --git a/doc/en/scripting/builtins/libvecn.md b/doc/en/scripting/builtins/libvecn.md index 6d2ec966..f330b2c4 100644 --- a/doc/en/scripting/builtins/libvecn.md +++ b/doc/en/scripting/builtins/libvecn.md @@ -177,6 +177,12 @@ vec2.angle(v: vec2) -- returns the direction angle of the vector {x, y} in degrees [0, 360] vec2.angle(x: number, y: number) + +-- returns the vector rotated by an angle in degrees counterclockwise +vec2.rotate(v: vec2, angle: number) -> vec2 + +-- writes the vector rotated by an angle in degrees counterclockwise to dst +vec2.rotate(v: vec2, angle: number, dst: vec2) -> vec2 ``` diff --git a/doc/ru/scripting/builtins/libvecn.md b/doc/ru/scripting/builtins/libvecn.md index f776ebe3..b3791bad 100644 --- a/doc/ru/scripting/builtins/libvecn.md +++ b/doc/ru/scripting/builtins/libvecn.md @@ -177,6 +177,12 @@ vec2.angle(v: vec2) -- возвращает угол направления вектора {x, y} в градусах [0, 360] vec2.angle(x: number, y: number) + +-- возвращает повернутый вектор на угол в градусах против часовой стрелки +vec2.rotate(v: vec2, angle: number) -> vec2 + +-- записывает повернутый вектор на угол в градусах против часовой стрелки в dst +vec2.rotate(v: vec2, angle: number, dst: vec2) -> vec2 ``` diff --git a/src/logic/scripting/lua/libs/libvecn.cpp b/src/logic/scripting/lua/libs/libvecn.cpp index 8d811857..ee2a3136 100644 --- a/src/logic/scripting/lua/libs/libvecn.cpp +++ b/src/logic/scripting/lua/libs/libvecn.cpp @@ -183,6 +183,18 @@ static int l_vec2_angle(lua::State* L) { } } +static int l_vec2_rotate(lua::State* L) { + uint argc = lua::check_argc(L, 2, 3); + auto vec = lua::tovec<2, number_t>(L, 1); + auto angle = glm::radians(lua::tonumber(L, 2)); + + if (argc == 2) { + return lua::pushvec(L, glm::rotate(vec, angle)); + } else { + return lua::setvec(L, 3, glm::rotate(vec, angle)); + } +} + template static int l_tostring(lua::State* L) { lua::check_argc(L, 1); @@ -215,6 +227,7 @@ const luaL_Reg vec2lib[] = { {"dot", lua::wrap>}, {"angle", lua::wrap}, {"mix", lua::wrap>}, + {"rotate", lua::wrap}, {NULL, NULL}}; const luaL_Reg vec3lib[] = {