diff options
Diffstat (limited to 'web/dartboat_wasm.c')
-rw-r--r-- | web/dartboat_wasm.c | 208 |
1 files changed, 23 insertions, 185 deletions
diff --git a/web/dartboat_wasm.c b/web/dartboat_wasm.c index c43e73d..c245771 100644 --- a/web/dartboat_wasm.c +++ b/web/dartboat_wasm.c @@ -1,3 +1,6 @@ +#include "web_match.h" +#include "web_opts.h" +#include "web_prompt.h" #include "web_svg.h" #include "web_ui.h" @@ -14,18 +17,6 @@ #include "web_match.h" -int delay_ms = 1000; - -enum prompt_mode { - PM_DARTBOARD, - PM_VISIT, - PM_NUM_DARTS, - PM_END_MATCH, - PM_SELECT_MODE -}; - -enum prompt_mode pm; - void set_prompt_mode(enum prompt_mode mode) { pm = mode; @@ -62,13 +53,15 @@ void toggle_active_player() set_active_player(3 - state->active_player); } -EMSCRIPTEN_KEEPALIVE void update_user_rem_from_pts(int pts) +EMSCRIPTEN_KEEPALIVE +void update_user_rem_from_pts(int pts) { update_player_rem(state->active_player, state->active_leg->rem - pts); } void handle_next(); -EMSCRIPTEN_KEEPALIVE void end_boat_visit(int rem, double avg) +EMSCRIPTEN_KEEPALIVE +void end_boat_visit(int rem, double avg) { EM_ASM(svgClearPoints()); update_player_rem(2, rem); @@ -80,7 +73,8 @@ EMSCRIPTEN_KEEPALIVE void end_boat_visit(int rem, double avg) handle_next(); } -EMSCRIPTEN_KEEPALIVE void boat_visit() +EMSCRIPTEN_KEEPALIVE +void boat_visit() { struct leg *l = state->legs[1]; if (state->boat_undone) { @@ -181,7 +175,8 @@ void handle_next() } } -EMSCRIPTEN_KEEPALIVE void user_visit(int points) +EMSCRIPTEN_KEEPALIVE +void user_visit(int points) { if (!is_points_valid(points, state->active_leg->rem)) { EM_ASM(oi()); @@ -204,12 +199,14 @@ EMSCRIPTEN_KEEPALIVE void user_visit(int points) handle_next(); } -EMSCRIPTEN_KEEPALIVE void user_visit_to_rem(int rem) +EMSCRIPTEN_KEEPALIVE +void user_visit_to_rem(int rem) { user_visit(state->legs[0]->rem - rem); } -EMSCRIPTEN_KEEPALIVE void user_undo() +EMSCRIPTEN_KEEPALIVE +void user_undo() { if (!state->legs[0]->n_visits) { EM_ASM(oi()); @@ -261,7 +258,8 @@ EMSCRIPTEN_KEEPALIVE void user_undo() handle_next(); } -EMSCRIPTEN_KEEPALIVE void user_num_darts(int n) +EMSCRIPTEN_KEEPALIVE +void user_num_darts(int n) { if (n < 1 || n > 3) { EM_ASM(oi()); @@ -274,7 +272,8 @@ EMSCRIPTEN_KEEPALIVE void user_num_darts(int n) handle_next(); } -EMSCRIPTEN_KEEPALIVE void start_match(int mode) +EMSCRIPTEN_KEEPALIVE +void start_match(int mode) { if (mode < M_FIRST || mode > M_LAST) { EM_ASM(oi()); @@ -303,24 +302,15 @@ EMSCRIPTEN_KEEPALIVE void start_match(int mode) handle_next(); } -EMSCRIPTEN_KEEPALIVE void end_match() +EMSCRIPTEN_KEEPALIVE +void end_match() { if (state) free_state(); handle_next(); } -EMSCRIPTEN_KEEPALIVE void set_delay(int delay) -{ - delay_ms = delay; -} - -EMSCRIPTEN_KEEPALIVE void set_stdev(float stdev) -{ - if (!isnan(stdev)) - horizontal_stdev = vertical_stdev = stdev; -} - -void init_boat() +EMSCRIPTEN_KEEPALIVE +void init() { srand(time(NULL)); init_board(); @@ -329,159 +319,7 @@ void init_boat() EM_ASM(readOpts()); EM_ASM({updateDelay($0)}, delay_ms); EM_ASM({updateStdev($0)}, horizontal_stdev); -} - -char *prompt_get() -{ - return (char *)EM_ASM_INT({return promptGet()}); -} - -void prompt_handle_pre(char *command) -{ - if (pm == PM_DARTBOARD) - return; - - EM_ASM(clearOi()); - - if ((pm == PM_VISIT || pm == PM_NUM_DARTS || pm == PM_END_MATCH) && - strcmp(command, "undo")) - deactivate_key("undo"); - - if (pm == PM_END_MATCH && strcmp(command, "rem")) - deactivate_key("rem"); - - if (pm == PM_END_MATCH && strcmp(command, "submit")) - deactivate_key("submit"); -} - -void prompt_handle_on_change() -{ - if (pm != PM_VISIT) - return; - - char *str = prompt_get(); - update_user_rem_from_pts(atoi(str)); - free(str); -} - -void prompt_handle_append(char *data) -{ - if (pm != PM_SELECT_MODE && pm != PM_VISIT && pm != PM_NUM_DARTS) - return; - - char *str = prompt_get(); - size_t len_str = strlen(str); - size_t len_data = strlen(data); - if (len_str < 3) { - str = realloc(str, len_str + len_data + 1); - memcpy(str + len_str, data, len_data + 1); - EM_ASM({setPromptInput($0)}, str); - prompt_handle_on_change(); - } - free(str); -} - -void prompt_handle_backspace() -{ - if (pm == PM_DARTBOARD) - return; - char *str = prompt_get(); - size_t len_str = strlen(str); - if (len_str > 0) { - str[len_str-1] = 0; - EM_ASM({setPromptInput($0)}, str); - prompt_handle_on_change(); - } - free(str); -} - -void prompt_handle_clear() -{ - if (pm == PM_DARTBOARD) - return; - - EM_ASM({setPromptInput($0)}, ""); - prompt_handle_on_change(); -} - -void prompt_handle_submit() -{ - if (pm == PM_END_MATCH) { - if (is_key_active("submit")) - end_match(); - toggle_key("submit"); - return; - } - - if (pm != PM_VISIT && pm != PM_NUM_DARTS && pm != PM_SELECT_MODE) - return; - - char *str = prompt_get(); - prompt_handle_clear(); - if (*str) { - if (pm == PM_VISIT) - user_visit(atoi(str)); - else if (pm == PM_NUM_DARTS) - user_num_darts(atoi(str)); - else if (pm == PM_SELECT_MODE) - start_match(atoi(str)); - } - - free(str); -} - -void prompt_handle_rem() -{ - if (pm == PM_END_MATCH) { - if (is_key_active("rem")) - start_match(state->mode); - toggle_key("rem"); - return; - } - - if (pm != PM_VISIT) - return; - - char *str = prompt_get(); - prompt_handle_clear(); - if (*str) - user_visit_to_rem(atoi(str)); - free(str); -} - -void prompt_handle_undo() -{ - if (pm != PM_VISIT && pm != PM_NUM_DARTS && pm != PM_END_MATCH) - return; - - prompt_handle_clear(); - if (is_key_active("undo")) - user_undo(); - toggle_key("undo"); -} - -EMSCRIPTEN_KEEPALIVE void prompt_handle(char *command, char *data) -{ - prompt_handle_pre(command); - - if (!strcmp(command, "append")) - prompt_handle_append(data); - else if (!strcmp(command, "backspace")) - prompt_handle_backspace(); - else if (!strcmp(command, "clear")) - prompt_handle_clear(); - else if (!strcmp(command, "submit")) - prompt_handle_submit(); - else if (!strcmp(command, "rem")) - prompt_handle_rem(); - else if (!strcmp(command, "undo")) - prompt_handle_undo(); -} - -EMSCRIPTEN_KEEPALIVE void init() -{ - init_boat(); set_prompt_mode(PM_VISIT); handle_next(); } |