wasm events to list, wm_char

This commit is contained in:
krzosa
2025-01-03 08:24:40 +01:00
parent 6933566a86
commit 3cdfbd1957
7 changed files with 68 additions and 59 deletions

View File

@@ -42,15 +42,12 @@ glb_wasm_export i32 wasm_temp_buff1_len = 127;
glb_wasm_export char wasm_temp_buff2[128] = {[127] = 0x13};
glb_wasm_export i32 wasm_temp_buff2_len = 127;
// @todo: event list
global f64 wasm_dpr;
global STACK(app_event_t, 256) wasm_events;
global b32 wasm_event_failed_to_queue;
global f64 wasm_dpr;
global f64 wasm_delta_time;
global f64 wasm_time;
global f64 wasm_last_time_milliseconds;
global f64 wasm_app_init_time_milliseconds;
global app_event_list_t wasm_event_list;
typedef struct wasm_cached_t wasm_cached_t;
struct wasm_cached_t {
@@ -58,16 +55,13 @@ struct wasm_cached_t {
b8 ctrl, alt, meta, shift;
} wasm_cached;
fn void app_update(void);
fn void app_update(app_event_list_t eventswasm_event_list);
fn void app_init(void);
fn void wasm_add_event(app_event_t event) {
if (wasm_events.len < lengthof(wasm_events.data)) {
STACK_PUSH(wasm_events, event);
} else if (wasm_event_failed_to_queue == false) {
wasm_event_failed_to_queue = true;
debugf("failed to queue event");
}
app_event_t *ev = ma_push_type(tcx.temp, app_event_t);
SLLQ_APPEND(wasm_event_list.first, wasm_event_list.last, ev);
wasm_event_list.len += 1;
}
fn_wasm_export void wasm_mouse_move(f64 x, f64 y, b32 ctrl, b32 shift, b32 alt, b32 meta) {
@@ -191,7 +185,7 @@ fn_wasm_export void wasm_update(f64 width, f64 height, f64 dpr) {
v2f64_t window_size = (v2f64_t){width / dpr, height / dpr};
wasm_dpr = dpr;
if (wasm_events.len == 0) {
if (wasm_event_list.first == NULL) {
wasm_add_event((app_event_t){
.kind = app_event_kind_update,
.mouse_pos = wasm_cached.mouse_pos,
@@ -202,14 +196,15 @@ fn_wasm_export void wasm_update(f64 width, f64 height, f64 dpr) {
});
}
for (i32 i = 0; i < wasm_events.len; i += 1) {
wasm_events.data[i].dpr = dpr;
wasm_events.data[i].window_size = window_size;
for (app_event_t *ev = wasm_event_list.first; ev; ev = ev->next) {
ev->dpr = dpr;
ev->window_size = window_size;
}
app_update();
app_update(wasm_event_list);
wasm_events.len = 0;
ma_set0(tcx.temp);
zero_struct(&wasm_event_list);
wasm_last_time_milliseconds = wasm_time;
}
@@ -219,22 +214,6 @@ fn_wasm_export void wasm_init(void) {
wasm_app_init_time_milliseconds = os_milliseconds_now();
}
fn app_event_t *app_iterate_events(void) {
return wasm_events.data;
}
fn b32 app_is_event_valid(app_event_t *event) {
return event < (wasm_events.data + wasm_events.len);
}
fn void app_next_event(app_event_t **event) {
event[0] += 1;
}
fn app_event_t *app_get_last_event(void) {
return wasm_events.data + wasm_events.len - 1;
}
fn f64 app_get_anim_time(void) {
return wasm_time;
}