From efcb07827e3d1aadf20d024124b7350259991e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Thu, 8 Feb 2024 17:18:22 +0100 Subject: [PATCH] added vector.Rotate lua binding --- .../Documentation/ScriptingAPI-Documentation.md | 1 + WickedEngine/wiMath_BindLua.cpp | 17 +++++++++++++++++ WickedEngine/wiMath_BindLua.h | 1 + 3 files changed, 19 insertions(+) diff --git a/Content/Documentation/ScriptingAPI-Documentation.md b/Content/Documentation/ScriptingAPI-Documentation.md index 01b679fe0b..cbe14ba38c 100644 --- a/Content/Documentation/ScriptingAPI-Documentation.md +++ b/Content/Documentation/ScriptingAPI-Documentation.md @@ -577,6 +577,7 @@ A four component floating point vector. Provides efficient calculations with SIM - Dot(Vector v1,v2) : Vector result - Cross(Vector v1,v2) : Vector result - Lerp(Vector v1,v2, float t) : Vector result +- Rotate(Vector v1,quaternion) : Vector result -- rotates the first argument 3D vector with the second argument quaternion - QuaternionInverse(Vector quaternion) : Vector resultQuaternion - QuaternionMultiply(Vector quaternion1,quaternion2) : Vector resultQuaternion - QuaternionFromRollPitchYaw(Vector rotXYZ) : Vector resultQuaternion diff --git a/WickedEngine/wiMath_BindLua.cpp b/WickedEngine/wiMath_BindLua.cpp index 75dfee1242..51b81a7c5a 100644 --- a/WickedEngine/wiMath_BindLua.cpp +++ b/WickedEngine/wiMath_BindLua.cpp @@ -23,6 +23,7 @@ namespace wi::lua lunamethod(Vector_BindLua, Dot), lunamethod(Vector_BindLua, Cross), lunamethod(Vector_BindLua, Lerp), + lunamethod(Vector_BindLua, Rotate), lunamethod(Vector_BindLua, QuaternionSlerp), lunamethod(Vector_BindLua, Slerp), lunamethod(Vector_BindLua, Clamp), @@ -407,6 +408,22 @@ namespace wi::lua wi::lua::SError(L, "Lerp(Vector v1,v2, float t) not enough arguments!"); return 0; } + int Vector_BindLua::Rotate(lua_State* L) + { + int argc = wi::lua::SGetArgCount(L); + if (argc > 1) + { + Vector_BindLua* v1 = Luna::lightcheck(L, 1); + Vector_BindLua* v2 = Luna::lightcheck(L, 2); + if (v1 && v2) + { + Luna::push(L, XMVector3Rotate(XMLoadFloat4(&v1->data), XMLoadFloat4(&v2->data))); + return 1; + } + } + wi::lua::SError(L, "Rotate(Vector v1,quaternion) not enough arguments!"); + return 0; + } int Vector_BindLua::QuaternionInverse(lua_State* L) diff --git a/WickedEngine/wiMath_BindLua.h b/WickedEngine/wiMath_BindLua.h index c27204dcc8..9538ba68f3 100644 --- a/WickedEngine/wiMath_BindLua.h +++ b/WickedEngine/wiMath_BindLua.h @@ -48,6 +48,7 @@ namespace wi::lua int Add(lua_State* L); int Subtract(lua_State* L); int Lerp(lua_State* L); + int Rotate(lua_State* L); int QuaternionInverse(lua_State* L);