diff --git a/WickedEngine/Vector_BindLua.cpp b/WickedEngine/Vector_BindLua.cpp index e86e27642..880f01c76 100644 --- a/WickedEngine/Vector_BindLua.cpp +++ b/WickedEngine/Vector_BindLua.cpp @@ -26,6 +26,8 @@ Luna::FunctionType Vector_BindLua::methods[] = { lunamethod(Vector_BindLua, Cross), lunamethod(Vector_BindLua, Lerp), lunamethod(Vector_BindLua, Slerp), + lunamethod(Vector_BindLua, Clamp), + lunamethod(Vector_BindLua, Normalize), lunamethod(Vector_BindLua, QuaternionMultiply), lunamethod(Vector_BindLua, QuaternionFromRollPitchYaw), { NULL, NULL } @@ -326,6 +328,44 @@ int Vector_BindLua::Slerp(lua_State* L) wiLua::SError(L, "QuaternionSlerp(Vector v1,v2, float t) not enough arguments!"); return 0; } +int Vector_BindLua::Clamp(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 2) + { + Vector_BindLua* vec = Luna::lightcheck(L, 1); + float a = wiLua::SGetFloat(L, 2); + float b = wiLua::SGetFloat(L, 3); + if (vec != nullptr) + { + Luna::push(L, new Vector_BindLua(XMVectorClamp(vec->vector,XMVectorSet(a,a,a,a),XMVectorSet(b,b,b,b)))); + return 1; + } + else + wiLua::SError(L, "Clamp(Vector vector, float min,max) argument is not a Vector!"); + } + else + wiLua::SError(L, "Clamp(Vector vector, float min,max) not enough arguments!"); + return 0; +} +int Vector_BindLua::Saturate(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* vec = Luna::lightcheck(L, 1); + if (vec != nullptr) + { + Luna::push(L, new Vector_BindLua(XMVectorSaturate(vec->vector))); + return 1; + } + else + wiLua::SError(L, "Saturate(Vector vector) argument is not a Vector!"); + } + else + wiLua::SError(L, "Saturate(Vector vector) not enough arguments!"); + return 0; +} void Vector_BindLua::Bind() { diff --git a/WickedEngine/Vector_BindLua.h b/WickedEngine/Vector_BindLua.h index 3f82ccd27..6a0e8aaf5 100644 --- a/WickedEngine/Vector_BindLua.h +++ b/WickedEngine/Vector_BindLua.h @@ -38,6 +38,8 @@ public: int Add(lua_State* L); int Subtract(lua_State* L); int Lerp(lua_State* L); + int Clamp(lua_State* L); + int Saturate(lua_State* L); int QuaternionMultiply(lua_State* L); diff --git a/WickedEngine/wiInputManager.cpp b/WickedEngine/wiInputManager.cpp index b31cf2d50..6c15b4ed2 100644 --- a/WickedEngine/wiInputManager.cpp +++ b/WickedEngine/wiInputManager.cpp @@ -136,3 +136,10 @@ XMFLOAT4 wiInputManager::pointer() #endif return XMFLOAT4(0, 0, 0, 0); } +void wiInputManager::setpointer(const XMFLOAT4& props) +{ +#ifndef WINSTORE_SUPPORT + SetCursorPos((int)props.x, (int)props.y); +#endif +} + diff --git a/WickedEngine/wiInputManager.h b/WickedEngine/wiInputManager.h index 05165ad89..0627238b6 100644 --- a/WickedEngine/wiInputManager.h +++ b/WickedEngine/wiInputManager.h @@ -54,8 +54,10 @@ public: static bool press(DWORD button, InputType inputType = InputType::KEYBOARD, short playerindex = 0); //check if a button is held down static bool hold(DWORD button, DWORD frames = 30, bool continuous = false, InputType inputType = InputType::KEYBOARD, short playerIndex = 0); - //get pointer position (eg. mouse pointer) + //get pointer position (eg. mouse pointer) + 2 unused static XMFLOAT4 pointer(); + //set pointer position (eg. mouse pointer) + 2 unused + static void setpointer(const XMFLOAT4& props); }; diff --git a/WickedEngine/wiInputManager_BindLua.cpp b/WickedEngine/wiInputManager_BindLua.cpp index b2307cfd0..89996dae5 100644 --- a/WickedEngine/wiInputManager_BindLua.cpp +++ b/WickedEngine/wiInputManager_BindLua.cpp @@ -9,6 +9,7 @@ Luna::FunctionType wiInputManager_BindLua::methods[] = { lunamethod(wiInputManager_BindLua, Press), lunamethod(wiInputManager_BindLua, Hold), lunamethod(wiInputManager_BindLua, Pointer), + lunamethod(wiInputManager_BindLua, SetPointer), { NULL, NULL } }; Luna::PropertyType wiInputManager_BindLua::properties[] = { @@ -59,6 +60,25 @@ int wiInputManager_BindLua::Pointer(lua_State* L) Luna::push(L, new Vector_BindLua(XMLoadFloat4(&wiInputManager::pointer()))); return 1; } +int wiInputManager_BindLua::SetPointer(lua_State* L) +{ + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + Vector_BindLua* vec = Luna::lightcheck(L, 1); + if (vec != nullptr) + { + XMFLOAT4 props; + XMStoreFloat4(&props, vec->vector); + wiInputManager::setpointer(props); + } + else + wiLua::SError(L, "SetPointer(Vector props) argument is not a Vector!"); + } + else + wiLua::SError(L, "SetPointer(Vector props) not enough arguments!"); + return 0; +} void wiInputManager_BindLua::Bind() { @@ -68,6 +88,8 @@ void wiInputManager_BindLua::Bind() initialized = true; Luna::Register(wiLua::GetGlobal()->GetLuaState()); wiLua::GetGlobal()->RunText("input = InputManager()"); + + //Keyboard wiLua::GetGlobal()->RunText("VK_UP = 0x26"); wiLua::GetGlobal()->RunText("VK_DOWN = 0x28"); wiLua::GetGlobal()->RunText("VK_LEFT = 0x25"); @@ -76,5 +98,9 @@ void wiInputManager_BindLua::Bind() wiLua::GetGlobal()->RunText("VK_RETURN = 0x0D"); wiLua::GetGlobal()->RunText("VK_RSHIFT = 0xA1"); wiLua::GetGlobal()->RunText("VK_LSHIFT = 0xA0"); + + //Mouse + wiLua::GetGlobal()->RunText("VK_LBUTTON = 0x01"); + wiLua::GetGlobal()->RunText("VK_RBUTTON = 0x02"); } } diff --git a/WickedEngine/wiInputManager_BindLua.h b/WickedEngine/wiInputManager_BindLua.h index 4d65cd631..8c465e1a4 100644 --- a/WickedEngine/wiInputManager_BindLua.h +++ b/WickedEngine/wiInputManager_BindLua.h @@ -16,6 +16,7 @@ public: int Press(lua_State* L); int Hold(lua_State* L); int Pointer(lua_State* L); + int SetPointer(lua_State* L); static void Bind();