36 lines
945 B
Odin
36 lines
945 B
Odin
package js_input
|
|
|
|
import "core:sys/wasm/js"
|
|
import "core:log"
|
|
|
|
DEFAULT_INPUT_EVENT_CALLBACKS :: Input_Event_Callbacks{
|
|
key_down = register_key_down_callback,
|
|
key_up = register_key_up_callback,
|
|
}
|
|
|
|
Input_State :: struct {
|
|
// store keys
|
|
}
|
|
|
|
Input_Event_Callbacks :: struct {
|
|
key_down: proc(e: js.Event),
|
|
key_up: proc(e: js.Event),
|
|
}
|
|
|
|
init_input :: proc(input: ^Input_State, callbacks := DEFAULT_INPUT_EVENT_CALLBACKS) {
|
|
js.add_document_event_listener(js.Event_Kind.Key_Down, input, callbacks.key_down)
|
|
js.add_document_event_listener(js.Event_Kind.Key_Up, input, callbacks.key_up)
|
|
}
|
|
|
|
register_key_down_callback :: proc(event: js.Event) {
|
|
log.infof("Key down: %s", event.key.key)
|
|
}
|
|
|
|
register_key_up_callback :: proc(event: js.Event) {
|
|
d := get_user_data_as(Input_State, event)
|
|
log.infof("Key up: %s", event.key.key)
|
|
}
|
|
|
|
get_user_data_as :: proc($T: typeid, e: js.Event) -> ^T {
|
|
return cast(^T)e.user_data
|
|
} |