diff options
Diffstat (limited to 'web/dartboat_wasm.c')
-rw-r--r-- | web/dartboat_wasm.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/web/dartboat_wasm.c b/web/dartboat_wasm.c index 4eaa6ce..b2c306c 100644 --- a/web/dartboat_wasm.c +++ b/web/dartboat_wasm.c @@ -63,6 +63,9 @@ EMSCRIPTEN_KEEPALIVE bool user_visit(struct match_state *state, int points) { v->rem = l->rem; EM_ASM({updateUserRem($0)}, l->rem); + if (v->rem > 0) + EM_ASM({updateUserAvg($0)}, (double)(l->start-l->rem)/l->n_visits); + return true; } @@ -85,11 +88,17 @@ EMSCRIPTEN_KEEPALIVE void boat_visit(struct match_state *state) { *s2 = v->n_darts > 1 ? segment_name(v->darts[1]) : NULL, *s3 = v->n_darts > 2 ? segment_name(v->darts[2]) : NULL; - EM_ASM({boatVisitRes($0, $1, $2, $3, $4, $5, $6, $7)}, + double avg; + if (v->rem > 0) + avg = (double)(l->start - l->rem) / l->n_visits; + else + avg = ((double)l->start / (((l->n_visits - 1) * 3) + v->n_darts)) * 3; + + EM_ASM({boatVisitRes($0, $1, $2, $3, $4, $5, $6, $7, $8)}, l->rem, v->n_darts, segment_points(v->darts[0]), v->n_darts > 1 ? segment_points(v->darts[1]) : 0, v->n_darts > 2 ? segment_points(v->darts[2]) : 0, - s1, s2, s3); + s1, s2, s3, avg); free(s1); free(s2); @@ -138,15 +147,29 @@ EMSCRIPTEN_KEEPALIVE void draw_match(struct match_state *state) { } if (l1->rem <= 0) { - EM_ASM({promptMsg($0)}, "You win! :)"); - EM_ASM(matchOver()); + EM_ASM(promptNumDarts()); + //EM_ASM({promptMsg($0)}, "You win! :)"); + //EM_ASM(matchOver()); } else if (l2->rem <= 0) { EM_ASM({promptMsg($0)}, "Bot wins. :("); EM_ASM(matchOver()); } else { EM_ASM({promptMsg($0)}, "Enter points:"); } +} + +EMSCRIPTEN_KEEPALIVE int resp_numdarts(struct match_state *state, int n_darts) { + if (n_darts < 1 || n_darts > 4) + return 0; + + struct leg *l = state->l1; + + EM_ASM({updateUserAvg($0)}, + ((double)l->start / (((l->n_visits - 1) * 3) + n_darts)) * 3); + EM_ASM({promptMsg($0)}, "You win! :)"); + EM_ASM(matchOver()); + return 1; } void init_boat() { |