Files
WickedEngine/WickedEngine/wiInputManager_BindLua.cpp
T
2015-12-27 17:44:09 +01:00

164 lines
4.7 KiB
C++

#include "wiInputManager_BindLua.h"
#include "wiInputManager.h"
#include "Vector_BindLua.h"
const char wiInputManager_BindLua::className[] = "InputManager";
Luna<wiInputManager_BindLua>::FunctionType wiInputManager_BindLua::methods[] = {
lunamethod(wiInputManager_BindLua, Down),
lunamethod(wiInputManager_BindLua, Press),
lunamethod(wiInputManager_BindLua, Hold),
lunamethod(wiInputManager_BindLua, GetPointer),
lunamethod(wiInputManager_BindLua, SetPointer),
lunamethod(wiInputManager_BindLua, HidePointer),
{ NULL, NULL }
};
Luna<wiInputManager_BindLua>::PropertyType wiInputManager_BindLua::properties[] = {
{ NULL, NULL }
};
int wiInputManager_BindLua::Down(lua_State* L)
{
int argc = wiLua::SGetArgCount(L);
if (argc > 0)
{
int code = wiLua::SGetInt(L, 1);
wiInputManager::InputType type = wiInputManager::KEYBOARD;
if (argc > 1)
{
type = (wiInputManager::InputType)wiLua::SGetInt(L, 2);
}
wiLua::SSetBool(L, wiInputManager::down((DWORD)code, type));
return 1;
}
else
wiLua::SError(L, "Down(int code, opt int type = KEYBOARD) not enough arguments!");
return 0;
}
int wiInputManager_BindLua::Press(lua_State* L)
{
int argc = wiLua::SGetArgCount(L);
if (argc > 0)
{
int code = wiLua::SGetInt(L, 1);
wiInputManager::InputType type = wiInputManager::KEYBOARD;
if (argc > 1)
{
type = (wiInputManager::InputType)wiLua::SGetInt(L, 2);
}
wiLua::SSetBool(L, wiInputManager::press((DWORD)code, type));
return 1;
}
else
wiLua::SError(L, "Press(int code, opt int type = KEYBOARD) not enough arguments!");
return 0;
}
int wiInputManager_BindLua::Hold(lua_State* L)
{
int argc = wiLua::SGetArgCount(L);
if (argc > 0)
{
int code = wiLua::SGetInt(L, 1);
int duration = 30;
if (argc > 1)
{
duration = wiLua::SGetInt(L, 2);
}
bool continuous = false;
if (argc > 2)
{
continuous = wiLua::SGetBool(L, 3);
}
wiInputManager::InputType type = wiInputManager::KEYBOARD;
if (argc > 3)
{
type = (wiInputManager::InputType)wiLua::SGetInt(L, 4);
}
wiLua::SSetBool(L, wiInputManager::hold((DWORD)code, (DWORD)duration, continuous, type));
return 1;
}
else
wiLua::SError(L, "Hold(int code, opt int duration = 30, opt boolean continuous = false, opt int type = KEYBOARD) not enough arguments!");
return 0;
}
int wiInputManager_BindLua::GetPointer(lua_State* L)
{
Luna<Vector_BindLua>::push(L, new Vector_BindLua(XMLoadFloat4(&wiInputManager::getpointer())));
return 1;
}
int wiInputManager_BindLua::SetPointer(lua_State* L)
{
int argc = wiLua::SGetArgCount(L);
if (argc > 0)
{
Vector_BindLua* vec = Luna<Vector_BindLua>::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;
}
int wiInputManager_BindLua::HidePointer(lua_State* L)
{
int argc = wiLua::SGetArgCount(L);
if (argc > 0)
{
wiInputManager::hidepointer(wiLua::SGetBool(L, 1));
}
else
wiLua::SError(L, "HidePointer(bool value) not enough arguments!");
return 0;
}
void wiInputManager_BindLua::Bind()
{
static bool initialized = false;
if (!initialized)
{
initialized = true;
Luna<wiInputManager_BindLua>::Register(wiLua::GetGlobal()->GetLuaState());
wiLua::GetGlobal()->RunText("input = InputManager()");
//Input types
wiLua::GetGlobal()->RunText("DIRECTINPUT_JOYPAD = 0");
wiLua::GetGlobal()->RunText("XINPUT_JOYPAD = 1");
wiLua::GetGlobal()->RunText("KEYBOARD = 2");
wiLua::GetGlobal()->RunText("RAWINPUT_JOYPAD = 3");
//Keyboard
wiLua::GetGlobal()->RunText("VK_UP = 0x26");
wiLua::GetGlobal()->RunText("VK_DOWN = 0x28");
wiLua::GetGlobal()->RunText("VK_LEFT = 0x25");
wiLua::GetGlobal()->RunText("VK_RIGHT = 0x27");
wiLua::GetGlobal()->RunText("VK_SPACE = 0x20");
wiLua::GetGlobal()->RunText("VK_RETURN = 0x0D");
wiLua::GetGlobal()->RunText("VK_RSHIFT = 0xA1");
wiLua::GetGlobal()->RunText("VK_LSHIFT = 0xA0");
wiLua::GetGlobal()->RunText("VK_F1 = 0x70");
wiLua::GetGlobal()->RunText("VK_F2 = 0x71");
wiLua::GetGlobal()->RunText("VK_F3 = 0x72");
wiLua::GetGlobal()->RunText("VK_F4 = 0x73");
wiLua::GetGlobal()->RunText("VK_F5 = 0x74");
wiLua::GetGlobal()->RunText("VK_F6 = 0x75");
wiLua::GetGlobal()->RunText("VK_F7 = 0x76");
wiLua::GetGlobal()->RunText("VK_F8 = 0x77");
wiLua::GetGlobal()->RunText("VK_F9 = 0x78");
wiLua::GetGlobal()->RunText("VK_F10 = 0x79");
wiLua::GetGlobal()->RunText("VK_F11 = 0x7A");
wiLua::GetGlobal()->RunText("VK_F12 = 0x7B");
//Mouse
wiLua::GetGlobal()->RunText("VK_LBUTTON = 0x01");
wiLua::GetGlobal()->RunText("VK_MBUTTON = 0x04");
wiLua::GetGlobal()->RunText("VK_RBUTTON = 0x02");
}
}