summaryrefslogtreecommitdiff
path: root/web/dartboat_wasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'web/dartboat_wasm.c')
-rw-r--r--web/dartboat_wasm.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/web/dartboat_wasm.c b/web/dartboat_wasm.c
index a4a075c..84cad62 100644
--- a/web/dartboat_wasm.c
+++ b/web/dartboat_wasm.c
@@ -12,7 +12,7 @@
int delay_ms = 500;
enum prompt_mode {
- PM_NONE,
+ PM_DARTBOARD,
PM_VISIT,
PM_NUM_DARTS,
PM_END_MATCH,
@@ -25,12 +25,13 @@ void set_prompt_mode(enum prompt_mode mode)
{
pm = mode;
- if (pm != PM_NONE)
+ if (pm != PM_DARTBOARD)
EM_ASM(setPromptActive());
else
EM_ASM(setPromptInactive());
- EM_ASM({setKeypad($0)}, pm == PM_SELECT_MODE ? "select_mode" : "default");
+ EM_ASM({setKeypad($0)}, pm == PM_DARTBOARD ? "dartboard" :
+ pm == PM_SELECT_MODE ? "select_mode" : "default");
}
enum match_mode {
@@ -60,9 +61,7 @@ void set_active_player(int pn)
if (state->mode == M_PVC && pn == 2) {
EM_ASM({promptMsgL($0)}, "Bot is throwing…");
- EM_ASM({setKeyLabel($0, $1)}, "submit", "OK");
- EM_ASM({setKeyLabel($0, $1)}, "rem", "REMAINING");
- set_prompt_mode(PM_NONE);
+ set_prompt_mode(PM_DARTBOARD);
} else {
EM_ASM({promptMsgL($0)}, "Enter points:");
EM_ASM({setKeyLabel($0, $1)}, "submit", "OK");
@@ -158,7 +157,7 @@ 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)
+EMSCRIPTEN_KEEPALIVE void draw_boat_throwing(int pts, char *str, double x, double y)
{
char pts_str[10];
sprintf(pts_str, "%d", pts);
@@ -167,6 +166,7 @@ EMSCRIPTEN_KEEPALIVE void draw_boat_throwing(int pts, char *str)
state->legs[1]->visits[state->legs[1]->n_visits-2].rem :
state->legs[1]->start;
+ EM_ASM({draw_point($0, $1)}, x, y);
update_player_rem(2, rem - pts);
EM_ASM({setPromptInput($0)}, pts_str);
EM_ASM({promptMsgR($0)}, str);
@@ -176,6 +176,7 @@ EMSCRIPTEN_KEEPALIVE void draw_boat_throwing(int pts, char *str)
void handle_next();
EMSCRIPTEN_KEEPALIVE void end_boat_visit(int rem, double avg)
{
+ EM_ASM(clear_points());
update_player_rem(2, rem);
EM_ASM({updatePlayerAvg($0, $1)}, 2, avg);
EM_ASM({setPromptInput($0)}, "");
@@ -215,10 +216,12 @@ EMSCRIPTEN_KEEPALIVE void boat_visit()
len_str += sprintf(str + len_str, i ? "-%s" : "%s", seg_name);
free(seg_name);
+ struct ccoords c = v->ccoords[i];
+
char *tmp = malloc(len_str + 1); // free in draw_boat_throwing
memcpy(tmp, str, len_str + 1);
- EM_ASM({scheduleCCall($0, $1, $2, $3)}, "draw_boat_throwing",
- delay_ms * (i+1), pts, tmp);
+ EM_ASM({scheduleCCall($0, $1, $2, $3, $4, $5)}, "draw_boat_throwing",
+ delay_ms * (i+1), pts, tmp, c.x, c.y);
}
EM_ASM({scheduleCCall($0, $1, $2, $3)}, "end_boat_visit",
@@ -487,7 +490,7 @@ char *prompt_get()
void prompt_handle_pre(char *command)
{
- if (pm == PM_NONE)
+ if (pm == PM_DARTBOARD)
return;
EM_ASM(clearOi());
@@ -532,7 +535,7 @@ void prompt_handle_append(char *data)
void prompt_handle_backspace()
{
- if (pm == PM_NONE)
+ if (pm == PM_DARTBOARD)
return;
char *str = prompt_get();
@@ -547,7 +550,7 @@ void prompt_handle_backspace()
void prompt_handle_clear()
{
- if (pm == PM_NONE)
+ if (pm == PM_DARTBOARD)
return;
EM_ASM({setPromptInput($0)}, "");