Yaw & Pitch bound to mouse input
parent
7332763e64
commit
0a25ed9a03
|
@ -5,7 +5,7 @@ function graphics:init()
|
|||
|
||||
RenderEngine.bininear_filter = false
|
||||
RenderEngine.mipmap = false
|
||||
RenderEngine.fov = 45
|
||||
RenderEngine.mouse_sensitivity = 0.012
|
||||
RenderEngine.mesh_effect_grow_time = 0.25
|
||||
RenderEngine.mesh_effect_flyin_time = 1
|
||||
RenderEngine.mesh_effect_flyin_offset = 20
|
||||
|
|
|
@ -3,12 +3,13 @@ table.assign(LocalPlayer, PlayerSystem.Player)
|
|||
|
||||
function LocalPlayer:constructor()
|
||||
self:init()
|
||||
self:set_speed(4)
|
||||
self:set_speed(10)
|
||||
self:set_fov(45)
|
||||
self:set_yaw(180)
|
||||
self:set_pitch(0)
|
||||
self:add_event_listener("after_set_position", function(event) self:set_position_callback(event) end)
|
||||
RenderEngine:add_event_listener("keypress", function(event) self:key_press_callback(event) end)
|
||||
RenderEngine:add_event_listener("mousemove", function(event) self:mouse_move_callback(event) end)
|
||||
RenderEngine:add_listen_key("w")
|
||||
RenderEngine:add_listen_key("a")
|
||||
RenderEngine:add_listen_key("s")
|
||||
|
@ -20,25 +21,30 @@ end
|
|||
function LocalPlayer:key_press_callback(event)
|
||||
local keys = event.keys
|
||||
local speed = self.speed * event.dtime
|
||||
local yawvec, pitchvec = self.yaw_vector, self.pitch_vector
|
||||
local vertvec = glm.vec3(0, 1, 0)
|
||||
local hvec, vvec = self.horizontal_look, RenderEngine.camera.up
|
||||
if keys["w"] then
|
||||
self:move( speed * yawvec)
|
||||
self:move( speed * hvec)
|
||||
elseif keys["s"] then
|
||||
self:move(-speed * yawvec)
|
||||
self:move(-speed * hvec)
|
||||
end
|
||||
if keys["a"] then
|
||||
self:move(-speed * (yawvec % pitchvec):normalize())
|
||||
self:move(-speed * (hvec % vvec):normalize())
|
||||
elseif keys["d"] then
|
||||
self:move( speed * (yawvec % pitchvec):normalize())
|
||||
self:move( speed * (hvec % vvec):normalize())
|
||||
end
|
||||
if keys["left shift"] then
|
||||
self:move(-speed * vertvec)
|
||||
self:move(-speed * vvec)
|
||||
elseif keys["space"] then
|
||||
self:move( speed * vertvec)
|
||||
self:move( speed * vvec)
|
||||
end
|
||||
end
|
||||
|
||||
function LocalPlayer:mouse_move_callback(event)
|
||||
self.yaw = self.yaw - event.x
|
||||
self.pitch = self.pitch - event.y
|
||||
self:update_look()
|
||||
end
|
||||
|
||||
function LocalPlayer:set_position_callback(event)
|
||||
RenderEngine.camera.pos = self.pos
|
||||
end
|
||||
|
@ -52,16 +58,19 @@ function LocalPlayer:set_fov(fov)
|
|||
RenderEngine.fov = fov
|
||||
end
|
||||
|
||||
function LocalPlayer:set_yaw(degrees)
|
||||
local radians = math.rad(degrees)
|
||||
self.yaw_vector = glm.vec3(math.sin(radians), 0, math.cos(radians)):normalize()
|
||||
RenderEngine.camera.front = self.yaw_vector
|
||||
function LocalPlayer:set_yaw(yaw)
|
||||
self.yaw = math.rad(yaw)
|
||||
self:update_look()
|
||||
end
|
||||
|
||||
function LocalPlayer:set_pitch(degrees)
|
||||
local radians = math.rad(degrees)
|
||||
self.pitch_vector = glm.vec3(0, 1, 0)
|
||||
RenderEngine.camera.up = self.pitch_vector
|
||||
function LocalPlayer:set_pitch(pitch)
|
||||
self.pitch = math.rad(pitch)
|
||||
self:update_look()
|
||||
end
|
||||
|
||||
function LocalPlayer:update_look()
|
||||
self.horizontal_look = glm.vec3(math.sin(self.yaw), 0, math.cos(self.yaw)):normalize()
|
||||
RenderEngine.camera.front = glm.vec3(math.sin(self.yaw or 0), math.sin(self.pitch or 0), math.cos(self.yaw or 0)):normalize()
|
||||
end
|
||||
|
||||
return LocalPlayer
|
||||
|
|
|
@ -33,8 +33,8 @@ function RenderEngine:render_loop()
|
|||
until glfw.window_should_close(self.window)
|
||||
end
|
||||
|
||||
function RenderEngine:update_projection_matrix(width, height)
|
||||
gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "projection"), true, glm.perspective(math.rad(self.fov), width / height, 0.1, 100))
|
||||
function RenderEngine:update_projection_matrix()
|
||||
gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "projection"), true, glm.perspective(math.rad(self.fov), self.window_width / self.window_height, 0.1, 100))
|
||||
end
|
||||
|
||||
function RenderEngine:update_view_matrix()
|
||||
|
|
|
@ -2,6 +2,11 @@ RenderEngine.listen_keys = {}
|
|||
Dragonblocks.create_event_interface(RenderEngine)
|
||||
|
||||
function RenderEngine:process_input(dtime)
|
||||
self:process_key_input(dtime)
|
||||
self:process_mouse_input(dtime)
|
||||
end
|
||||
|
||||
function RenderEngine:process_key_input(dtime)
|
||||
local keys_pressed = {}
|
||||
local was_key_pressed = false
|
||||
for key in pairs(self.listen_keys) do
|
||||
|
@ -19,6 +24,19 @@ function RenderEngine:process_input(dtime)
|
|||
end
|
||||
end
|
||||
|
||||
function RenderEngine:process_mouse_input(dtime)
|
||||
local dx, dy = self.cursor_delta_x or 0, self.cursor_delta_y or 0
|
||||
if math.abs(dx) > 0 or math.abs(dy) > 0 then
|
||||
self:fire_event({
|
||||
type = "mousemove",
|
||||
dtime = dtime,
|
||||
x = dx * self.mouse_sensitivity,
|
||||
y = dy * self.mouse_sensitivity,
|
||||
})
|
||||
end
|
||||
self.cursor_delta_x, self.cursor_delta_y = 0, 0
|
||||
end
|
||||
|
||||
function RenderEngine:add_listen_key(key)
|
||||
self.listen_keys[key] = true
|
||||
end
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
function RenderEngine:framebuffer_size_callback(_, width, height)
|
||||
gl.viewport(0, 0, width, height)
|
||||
self:update_projection_matrix(width, height)
|
||||
self.window_width, self.window_height = width, height
|
||||
self:update_projection_matrix()
|
||||
end
|
||||
|
||||
function RenderEngine:cursor_pos_callback(_, x, y)
|
||||
local last_x, last_y = self.cursor_x or x, self.cursor_y or y
|
||||
self.cursor_delta_x, self.cursor_delta_y = x - last_x, y - last_y
|
||||
self.cursor_x, self.cursor_y = x, y
|
||||
end
|
||||
|
||||
function RenderEngine:init_glfw()
|
||||
|
@ -12,7 +19,9 @@ end
|
|||
function RenderEngine:create_window()
|
||||
self.window = glfw.create_window(500, 500, "Unnamed Window")
|
||||
glfw.make_context_current(self.window)
|
||||
glfw.set_input_mode(self.window, "cursor", "disabled")
|
||||
glfw.set_framebuffer_size_callback(self.window, function (...) self:framebuffer_size_callback(...) end)
|
||||
glfw.set_cursor_pos_callback(self.window, function (...) self:cursor_pos_callback(...) end)
|
||||
end
|
||||
|
||||
function RenderEngine:set_window_title(title)
|
||||
|
|
Loading…
Reference in New Issue