|
@@ -0,0 +1,58 @@
|
|
|
|
|
+package input
|
|
|
|
|
+
|
|
|
|
|
+import sapp "third-party:sokol/app"
|
|
|
|
|
+
|
|
|
|
|
+MAX_KEYS :: 1024
|
|
|
|
|
+
|
|
|
|
|
+Context :: struct {
|
|
|
|
|
+ key_curr: [MAX_KEYS]bool,
|
|
|
|
|
+ key_last: [MAX_KEYS]bool,
|
|
|
|
|
+ button_curr: [MAX_KEYS]bool,
|
|
|
|
|
+ button_last: [MAX_KEYS]bool,
|
|
|
|
|
+ mouse_delta: [2]f32,
|
|
|
|
|
+ mouse_position: [2]f32,
|
|
|
|
|
+ mouse_scroll: [2]f32,
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+to_int :: proc {
|
|
|
|
|
+ to_int_key,
|
|
|
|
|
+ to_int_button,
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@(private)
|
|
|
|
|
+to_int_key :: proc(code: sapp.Keycode) -> int {
|
|
|
|
|
+ return int(code)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@(private)
|
|
|
|
|
+to_int_button :: proc(code: sapp.Mousebutton) -> int {
|
|
|
|
|
+ return int(code)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+key_just_pressed :: proc(ctx: Context, code: sapp.Keycode) -> bool {
|
|
|
|
|
+ idx := to_int(code)
|
|
|
|
|
+ return !ctx.key_last[idx] && ctx.key_curr[idx]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+key_just_released :: proc(ctx: Context, code: sapp.Keycode) -> bool {
|
|
|
|
|
+ idx := to_int(code)
|
|
|
|
|
+ return ctx.key_last[idx] && !ctx.key_curr[idx]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+key_is_down :: proc(ctx: Context, code: sapp.Keycode) -> bool {
|
|
|
|
|
+ return ctx.key_curr[to_int(code)]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+mouse_just_pressed :: proc(ctx: Context, code: sapp.Mousebutton) -> bool {
|
|
|
|
|
+ idx := to_int(code)
|
|
|
|
|
+ return !ctx.button_last[idx] && ctx.button_curr[idx]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+mouse_just_released :: proc(ctx: Context, code: sapp.Mousebutton) -> bool {
|
|
|
|
|
+ idx := to_int(code)
|
|
|
|
|
+ return ctx.button_last[idx] && !ctx.button_curr[idx]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+mouse_is_down :: proc(ctx: Context, code: sapp.Mousebutton) -> bool {
|
|
|
|
|
+ return ctx.button_curr[to_int(code)]
|
|
|
|
|
+}
|