Mouse control

This commit is contained in:
Dane Johnson 2021-01-13 22:50:01 -06:00
parent ca8a44a017
commit 35f43e9520
3 changed files with 32 additions and 2 deletions

View File

@ -7,12 +7,16 @@ Input *Input::instance = nullptr;
Input *Input::GetInstance() {
if (!instance) {
instance = new Input();
instance->lastx = 0.0;
instance->lasty = 0.0;
}
return instance;
}
void Input::Use(Window *window){
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
glfwSetKeyCallback(window, (GLFWkeyfun)HandleKeys);
glfwSetCursorPosCallback(window, (GLFWcursorposfun)HandleMousePosition);
}
void Input::HandleKeys(Window *window, int keys, int code, int action, int mods) {
@ -26,3 +30,19 @@ void Input::HandleKeys(Window *window, int keys, int code, int action, int mods)
lua_call(L, 4, 0);
#endif // LUA_SCRIPTING
}
void Input::HandleMousePosition(Window *window, double xpos, double ypos) {
double relx = xpos - instance->lastx;
double rely = ypos - instance->lasty;
#ifdef LUA_SCRIPTING
lua_State *L = (lua_State*) glfwGetWindowUserPointer(window);
lua_getglobal(L, "onmousemotion");
lua_pushnumber(L, xpos);
lua_pushnumber(L, ypos);
lua_pushnumber(L, relx);
lua_pushnumber(L, rely);
lua_call(L, 4, 0);
#endif // LUA_SCRIPTING
instance->lastx = xpos;
instance->lasty = ypos;
}

View File

@ -16,7 +16,9 @@ public:
static Input *GetInstance();
void Use(Window *window);
private:
double lastx, lasty;
Input();
static void HandleKeys(Window *window, int key, int code, int action, int mods);
static void HandleMousePosition(Window *window, double xpos, double ypos);
static Input *instance;
};

View File

@ -13,6 +13,7 @@ local vz = 0.0
local ballvy = -1.0
local cam_rot_x = 0.0
local cam_rot_y = 0.0
function init()
camera = couch.Camera()
@ -30,7 +31,10 @@ end
function update(delta)
camera.transform:Translate(vx * delta, 0.0, vz * delta)
camera.transform.rotation.y = camera.transform.rotation.y + cam_rot_x * delta
camera.transform.rotation.y = camera.transform.rotation.y - cam_rot_x * delta
cam_rot_x = 0.0
camera.transform.rotation.x = camera.transform.rotation.x - cam_rot_y * delta
cam_rot_y = 0.0
local loc = ball1.transform.position
if loc.y > 4.0 then
@ -46,7 +50,6 @@ function update(delta)
end
function onkey(key, code, action, mod)
print(key, code, action, mod)
if key == LEFT and action == 1 then
vx = -1.0
elseif key == RIGHT and action == 1 then
@ -71,3 +74,8 @@ function onkey(key, code, action, mod)
end
end
end
function onmousemotion(_, _, relx, rely)
cam_rot_x = relx
cam_rot_y = rely
end