From 3d1d31538d30a7f161f9f2b6d5e075ec69d3b860 Mon Sep 17 00:00:00 2001 From: iamcheeseman <[hidden email]> Date: Tue, 3 Feb 2026 22:25:00 -0500 Subject: ditch raylib (icky, and for loser BEGINNERS) --- src/fw/input.odin | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/fw/input.odin (limited to 'src/fw/input.odin') diff --git a/src/fw/input.odin b/src/fw/input.odin new file mode 100644 index 0000000..a3cbe25 --- /dev/null +++ b/src/fw/input.odin @@ -0,0 +1,76 @@ +package fw + +import "core:c" +import "vendor:glfw" + +Keyboard_Input :: union { + Key, + Mouse_Button, +} + +Controller_Input :: union { +} + +Keybind :: struct { + input: Keyboard_Input, + pressed: bool, + just_pressed: bool, +} + +key_down_last_frame: #sparse [Key]bool +key_just_down: #sparse [Key]bool + +mouse_down_last_frame: #sparse [Mouse_Button]bool +mouse_just_down: #sparse [Mouse_Button]bool + +@(private) +_update_input :: proc() { + for key in Key { + status := glfw.GetKey(window, c.int(key)) + key_pressed := status == glfw.PRESS + key_just_down[key] = key_pressed && !key_down_last_frame[key] + + key_down_last_frame[key] = key_pressed + } + + for mb in Mouse_Button { + status := glfw.GetMouseButton(window, c.int(mb)) + mouse_pressed := status == glfw.PRESS + mouse_just_down[mb] = mouse_pressed && !mouse_down_last_frame[mb] + + mouse_down_last_frame[mb] = mouse_pressed + } +} + +is_keybind_down :: proc(keybind: Keybind) -> bool { + switch val in keybind.input { + case Key: + return glfw.GetKey(window, c.int(val)) == glfw.PRESS + case Mouse_Button: + return glfw.GetMouseButton(window, c.int(val)) == glfw.PRESS + } + + assert(false) + return false +} + +is_keybind_just_down :: proc(keybind: Keybind) -> bool { + switch val in keybind.input { + case Key: return key_just_down[val] + case Mouse_Button: return mouse_just_down[val] + } + + assert(false) + return false +} + +get_mouse_pos :: proc() -> (mouse_pos: Vec2) { + w_width, w_height := glfw.GetWindowSize(window) + mx, my := glfw.GetCursorPos(window) + + mouse_pos = Vec2{f32(mx), f32(mx)} + mouse_pos /= Vec2{f32(w_width), f32(w_height)} + mouse_pos *= Vec2{f32(framebuf.color.size.x), f32(framebuf.color.size.y)} + // mouse_pos += state.camera.target + return +} -- cgit v1.3-2-g0d8e