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 }