From 986f697c55c747d9a3e768b0c24e03d12fe935fe Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sun, 12 May 2024 11:43:43 +0200 Subject: reformat --- data.js | 606 +++++++++++++++++++++++++++++++++------------------------------- play.js | 548 +++++++++++++++++++++++++++++---------------------------- 2 files changed, 589 insertions(+), 565 deletions(-) diff --git a/data.js b/data.js index ef4932d..7e5c8f4 100644 --- a/data.js +++ b/data.js @@ -1,346 +1,360 @@ -"use strict"; +"use strict" let BOXES = {} -let BLOCKADE = {}; -let COLONIES = {}; -let SPACES = {}; -let PATH_INDEX = {}; -let PATH_NAME; -let PATH_TYPE; +let BLOCKADE = {} +let COLONIES = {} +let SPACES = {} +let PATH_INDEX = {} +let PATH_NAME +let PATH_TYPE const GENERALS = { - "Arnold": { owner: "American", strategy: 1, battle: 3, agility: 2, bonus: false }, - "Gates": { owner: "American", strategy: 2, battle: 2, agility: 1, bonus: false }, - "Greene": { owner: "American", strategy: 1, battle: 4, agility: 2, bonus: true }, - "Lafayette": { owner: "American", strategy: 1, battle: 2, agility: 1, bonus: false }, - "Lee": { owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, - "Lincoln": { owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, - "Washington": { owner: "American", strategy: 1, battle: 5, agility: 2, bonus: true }, + Arnold: { owner: "American", strategy: 1, battle: 3, agility: 2, bonus: false }, + Gates: { owner: "American", strategy: 2, battle: 2, agility: 1, bonus: false }, + Greene: { owner: "American", strategy: 1, battle: 4, agility: 2, bonus: true }, + Lafayette: { owner: "American", strategy: 1, battle: 2, agility: 1, bonus: false }, + Lee: { owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, + Lincoln: { owner: "American", strategy: 2, battle: 1, agility: 1, bonus: false }, + Washington: { owner: "American", strategy: 1, battle: 5, agility: 2, bonus: true }, - "Burgoyne": { owner: "British", strategy: 2, battle: 2, agility: 1, bonus: false }, - "Carleton": { owner: "British", strategy: 3, battle: 3, agility: 2, bonus: false }, - "Clinton": { owner: "British", strategy: 3, battle: 4, agility: 2, bonus: false }, - "Cornwallis": { owner: "British", strategy: 2, battle: 4, agility: 2, bonus: false }, - "Howe": { owner: "British", strategy: 3, battle: 6, agility: 3, bonus: false }, + Burgoyne: { owner: "British", strategy: 2, battle: 2, agility: 1, bonus: false }, + Carleton: { owner: "British", strategy: 3, battle: 3, agility: 2, bonus: false }, + Clinton: { owner: "British", strategy: 3, battle: 4, agility: 2, bonus: false }, + Cornwallis: { owner: "British", strategy: 2, battle: 4, agility: 2, bonus: false }, + Howe: { owner: "British", strategy: 3, battle: 6, agility: 3, bonus: false }, - "Rochambeau": { owner: "French", strategy: 2, battle: 4, agility: 2, bonus: false }, -}; + Rochambeau: { owner: "French", strategy: 2, battle: 4, agility: 2, bonus: false }, +} function getEdge(A, B) { if (A > B) - return PATHS[B + "/" + A]; - return PATHS[A + "/" + B]; + return PATHS[B + "/" + A] + return PATHS[A + "/" + B] } -(function() { - let info = {}; +;(function () { + let info = {} function box(category, A, x, y) { - x += 40; y += 36; - BOXES[A] = { name: A, category: category, x: x, y: y }; + x += 40 + y += 36 + BOXES[A] = { name: A, category: category, x: x, y: y } } function space(colony, name, x, y, type) { - x += 40; y += 36; - if (type == 'winter-quarters') { - x += 1; y += 1; + x += 40 + y += 36 + if (type == "winter-quarters") { + x += 1 + y += 1 } if (!(colony in COLONIES)) - COLONIES[colony] = []; - COLONIES[colony].push(name); - SPACES[name] = { name: name, colony: colony, type: type, port: false, x: x, y: y, exits: [] }; + COLONIES[colony] = [] + COLONIES[colony].push(name) + SPACES[name] = { name: name, colony: colony, type: type, port: false, x: x, y: y, exits: [] } } function line(A, B, type) { if (A > B) { - let C = B; B = A; A = C; + let C = B + B = A + A = C } - let id = A + "/" + B; - SPACES[A].exits.push(B); - SPACES[B].exits.push(A); - info[id] = type; - if (!(A in PATH_INDEX)) PATH_INDEX[A] = {} - if (!(B in PATH_INDEX)) PATH_INDEX[B] = {} - PATH_INDEX[A][B] = -1; - PATH_INDEX[B][A] = -1; + let id = A + "/" + B + SPACES[A].exits.push(B) + SPACES[B].exits.push(A) + info[id] = type + if (!(A in PATH_INDEX)) + PATH_INDEX[A] = {} + if (!(B in PATH_INDEX)) + PATH_INDEX[B] = {} + PATH_INDEX[A][B] = -1 + PATH_INDEX[B][A] = -1 } - space("CA", "Fort Detroit", 55, 673, "regular-space"); - space("CA", "Montreal", 1000, 159, "fortified-port"); - space("CA", "Quebec", 1122, 57, "fortified-port"); - space("CT", "Hartford", 1183, 749, "winter-quarters"); - space("CT", "New Haven", 1088, 736, "regular-space"); - space("DE", "Wilmington DE", 885, 1079, "winter-quarters"); - space("GA", "Augusta", 140, 2060, "regular-space"); - space("GA", "Savannah", 227, 2271, "regular-space"); - space("GA", "St. Mary's", 180, 2394, "regular-space"); - space("MA", "Barnstable", 1394, 705, "regular-space"); - space("MA", "Boston", 1327, 592, "winter-quarters"); - space("MA", "Falmouth", 1334, 410, "regular-space"); - space("MA", "Lexington Concord", 1218, 628, "regular-space"); - space("MA", "Springfield", 1095, 624, "winter-quarters"); - space("MD", "Baltimore", 769, 1105, "winter-quarters"); - space("MD", "Fort Cumberland", 446, 1098, "regular-space"); - space("MD", "Frederick Town", 646, 1097, "regular-space"); - space("NC", "Charlotte", 215, 1653, "regular-space"); - space("NC", "Gilbert Town", 123, 1568, "regular-space"); - space("NC", "Hillsboro", 484, 1582, "regular-space"); - space("NC", "New Bern", 764, 1670, "regular-space"); - space("NC", "Salem", 308, 1561, "regular-space"); - space("NC", "Wake (Raleigh)", 606, 1671, "regular-space"); - space("NC", "Wilmington NC", 676, 1816, "regular-space"); - space("NH", "Brattleboro", 1102, 486, "regular-space"); - space("NH", "Concord", 1214, 460, "regular-space"); - space("NH", "Norwich", 1125, 342, "winter-quarters"); - space("NJ", "Monmouth", 998, 1074, "regular-space"); - space("NJ", "Morristown", 864, 831, "regular-space"); - space("NJ", "New Brunswick", 961, 942, "regular-space"); - space("NY", "Albany", 965, 626, "winter-quarters"); - space("NY", "Fort Niagara", 461, 526, "regular-space"); - space("NY", "Fort Stanwix", 877, 483, "winter-quarters"); - space("NY", "Genesee", 668, 582, "regular-space"); - space("NY", "Long Island", 1147, 868, "regular-space"); - space("NY", "New York", 1024, 838, "winter-quarters"); - space("NY", "Oswego", 768, 424, "regular-space"); - space("NY", "Saratoga", 992, 496, "regular-space"); - space("NY", "Ticonderoga", 993, 355, "winter-quarters"); - space("NY", "Westchester", 955, 747, "regular-space"); - space("PA", "Bassett Town", 147, 984, "regular-space"); - space("PA", "Harrisburg", 555, 880, "regular-space"); - space("PA", "Philadelphia", 846, 961, "fortified-port"); - space("PA", "Pittsburgh", 439, 958, "winter-quarters"); - space("PA", "Reading", 684, 900, "regular-space"); - space("PA", "Wyoming Valley", 685, 747, "winter-quarters"); - space("PA", "York", 589, 992, "regular-space"); - space("RI", "Newport", 1289, 736, "winter-quarters"); - space("SC", "Camden", 346, 1773, "regular-space"); - space("SC", "Charleston", 444, 2050, "fortified-port"); - space("SC", "Cheraw", 496, 1795, "regular-space"); - space("SC", "Eutaw Springs", 404, 1905, "regular-space"); - space("SC", "Fort Prince George", 74, 1773, "regular-space"); - space("SC", "Georgetown", 574, 1915, "regular-space"); - space("SC", "Ninety Six", 222, 1932, "regular-space"); - space("VA", "Abingdon", 61, 1451, "regular-space"); - space("VA", "Alexandria", 653, 1217, "winter-quarters"); - space("VA", "Charlottesville", 434, 1257, "winter-quarters"); - space("VA", "Fincastle", 349, 1402, "regular-space"); - space("VA", "Fort Chiswell", 212, 1408, "regular-space"); - space("VA", "Lynch's Ferry", 486, 1444, "regular-space"); - space("VA", "Norfolk", 781, 1450, "winter-quarters"); - space("VA", "Petersburg", 634, 1446, "regular-space"); - space("VA", "Point Pleasant", 132, 1218, "regular-space"); - space("VA", "Richmond", 608, 1323, "winter-quarters"); - space("VA", "Yorktown", 767, 1317, "regular-space"); + space("CA", "Fort Detroit", 55, 673, "regular-space") + space("CA", "Montreal", 1000, 159, "fortified-port") + space("CA", "Quebec", 1122, 57, "fortified-port") + space("CT", "Hartford", 1183, 749, "winter-quarters") + space("CT", "New Haven", 1088, 736, "regular-space") + space("DE", "Wilmington DE", 885, 1079, "winter-quarters") + space("GA", "Augusta", 140, 2060, "regular-space") + space("GA", "Savannah", 227, 2271, "regular-space") + space("GA", "St. Mary's", 180, 2394, "regular-space") + space("MA", "Barnstable", 1394, 705, "regular-space") + space("MA", "Boston", 1327, 592, "winter-quarters") + space("MA", "Falmouth", 1334, 410, "regular-space") + space("MA", "Lexington Concord", 1218, 628, "regular-space") + space("MA", "Springfield", 1095, 624, "winter-quarters") + space("MD", "Baltimore", 769, 1105, "winter-quarters") + space("MD", "Fort Cumberland", 446, 1098, "regular-space") + space("MD", "Frederick Town", 646, 1097, "regular-space") + space("NC", "Charlotte", 215, 1653, "regular-space") + space("NC", "Gilbert Town", 123, 1568, "regular-space") + space("NC", "Hillsboro", 484, 1582, "regular-space") + space("NC", "New Bern", 764, 1670, "regular-space") + space("NC", "Salem", 308, 1561, "regular-space") + space("NC", "Wake (Raleigh)", 606, 1671, "regular-space") + space("NC", "Wilmington NC", 676, 1816, "regular-space") + space("NH", "Brattleboro", 1102, 486, "regular-space") + space("NH", "Concord", 1214, 460, "regular-space") + space("NH", "Norwich", 1125, 342, "winter-quarters") + space("NJ", "Monmouth", 998, 1074, "regular-space") + space("NJ", "Morristown", 864, 831, "regular-space") + space("NJ", "New Brunswick", 961, 942, "regular-space") + space("NY", "Albany", 965, 626, "winter-quarters") + space("NY", "Fort Niagara", 461, 526, "regular-space") + space("NY", "Fort Stanwix", 877, 483, "winter-quarters") + space("NY", "Genesee", 668, 582, "regular-space") + space("NY", "Long Island", 1147, 868, "regular-space") + space("NY", "New York", 1024, 838, "winter-quarters") + space("NY", "Oswego", 768, 424, "regular-space") + space("NY", "Saratoga", 992, 496, "regular-space") + space("NY", "Ticonderoga", 993, 355, "winter-quarters") + space("NY", "Westchester", 955, 747, "regular-space") + space("PA", "Bassett Town", 147, 984, "regular-space") + space("PA", "Harrisburg", 555, 880, "regular-space") + space("PA", "Philadelphia", 846, 961, "fortified-port") + space("PA", "Pittsburgh", 439, 958, "winter-quarters") + space("PA", "Reading", 684, 900, "regular-space") + space("PA", "Wyoming Valley", 685, 747, "winter-quarters") + space("PA", "York", 589, 992, "regular-space") + space("RI", "Newport", 1289, 736, "winter-quarters") + space("SC", "Camden", 346, 1773, "regular-space") + space("SC", "Charleston", 444, 2050, "fortified-port") + space("SC", "Cheraw", 496, 1795, "regular-space") + space("SC", "Eutaw Springs", 404, 1905, "regular-space") + space("SC", "Fort Prince George", 74, 1773, "regular-space") + space("SC", "Georgetown", 574, 1915, "regular-space") + space("SC", "Ninety Six", 222, 1932, "regular-space") + space("VA", "Abingdon", 61, 1451, "regular-space") + space("VA", "Alexandria", 653, 1217, "winter-quarters") + space("VA", "Charlottesville", 434, 1257, "winter-quarters") + space("VA", "Fincastle", 349, 1402, "regular-space") + space("VA", "Fort Chiswell", 212, 1408, "regular-space") + space("VA", "Lynch's Ferry", 486, 1444, "regular-space") + space("VA", "Norfolk", 781, 1450, "winter-quarters") + space("VA", "Petersburg", 634, 1446, "regular-space") + space("VA", "Point Pleasant", 132, 1218, "regular-space") + space("VA", "Richmond", 608, 1323, "winter-quarters") + space("VA", "Yorktown", 767, 1317, "regular-space") - box("SEA", "Sea1", 1277, 65, "blockade"); - box("SEA", "Sea2", 1469, 514, "blockade"); - box("SEA", "Sea3", 1213, 981, "blockade"); - box("SEA", "Sea4", 1058, 1174, "blockade"); - box("SEA", "Sea5", 947, 1395, "blockade"); - box("SEA", "Sea6", 637, 2027, "blockade"); - box("SEA", "Sea7", 359, 2358, "blockade"); + box("SEA", "Sea1", 1277, 65, "blockade") + box("SEA", "Sea2", 1469, 514, "blockade") + box("SEA", "Sea3", 1213, 981, "blockade") + box("SEA", "Sea4", 1058, 1174, "blockade") + box("SEA", "Sea5", 947, 1395, "blockade") + box("SEA", "Sea6", 637, 2027, "blockade") + box("SEA", "Sea7", 359, 2358, "blockade") - box("HOLDING", "Continental Congress Dispersed", 545, 350); - box("HOLDING", "Captured Generals", 1463, 80); - box("HOLDING", "British Leader Reinforcements", 1425, 1745); - box("HOLDING", "American Leader Reinforcements", 400, 310); - box("HOLDING", "French Reinforcements", 150, 340); + box("HOLDING", "Continental Congress Dispersed", 545, 350) + box("HOLDING", "Captured Generals", 1463, 80) + box("HOLDING", "British Leader Reinforcements", 1425, 1745) + box("HOLDING", "American Leader Reinforcements", 400, 310) + box("HOLDING", "French Reinforcements", 150, 340) - box("ALLIANCE", "French Alliance Track 0", 898, 2240); - box("ALLIANCE", "French Alliance Track 1", 964, 2240); - box("ALLIANCE", "French Alliance Track 2", 1030, 2240); - box("ALLIANCE", "French Alliance Track 3", 1096, 2240); - box("ALLIANCE", "French Alliance Track 4", 1162, 2240); - box("ALLIANCE", "French Alliance Track 5", 1228, 2240); - box("ALLIANCE", "French Alliance Track 6", 1294, 2240); - box("ALLIANCE", "French Alliance Track 7", 1360, 2240); - box("ALLIANCE", "French Alliance Track 8", 1426, 2240); - box("ALLIANCE", "French Alliance Track 9", 1492, 2240); + box("ALLIANCE", "French Alliance Track 0", 898, 2240) + box("ALLIANCE", "French Alliance Track 1", 964, 2240) + box("ALLIANCE", "French Alliance Track 2", 1030, 2240) + box("ALLIANCE", "French Alliance Track 3", 1096, 2240) + box("ALLIANCE", "French Alliance Track 4", 1162, 2240) + box("ALLIANCE", "French Alliance Track 5", 1228, 2240) + box("ALLIANCE", "French Alliance Track 6", 1294, 2240) + box("ALLIANCE", "French Alliance Track 7", 1360, 2240) + box("ALLIANCE", "French Alliance Track 8", 1426, 2240) + box("ALLIANCE", "French Alliance Track 9", 1492, 2240) - box("TURN", "Game Turn 1775", 898, 2370); - box("TURN", "Game Turn 1776", 964, 2370); - box("TURN", "Game Turn 1777", 1030, 2370); - box("TURN", "Game Turn 1778", 1096, 2370); - box("TURN", "Game Turn 1779", 1162, 2370); - box("TURN", "Game Turn 1780", 1228, 2370); - box("TURN", "Game Turn 1781", 1294, 2370); - box("TURN", "Game Turn 1782", 1360, 2370); - box("TURN", "Game Turn 1783", 1426, 2370); + box("TURN", "Game Turn 1775", 898, 2370) + box("TURN", "Game Turn 1776", 964, 2370) + box("TURN", "Game Turn 1777", 1030, 2370) + box("TURN", "Game Turn 1778", 1096, 2370) + box("TURN", "Game Turn 1779", 1162, 2370) + box("TURN", "Game Turn 1780", 1228, 2370) + box("TURN", "Game Turn 1781", 1294, 2370) + box("TURN", "Game Turn 1782", 1360, 2370) + box("TURN", "Game Turn 1783", 1426, 2370) - box("CONTROL", "CA", 1376, 967); - box("CONTROL", "NH", 1458, 1006); - box("CONTROL", "NY", 1375, 1081); - box("CONTROL", "MA", 1491, 1081); - box("CONTROL", "CT", 1455, 1156); - box("CONTROL", "RI", 1533, 1156); - box("CONTROL", "PA", 1299, 1194); - box("CONTROL", "NJ", 1376, 1189); - box("CONTROL", "MD", 1299, 1266); - box("CONTROL", "DE", 1376, 1266); - box("CONTROL", "VA", 1241, 1337); - box("CONTROL", "NC", 1260, 1407); - box("CONTROL", "SC", 1212, 1479); - box("CONTROL", "GA", 1164, 1550); + box("CONTROL", "CA", 1376, 967) + box("CONTROL", "NH", 1458, 1006) + box("CONTROL", "NY", 1375, 1081) + box("CONTROL", "MA", 1491, 1081) + box("CONTROL", "CT", 1455, 1156) + box("CONTROL", "RI", 1533, 1156) + box("CONTROL", "PA", 1299, 1194) + box("CONTROL", "NJ", 1376, 1189) + box("CONTROL", "MD", 1299, 1266) + box("CONTROL", "DE", 1376, 1266) + box("CONTROL", "VA", 1241, 1337) + box("CONTROL", "NC", 1260, 1407) + box("CONTROL", "SC", 1212, 1479) + box("CONTROL", "GA", 1164, 1550) - function wilderness(A,B) { line(A,B, "wilderness"); } - function path(A,B) { line(A,B, "path"); } - function sea(space,zone) { SPACES[space].port = true; BLOCKADE[space] = zone; } + function wilderness(A, B) { + line(A, B, "wilderness") + } + function path(A, B) { + line(A, B, "path") + } + function sea(space, zone) { + SPACES[space].port = true + BLOCKADE[space] = zone + } - wilderness("Quebec", "Falmouth"); - wilderness("Fort Detroit", "Bassett Town"); - wilderness("Bassett Town", "Point Pleasant"); + wilderness("Quebec", "Falmouth") + wilderness("Fort Detroit", "Bassett Town") + wilderness("Bassett Town", "Point Pleasant") - path("Quebec", "Montreal"); - path("Montreal", "Ticonderoga"); - path("Montreal", "Oswego"); - path("Oswego", "Fort Niagara"); - path("Oswego", "Fort Stanwix"); - path("Fort Niagara", "Fort Detroit"); - path("Fort Niagara", "Genesee"); - path("Ticonderoga", "Norwich"); - path("Ticonderoga", "Saratoga"); - path("Norwich", "Brattleboro"); - path("Norwich", "Concord"); - path("Concord", "Falmouth"); - path("Concord", "Brattleboro"); - path("Saratoga", "Brattleboro"); - path("Saratoga", "Albany"); - path("Brattleboro", "Springfield"); - path("Fort Stanwix", "Albany"); - path("Albany", "Springfield"); - path("Lexington Concord", "Springfield"); - path("Lexington Concord", "Boston"); - path("Falmouth", "Boston"); - path("Barnstable", "Boston"); - path("Newport", "Boston"); - path("Newport", "Hartford"); - path("Springfield", "Hartford"); - path("New Haven", "Hartford"); - path("New Haven", "New York"); - path("New Haven", "Westchester"); - path("New York", "Westchester"); - path("New York", "Long Island"); - path("Newport", "Lexington Concord"); - path("Albany", "Westchester"); - path("Fort Stanwix", "Genesee"); - path("Genesee", "Wyoming Valley"); - path("Fort Niagara", "Pittsburgh"); - path("Morristown", "Westchester"); - path("Morristown", "Wyoming Valley"); - path("Morristown", "Reading"); - path("Morristown", "New Brunswick"); - path("Morristown", "New York"); - path("New York", "New Brunswick"); - path("Monmouth", "New Brunswick"); - path("Philadelphia", "New Brunswick"); - path("Monmouth", "Philadelphia"); - path("Reading", "Philadelphia"); - path("Wyoming Valley", "Reading"); - path("Wilmington DE", "Philadelphia"); - path("Wilmington DE", "Baltimore"); - path("Bassett Town", "Pittsburgh"); - path("Fort Cumberland", "Pittsburgh"); - path("Harrisburg", "Pittsburgh"); - path("Harrisburg", "York"); - path("Reading", "York"); - path("Harrisburg", "Reading"); - path("Frederick Town", "York"); - path("Frederick Town", "Baltimore"); - path("Frederick Town", "Alexandria"); - path("Frederick Town", "Charlottesville"); - path("Frederick Town", "Fort Cumberland"); - path("Richmond", "Alexandria"); - path("Richmond", "Yorktown"); - path("Richmond", "Petersburg"); - path("Richmond", "Lynch's Ferry"); - path("Richmond", "Charlottesville"); - path("Richmond", "Norfolk"); - path("Fincastle", "Charlottesville"); - path("Fincastle", "Lynch's Ferry"); - path("Fincastle", "Fort Chiswell"); - path("Point Pleasant", "Fort Chiswell"); - path("Abingdon", "Fort Chiswell"); - path("Abingdon", "Gilbert Town"); - path("Fort Prince George", "Gilbert Town"); - path("Charlotte", "Gilbert Town"); - path("Charlotte", "Salem"); - path("Hillsboro", "Salem"); - path("Cheraw", "Salem"); - path("Lynch's Ferry", "Salem"); - path("Charlotte", "Camden"); - path("Abingdon", "Fort Prince George"); - path("New Bern", "Norfolk"); - path("Petersburg", "Norfolk"); - path("Petersburg", "Wake (Raleigh)"); - path("New Bern", "Wake (Raleigh)"); - path("Hillsboro", "Wake (Raleigh)"); - path("Petersburg", "Hillsboro"); - path("Petersburg", "Lynch's Ferry"); - path("Wilmington NC", "Wake (Raleigh)"); - path("Wilmington NC", "Cheraw"); - path("Wilmington NC", "Georgetown"); - path("Cheraw", "Georgetown"); - path("Cheraw", "Camden"); - path("Ninety Six", "Fort Prince George"); - path("Ninety Six", "Camden"); - path("Ninety Six", "Augusta"); - path("Eutaw Springs", "Camden"); - path("Eutaw Springs", "Charleston"); - path("Georgetown", "Charleston"); - path("Savannah", "Charleston"); - path("Alexandria", "Baltimore"); - path("Savannah", "Augusta"); - path("Savannah", "St. Mary's"); - path("Charlottesville", "Lynch's Ferry"); + path("Quebec", "Montreal") + path("Montreal", "Ticonderoga") + path("Montreal", "Oswego") + path("Oswego", "Fort Niagara") + path("Oswego", "Fort Stanwix") + path("Fort Niagara", "Fort Detroit") + path("Fort Niagara", "Genesee") + path("Ticonderoga", "Norwich") + path("Ticonderoga", "Saratoga") + path("Norwich", "Brattleboro") + path("Norwich", "Concord") + path("Concord", "Falmouth") + path("Concord", "Brattleboro") + path("Saratoga", "Brattleboro") + path("Saratoga", "Albany") + path("Brattleboro", "Springfield") + path("Fort Stanwix", "Albany") + path("Albany", "Springfield") + path("Lexington Concord", "Springfield") + path("Lexington Concord", "Boston") + path("Falmouth", "Boston") + path("Barnstable", "Boston") + path("Newport", "Boston") + path("Newport", "Hartford") + path("Springfield", "Hartford") + path("New Haven", "Hartford") + path("New Haven", "New York") + path("New Haven", "Westchester") + path("New York", "Westchester") + path("New York", "Long Island") + path("Newport", "Lexington Concord") + path("Albany", "Westchester") + path("Fort Stanwix", "Genesee") + path("Genesee", "Wyoming Valley") + path("Fort Niagara", "Pittsburgh") + path("Morristown", "Westchester") + path("Morristown", "Wyoming Valley") + path("Morristown", "Reading") + path("Morristown", "New Brunswick") + path("Morristown", "New York") + path("New York", "New Brunswick") + path("Monmouth", "New Brunswick") + path("Philadelphia", "New Brunswick") + path("Monmouth", "Philadelphia") + path("Reading", "Philadelphia") + path("Wyoming Valley", "Reading") + path("Wilmington DE", "Philadelphia") + path("Wilmington DE", "Baltimore") + path("Bassett Town", "Pittsburgh") + path("Fort Cumberland", "Pittsburgh") + path("Harrisburg", "Pittsburgh") + path("Harrisburg", "York") + path("Reading", "York") + path("Harrisburg", "Reading") + path("Frederick Town", "York") + path("Frederick Town", "Baltimore") + path("Frederick Town", "Alexandria") + path("Frederick Town", "Charlottesville") + path("Frederick Town", "Fort Cumberland") + path("Richmond", "Alexandria") + path("Richmond", "Yorktown") + path("Richmond", "Petersburg") + path("Richmond", "Lynch's Ferry") + path("Richmond", "Charlottesville") + path("Richmond", "Norfolk") + path("Fincastle", "Charlottesville") + path("Fincastle", "Lynch's Ferry") + path("Fincastle", "Fort Chiswell") + path("Point Pleasant", "Fort Chiswell") + path("Abingdon", "Fort Chiswell") + path("Abingdon", "Gilbert Town") + path("Fort Prince George", "Gilbert Town") + path("Charlotte", "Gilbert Town") + path("Charlotte", "Salem") + path("Hillsboro", "Salem") + path("Cheraw", "Salem") + path("Lynch's Ferry", "Salem") + path("Charlotte", "Camden") + path("Abingdon", "Fort Prince George") + path("New Bern", "Norfolk") + path("Petersburg", "Norfolk") + path("Petersburg", "Wake (Raleigh)") + path("New Bern", "Wake (Raleigh)") + path("Hillsboro", "Wake (Raleigh)") + path("Petersburg", "Hillsboro") + path("Petersburg", "Lynch's Ferry") + path("Wilmington NC", "Wake (Raleigh)") + path("Wilmington NC", "Cheraw") + path("Wilmington NC", "Georgetown") + path("Cheraw", "Georgetown") + path("Cheraw", "Camden") + path("Ninety Six", "Fort Prince George") + path("Ninety Six", "Camden") + path("Ninety Six", "Augusta") + path("Eutaw Springs", "Camden") + path("Eutaw Springs", "Charleston") + path("Georgetown", "Charleston") + path("Savannah", "Charleston") + path("Alexandria", "Baltimore") + path("Savannah", "Augusta") + path("Savannah", "St. Mary's") + path("Charlottesville", "Lynch's Ferry") - sea("Quebec", "Sea1"); - sea("Montreal", "Sea1"); + sea("Quebec", "Sea1") + sea("Montreal", "Sea1") - sea("Falmouth", "Sea2"); - sea("Boston", "Sea2"); - sea("Barnstable", "Sea2"); - sea("Newport", "Sea2"); + sea("Falmouth", "Sea2") + sea("Boston", "Sea2") + sea("Barnstable", "Sea2") + sea("Newport", "Sea2") - sea("New Haven", "Sea3"); - sea("New York", "Sea3"); - sea("Long Island", "Sea3"); + sea("New Haven", "Sea3") + sea("New York", "Sea3") + sea("Long Island", "Sea3") - sea("Philadelphia", "Sea4"); - sea("Wilmington DE", "Sea4"); + sea("Philadelphia", "Sea4") + sea("Wilmington DE", "Sea4") - sea("Baltimore", "Sea5"); - sea("Alexandria", "Sea5"); - sea("Yorktown", "Sea5"); - sea("Norfolk", "Sea5"); + sea("Baltimore", "Sea5") + sea("Alexandria", "Sea5") + sea("Yorktown", "Sea5") + sea("Norfolk", "Sea5") - sea("New Bern", "Sea6"); - sea("Wilmington NC", "Sea6"); - sea("Charleston", "Sea6"); + sea("New Bern", "Sea6") + sea("Wilmington NC", "Sea6") + sea("Charleston", "Sea6") - sea("Savannah", "Sea7"); - sea("St. Mary's", "Sea7"); + sea("Savannah", "Sea7") + sea("St. Mary's", "Sea7") - PATH_NAME = Object.keys(info).sort(); - PATH_TYPE = []; + PATH_NAME = Object.keys(info).sort() + PATH_TYPE = [] for (let id of PATH_NAME) - PATH_TYPE.push(info[id]); + PATH_TYPE.push(info[id]) for (let a in PATH_INDEX) { for (let b in PATH_INDEX[a]) { - let id = a < b ? a + '/' + b : b + '/' + a; - PATH_INDEX[a][b] = PATH_NAME.indexOf(id); + let id = a < b ? a + "/" + b : b + "/" + a + PATH_INDEX[a][b] = PATH_NAME.indexOf(id) } } -})(); +})() -if (typeof module == 'object') { +if (typeof module == "object") { module.exports = { - GENERALS:GENERALS, - BOXES:BOXES, - COLONIES:COLONIES, - SPACES:SPACES, - PATH_NAME:PATH_NAME, - PATH_TYPE:PATH_TYPE, - PATH_INDEX:PATH_INDEX, - BLOCKADE + GENERALS: GENERALS, + BOXES: BOXES, + COLONIES: COLONIES, + SPACES: SPACES, + PATH_NAME: PATH_NAME, + PATH_TYPE: PATH_TYPE, + PATH_INDEX: PATH_INDEX, + BLOCKADE, } } diff --git a/play.js b/play.js index f07bbb4..e7a684d 100644 --- a/play.js +++ b/play.js @@ -1,12 +1,12 @@ -"use strict"; +"use strict" -const THE_13_COLONIES = [ 'NH', 'NY', 'MA', 'CT', 'RI', 'PA', 'NJ', 'MD', 'DE', 'VA', 'NC', 'SC', 'GA' ]; -const ALL_COLONIES = THE_13_COLONIES.concat(['CA']); -const AMERICAN_GENERALS = [ "Arnold", "Gates", "Greene", "Lafayette", "Lee", "Lincoln", "Washington", ]; -const CONTINENTAL_CONGRESS_DISPERSED = "Continental Congress Dispersed"; -const BRITISH = "British"; -const AMERICAN = "American"; -const BLOCKADE_ZONES = [ "Sea1","Sea2","Sea3","Sea4","Sea5","Sea6","Sea7" ]; +const THE_13_COLONIES = [ "NH", "NY", "MA", "CT", "RI", "PA", "NJ", "MD", "DE", "VA", "NC", "SC", "GA" ] +const ALL_COLONIES = THE_13_COLONIES.concat([ "CA" ]) +const AMERICAN_GENERALS = [ "Arnold", "Gates", "Greene", "Lafayette", "Lee", "Lincoln", "Washington" ] +const CONTINENTAL_CONGRESS_DISPERSED = "Continental Congress Dispersed" +const BRITISH = "British" +const AMERICAN = "American" +const BLOCKADE_ZONES = [ "Sea1", "Sea2", "Sea3", "Sea4", "Sea5", "Sea6", "Sea7" ] let ui = { cards: {}, @@ -15,277 +15,288 @@ let ui = { control: {}, blockade: {}, cu: [], -}; +} function on_log(text) { - let p = document.createElement("div"); - text = text.replace(/&/g, "&"); - text = text.replace(//g, ">"); + let p = document.createElement("div") + text = text.replace(/&/g, "&") + text = text.replace(//g, ">") - text = text.replace(/\[(\d+)([^\]]*)\]/, '$1$2'); + text = text.replace(/\[(\d+)([^\]]*)\]/, '$1$2') if (text.match(/^\.h1 /)) { - p.className = 'h1'; - text = text.substring(4); + p.className = "h1" + text = text.substring(4) } else if (text.match(/^\.h2.american /)) { - p.className = 'h2 american'; - text = text.substring(13); + p.className = "h2 american" + text = text.substring(13) } else if (text.match(/^\.h2.british /)) { - p.className = 'h2 british'; - text = text.substring(12); + p.className = "h2 british" + text = text.substring(12) } - p.innerHTML = text; - return p; + p.innerHTML = text + return p } function clearList(container) { while (container.firstChild) - container.removeChild(container.firstChild); + container.removeChild(container.firstChild) } function onHoverCard(X) { - let c = CARDS[X.id.split("+")[1]]; - document.getElementById("status").textContent = JSON.stringify(c); + let c = CARDS[X.id.split("+")[1]] + document.getElementById("status").textContent = JSON.stringify(c) } function onFocusNode(evt) { - let space = SPACES[evt.target.id]; - document.getElementById("status").textContent = space.name; + let space = SPACES[evt.target.id] + document.getElementById("status").textContent = space.name } function onBlurNode(evt) { - let space = SPACES[evt.target.id]; - document.getElementById("status").textContent = ""; + let space = SPACES[evt.target.id] + document.getElementById("status").textContent = "" } function clear_group(name) { - let container = document.getElementById(name); + let container = document.getElementById(name) while (container.firstChild) - container.removeChild(container.firstChild); + container.removeChild(container.firstChild) } function build_marker(container, id, x, y, w, h, classList) { - let e = document.createElement("div"); - e.foo = { w:w, h:h }; - e.classList.add("marker"); + let e = document.createElement("div") + e.foo = { w: w, h: h } + e.classList.add("marker") for (let c of classList) - e.classList.add(c); - e.setAttribute("id", id); - e.style.left = ((x - w/2)|0) + "px"; - e.style.top = ((y - h/2)|0) + "px"; - document.getElementById(container).appendChild(e); - return e; + e.classList.add(c) + e.setAttribute("id", id) + e.style.left = ((x - w / 2) | 0) + "px" + e.style.top = ((y - h / 2) | 0) + "px" + document.getElementById(container).appendChild(e) + return e } function update_marker(e, space) { - let box = SPACES[space] || BOXES[space]; - e.style.left = ((box.x - e.foo.w/2)|0) + "px"; - e.style.top = ((box.y - e.foo.h/2)|0) + "px"; + let box = SPACES[space] || BOXES[space] + e.style.left = ((box.x - e.foo.w / 2) | 0) + "px" + e.style.top = ((box.y - e.foo.h / 2) | 0) + "px" } function update_marker_xy(e, x, y) { - e.style.left = ((x - e.foo.w/2)|0) + "px"; - e.style.top = ((y - e.foo.h/2)|0) + "px"; + e.style.left = ((x - e.foo.w / 2) | 0) + "px" + e.style.top = ((y - e.foo.h / 2) | 0) + "px" } function build_map() { function buildNode(type, x, y, colony) { - let e = document.createElement("div"); - let w, h; - e.classList.add("space"); - e.classList.add(type); - if (colony && colony != 'SEA') - e.classList.add("colony_" + colony); - if (type === 'regular-space') { - w = 66; - h = 66; - } else if (type === 'winter-quarters') { - w = 66; - h = 66; - } else if (type === 'fortified-port') { - w = 54; - h = 54; - } else if (type === 'blockade') { - w = 96; - h = 80; + let e = document.createElement("div") + let w, h + e.classList.add("space") + e.classList.add(type) + if (colony && colony != "SEA") + e.classList.add("colony_" + colony) + if (type === "regular-space") { + w = 66 + h = 66 + } else if (type === "winter-quarters") { + w = 66 + h = 66 + } else if (type === "fortified-port") { + w = 54 + h = 54 + } else if (type === "blockade") { + w = 96 + h = 80 } else { - w = 60; - h = 60; + w = 60 + h = 60 } - let b = 7; - w -= 2; - h -= 2; - e.style.left = (x - w/2 - b) + "px"; - e.style.top = (y - h/2 - b) + "px"; - e.style.width = (w) + "px"; - e.style.height = (h) + "px"; - return e; + let b = 7 + w -= 2 + h -= 2 + e.style.left = x - w / 2 - b + "px" + e.style.top = y - h / 2 - b + "px" + e.style.width = w + "px" + e.style.height = h + "px" + return e } for (let name in SPACES) { - let space = SPACES[name]; + let space = SPACES[name] if (space.colony != null) { - let e = buildNode(space.type, space.x, space.y, SPACES[name].colony); - e.setAttribute("id", name); - e.addEventListener("mouseenter", onFocusNode); - e.addEventListener("mouseleave", onBlurNode); - e.addEventListener("click", on_space); - ui.spaces[name] = e; - document.getElementById("spaces").appendChild(e); - build_marker("pc", name+"-pc", space.x, space.y, 67, 58.5, ["pc"]); + let e = buildNode(space.type, space.x, space.y, SPACES[name].colony) + e.setAttribute("id", name) + e.addEventListener("mouseenter", onFocusNode) + e.addEventListener("mouseleave", onBlurNode) + e.addEventListener("click", on_space) + ui.spaces[name] = e + document.getElementById("spaces").appendChild(e) + build_marker("pc", name + "-pc", space.x, space.y, 67, 58.5, [ "pc" ]) } } for (let zone of BLOCKADE_ZONES) { - let e = buildNode("blockade", BOXES[zone].x, BOXES[zone].y, "SEA"); - e.setAttribute("id", zone); - e.addEventListener("click", on_space); - document.getElementById("spaces").appendChild(e); - ui.blockade[zone] = e; + let e = buildNode("blockade", BOXES[zone].x, BOXES[zone].y, "SEA") + e.setAttribute("id", zone) + e.addEventListener("click", on_space) + document.getElementById("spaces").appendChild(e) + ui.blockade[zone] = e } - ui.turn = build_marker("markers", "GameTurn", - BOXES["Game Turn 1775"].x, BOXES["Game Turn 1775"].y, 56.5, 56.5, - ["turn"]); - - ui.french_alliance = build_marker("markers", "FrenchAlliance", - BOXES["French Alliance Track 0"].x, BOXES["French Alliance Track 0"].y, 56.5, 56.5, - ["french-alliance"]); - - ui.french_navy = build_marker("markers", "FrenchNavy", - BOXES["French Reinforcements"].x-130/2-10, BOXES["French Reinforcements"].y-32, 126/2, 252/2, - ["french-navy"]); - - ui.congress = build_marker("markers", "Congress", - SPACES["Philadelphia"].x, SPACES["Philadelphia"].y, 113/2, 113/2, - ["congress"]); + ui.turn = build_marker("markers", "GameTurn", BOXES["Game Turn 1775"].x, BOXES["Game Turn 1775"].y, 56.5, 56.5, [ + "turn", + ]) + + ui.french_alliance = build_marker( + "markers", + "FrenchAlliance", + BOXES["French Alliance Track 0"].x, + BOXES["French Alliance Track 0"].y, + 56.5, + 56.5, + [ "french-alliance" ] + ) + + ui.french_navy = build_marker( + "markers", + "FrenchNavy", + BOXES["French Reinforcements"].x - 130 / 2 - 10, + BOXES["French Reinforcements"].y - 32, + 126 / 2, + 252 / 2, + [ "french-navy" ] + ) + + ui.congress = build_marker( + "markers", + "Congress", + SPACES["Philadelphia"].x, + SPACES["Philadelphia"].y, + 113 / 2, + 113 / 2, + [ "congress" ] + ) for (let c in COLONIES) { - ui.control[c] = build_marker("markers", "control_" + c, - BOXES[c].x, BOXES[c].y, 38+8, 38+8, - ["control"]); + ui.control[c] = build_marker("markers", "control_" + c, BOXES[c].x, BOXES[c].y, 38 + 8, 38 + 8, [ "control" ]) } for (let c = 1; c <= 110; ++c) { - ui.cards[c] = document.getElementById("card+"+c); - ui.cards[c].addEventListener("click", on_card); + ui.cards[c] = document.getElementById("card+" + c) + ui.cards[c].addEventListener("click", on_card) } for (let g in GENERALS) { - let color = GENERALS[g].owner.toLowerCase(); - ui.generals[g] = build_marker("generals", g, - 0, - 0, - 126/2, - 252/2, - ["general", color, g, "offmap"]); - ui.generals[g].addEventListener("click", on_general); + let color = GENERALS[g].owner.toLowerCase() + ui.generals[g] = build_marker("generals", g, 0, 0, 126 / 2, 252 / 2, [ "general", color, g, "offmap" ]) + ui.generals[g].addEventListener("click", on_general) } } function update_units() { - const unitW = 130/2; - const unitH = 263/2; - const generalX = -22; - const generalY = 22; - const cuX = 20; - const cuY = 10; - - update_marker(ui.turn, "Game Turn " + view.year); + const unitW = 130 / 2 + const unitH = 263 / 2 + const generalX = -22 + const generalY = 22 + const cuX = 20 + const cuY = 10 + + update_marker(ui.turn, "Game Turn " + view.year) if (view.regulars) - ui.turn.classList.remove("no-regulars"); + ui.turn.classList.remove("no-regulars") else - ui.turn.classList.add("no-regulars"); + ui.turn.classList.add("no-regulars") - update_marker(ui.congress, view.congress); + update_marker(ui.congress, view.congress) - update_marker(ui.french_alliance, "French Alliance Track " + view.french_alliance); + update_marker(ui.french_alliance, "French Alliance Track " + view.french_alliance) if (view.european_war) - ui.french_alliance.classList.add("european-war"); + ui.french_alliance.classList.add("european-war") else - ui.french_alliance.classList.remove("european-war"); + ui.french_alliance.classList.remove("european-war") if (view.french_navy == "French Reinforcements") { - let x = BOXES["French Reinforcements"].x-130/2-10; - let y = BOXES["French Reinforcements"].y-32; - let w = 126/2; - let h = 252/2; - ui.french_navy.style.left = ((x-w/2)|0) + "px"; - ui.french_navy.style.top = ((y-h/2)|0) + "px"; + let x = BOXES["French Reinforcements"].x - 130 / 2 - 10 + let y = BOXES["French Reinforcements"].y - 32 + let w = 126 / 2 + let h = 252 / 2 + ui.french_navy.style.left = ((x - w / 2) | 0) + "px" + ui.french_navy.style.top = ((y - h / 2) | 0) + "px" } else { - update_marker(ui.french_navy, view.french_navy); + update_marker(ui.french_navy, view.french_navy) } for (let space in SPACES) { - let space_pc = view.pc[space]; - let e = document.getElementById(space+"-pc"); + let space_pc = view.pc[space] + let e = document.getElementById(space + "-pc") if (e) { if (space_pc === BRITISH) { - e.classList.remove("american"); - e.classList.add("british"); + e.classList.remove("american") + e.classList.add("british") } else if (space_pc === AMERICAN) { - e.classList.add("american"); - e.classList.remove("british"); + e.classList.add("american") + e.classList.remove("british") } else { - e.classList.remove("american"); - e.classList.remove("british"); + e.classList.remove("american") + e.classList.remove("british") } } } for (let c in COLONIES) { - let control = 0; + let control = 0 for (let space of COLONIES[c]) { if (view.pc[space] == BRITISH) - --control; + --control else if (view.pc[space] == AMERICAN) - ++control; + ++control } if (control < 0) - ui.control[c].className = "marker control british"; + ui.control[c].className = "marker control british" else if (control > 0) - ui.control[c].className = "marker control american"; + ui.control[c].className = "marker control american" else - ui.control[c].className = "marker control"; + ui.control[c].className = "marker control" } - let offset = {}; + let offset = {} for (let g in GENERALS) { - let e = ui.generals[g]; - let unit = view.generals[g]; - let space = SPACES[unit.location] || BOXES[unit.location]; + let e = ui.generals[g] + let unit = view.generals[g] + let space = SPACES[unit.location] || BOXES[unit.location] if (space) { - let o = (offset[space.name]|0); - update_marker_xy(e, space.x + o * generalX, space.y + o * generalY - 32); - e.classList.remove("offmap"); - offset[space.name] = ++o; + let o = offset[space.name] | 0 + update_marker_xy(e, space.x + o * generalX, space.y + o * generalY - 32) + e.classList.remove("offmap") + offset[space.name] = ++o } else { - e.classList.add("offmap"); + e.classList.add("offmap") } if (view.who == g) - e.classList.add("selected"); + e.classList.add("selected") else - e.classList.remove("selected"); + e.classList.remove("selected") } // TODO: reuse CU elements - offset = {}; - clear_group("cu"); + offset = {} + clear_group("cu") for (let i = 0; i < view.cu.length; ++i) { - let cu = view.cu[i]; - let space = SPACES[cu.location] || BOXES[cu.location]; - let o = (offset[space.name]|0); - let x = space.x + o * cuX; - let y = space.y + o * cuY; - let e = build_marker("cu", "cu"+i, x, y, 122/2, 122/2, ["cu", cu.owner.toLowerCase()]); - e.textContent = cu.count; - offset[space.name] = ++o; + let cu = view.cu[i] + let space = SPACES[cu.location] || BOXES[cu.location] + let o = offset[space.name] | 0 + let x = space.x + o * cuX + let y = space.y + o * cuY + let e = build_marker("cu", "cu" + i, x, y, 122 / 2, 122 / 2, [ "cu", cu.owner.toLowerCase() ]) + e.textContent = cu.count + offset[space.name] = ++o } } -build_map(); +build_map() function player_info(player, nc, nq) { let info = "" @@ -296,120 +307,120 @@ function player_info(player, nc, nq) { if (nq > 0) info += nq + "\u{231b} " info += nc + "\u{1f3b4}" - return info; + return info } function on_update() { - let e; + let e - roles.American.stat.textContent = player_info(AMERICAN, view.a_cards, view.a_queue); - roles.British.stat.textContent = player_info(BRITISH, view.b_cards, view.b_queue); + roles.American.stat.textContent = player_info(AMERICAN, view.a_cards, view.a_queue) + roles.British.stat.textContent = player_info(BRITISH, view.b_cards, view.b_queue) if (!view.last_played) - document.getElementById("last_played").className = "card show card_back"; + document.getElementById("last_played").className = "card show card_back" else - document.getElementById("last_played").className = "card show card_" + view.last_played; - - action_button("pickup_british_cu", "Pick up British CU"); - action_button("pickup_american_cu", "Pick up American CU"); - action_button("pickup_french_cu", "Pick up French CU"); - action_button("drop_british_cu", "Drop off British CU"); - action_button("drop_american_cu", "Drop off American CU"); - action_button("drop_french_cu", "Drop off French CU"); - action_button("british_first", "British"); - action_button("american_first", "American"); - action_button("surrender", "Surrender"); - action_button("pass", "Next"); - action_button("undo", "Undo"); - - e = document.getElementById("war_ends"); - e.classList.remove("year_1779"); - e.classList.remove("year_1780"); - e.classList.remove("year_1781"); - e.classList.remove("year_1782"); - e.classList.remove("year_1783"); + document.getElementById("last_played").className = "card show card_" + view.last_played + + action_button("pickup_british_cu", "Pick up British CU") + action_button("pickup_american_cu", "Pick up American CU") + action_button("pickup_french_cu", "Pick up French CU") + action_button("drop_british_cu", "Drop off British CU") + action_button("drop_american_cu", "Drop off American CU") + action_button("drop_french_cu", "Drop off French CU") + action_button("british_first", "British") + action_button("american_first", "American") + action_button("surrender", "Surrender") + action_button("pass", "Next") + action_button("undo", "Undo") + + e = document.getElementById("war_ends") + e.classList.remove("year_1779") + e.classList.remove("year_1780") + e.classList.remove("year_1781") + e.classList.remove("year_1782") + e.classList.remove("year_1783") if (view.war_ends) - e.classList.add("year_" + view.war_ends); - - e = document.getElementById("played_british_reinforcements"); - e.classList.remove("ops_1"); - e.classList.remove("ops_2"); - e.classList.remove("ops_3"); - e.classList.add("ops_" + view.played_british_reinforcements); - - e = document.getElementById("played_american_reinforcements_1"); - e.classList.remove("ops_1"); - e.classList.remove("ops_2"); - e.classList.remove("ops_3"); + e.classList.add("year_" + view.war_ends) + + e = document.getElementById("played_british_reinforcements") + e.classList.remove("ops_1") + e.classList.remove("ops_2") + e.classList.remove("ops_3") + e.classList.add("ops_" + view.played_british_reinforcements) + + e = document.getElementById("played_american_reinforcements_1") + e.classList.remove("ops_1") + e.classList.remove("ops_2") + e.classList.remove("ops_3") if (view.played_american_reinforcements.length >= 1) - e.classList.add("ops_" + view.played_american_reinforcements[0]); + e.classList.add("ops_" + view.played_american_reinforcements[0]) - e = document.getElementById("played_american_reinforcements_2"); - e.classList.remove("ops_1"); - e.classList.remove("ops_2"); - e.classList.remove("ops_3"); + e = document.getElementById("played_american_reinforcements_2") + e.classList.remove("ops_1") + e.classList.remove("ops_2") + e.classList.remove("ops_3") if (view.played_american_reinforcements.length >= 2) - e.classList.add("ops_" + view.played_american_reinforcements[1]); + e.classList.add("ops_" + view.played_american_reinforcements[1]) - let cards = view.hand; + let cards = view.hand for (let c = 1; c <= 110; ++c) { - ui.cards[c].classList.remove('enabled'); + ui.cards[c].classList.remove("enabled") if (cards && cards.includes(c)) - ui.cards[c].classList.add('show'); + ui.cards[c].classList.add("show") else - ui.cards[c].classList.remove('show'); + ui.cards[c].classList.remove("show") } for (let space in SPACES) - ui.spaces[space].classList.remove('enabled'); + ui.spaces[space].classList.remove("enabled") for (let general in GENERALS) - ui.generals[general].classList.remove('enabled'); + ui.generals[general].classList.remove("enabled") for (let zone of BLOCKADE_ZONES) - ui.blockade[zone].classList.remove('enabled'); + ui.blockade[zone].classList.remove("enabled") - update_units(); + update_units() if (player != view.active) - return; + return for (let action of Object.keys(view.actions)) { - let args = view.actions[action]; + let args = view.actions[action] switch (action) { - case 'card_play_event': - case 'card_discard_event': - case 'card_campaign': - case 'card_ops_general': - case 'card_ops_pc': - case 'card_ops_reinforcements': - case 'card_ops_queue': - case 'card_battle_play': - case 'card_battle_discard': - case 'exchange_for_discard': - for (let card of args) - ui.cards[card].classList.add('enabled'); - break; - case 'remove_cu': + case "card_play_event": + case "card_discard_event": + case "card_campaign": + case "card_ops_general": + case "card_ops_pc": + case "card_ops_reinforcements": + case "card_ops_queue": + case "card_battle_play": + case "card_battle_discard": + case "exchange_for_discard": + for (let card of args) + ui.cards[card].classList.add("enabled") + break + case "remove_cu": // TODO: target CU not space? - case 'move': - case 'sea_move': - case 'place_continental_congress': - case 'place_reinforcements': - case 'place_american_pc': - case 'place_british_pc': - case 'remove_pc': - case 'flip_pc': - for (let space of args) - ui.spaces[space].classList.add('enabled'); - break; - case 'select_general': - for (let general of args) - ui.generals[general].classList.add('enabled'); - break; - case 'place_navy': - for (let zone of args) - ui.blockade[zone].classList.add('enabled'); + case "move": + case "sea_move": + case "place_continental_congress": + case "place_reinforcements": + case "place_american_pc": + case "place_british_pc": + case "remove_pc": + case "flip_pc": + for (let space of args) + ui.spaces[space].classList.add("enabled") + break + case "select_general": + for (let general of args) + ui.generals[general].classList.add("enabled") + break + case "place_navy": + for (let zone of args) + ui.blockade[zone].classList.add("enabled") } } } @@ -472,39 +483,38 @@ function hide_popup_menu() { function on_card(evt) { if (view.actions) { - let c = evt.target.id.split("+")[1] | 0; + let c = evt.target.id.split("+")[1] | 0 show_popup_menu(evt, "popup", c, CARDS[c].title) } } function get_action_from_arg(x) { for (let action of Object.keys(view.actions)) { - let args = view.actions[action]; + let args = view.actions[action] if (Array.isArray(args) && args.includes(x)) - return action; + return action } - return null; + return null } function on_space(evt) { if (view.actions) { - let space = evt.target.id; - let action = get_action_from_arg(space); + let space = evt.target.id + let action = get_action_from_arg(space) if (action) - send_action(action, space); + send_action(action, space) } } function on_general(evt) { if (view.actions) { - let general = evt.target.id; - let action = get_action_from_arg(general); + let general = evt.target.id + let action = get_action_from_arg(general) if (action) - send_action(action, general); + send_action(action, general) } } function toggle_markers() { - document.querySelector("#map").classList.toggle("hide_markers"); + document.querySelector("#map").classList.toggle("hide_markers") } - -- cgit v1.2.3