summaryrefslogtreecommitdiff
path: root/web/web_prompt.c
diff options
context:
space:
mode:
Diffstat (limited to 'web/web_prompt.c')
-rw-r--r--web/web_prompt.c136
1 files changed, 129 insertions, 7 deletions
diff --git a/web/web_prompt.c b/web/web_prompt.c
index 3f5521a..9db4fdd 100644
--- a/web/web_prompt.c
+++ b/web/web_prompt.c
@@ -18,7 +18,10 @@ enum prompt_mode {
PM_VISIT,
PM_NUM_DARTS,
PM_END_MATCH,
- PM_SELECT_MODE
+ PM_SELECT_MODE,
+ PM_MATCH_OPTS,
+ PM_MATCH_OPT_START_PTS,
+ PM_MATCH_OPT_THROWS_FIRST
};
enum prompt_mode pm;
@@ -128,6 +131,9 @@ void set_prompt_mode(enum prompt_mode mode)
dom_set_uniq_class(
pm == PM_DARTBOARD ? "#keypad-dartboard" :
pm == PM_SELECT_MODE ? "#keypad-list" :
+ pm == PM_MATCH_OPTS ? "#keypad-list" :
+ pm == PM_MATCH_OPT_START_PTS ? "#keypad-list" :
+ pm == PM_MATCH_OPT_THROWS_FIRST ? "#keypad-list" :
"#keypad-default",
"visible", ".keypad");
}
@@ -137,6 +143,7 @@ void prompt_visit()
set_prompt_mode(PM_VISIT);
prompt_set_msgl("Enter points:");
prompt_set_msgr(NULL);
+
dom_set_content("#key-submit", "OK");
dom_set_content("#key-rem", "REMAINING");
}
@@ -160,11 +167,13 @@ void prompt_num_darts()
void prompt_end_match()
{
scoreboard_set_player_active(-1); // sets all inactive
+
set_prompt_mode(PM_END_MATCH);
prompt_set_msgl(
state->mode == M_PVC && state->legs[1]->rem <= 0 ?
"Bot wins. :(" : "You win! :)");
prompt_set_msgr(NULL);
+
dom_set_content("#key-submit", "END MATCH");
dom_set_content("#key-rem", "REMATCH");
}
@@ -176,14 +185,111 @@ void prompt_select_mode()
clear_player_info(pn);
dom_set_content("#visits", NULL);
+ set_prompt_mode(PM_SELECT_MODE);
+ prompt_set_msgl("Select match mode:");
+ prompt_set_msgr(NULL);
+
clear_list_opts();
add_list_opt("Play against bot");
add_list_opt("One-player scoreboard");
add_list_opt("Two-player scoreboard");
flush_list_opts();
- set_prompt_mode(PM_SELECT_MODE);
- prompt_set_msgl("Select match mode:");
+}
+
+void prompt_match_opts()
+{
+ set_prompt_mode(PM_MATCH_OPTS);
+ prompt_set_msgl("Match options:");
prompt_set_msgr(NULL);
+
+ char buf[64];
+ clear_list_opts();
+ add_list_opt("Start match");
+ sprintf(buf, "Starting points: %d", match_opts->start_pts);
+ add_list_opt(buf);
+ sprintf(buf, "Throws first: %s",
+ match_opts->throws_first == 1 ?
+ match_opts->p1_name :
+ match_opts->p2_name);
+ add_list_opt(buf);
+ flush_list_opts();
+}
+
+void prompt_match_opt_start_pts()
+{
+ set_prompt_mode(PM_MATCH_OPT_START_PTS);
+ prompt_set_msgl("Starting points:");
+ prompt_set_msgr(NULL);
+ prompt_flush();
+
+ clear_list_opts();
+ add_list_opt("301");
+ add_list_opt("501");
+ add_list_opt("701");
+ add_list_opt("901");
+ flush_list_opts();
+}
+
+static void match_opt_start_pts_submit(int val)
+{
+ if (val < 1 || val > list_optc) {
+ oi();
+ return;
+ }
+
+ if (val == 1)
+ match_opts->start_pts = 301;
+ else if (val == 2)
+ match_opts->start_pts = 501;
+ else if (val == 3)
+ match_opts->start_pts = 701;
+ else if (val == 4)
+ match_opts->start_pts = 901;
+
+ prompt_match_opts();
+ prompt_flush();
+}
+
+void prompt_match_opt_throws_first()
+{
+ set_prompt_mode(PM_MATCH_OPT_THROWS_FIRST);
+ prompt_set_msgl("Throws first:");
+ prompt_set_msgr(NULL);
+ prompt_flush();
+
+ clear_list_opts();
+ add_list_opt(match_opts->p1_name);
+ if (match_opts->p2_name)
+ add_list_opt(match_opts->p2_name);
+ flush_list_opts();
+}
+
+static void match_opt_throws_first_submit(int val)
+{
+ if (val < 1 || val > list_optc) {
+ oi();
+ return;
+ }
+
+ match_opts->throws_first = val;
+
+ prompt_match_opts();
+ prompt_flush();
+}
+
+static void match_opts_submit(int val)
+{
+ if (val < 1 || val > list_optc) {
+ oi();
+ return;
+ }
+
+ if (val == 1)
+ start_match();
+ else if (val == 2)
+ prompt_match_opt_start_pts();
+ else if (val == 3)
+ prompt_match_opt_throws_first();
}
bool key_is_active(char *k)
@@ -244,7 +350,12 @@ void prompt_handle_on_change()
void prompt_handle_append(char *data)
{
- if (pm != PM_SELECT_MODE && pm != PM_VISIT && pm != PM_NUM_DARTS)
+ if (pm != PM_MATCH_OPTS &&
+ pm != PM_MATCH_OPT_START_PTS &&
+ pm != PM_MATCH_OPT_THROWS_FIRST &&
+ pm != PM_SELECT_MODE &&
+ pm != PM_VISIT &&
+ pm != PM_NUM_DARTS)
return;
char *str = prompt_get();
@@ -292,7 +403,12 @@ void prompt_handle_submit()
return;
}
- if (pm != PM_VISIT && pm != PM_NUM_DARTS && pm != PM_SELECT_MODE)
+ if (pm != PM_VISIT &&
+ pm != PM_NUM_DARTS &&
+ pm != PM_SELECT_MODE &&
+ pm != PM_MATCH_OPTS &&
+ pm != PM_MATCH_OPT_START_PTS &&
+ pm != PM_MATCH_OPT_THROWS_FIRST)
return;
char *str = prompt_get();
@@ -303,7 +419,13 @@ void prompt_handle_submit()
else if (pm == PM_NUM_DARTS)
user_num_darts(atoi(str));
else if (pm == PM_SELECT_MODE)
- start_match(atoi(str));
+ match_mode_selected(atoi(str));
+ else if (pm == PM_MATCH_OPTS)
+ match_opts_submit(atoi(str));
+ else if (pm == PM_MATCH_OPT_START_PTS)
+ match_opt_start_pts_submit(atoi(str));
+ else if (pm == PM_MATCH_OPT_THROWS_FIRST)
+ match_opt_throws_first_submit(atoi(str));
}
free(str);
@@ -313,7 +435,7 @@ void prompt_handle_rem()
{
if (pm == PM_END_MATCH) {
if (key_is_active("rem"))
- start_match(state->mode);
+ start_match();
toggle_key("rem");
return;
}