From 9b0c7ffda8f4bf0f2e791a0821861ad14697d177 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 8 Mar 2025 12:37:26 +0100 Subject: Move directly on track instead of Up/Down buttons. --- play.js | 12 ++++------ rules.js | 77 ++++++++++++++++++++++++++++++++------------------------------ rules.ts | 79 +++++++++++++++++++++++++++++++++++----------------------------- 3 files changed, 88 insertions(+), 80 deletions(-) diff --git a/play.js b/play.js index 9ef91e1..92f6d13 100644 --- a/play.js +++ b/play.js @@ -260,11 +260,11 @@ function on_init() { m: document.getElementById("role_Moderate"), } - build_track(0, "tr_liberty", "Liberty", 0, 10) - build_track(1, "tr_collectivization", "Collectivization", 0, 10) - build_track(2, "tr_government", "Government", 1, 10) - build_track(3, "tr_soviet_support", "SovietSupport", 0, 10) - build_track(4, "tr_foreign_aid", "ForeignAid", 0, 10) + build_track(0, "tr0", "Liberty", 0, 10) + build_track(1, "tr1", "Collectivization", 0, 10) + build_track(2, "tr2", "Government", 1, 10) + build_track(3, "tr3", "SovietSupport", 0, 10) + build_track(4, "tr4", "ForeignAid", 0, 10) build_bonus(0, "Bonus1", "bonus_morale") build_bonus(1, "Bonus2", "bonus_teamwork") @@ -542,8 +542,6 @@ function on_update() { // eslint-disable-line no-unused-vars action_button("turn_on_bonus", "Turn on a Bonus") action_button("add_glory", "Add to Bag of Glory") action_button("draw_glory", "Draw from Bag of Glory") - action_button("up", "Up") - action_button("down", "Down") action_button("next", "Next") action_button("remove_blank_marker", "Remove Blank marker") action_button("confirm", "Confirm") diff --git a/rules.js b/rules.js index 6970da0..2400c09 100644 --- a/rules.js +++ b/rules.js @@ -377,7 +377,7 @@ function game_view(state, current) { !game.active.includes(current)) { let inactive = states[game.state].inactive || game.state; view.prompt = Array.isArray(game.active) - ? `Waiting for other players to ${inactive}.` + ? `Waiting for ${game.active.join(" and ")} to ${inactive}.` : `Waiting for ${game.active} to ${inactive}.`; } else { @@ -853,7 +853,7 @@ states.choose_area_ap = { inactive: 'choose area to use Action Points', prompt() { gen_spend_hero_points(); - view.prompt = 'Choose area of the board to affect'; + view.prompt = 'Use Action Points.'; for (const track of tracks) { gen_action_standee(track.id); } @@ -955,7 +955,7 @@ states.choose_card = { inactive: 'choose a card', prompt(player) { gen_spend_hero_points(); - view.prompt = 'Choose a card to play this turn'; + view.prompt = 'Choose a card to play this turn.'; const faction = player_faction_map[player]; if (game.selected_cards[faction].length === 0) { view.actions.undo = 0; @@ -969,7 +969,6 @@ states.choose_card = { else { view.actions.undo = 1; view.actions.confirm = 1; - view.prompt = 'Confirm your actions or undo'; } }, spend_hp() { @@ -1356,39 +1355,24 @@ states.move_track_up_or_down = { }, prompt() { gen_spend_hero_points(); - const { track_id } = get_active_node_args(); + const { track_id, strength } = get_active_node_args(); const can_move_up = can_move_track_up(track_id); const can_move_down = can_move_track_down(track_id); const track_name = get_track_name(track_id); - if (can_move_down && can_move_up) { - view.prompt = `Move ${track_name} up or down`; - } - else if (can_move_up) { - view.prompt = `Move ${track_name} up`; - } - else { - view.prompt = `Move ${track_name} down`; - } - if (can_move_up) { - gen_action('up'); - } - if (can_move_down) { - gen_action('down'); - } + if (can_move_up) + gen_move_track(track_id, strength); + if (can_move_down) + gen_move_track(track_id, -strength); + view.prompt = `Move ${track_name}.`; }, spend_hp() { resolve_spend_hp(); }, - down() { - const node = get_active_node(); - move_track(node.a.track_id, -1 * node.a.strength); - resolve_active_and_proceed(); - }, - up() { - const node = get_active_node(); - move_track(node.a.track_id, node.a.strength); - resolve_active_and_proceed(); - }, + tr0(x) { move_track_to(0, x); resolve_active_and_proceed(); }, + tr1(x) { move_track_to(1, x); resolve_active_and_proceed(); }, + tr2(x) { move_track_to(2, x); resolve_active_and_proceed(); }, + tr3(x) { move_track_to(3, x); resolve_active_and_proceed(); }, + tr4(x) { move_track_to(4, x); resolve_active_and_proceed(); }, }; states.peek_fascist_cards = { inactive: 'peek at Fascist cards', @@ -1421,10 +1405,10 @@ function resolve_spend_hp() { } function set_player_turn_prompt({ can_play_card, can_spend_hp, use_ap, use_momentum, use_morale_bonus, }) { if (can_play_card && can_spend_hp) { - view.prompt = 'Play a card or spend Hero points'; + view.prompt = 'Player Turn: Use card or spend Hero points.'; } else if (can_play_card && !can_spend_hp) { - view.prompt = 'Play a card'; + view.prompt = 'Player Turn: Use card.'; } else if (use_ap || use_morale_bonus || use_momentum) { const text_options = []; @@ -1439,18 +1423,18 @@ function set_player_turn_prompt({ can_play_card, can_spend_hp, use_ap, use_momen } if (use_momentum) { view.prompt = can_spend_hp - ? 'Play second card or spend Hero Points' - : 'Play second card'; + ? 'Play second card or spend Hero Points.' + : 'Play second card.'; } else { - view.prompt = `Use ${text_options.join(', ')} or end turn`; + view.prompt = `Player Turn: Use ${text_options.join(', ')}.`; } } else if (can_spend_hp) { - view.prompt = 'Spend Hero Points or end turn'; + view.prompt = 'Spend Hero Points.'; } else { - view.prompt = 'End turn'; + view.prompt = 'End turn.'; } } states.player_turn = { @@ -2373,11 +2357,30 @@ function get_government_track_direction(direction) { return 1; } } +const track_action_name = [ + "tr0", + "tr1", + "tr2", + "tr3", + "tr4" +]; +function gen_move_track(track_id, change) { + const current_value = game.tracks[track_id]; + let new_value = current_value + change; + new_value = Math.max(new_value, get_min_value_for_track(track_id)); + new_value = Math.min(new_value, get_max_value_for_track(track_id)); + gen_action(track_action_name[track_id], new_value); +} function move_track(track_id, change) { const current_value = game.tracks[track_id]; let new_value = current_value + change; new_value = Math.max(new_value, get_min_value_for_track(track_id)); new_value = Math.min(new_value, get_max_value_for_track(track_id)); + move_track_to(track_id, new_value); +} +function move_track_to(track_id, new_value) { + const current_value = game.tracks[track_id]; + let change = new_value - current_value; game.tracks[track_id] = new_value; logi(`${get_track_name(track_id)} to ${new_value}`); check_initiative(); diff --git a/rules.ts b/rules.ts index 938c4ac..6330d3e 100644 --- a/rules.ts +++ b/rules.ts @@ -559,7 +559,7 @@ function game_view(state: Game, current: Player | 'Observer') { ) { let inactive = states[game.state].inactive || game.state; view.prompt = Array.isArray(game.active) - ? `Waiting for other players to ${inactive}.` + ? `Waiting for ${game.active.join(" and ")} to ${inactive}.` : `Waiting for ${game.active} to ${inactive}.`; } else { view.actions = {}; @@ -1080,8 +1080,9 @@ states.choose_area_ap = { inactive: 'choose area to use Action Points', prompt() { gen_spend_hero_points(); - view.prompt = 'Choose area of the board to affect'; + view.prompt = 'Use Action Points.'; for (const track of tracks) { + // TODO: generate action for moving on the track directly gen_action_standee(track.id); } const fronts = get_fronts_to_add_to(ANY); @@ -1202,7 +1203,7 @@ states.choose_card = { inactive: 'choose a card', prompt(player: Player) { gen_spend_hero_points(); - view.prompt = 'Choose a card to play this turn'; + view.prompt = 'Choose a card to play this turn.'; const faction = player_faction_map[player]; @@ -1217,7 +1218,6 @@ states.choose_card = { } else { view.actions.undo = 1; view.actions.confirm = 1; - view.prompt = 'Confirm your actions or undo'; } }, spend_hp() { @@ -1682,38 +1682,24 @@ states.move_track_up_or_down = { }, prompt() { gen_spend_hero_points(); - const { track_id } = get_active_node_args(); + const { track_id, strength } = get_active_node_args(); const can_move_up = can_move_track_up(track_id); const can_move_down = can_move_track_down(track_id); const track_name = get_track_name(track_id); - if (can_move_down && can_move_up) { - view.prompt = `Move ${track_name} up or down`; - } else if (can_move_up) { - view.prompt = `Move ${track_name} up`; - } else { - view.prompt = `Move ${track_name} down`; - } - - if (can_move_up) { - gen_action('up'); - } - if (can_move_down) { - gen_action('down'); - } + if (can_move_up) + gen_move_track(track_id, strength); + if (can_move_down) + gen_move_track(track_id, -strength); + view.prompt = `Move ${track_name}.` }, spend_hp() { resolve_spend_hp(); }, - down() { - const node = get_active_node(); - move_track(node.a.track_id, -1 * node.a.strength); - resolve_active_and_proceed(); - }, - up() { - const node = get_active_node(); - move_track(node.a.track_id, node.a.strength); - resolve_active_and_proceed(); - }, + tr0(x) { move_track_to(0, x); resolve_active_and_proceed(); }, + tr1(x) { move_track_to(1, x); resolve_active_and_proceed(); }, + tr2(x) { move_track_to(2, x); resolve_active_and_proceed(); }, + tr3(x) { move_track_to(3, x); resolve_active_and_proceed(); }, + tr4(x) { move_track_to(4, x); resolve_active_and_proceed(); }, }; states.peek_fascist_cards = { @@ -1760,9 +1746,9 @@ function set_player_turn_prompt({ use_morale_bonus, }: PlayerTurnArgs & { can_spend_hp: boolean; can_play_card: boolean }) { if (can_play_card && can_spend_hp) { - view.prompt = 'Play a card or spend Hero points'; + view.prompt = 'Player Turn: Use card or spend Hero points.'; } else if (can_play_card && !can_spend_hp) { - view.prompt = 'Play a card'; + view.prompt = 'Player Turn: Use card.'; } else if (use_ap || use_morale_bonus || use_momentum) { const text_options = []; if (use_ap) { @@ -1778,15 +1764,15 @@ function set_player_turn_prompt({ if (use_momentum) { view.prompt = can_spend_hp - ? 'Play second card or spend Hero Points' - : 'Play second card'; + ? 'Play second card or spend Hero Points.' + : 'Play second card.'; } else { - view.prompt = `Use ${text_options.join(', ')} or end turn`; + view.prompt = `Player Turn: Use ${text_options.join(', ')}.`; } } else if (can_spend_hp) { - view.prompt = 'Spend Hero Points or end turn'; + view.prompt = 'Spend Hero Points.'; } else { - view.prompt = 'End turn'; + view.prompt = 'End turn.'; } } @@ -2935,12 +2921,33 @@ function get_government_track_direction(direction: 10 | 11): -1 | 1 { } } +const track_action_name = [ + "tr0", + "tr1", + "tr2", + "tr3", + "tr4" +] + +function gen_move_track(track_id: number, change: number) { + const current_value = game.tracks[track_id]; + let new_value = current_value + change; + new_value = Math.max(new_value, get_min_value_for_track(track_id)); + new_value = Math.min(new_value, get_max_value_for_track(track_id)); + gen_action(track_action_name[track_id], new_value) +} + function move_track(track_id: number, change: number) { const current_value = game.tracks[track_id]; let new_value = current_value + change; new_value = Math.max(new_value, get_min_value_for_track(track_id)); new_value = Math.min(new_value, get_max_value_for_track(track_id)); + move_track_to(track_id, new_value) +} +function move_track_to(track_id: number, new_value: number) { + const current_value = game.tracks[track_id]; + let change = new_value - current_value; game.tracks[track_id] = new_value; logi(`${get_track_name(track_id)} to ${new_value}`); -- cgit v1.2.3