Mouse control
This commit is contained in:
		
							parent
							
								
									ca8a44a017
								
							
						
					
					
						commit
						35f43e9520
					
				| @ -7,12 +7,16 @@ Input *Input::instance = nullptr; | |||||||
| Input *Input::GetInstance() { | Input *Input::GetInstance() { | ||||||
|   if (!instance) { |   if (!instance) { | ||||||
|     instance = new Input(); |     instance = new Input(); | ||||||
|  |     instance->lastx = 0.0; | ||||||
|  |     instance->lasty = 0.0; | ||||||
|   } |   } | ||||||
|   return instance; |   return instance; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Input::Use(Window *window){ | void Input::Use(Window *window){ | ||||||
|  |   glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); | ||||||
|   glfwSetKeyCallback(window, (GLFWkeyfun)HandleKeys); |   glfwSetKeyCallback(window, (GLFWkeyfun)HandleKeys); | ||||||
|  |   glfwSetCursorPosCallback(window, (GLFWcursorposfun)HandleMousePosition); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Input::HandleKeys(Window *window, int keys, int code, int action, int mods) { | 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); |   lua_call(L, 4, 0); | ||||||
| #endif // LUA_SCRIPTING
 | #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; | ||||||
|  | } | ||||||
|  | |||||||
| @ -16,7 +16,9 @@ public: | |||||||
|   static Input *GetInstance(); |   static Input *GetInstance(); | ||||||
|   void Use(Window *window); |   void Use(Window *window); | ||||||
| private: | private: | ||||||
|  |   double lastx, lasty; | ||||||
|   Input(); |   Input(); | ||||||
|   static void HandleKeys(Window *window, int key, int code, int action, int mods); |   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; |   static Input *instance; | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								main.lua
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								main.lua
									
									
									
									
									
								
							| @ -13,6 +13,7 @@ local vz = 0.0 | |||||||
| local ballvy = -1.0 | local ballvy = -1.0 | ||||||
| 
 | 
 | ||||||
| local cam_rot_x = 0.0 | local cam_rot_x = 0.0 | ||||||
|  | local cam_rot_y = 0.0 | ||||||
| 
 | 
 | ||||||
| function init() | function init() | ||||||
|    camera = couch.Camera() |    camera = couch.Camera() | ||||||
| @ -30,7 +31,10 @@ end | |||||||
| 
 | 
 | ||||||
| function update(delta) | function update(delta) | ||||||
|    camera.transform:Translate(vx * delta, 0.0, vz * 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 |    local loc = ball1.transform.position | ||||||
|    if loc.y > 4.0 then |    if loc.y > 4.0 then | ||||||
| @ -46,7 +50,6 @@ function update(delta) | |||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function onkey(key, code, action, mod) | function onkey(key, code, action, mod) | ||||||
|    print(key, code, action, mod) |  | ||||||
|    if key == LEFT and action == 1 then |    if key == LEFT and action == 1 then | ||||||
|       vx = -1.0 |       vx = -1.0 | ||||||
|    elseif key == RIGHT and action == 1 then |    elseif key == RIGHT and action == 1 then | ||||||
| @ -71,3 +74,8 @@ function onkey(key, code, action, mod) | |||||||
|       end |       end | ||||||
|    end |    end | ||||||
| end | end | ||||||
|  | 
 | ||||||
|  | function onmousemotion(_, _, relx, rely) | ||||||
|  |    cam_rot_x = relx | ||||||
|  |    cam_rot_y = rely | ||||||
|  | end | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Dane Johnson
						Dane Johnson