summaryrefslogtreecommitdiff
path: root/web/web_ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'web/web_ui.c')
-rw-r--r--web/web_ui.c185
1 files changed, 0 insertions, 185 deletions
diff --git a/web/web_ui.c b/web/web_ui.c
deleted file mode 100644
index 14b0ee6..0000000
--- a/web/web_ui.c
+++ /dev/null
@@ -1,185 +0,0 @@
-#include "web_match.h"
-#include "web_ui.h"
-
-#include "checkouts.h"
-#include "match.h"
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <emscripten/emscripten.h>
-
-struct player_info {
- char *name, *rem, *sugg;
- double avg;
-};
-
-struct player_info buffered_info[2], flushed_info[2];
-
-static inline void buffer_str(char *str, char **buffer, char *flushed)
-{
- if (str == *buffer || (str && *buffer && !strcmp(str, *buffer)))
- return;
-
- if (*buffer && *buffer != flushed)
- free(*buffer);
-
- *buffer = str ? strdup(str) : NULL;
-}
-
-void ui_set_player_name(int pn, char *str)
-{
- buffer_str(str, &buffered_info[pn-1].name, flushed_info[pn-1].name);
-}
-
-void ui_set_player_rem(int pn, char *str)
-{
- buffer_str(str, &buffered_info[pn-1].rem, flushed_info[pn-1].rem);
-}
-
-void ui_set_player_sugg(int pn, char *str)
-{
- buffer_str(str, &buffered_info[pn-1].sugg, flushed_info[pn-1].sugg);
-}
-
-void ui_set_player_avg(int pn, double avg)
-{
- buffered_info[pn-1].avg = avg;
-}
-
-static inline bool buffered_str_changed(char *buffered, char *flushed)
-{
- return (!buffered != !flushed) ||
- (buffered && flushed && strcmp(buffered, flushed));
-}
-
-static inline void free_flushed_str(char *flushed, char *buffered)
-{
- if (flushed && flushed != buffered)
- free(flushed);
-}
-
-void ui_flush_player_info(int pn)
-{
- if (buffered_str_changed(buffered_info[pn-1].name,
- flushed_info[pn-1].name))
- EM_ASM({updatePlayerName($0, $1)}, pn, buffered_info[pn-1].name);
-
- if (buffered_str_changed(buffered_info[pn-1].rem,
- flushed_info[pn-1].rem))
- EM_ASM({updatePlayerRem($0, $1)}, pn, buffered_info[pn-1].rem);
-
- if (buffered_str_changed(buffered_info[pn-1].sugg,
- flushed_info[pn-1].sugg))
- EM_ASM({updatePlayerSugg($0, $1)}, pn, buffered_info[pn-1].sugg);
-
- if (buffered_info[pn-1].avg != flushed_info[pn-1].avg)
- EM_ASM({updatePlayerAvg($0, $1)}, pn, buffered_info[pn-1].avg);
-
- free_flushed_str(flushed_info[pn-1].name, buffered_info[pn-1].name);
- free_flushed_str(flushed_info[pn-1].rem, buffered_info[pn-1].rem);
- free_flushed_str(flushed_info[pn-1].sugg, buffered_info[pn-1].sugg);
- flushed_info[pn-1] = buffered_info[pn-1];
-}
-
-void ui_flush()
-{
- ui_flush_player_info(1);
- ui_flush_player_info(2);
-}
-
-void update_player_name(int pn, char *str)
-{
- ui_set_player_name(pn, str);
-}
-
-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));
- }
- }
-
- ui_set_player_sugg(pn, str);
-}
-
-void update_player_avg(int pn, int n_darts)
-{
- struct leg *l = state->legs[pn-1];
- ui_set_player_avg(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);
-}
-
-void update_player_rem(int pn, int rem)
-{
- char str[5];
- if (rem < 0 || rem == 1)
- strcpy(str, "BUST");
- else
- sprintf(str, "%d", rem);
-
- ui_set_player_rem(pn, str);
- if (pn == 1 || state->mode != M_PVC)
- update_player_sugg(pn, rem);
-}
-
-void clear_player_info(int pn)
-{
- ui_set_player_name(pn, NULL);
- ui_set_player_rem(pn, NULL);
- ui_set_player_sugg(pn, NULL);
- ui_set_player_avg(pn, 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);
- }
-}