From c5cea29428ddedd1120c62962d03fa7730ac9d58 Mon Sep 17 00:00:00 2001 From: bjorn Date: Fri, 28 Apr 2023 21:37:42 -0700 Subject: [PATCH] Mat4:getPosition; Mat4:getOrientation; Mat4:getScale; --- src/api/l_math_vectors.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/api/l_math_vectors.c b/src/api/l_math_vectors.c index f7f41f48..803aa57d 100644 --- a/src/api/l_math_vectors.c +++ b/src/api/l_math_vectors.c @@ -1828,6 +1828,37 @@ static int l_lovrMat4Unpack(lua_State* L) { } } +static int l_lovrMat4GetPosition(lua_State* L) { + mat4 m = luax_checkvector(L, 1, V_MAT4, NULL); + float position[4]; + mat4_getPosition(m, position); + lua_pushnumber(L, position[0]); + lua_pushnumber(L, position[1]); + lua_pushnumber(L, position[2]); + return 3; +} + +static int l_lovrMat4GetOrientation(lua_State* L) { + mat4 m = luax_checkvector(L, 1, V_MAT4, NULL); + float angle, ax, ay, az; + mat4_getAngleAxis(m, &angle, &ax, &ay, &az); + lua_pushnumber(L, angle); + lua_pushnumber(L, ax); + lua_pushnumber(L, ay); + lua_pushnumber(L, az); + return 4; +} + +static int l_lovrMat4GetScale(lua_State* L) { + mat4 m = luax_checkvector(L, 1, V_MAT4, NULL); + float scale[4]; + mat4_getScale(m, scale); + lua_pushnumber(L, scale[0]); + lua_pushnumber(L, scale[1]); + lua_pushnumber(L, scale[2]); + return 3; +} + int l_lovrMat4Set(lua_State* L) { mat4 m = luax_checkvector(L, 1, V_MAT4, NULL); int top = lua_gettop(L); @@ -2130,6 +2161,9 @@ int l_lovrMat4__metaindex(lua_State* L) { const luaL_Reg lovrMat4[] = { { "equals", l_lovrMat4Equals }, { "unpack", l_lovrMat4Unpack }, + { "getPosition", l_lovrMat4GetPosition }, + { "getOrientation", l_lovrMat4GetOrientation }, + { "getScale", l_lovrMat4GetScale }, { "set", l_lovrMat4Set }, { "mul", l_lovrMat4Mul }, { "identity", l_lovrMat4Identity },