From 22646d963e2b0c9b5ef629aa7704158026cfa6d1 Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Sun, 1 May 2022 15:07:11 -0700 Subject: web: split code into more files This is currently very messy with all the files interdependent on one another and a lot of the logic still in the main file. It will take some time to refactor and clean up. --- web/dartboat_wasm.c | 158 ++-------------------------------------------------- 1 file changed, 4 insertions(+), 154 deletions(-) (limited to 'web/dartboat_wasm.c') diff --git a/web/dartboat_wasm.c b/web/dartboat_wasm.c index 658277d..c43e73d 100644 --- a/web/dartboat_wasm.c +++ b/web/dartboat_wasm.c @@ -1,4 +1,5 @@ -#include "svg.h" +#include "web_svg.h" +#include "web_ui.h" #include "checkouts.h" #include "comp.h" @@ -11,6 +12,8 @@ #include +#include "web_match.h" + int delay_ms = 1000; enum prompt_mode { @@ -36,25 +39,6 @@ void set_prompt_mode(enum prompt_mode mode) pm == PM_SELECT_MODE ? "select_mode" : "default"); } -enum match_mode { - M_FIRST = 1, - M_PVC = M_FIRST, - M_P, - M_PVP, - M_LAST = M_PVP -}; - -struct match_state { - enum match_mode mode; - struct leg *legs[2]; - struct leg *active_leg; - int active_player; - int boat_undone; - int num_darts; -}; - -struct match_state *state; - void set_active_player(int pn) { state->active_player = pn; @@ -78,103 +62,11 @@ void toggle_active_player() set_active_player(3 - state->active_player); } -void update_player_sugg(int pn, int rem) -{ - char str[15] = {0}, *p = str; - - if (rem > 1 && rem <= 170) { - char *target; - int i = 3, trem = rem; - while (i && trem && (target = CHECKOUTS[--i][trem-1])) { - p += sprintf(p, i == 2 ? "%s" : "-%s", target); - trem -= segment_points(segment_from_name(target)); - } - } - - EM_ASM({updatePlayerSugg($0, $1)}, pn, str); -} - -bool is_match_over() -{ - return state->legs[0]->rem <= 0 || state->legs[1]->rem <= 0; -} - -void draw_visits() -{ - EM_ASM({clearVisits()}); - - char visit_no[10], p1_pts[10], p1_rem[10], - p2_pts[10], p2_rem[10], p2_darts[100]; - - sprintf(p1_rem, "%d", state->legs[0]->start); - sprintf(p2_rem, "%d", state->legs[1]->start); - EM_ASM({drawVisit($0, $1, $2, $3, $4, $5)}, - "0", "", p1_rem, "", state->mode == M_P ? "" : p2_rem, ""); - - int n_visits = state->legs[0]->n_visits > state->legs[1]->n_visits ? - state->legs[0]->n_visits : state->legs[1]->n_visits; - for (int i = 0; i < n_visits; ++i) { - visit_no[0] = p1_pts[0] = p1_rem[0] = - p2_pts[0] = p2_rem[0] = p2_darts[0] = 0; - - sprintf(visit_no, "%d", i + 1); - - struct visit *v = state->legs[0]->visits + i; - sprintf(p1_pts, "%d", v->points); - sprintf(p1_rem, "%d", v->rem); - - if (i < state->legs[1]->n_visits) { - v = state->legs[1]->visits + i; - sprintf(p2_pts, "%d", v->points); - sprintf(p2_rem, "%d", v->rem); - - for (int j = 0; j < v->n_darts; ++j) { - char *n = segment_name(v->darts[j]); - sprintf(p2_darts + (j ? (j*5 - 1) : 0), - j == 0 ? "%4s" : " %4s", n); - free(n); - } - } - - EM_ASM({drawVisit($0, $1, $2, $3, $4, $5)}, - visit_no, p1_pts, p1_rem, p2_pts, p2_rem, p2_darts); - } -} - -void update_player_rem(int pn, int rem) -{ - char str[5]; - if (rem < 0 || rem == 1) - strcpy(str, "BUST"); - else - sprintf(str, "%d", rem); - - EM_ASM({updatePlayerRem($0, $1)}, pn, str); - if (pn == 1 || state->mode != M_PVC) - update_player_sugg(pn, rem); -} - EMSCRIPTEN_KEEPALIVE void update_user_rem_from_pts(int pts) { update_player_rem(state->active_player, state->active_leg->rem - pts); } -EMSCRIPTEN_KEEPALIVE void draw_boat_throwing(int pts, char *str, double x, double y) -{ - char pts_str[10]; - sprintf(pts_str, "%d", pts); - - int rem = state->legs[1]->n_visits > 1 ? - state->legs[1]->visits[state->legs[1]->n_visits-2].rem : - state->legs[1]->start; - - svg_draw_point(x, y); - update_player_rem(2, rem - pts); - EM_ASM({setPromptInput($0)}, pts_str); - EM_ASM({promptMsgR($0)}, str); - free(str); -} - void handle_next(); EMSCRIPTEN_KEEPALIVE void end_boat_visit(int rem, double avg) { @@ -230,14 +122,6 @@ EMSCRIPTEN_KEEPALIVE void boat_visit() delay_ms * (v->n_darts + 1), l->rem, avg); } -void clear_player_info(int pn) -{ - EM_ASM({updatePlayerName($0, $1)}, pn, ""); - EM_ASM({updatePlayerRem($0, $1)}, pn, ""); - EM_ASM({updatePlayerSugg($0, $1)}, pn, ""); - EM_ASM({updatePlayerAvg($0, $1)}, pn, 0); -} - void prompt_num_darts() { set_prompt_mode(PM_NUM_DARTS); @@ -297,16 +181,6 @@ void handle_next() } } -void update_player_avg(int pn, int n_darts) -{ - struct leg *l = state->legs[pn-1]; - EM_ASM({updatePlayerAvg($0, $1)}, pn, - l->n_visits ? - (l->rem > 0 ? ((double)(l->start - l->rem) / l->n_visits) : - ((double)l->start / (((l->n_visits - 1) * 3) + n_darts) * 3)) : - 0); -} - EMSCRIPTEN_KEEPALIVE void user_visit(int points) { if (!is_points_valid(points, state->active_leg->rem)) { @@ -400,15 +274,6 @@ EMSCRIPTEN_KEEPALIVE void user_num_darts(int n) handle_next(); } -void free_state() -{ - state->legs[1]->n_visits += state->boat_undone; // avoid memory leak - leg_free(state->legs[0]); - leg_free(state->legs[1]); - free(state); - state = NULL; -} - EMSCRIPTEN_KEEPALIVE void start_match(int mode) { if (mode < M_FIRST || mode > M_LAST) { @@ -466,21 +331,6 @@ void init_boat() EM_ASM({updateStdev($0)}, horizontal_stdev); } -bool is_key_active(char *k) -{ - return (EM_ASM_INT({return isKeyActive($0)}, k)); -} - -void toggle_key(char *k) -{ - EM_ASM({toggleKey($0)}, k); -} - -void deactivate_key(char *k) -{ - EM_ASM({deactivateKey($0)}, k); -} - char *prompt_get() { return (char *)EM_ASM_INT({return promptGet()}); -- cgit v1.2.3-70-g09d2