Compare commits

...

2 Commits

Author SHA1 Message Date
Ugo Finnendahl 67e9ca9bca update data 1 month ago
Ugo Finnendahl 69cb0edb60 add sound and set mode 1 month ago
  1. 348
      assets/audio/dotty-floor-english.json
  2. BIN
      assets/audio/dotty-floor-english.mp3
  3. 1
      assets/audio/dotty-floor-german.json
  4. BIN
      assets/audio/dotty-floor-german.mp3
  5. 14
      assets/css/src/style.scss
  6. 2
      assets/css/style.min.css
  7. 2
      assets/js/howler/howler.core.min.js
  8. 3252
      assets/js/howler/howler.es6.js
  9. 3248
      assets/js/howler/howler.js
  10. 4
      assets/js/howler/howler.min.js
  11. 2
      assets/js/howler/howler.spatial.min.js
  12. 374
      assets/js/sound.js
  13. 114
      assets/js/views/xoi/logic.js
  14. 107
      assets/js/views/xoi/main.js
  15. 13
      assets/js/websocket.js
  16. 8
      content/1_members/19_4/member.txt
  17. BIN
      content/1_members/19_4/whatsapp-image-2025-01-11-at-20.21.37.jpeg
  18. 1
      content/1_members/19_4/whatsapp-image-2025-01-11-at-20.21.37.jpeg.txt
  19. 8
      content/1_members/1_32/member.txt
  20. BIN
      content/1_members/1_32/whatsapp-image-2025-01-11-at-20.21.38-2.jpeg
  21. 1
      content/1_members/1_32/whatsapp-image-2025-01-11-at-20.21.38-2.jpeg.txt
  22. 6
      content/1_members/20_7/member.txt
  23. BIN
      content/1_members/20_7/whatsapp-image-2025-01-11-at-20.21.38.jpeg
  24. 1
      content/1_members/20_7/whatsapp-image-2025-01-11-at-20.21.38.jpeg.txt
  25. 8
      content/1_members/21_77/member.txt
  26. BIN
      content/1_members/21_77/whatsapp-image-2025-01-11-at-20.21.38-1.jpeg
  27. 1
      content/1_members/21_77/whatsapp-image-2025-01-11-at-20.21.38-1.jpeg.txt
  28. 10
      content/1_members/23_todo/member.txt
  29. BIN
      content/1_members/23_todo/whatsapp-image-2025-01-11-at-20.26.18.jpeg
  30. 1
      content/1_members/23_todo/whatsapp-image-2025-01-11-at-20.26.18.jpeg.txt
  31. 29
      content/1_members/25_44/member.txt
  32. 29
      content/1_members/26_187/member.txt
  33. 29
      content/1_members/27_987/member.txt
  34. 29
      content/1_members/28_842/member.txt
  35. 8
      content/1_members/5_57/member.txt
  36. BIN
      content/1_members/5_57/whatsapp-image-2025-01-11-at-21.07.59.jpeg
  37. 1
      content/1_members/5_57/whatsapp-image-2025-01-11-at-21.07.59.jpeg.txt
  38. 56
      content/2_seasons/1_2024/4_liga/02cwdpvl/xoi.txt
  39. 63
      content/2_seasons/1_2024/4_liga/4bstxu9p/xoi.txt
  40. 59
      content/2_seasons/1_2024/4_liga/51mzrmmg/xoi.txt
  41. 56
      content/2_seasons/1_2024/4_liga/_drafts/f8s5wzsr/xoi.txt
  42. 55
      content/2_seasons/1_2024/4_liga/amzfpsnt/xoi.txt
  43. 56
      content/2_seasons/1_2024/4_liga/b1awmyuu/xoi.txt
  44. 55
      content/2_seasons/1_2024/4_liga/gcysu6ge/xoi.txt
  45. 59
      content/2_seasons/1_2024/4_liga/h6i76ti0/xoi.txt
  46. 59
      content/2_seasons/1_2024/4_liga/ha1esibi/xoi.txt
  47. 56
      content/2_seasons/1_2024/4_liga/i8uohjhy/xoi.txt
  48. 63
      content/2_seasons/1_2024/4_liga/jjljq15q/xoi.txt
  49. 55
      content/2_seasons/1_2024/4_liga/l4ucpq6e/xoi.txt
  50. 55
      content/2_seasons/1_2024/4_liga/qpddkvtu/xoi.txt
  51. 59
      content/2_seasons/1_2024/4_liga/rzisjfhr/xoi.txt
  52. 55
      content/2_seasons/1_2024/4_liga/snhb1q6l/xoi.txt
  53. 56
      content/2_seasons/1_2024/4_liga/zivyvuea/xoi.txt
  54. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/0unqn7oz/xoi.txt
  55. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/7jyyi9jd/xoi.txt
  56. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/ke3zmbdj/xoi.txt
  57. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/lwfpmbrc/xoi.txt
  58. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/nwtil4iy/xoi.txt
  59. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/qprdjmei/xoi.txt
  60. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/rnmsrmjd/xoi.txt
  61. 41
      content/2_seasons/1_2024/6_christmas-tandem-masters/svlqaiih/xoi.txt
  62. 30
      content/2_seasons/1_2024/6_christmas-tandem-masters/tnmteambrackets.txt
  63. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/yysdpsp6/xoi.txt
  64. 58
      content/2_seasons/1_2024/6_christmas-tandem-masters/zdkj1bt7/xoi.txt
  65. 56
      content/2_seasons/2_2025/1_liga/3mn67fmt/xoi.txt
  66. 56
      content/2_seasons/2_2025/1_liga/9fuvdnmf/xoi.txt
  67. 56
      content/2_seasons/2_2025/1_liga/bdr1jzqm/xoi.txt
  68. 56
      content/2_seasons/2_2025/1_liga/flfryhsx/xoi.txt
  69. 56
      content/2_seasons/2_2025/1_liga/h0zq1fug/xoi.txt
  70. 56
      content/2_seasons/2_2025/1_liga/hgqhzlg8/xoi.txt
  71. 56
      content/2_seasons/2_2025/1_liga/hz33pc6u/xoi.txt
  72. 56
      content/2_seasons/2_2025/1_liga/mmzhxjyt/xoi.txt
  73. 56
      content/2_seasons/2_2025/1_liga/mo31dpb9/xoi.txt
  74. 56
      content/2_seasons/2_2025/1_liga/purpolzx/xoi.txt
  75. 56
      content/2_seasons/2_2025/1_liga/q8royjss/xoi.txt
  76. 56
      content/2_seasons/2_2025/1_liga/rqqgyij4/xoi.txt
  77. 56
      content/2_seasons/2_2025/1_liga/sq9bk6zm/xoi.txt
  78. 56
      content/2_seasons/2_2025/1_liga/ss8b6kc0/xoi.txt
  79. 46
      content/2_seasons/2_2025/1_liga/tnmfreeforall.txt
  80. 56
      content/2_seasons/2_2025/1_liga/tqvgf6k1/xoi.txt
  81. 56
      content/2_seasons/2_2025/1_liga/wgkbkyi0/xoi.txt
  82. 41
      content/2_seasons/2_2025/2_wm/5p9vrukp/xoi.txt
  83. 41
      content/2_seasons/2_2025/2_wm/brkaxrot/xoi.txt
  84. 56
      content/2_seasons/2_2025/2_wm/hvecqnpu/xoi.txt
  85. 56
      content/2_seasons/2_2025/2_wm/jiswbct9/xoi.txt
  86. 56
      content/2_seasons/2_2025/2_wm/lbqps9wh/xoi.txt
  87. 56
      content/2_seasons/2_2025/2_wm/mgqlntiq/xoi.txt
  88. 56
      content/2_seasons/2_2025/2_wm/nwkjxc8z/xoi.txt
  89. 56
      content/2_seasons/2_2025/2_wm/pto9sqqm/xoi.txt
  90. 56
      content/2_seasons/2_2025/2_wm/qfkkf37e/xoi.txt
  91. 56
      content/2_seasons/2_2025/2_wm/rgupwdfp/xoi.txt
  92. 30
      content/2_seasons/2_2025/2_wm/tnmbrackets.txt
  93. 56
      content/2_seasons/2_2025/2_wm/xty5hzf7/xoi.txt
  94. 56
      content/2_seasons/2_2025/2_wm/y1mj6uzr/xoi.txt
  95. 5
      content/2_seasons/2_2025/season.txt
  96. 8
      content/3_templates/_drafts/dodo501bof7/xoi.txt
  97. 41
      content/3_templates/_drafts/sido-301-bof-6/xoi.txt
  98. 41
      content/3_templates/_drafts/sido-501-set-bof-3-3/xoi.txt
  99. 55
      site/templates/xoi.php

@ -0,0 +1,348 @@
{
"1": [0, 654],
"2": [654, 498],
"3": [1152, 560],
"4": [1712, 544],
"5": [2256, 564],
"6": [2820, 663],
"7": [3483, 591],
"8": [4074, 545],
"9": [4619, 560],
"10": [5179, 524],
"11": [5703, 645],
"12": [6348, 581],
"13": [6929, 847],
"14": [7776, 733],
"15": [8509, 873],
"16": [9382, 1020],
"17": [10402, 964],
"18": [11366, 847],
"19": [12213, 930],
"20": [13143, 729],
"21": [13872, 964],
"22": [14836, 950],
"23": [15786, 914],
"24": [16700, 901],
"25": [17601, 986],
"26": [18587, 981],
"27": [19568, 959],
"28": [20527, 923],
"29": [21450, 1047],
"30": [22497, 688],
"31": [23185, 970],
"32": [24155, 858],
"33": [25013, 1050],
"34": [26063, 942],
"35": [27005, 924],
"36": [27929, 972],
"37": [28901, 977],
"38": [29878, 844],
"39": [30722, 918],
"40": [31640, 667],
"41": [32307, 845],
"42": [33152, 928],
"43": [34080, 936],
"44": [35016, 964],
"45": [35980, 992],
"46": [36972, 964],
"47": [37936, 882],
"48": [38818, 863],
"49": [39681, 919],
"50": [40600, 678],
"51": [41278, 912],
"52": [42190, 870],
"53": [43060, 940],
"54": [44000, 883],
"55": [44883, 950],
"56": [45833, 1000],
"57": [46833, 992],
"58": [47825, 906],
"59": [48731, 954],
"60": [49685, 795],
"61": [50480, 993],
"62": [51473, 982],
"63": [52455, 989],
"64": [53444, 1003],
"65": [54447, 1009],
"66": [55456, 1119],
"67": [56575, 1076],
"68": [57651, 1133],
"69": [58784, 1077],
"70": [59861, 874],
"71": [60735, 990],
"72": [61725, 973],
"73": [62698, 1099],
"74": [63797, 1101],
"75": [64898, 1015],
"76": [65913, 1095],
"77": [67008, 1112],
"78": [68120, 1064],
"79": [69184, 1070],
"80": [70254, 661],
"81": [70915, 787],
"82": [71702, 800],
"83": [72502, 930],
"84": [73432, 938],
"85": [74370, 943],
"86": [75313, 957],
"87": [76270, 859],
"88": [77129, 834],
"89": [77963, 876],
"90": [78839, 790],
"91": [79629, 942],
"92": [80571, 973],
"93": [81544, 1017],
"94": [82561, 1019],
"95": [83580, 1003],
"96": [84583, 1113],
"97": [85696, 949],
"98": [86645, 1010],
"99": [87655, 1068],
"100": [88723, 917],
"101": [89640, 1371],
"102": [91011, 1295],
"103": [92306, 1382],
"104": [93688, 1273],
"105": [94961, 1360],
"106": [96321, 1368],
"107": [97689, 1289],
"108": [98978, 1297],
"109": [100275, 1353],
"110": [101628, 1256],
"111": [102884, 1437],
"112": [104321, 1484],
"113": [105805, 1453],
"114": [107258, 1501],
"115": [108759, 1595],
"116": [110354, 1534],
"117": [111888, 1680],
"118": [113568, 1566],
"119": [115134, 1506],
"120": [116640, 1373],
"121": [118013, 1704],
"122": [119717, 1711],
"123": [121428, 1685],
"124": [123113, 1741],
"125": [124854, 1909],
"126": [126763, 1750],
"127": [128513, 1877],
"128": [130390, 1839],
"129": [132229, 1758],
"130": [133987, 1704],
"131": [135691, 1787],
"132": [137478, 1721],
"133": [139199, 1793],
"134": [140992, 1829],
"135": [142821, 1846],
"136": [144667, 1805],
"137": [146472, 1728],
"138": [148200, 1817],
"139": [150017, 1879],
"140": [151896, 1468],
"141": [153364, 1624],
"142": [154988, 1754],
"143": [156742, 1711],
"144": [158453, 1845],
"145": [160298, 1754],
"146": [162052, 1832],
"147": [163884, 1746],
"148": [165630, 1761],
"149": [167391, 1745],
"150": [169136, 1497],
"151": [170633, 1664],
"152": [172297, 1704],
"153": [174001, 1825],
"154": [175826, 1813],
"155": [177639, 1818],
"156": [179457, 1902],
"157": [181359, 1780],
"158": [183139, 1738],
"159": [184877, 1793],
"160": [186670, 1667],
"161": [188337, 1683],
"162": [190020, 1769],
"164": [191789, 1745],
"165": [193534, 1822],
"167": [195356, 1816],
"168": [197172, 1768],
"170": [198940, 1529],
"171": [200469, 1709],
"174": [202178, 1723],
"177": [203901, 1830],
"180": [205731, 1454],
"require_1": [207185, 1659],
"require_2": [208844, 1408],
"require_3": [210252, 1474],
"require_4": [211726, 1549],
"require_5": [213274, 1569],
"require_6": [214843, 1549],
"require_7": [216392, 1505],
"require_8": [217897, 1533],
"require_9": [219430, 1474],
"require_10": [220904, 1444],
"require_11": [222348, 1633],
"require_12": [223981, 1404],
"require_13": [225385, 1761],
"require_14": [227145, 1652],
"require_15": [228797, 1861],
"require_16": [230658, 2008],
"require_17": [232666, 1883],
"require_18": [234549, 1757],
"require_19": [236306, 1844],
"require_20": [238150, 1717],
"require_21": [239867, 1952],
"require_22": [241818, 1870],
"require_23": [243688, 1990],
"require_24": [245678, 1815],
"require_25": [247493, 1991],
"require_26": [249484, 1900],
"require_27": [251384, 1799],
"require_28": [253183, 1746],
"require_29": [254929, 1933],
"require_30": [256861, 1602],
"require_31": [258463, 1975],
"require_32": [260438, 1698],
"require_33": [262136, 2055],
"require_34": [264191, 1862],
"require_35": [266053, 1747],
"require_36": [267800, 1882],
"require_37": [269682, 1896],
"require_38": [271577, 1754],
"require_39": [273331, 1923],
"require_40": [275254, 1672],
"require_41": [276926, 1921],
"require_42": [278847, 1847],
"require_43": [280694, 1924],
"require_44": [282618, 1969],
"require_45": [284587, 2068],
"require_46": [286655, 2040],
"require_47": [288695, 1705],
"require_48": [290400, 1686],
"require_49": [292085, 1838],
"require_50": [293923, 1598],
"require_51": [295521, 1735],
"require_52": [297256, 1710],
"require_53": [298966, 1945],
"require_54": [300911, 1797],
"require_55": [302708, 2026],
"require_56": [304734, 2005],
"require_57": [306739, 1906],
"require_58": [308644, 1894],
"require_59": [310538, 1959],
"require_60": [312497, 1618],
"require_61": [314115, 1903],
"require_62": [316018, 2058],
"require_63": [318076, 1899],
"require_64": [319975, 1923],
"require_65": [321898, 1832],
"require_66": [323729, 2124],
"require_67": [325853, 1962],
"require_68": [327815, 2043],
"require_69": [329858, 1987],
"require_70": [331845, 1784],
"require_71": [333629, 1876],
"require_72": [335505, 2049],
"require_73": [337554, 1939],
"require_74": [339492, 2106],
"require_75": [341598, 1855],
"require_76": [343453, 2171],
"require_77": [345624, 2022],
"require_78": [347646, 1904],
"require_79": [349550, 1980],
"require_80": [351530, 1575],
"require_81": [353105, 1697],
"require_82": [354801, 1805],
"require_83": [356606, 1850],
"require_84": [358456, 1858],
"require_85": [360314, 1862],
"require_86": [362176, 1843],
"require_87": [364019, 1935],
"require_88": [365954, 1720],
"require_89": [367674, 1790],
"require_90": [369463, 1709],
"require_91": [371172, 1765],
"require_92": [372937, 1813],
"require_93": [374750, 1927],
"require_94": [376677, 1939],
"require_95": [378616, 2079],
"require_96": [380695, 2023],
"require_97": [382718, 1835],
"require_98": [384552, 1998],
"require_99": [386550, 1982],
"require_100": [388532, 1922],
"require_101": [390454, 2447],
"require_102": [392901, 2283],
"require_103": [395184, 2302],
"require_104": [397486, 2159],
"require_105": [399645, 2436],
"require_106": [402080, 2208],
"require_107": [404288, 2203],
"require_108": [406491, 2285],
"require_109": [408776, 2272],
"require_110": [411048, 2079],
"require_111": [413127, 2351],
"require_112": [415478, 2489],
"require_113": [417967, 2373],
"require_114": [420339, 2324],
"require_115": [422663, 2418],
"require_116": [425081, 2420],
"require_117": [427501, 2520],
"require_118": [430021, 2554],
"require_119": [432575, 2511],
"require_120": [435086, 2361],
"require_121": [437447, 2614],
"require_122": [440060, 2631],
"require_123": [442691, 2571],
"require_124": [445262, 2564],
"require_125": [447826, 2823],
"require_126": [450649, 2738],
"require_127": [453387, 2882],
"require_128": [456269, 2662],
"require_129": [458931, 2763],
"require_130": [461693, 2692],
"require_131": [464385, 2673],
"require_132": [467058, 2561],
"require_133": [469619, 2798],
"require_134": [472417, 2743],
"require_135": [475160, 2922],
"require_136": [478082, 2881],
"require_137": [480963, 2638],
"require_138": [483600, 2822],
"require_139": [486422, 2702],
"require_140": [489124, 2456],
"require_141": [491580, 2544],
"require_142": [494124, 2664],
"require_143": [496788, 2625],
"require_144": [499413, 2833],
"require_145": [502246, 2668],
"require_146": [504914, 2655],
"require_147": [507568, 2666],
"require_148": [510234, 2601],
"require_149": [512835, 2750],
"require_150": [515585, 2485],
"require_151": [518070, 2652],
"require_152": [520722, 2590],
"require_153": [523312, 2830],
"require_154": [526142, 2733],
"require_155": [528874, 2641],
"require_156": [531515, 2890],
"require_157": [534405, 2699],
"require_158": [537104, 2578],
"require_159": [539682, 2869],
"require_160": [542551, 2581],
"require_161": [545132, 2602],
"require_162": [547734, 2689],
"require_164": [550423, 2585],
"require_165": [553008, 2732],
"require_167": [555739, 2821],
"require_168": [558560, 2756],
"require_170": [561316, 2415],
"require_171": [563731, 2785],
"require_174": [566516, 2633],
"require_177": [569149, 2835],
"require_180": [571984, 2442],
"game_on": [574426, 904],
"game_shot": [575330, 887],
"game_shot_match": [576217, 1724],
"0": [577941, 903]
}

File diff suppressed because one or more lines are too long

@ -427,6 +427,13 @@ body.xoi{
margin-bottom: 1.3em;
}
}
.sidebyside{
display: flex;
& > * {
flex-grow: 1;
flex-basis: 1;
}
}
}
.playerselect{
& > h2{
@ -447,7 +454,12 @@ body.xoi{
"navi navi navi navi navi"
;
background-color: black;
&.Throw{
box-shadow: 0px 0px 2rem 2rem green;
}
&.Takeout{
box-shadow: 0px 0px 2rem 2rem orange;
}
.bigToGo{
margin: $line;
background-color: white;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,374 @@
import './howler/howler.js';
const ToDo = [];
var looperActive = false;
function looper() {
looperActive = true;
if (ToDo.length >= 1) {
const elem = ToDo.shift();
caller.play(elem)
} else {
looperActive = false;
}
}
export function playSound(sound) {
ToDo.push(sound);
if (!looperActive){
looper();
}
}
export const caller = new Howl({
src: ['/assets/audio/dotty-floor-english.mp3'],
onend: function() {
looper()
},
sprite: {
"1": [0, 654],
"2": [654, 498],
"3": [1152, 560],
"4": [1712, 544],
"5": [2256, 564],
"6": [2820, 663],
"7": [3483, 591],
"8": [4074, 545],
"9": [4619, 560],
"10": [5179, 524],
"11": [5703, 645],
"12": [6348, 581],
"13": [6929, 847],
"14": [7776, 733],
"15": [8509, 873],
"16": [9382, 1020],
"17": [10402, 964],
"18": [11366, 847],
"19": [12213, 930],
"20": [13143, 729],
"21": [13872, 964],
"22": [14836, 950],
"23": [15786, 914],
"24": [16700, 901],
"25": [17601, 986],
"26": [18587, 981],
"27": [19568, 959],
"28": [20527, 923],
"29": [21450, 1047],
"30": [22497, 688],
"31": [23185, 970],
"32": [24155, 858],
"33": [25013, 1050],
"34": [26063, 942],
"35": [27005, 924],
"36": [27929, 972],
"37": [28901, 977],
"38": [29878, 844],
"39": [30722, 918],
"40": [31640, 667],
"41": [32307, 845],
"42": [33152, 928],
"43": [34080, 936],
"44": [35016, 964],
"45": [35980, 992],
"46": [36972, 964],
"47": [37936, 882],
"48": [38818, 863],
"49": [39681, 919],
"50": [40600, 678],
"51": [41278, 912],
"52": [42190, 870],
"53": [43060, 940],
"54": [44000, 883],
"55": [44883, 950],
"56": [45833, 1000],
"57": [46833, 992],
"58": [47825, 906],
"59": [48731, 954],
"60": [49685, 795],
"61": [50480, 993],
"62": [51473, 982],
"63": [52455, 989],
"64": [53444, 1003],
"65": [54447, 1009],
"66": [55456, 1119],
"67": [56575, 1076],
"68": [57651, 1133],
"69": [58784, 1077],
"70": [59861, 874],
"71": [60735, 990],
"72": [61725, 973],
"73": [62698, 1099],
"74": [63797, 1101],
"75": [64898, 1015],
"76": [65913, 1095],
"77": [67008, 1112],
"78": [68120, 1064],
"79": [69184, 1070],
"80": [70254, 661],
"81": [70915, 787],
"82": [71702, 800],
"83": [72502, 930],
"84": [73432, 938],
"85": [74370, 943],
"86": [75313, 957],
"87": [76270, 859],
"88": [77129, 834],
"89": [77963, 876],
"90": [78839, 790],
"91": [79629, 942],
"92": [80571, 973],
"93": [81544, 1017],
"94": [82561, 1019],
"95": [83580, 1003],
"96": [84583, 1113],
"97": [85696, 949],
"98": [86645, 1010],
"99": [87655, 1068],
"100": [88723, 917],
"101": [89640, 1371],
"102": [91011, 1295],
"103": [92306, 1382],
"104": [93688, 1273],
"105": [94961, 1360],
"106": [96321, 1368],
"107": [97689, 1289],
"108": [98978, 1297],
"109": [100275, 1353],
"110": [101628, 1256],
"111": [102884, 1437],
"112": [104321, 1484],
"113": [105805, 1453],
"114": [107258, 1501],
"115": [108759, 1595],
"116": [110354, 1534],
"117": [111888, 1680],
"118": [113568, 1566],
"119": [115134, 1506],
"120": [116640, 1373],
"121": [118013, 1704],
"122": [119717, 1711],
"123": [121428, 1685],
"124": [123113, 1741],
"125": [124854, 1909],
"126": [126763, 1750],
"127": [128513, 1877],
"128": [130390, 1839],
"129": [132229, 1758],
"130": [133987, 1704],
"131": [135691, 1787],
"132": [137478, 1721],
"133": [139199, 1793],
"134": [140992, 1829],
"135": [142821, 1846],
"136": [144667, 1805],
"137": [146472, 1728],
"138": [148200, 1817],
"139": [150017, 1879],
"140": [151896, 1468],
"141": [153364, 1624],
"142": [154988, 1754],
"143": [156742, 1711],
"144": [158453, 1845],
"145": [160298, 1754],
"146": [162052, 1832],
"147": [163884, 1746],
"148": [165630, 1761],
"149": [167391, 1745],
"150": [169136, 1497],
"151": [170633, 1664],
"152": [172297, 1704],
"153": [174001, 1825],
"154": [175826, 1813],
"155": [177639, 1818],
"156": [179457, 1902],
"157": [181359, 1780],
"158": [183139, 1738],
"159": [184877, 1793],
"160": [186670, 1667],
"161": [188337, 1683],
"162": [190020, 1769],
"164": [191789, 1745],
"165": [193534, 1822],
"167": [195356, 1816],
"168": [197172, 1768],
"170": [198940, 1529],
"171": [200469, 1709],
"174": [202178, 1723],
"177": [203901, 1830],
"180": [205731, 1454],
"require_1": [207185, 1659],
"require_2": [208844, 1408],
"require_3": [210252, 1474],
"require_4": [211726, 1549],
"require_5": [213274, 1569],
"require_6": [214843, 1549],
"require_7": [216392, 1505],
"require_8": [217897, 1533],
"require_9": [219430, 1474],
"require_10": [220904, 1444],
"require_11": [222348, 1633],
"require_12": [223981, 1404],
"require_13": [225385, 1761],
"require_14": [227145, 1652],
"require_15": [228797, 1861],
"require_16": [230658, 2008],
"require_17": [232666, 1883],
"require_18": [234549, 1757],
"require_19": [236306, 1844],
"require_20": [238150, 1717],
"require_21": [239867, 1952],
"require_22": [241818, 1870],
"require_23": [243688, 1990],
"require_24": [245678, 1815],
"require_25": [247493, 1991],
"require_26": [249484, 1900],
"require_27": [251384, 1799],
"require_28": [253183, 1746],
"require_29": [254929, 1933],
"require_30": [256861, 1602],
"require_31": [258463, 1975],
"require_32": [260438, 1698],
"require_33": [262136, 2055],
"require_34": [264191, 1862],
"require_35": [266053, 1747],
"require_36": [267800, 1882],
"require_37": [269682, 1896],
"require_38": [271577, 1754],
"require_39": [273331, 1923],
"require_40": [275254, 1672],
"require_41": [276926, 1921],
"require_42": [278847, 1847],
"require_43": [280694, 1924],
"require_44": [282618, 1969],
"require_45": [284587, 2068],
"require_46": [286655, 2040],
"require_47": [288695, 1705],
"require_48": [290400, 1686],
"require_49": [292085, 1838],
"require_50": [293923, 1598],
"require_51": [295521, 1735],
"require_52": [297256, 1710],
"require_53": [298966, 1945],
"require_54": [300911, 1797],
"require_55": [302708, 2026],
"require_56": [304734, 2005],
"require_57": [306739, 1906],
"require_58": [308644, 1894],
"require_59": [310538, 1959],
"require_60": [312497, 1618],
"require_61": [314115, 1903],
"require_62": [316018, 2058],
"require_63": [318076, 1899],
"require_64": [319975, 1923],
"require_65": [321898, 1832],
"require_66": [323729, 2124],
"require_67": [325853, 1962],
"require_68": [327815, 2043],
"require_69": [329858, 1987],
"require_70": [331845, 1784],
"require_71": [333629, 1876],
"require_72": [335505, 2049],
"require_73": [337554, 1939],
"require_74": [339492, 2106],
"require_75": [341598, 1855],
"require_76": [343453, 2171],
"require_77": [345624, 2022],
"require_78": [347646, 1904],
"require_79": [349550, 1980],
"require_80": [351530, 1575],
"require_81": [353105, 1697],
"require_82": [354801, 1805],
"require_83": [356606, 1850],
"require_84": [358456, 1858],
"require_85": [360314, 1862],
"require_86": [362176, 1843],
"require_87": [364019, 1935],
"require_88": [365954, 1720],
"require_89": [367674, 1790],
"require_90": [369463, 1709],
"require_91": [371172, 1765],
"require_92": [372937, 1813],
"require_93": [374750, 1927],
"require_94": [376677, 1939],
"require_95": [378616, 2079],
"require_96": [380695, 2023],
"require_97": [382718, 1835],
"require_98": [384552, 1998],
"require_99": [386550, 1982],
"require_100": [388532, 1922],
"require_101": [390454, 2447],
"require_102": [392901, 2283],
"require_103": [395184, 2302],
"require_104": [397486, 2159],
"require_105": [399645, 2436],
"require_106": [402080, 2208],
"require_107": [404288, 2203],
"require_108": [406491, 2285],
"require_109": [408776, 2272],
"require_110": [411048, 2079],
"require_111": [413127, 2351],
"require_112": [415478, 2489],
"require_113": [417967, 2373],
"require_114": [420339, 2324],
"require_115": [422663, 2418],
"require_116": [425081, 2420],
"require_117": [427501, 2520],
"require_118": [430021, 2554],
"require_119": [432575, 2511],
"require_120": [435086, 2361],
"require_121": [437447, 2614],
"require_122": [440060, 2631],
"require_123": [442691, 2571],
"require_124": [445262, 2564],
"require_125": [447826, 2823],
"require_126": [450649, 2738],
"require_127": [453387, 2882],
"require_128": [456269, 2662],
"require_129": [458931, 2763],
"require_130": [461693, 2692],
"require_131": [464385, 2673],
"require_132": [467058, 2561],
"require_133": [469619, 2798],
"require_134": [472417, 2743],
"require_135": [475160, 2922],
"require_136": [478082, 2881],
"require_137": [480963, 2638],
"require_138": [483600, 2822],
"require_139": [486422, 2702],
"require_140": [489124, 2456],
"require_141": [491580, 2544],
"require_142": [494124, 2664],
"require_143": [496788, 2625],
"require_144": [499413, 2833],
"require_145": [502246, 2668],
"require_146": [504914, 2655],
"require_147": [507568, 2666],
"require_148": [510234, 2601],
"require_149": [512835, 2750],
"require_150": [515585, 2485],
"require_151": [518070, 2652],
"require_152": [520722, 2590],
"require_153": [523312, 2830],
"require_154": [526142, 2733],
"require_155": [528874, 2641],
"require_156": [531515, 2890],
"require_157": [534405, 2699],
"require_158": [537104, 2578],
"require_159": [539682, 2869],
"require_160": [542551, 2581],
"require_161": [545132, 2602],
"require_162": [547734, 2689],
"require_164": [550423, 2585],
"require_165": [553008, 2732],
"require_167": [555739, 2821],
"require_168": [558560, 2756],
"require_170": [561316, 2415],
"require_171": [563731, 2785],
"require_174": [566516, 2633],
"require_177": [569149, 2835],
"require_180": [571984, 2442],
"game_on": [574426, 904],
"game_shot": [575330, 887],
"game_shot_match": [576217, 1724],
"0": [577941, 903]
}
});

@ -6,30 +6,33 @@ import { computed } from "vue";
function setPoints(page, set){
let points = [0, 0]; // need to get updated for more player
let ret;
const m = page.game.sets.length-1;
for (const i in page.game.sets) {
const set = page.game.sets[i];
const points = legPoints(page, set, set.legs[set.legs.length-1]);
const winner = getWinner(points, page.legs);
const s = page.game.sets[i];
const p = legPoints(s, s.legs[s.legs.length-1]);
const winner = getWinner(p, page.legs);
if (winner > -1)
points[winner] += 1;
else
else if (winner == -2) {
points[0] += 0.5;
points[1] += 0.5;
} else
return points;
if (set == set){
if (s == set){
return points;
}
}
return points;
}
function legPoints(page, set, leg){
function legPoints(set, leg){
let points = [0, 0]; // need to get updated for more player
let ret;
const m = set.legs.length-1;
for (const i in set.legs) {
const l = set.legs[i];
if (l.visits[l.visits.length-1].toGo === undefined) {
return points;
}
@ -61,8 +64,9 @@ function newPlayerStats(player) {
}
function addNewSetStats(stats, scorers) {
stats["sets"].push(newStats(scorers));
stats["sets"][0]["legs"] = [];
const s = newStats(scorers)
s["legs"] = [];
stats["sets"].push(s);
return stats;
}
@ -142,7 +146,6 @@ function addNewLeg(page){
const set = page.game.sets[page.game.sets.length-1];
const leg = set.legs[set.legs.length-1];
const k = player2scorer(page)[leg.visits[0].player];
console.log(k, k+1);
const p = page.scorers[(k+1)%2].member[0].uuid;
page.game.sets[page.game.sets.length-1].legs.push({
@ -187,6 +190,7 @@ export function initGame(page) {
function updateStats(page, visit){
const playerUUIDs = allPlayers(page).map((p) => p.uuid);
const p = player2scorer(page)[visit.player];
const k = playerUUIDs.indexOf(visit.player);
const todos = [page.stats["stats"][k]];
@ -200,7 +204,7 @@ function updateStats(page, visit){
todos[i]["first9"][0] += visit["sum"];
todos[i]["first9"][1] += visit["numDarts"];
}
if (visit["toGo"][k] == 0) {
if (visit["toGo"][p] == 0) {
todos[i]["checkouts"][0] += 1;
todos[i]["checkoutPoints"].push(visit["sum"]);
}
@ -277,6 +281,7 @@ export function recalcStats(page){
});
if (j == lastleg && i != lastset) {
addNewSetStats(page.stats, page.scorers);
addNewLegStats(page.stats, page.scorers);
}
});
});
@ -345,8 +350,11 @@ export function storeVisit(page, throws, sum, numDarts, outTries, inTries=0) {
}
else {
// rest == 0 leg finished
const newlegp = legPoints(page, set, leg);
const newlegp = legPoints(set, leg);
let winner = getWinner(newlegp, page.legs);
console.log(winner);
if (winner == -1) {
// new Leg
addNewLeg(page);
@ -355,6 +363,7 @@ export function storeVisit(page, throws, sum, numDarts, outTries, inTries=0) {
// new set?
const newsetp = setPoints(page, set);
winner = getWinner(newsetp, page.sets);
console.log("Set", winner, newsetp, page.sets);
if (winner == -1) {
// new Set
addNewSet(page);
@ -387,7 +396,6 @@ export function endGame(page){
export function extension(page){
const set = page.game.sets[page.game.sets.length-1];
const leg = set.legs[set.legs.length-1];
page.enddate = undefined;
// leg["points"] = newlegp;
// new Leg
@ -396,6 +404,34 @@ export function extension(page){
}
export const getVal = (tr) => {
const val = tr.trim().toLowerCase();
if (val == "") {
return 0;
}
if (val == "sb") {
return 25;
}
if (val == "db" || val == "bull") {
return 50;
}
if (val[0] == "s" || val[0] == "o" || val[0] == "i") {
return parseFloat(val.substring(1));
}
if (val[0] == "d") {
return 2 * parseFloat(val.substring(1));
}
if (val[0] == "t") {
return 3 * parseFloat(val.substring(1));
}
if (val[0] == "m") {
return 0;
} else {
// TODO: Check for Na
return parseFloat(val);
}
}
/////////////////////////////////////////
// GameProps
/////////////////////////////////////////
@ -448,7 +484,7 @@ export function getGameProps(page, current_set, current_leg) {
const current_leg_points = computed(() => {
if (current_set.value != undefined || current_leg.value != undefined) {
return legPoints(page, current_set.value, current_leg.value);
return legPoints(current_set.value, current_leg.value);
}
return undefined;
});
@ -482,33 +518,7 @@ export function getGameProps(page, current_set, current_leg) {
});
ret.breaks = breaks;
const getVal = (tr) => {
const val = tr.trim();
if (val == "") {
return 0;
}
if (val == "SB") {
return 25;
}
if (val == "DB") {
return 50;
}
if (val[0] == "S" || val[0] == "O" || val[0] == "I") {
return parseFloat(val.substring(1));
}
if (val[0] == "D") {
return 2 * parseFloat(val.substring(1));
}
if (val[0] == "T") {
return 3 * parseFloat(val.substring(1));
}
if (val[0] == "M") {
return 0;
} else {
// TODO: Check for Na
return parseFloat(val);
}
}
const verifySum = (sum) => {
if (sum > 180 || [179, 178, 176, 175, 173, 172, 169, 166, 163].indexOf(sum) > -1) {
return -1;
@ -531,11 +541,23 @@ export function getGameProps(page, current_set, current_leg) {
const checkVisit = (throws) => {
const tr = throws.split(",");
let sum = 0;
let numDarts = 0;
let fifty = current_toGo.value[current_scorer_idx.value] == 50;
let tries = 0;
tr.forEach((t, i) => {
sum += getVal(t);
const val = getVal(t);
let rest = current_toGo.value[current_scorer_idx.value] - sum;
if ((rest <= 40 && rest % 2 == 0) || (fifty && val != 18 && val != 10)){
tries += 1
fifty = false
} else if (rest == 50) {
fifty = true;
}
sum += val;
numDarts += 1
});
const res = verifySum(sum);
return [res, sum];
return [res, sum, [numDarts, tries]];
}
ret.checkVisit = checkVisit;

@ -1,9 +1,10 @@
import { reactive, ref, computed, onMounted, toRaw } from "vue";
import { reactive, ref, computed, onMounted, onUnmounted, toRaw } from "vue";
import { getQuery, setKirby } from "../../kirby.js";
import { handleActive, ArrowVerticalKeyHandler, ArrowHorizontalKeyHandler, NumberKeyHandler } from "../../handlers.js";
import { overlayAndGet, powerStateMachine, overlayAndPop, popLastElem } from "../../componentPromise.js";
import { getGameProps, initGame, initStats, storeVisit, formatDate, removeLastVisit, extension, getFinalWinner, playerFromUUID } from "./logic.js";
import { autodartsState } from '../../websocket.js'
import { getGameProps, initGame, initStats, storeVisit, formatDate, removeLastVisit, extension, getFinalWinner, getVal } from "./logic.js";
import { playSound } from '../../sound.js';
const html = (v) => { return v[0] };
@ -69,9 +70,9 @@ const pregame = {
<div><span class="label">Scorer 1:</span><d-scorerElem v-index="active" @click="selectScorer(0)" :scorer="page.scorers[0]"></d-scorerElem></div>
<div><span class="label">Scorer 2:</span><d-scorerElem v-index="active" @click="selectScorer(1)" :scorer="page.scorers[1]"></d-scorerElem></div>
<div><span class="label">X01:</span><d-plainElem v-index="active" @click="selectX01()" :text="page.modus"></d-plainElem></div>
<div><span class="label">In:</span><d-plainElem v-index="active" @click="selectIn()" :text="page.in"></d-plainElem></div>
<!-- <div><span class="label">Best of Sets:</span><d-inputElem v-index="active" v-model="page.sets"></d-inputElem></div> -->
<!-- <div><span class="label">X01:</span><d-plainElem v-index="active" @click="selectX01()" :text="page.modus"></d-plainElem></div> -->
<!-- <div><span class="label">In:</span><d-plainElem v-index="active" @click="selectIn()" :text="page.in"></d-plainElem></div> -->
<div><span class="label">Best of Sets:</span><d-inputElem v-index="active" v-model="page.sets"></d-inputElem></div>
<div><span class="label">Best of Legs (per Set):</span><d-inputElem v-index="active" v-model="page.legs"></d-inputElem></div>
<div><d-plainElem text="Start" v-index="active" @click="$emit('resolve', page)"></d-plainElem></div>
</div>
@ -358,7 +359,7 @@ const game = {
}
const gameinput = {
props: ['input','active', 'stack'],
props: ['input','active', 'stack', 'toGo'],
setup(props, context) {
handleActive(props, []);
const check_remove = (event) => {
@ -367,6 +368,55 @@ const gameinput = {
context.emit('reject', -2);
}
}
let inputtext = ref(props.input || "")
// if (websocket){
let throwdetect = (event) => {
if (event.detail.data.event == "Takeout started"){
return
}
if (event.detail.data.event == "Takeout finished" && inputtext.value != "" && inputtext.value != undefined && inputtext.value != NaN){
context.emit('resolve', inputtext.value);
return
}
let throws = event.detail.data.throws;
if (!throws){
return
}
const scored = throws.at(-1).segment.name
if (throws.length == 1) {
inputtext.value = scored;
} else {
inputtext.value += "," + scored
}
const tr = inputtext.value.split(",");
let sum = 0;
tr.forEach((t, i) => {
sum += getVal(t);
});
if (props.toGo - sum == 0 && scored.startsWith("D")) {
playSound("game_shot");
return
}
if (props.toGo - sum <= 1) {
playSound("0");
return
}
if (throws.length == 3) {
playSound(""+sum);
}
};
onMounted(() => {
document.body.addEventListener("autodarts", throwdetect);
if (props.toGo < 170 && [169, 168, 166, 165, 163, 162, 159].indexOf(props.toGo) == -1) {
playSound("require_"+ props.toGo);
}
})
onUnmounted(() => document.body.removeEventListener("autodarts", throwdetect))
// }
const keyhandler = (e) => {
if (e.key == "F1" || e.keyCode == 112) {
e.preventDefault();
@ -384,12 +434,11 @@ const gameinput = {
e.preventDefault();
context.emit('resolve', -1*parseFloat(e.target.value));
}
}
return { check_remove, keyhandler }
return { check_remove, keyhandler, inputtext }
},
template: html`
<input v-index="active" :value="input" @keydown="keyhandler" @keydown.enter.stop="$emit('resolve', $event.target.value)" @keydown.backspace="check_remove($event)">
<input v-index="active" v-model="inputtext" @keydown="keyhandler" @keydown.enter.stop="$emit('resolve', inputtext)" @keydown.backspace="check_remove($event)">
`
}
@ -409,6 +458,7 @@ const xoi = {
const leg_id = ref(props.page.game.sets[set_id.value].legs.length - 1);
let current_stat;
if (props.inspect) {
handleActive(props, [ArrowHorizontalKeyHandler]);
current_set = computed(() => props.page.game.sets[set_id.value]);
current_leg = computed(() => current_set.value.legs[leg_id.value]);
current_stat = computed(() => props.page.stats?.sets[set_id.value].legs[leg_id.value]);
@ -423,7 +473,9 @@ const xoi = {
const computedProps = getGameProps(props.page, current_set, current_leg);
if (!props.inspect) {
current_stat = computed( () => props.page.stats?.sets[props.page.stats.sets.length-1].legs[computedProps.current_set.value.legs.length-1]);
current_stat = computed( () => {
return props.page.stats?.sets[props.page.stats.sets.length-1].legs[computedProps.current_set.value.legs.length-1];
});
}
const mounted = onMounted(async () => {
@ -437,10 +489,10 @@ const xoi = {
}
}
})
return { ...computedProps, set_id, leg_id, gamestack, inspectstack, current_stat }
return { ...computedProps, set_id, leg_id, gamestack, inspectstack, current_stat, autodartsState}
},
template: html`
<div class="xoi">
<div class="xoi" :class="autodartsState.status">
<div class="bigToGo one" :class="{'active' : current_scorer_idx==0 }">{{ current_toGo[0] }}</div>
<d-score :page="page" :justlegs="page && page.sets == 1" :current_set_points="current_set_points" :current_leg_points="current_leg_points"></d-score>
<div class="bigToGo two" :class="{'active' : current_scorer_idx==1 }">{{ current_toGo[1] }}</div>
@ -450,10 +502,10 @@ const xoi = {
</d-game>
<d-scorer class="scorer2" :page="page" :id="1" :current_stat="current_stat" :current_leg="current_leg"></d-scorer>
<div class="nav" v-if="inspect">
<span class="label" v-if="page.sets != 1">Set:</span><d-plainElem :text="set_id+1" v-if="page.sets != 1" v-index="active" @click="set_id = (set_id+1)%page.game.sets.length; leg_id=0"></d-plainElem><span class="label">Leg:</span><d-plainElem style="padding:0.2em 0.5em" :text="leg_id+1" v-index="active" v-autofocus="true" @click="leg_id = (leg_id+1)%current_set.legs.length"></d-plainElem>
<span class="label" v-if="page.sets != 1">Set:</span><d-plainElem style="padding:0.2em 0.5em" :text="set_id+1" v-if="page.sets != 1" v-index="active" @click="set_id = (set_id+1)%page.game.sets.length; leg_id=0"></d-plainElem><span class="label">Leg:</span><d-plainElem style="padding:0.2em 0.5em" :text="leg_id+1" v-index="active" v-autofocus="true" @click="leg_id = (leg_id+1)%current_set.legs.length"></d-plainElem>
</div>
<div class="nav" v-if="!!!inspect">
<span>Shortkeys:</span><span>60 (F1)</span><span>45 (F2)</span><span>41 (F3)</span><span>26 (F4)</span>
<span>Shortkeys:</span><span>60 (F1)</span><span>45 (F2)</span><span>41 (F3)</span><span>26 (F4)</span><span>{{ autodartsState.status}}</span>
</div>
</div>
`
@ -704,10 +756,11 @@ const gameStateMachine = (gamestack, stack, page, computedProps) => {
1: async (input, reGet) => {
// Normal Game Loop
// Get Game Input
let [visit, error] = await overlayAndPop("d-gameinput", { input: input }, gamestack);
const toGo = computedProps.current_toGo.value[computedProps.current_scorer_idx.value * 1]
let [visit, error] = await overlayAndPop("d-gameinput", { input: input, toGo: toGo}, gamestack);
if (parseFloat(visit) < 0 ){
visit = ""+(computedProps.current_toGo.value[computedProps.current_scorer_idx.value * 1] - parseFloat(visit)*-1);
visit = ""+(computedProps.current_toGo.value[computedProps.current_scorer_idx.value * 1] + parseFloat(visit));
}
// back/delete last throw
if (error != undefined) {
@ -722,15 +775,21 @@ const gameStateMachine = (gamestack, stack, page, computedProps) => {
// Validate throw
let numDarts, tries;
const [ret, sum] = computedProps.checkVisit(visit);
const [ret, sum, extra] = computedProps.checkVisit(visit);
[numDarts, tries] = extra;
const manual = !(visit.split(",").length > 1) && !visit.toLowerCase().startsWith("s") && !visit.toLowerCase().startsWith("d") && !visit.toLowerCase().startsWith("t") && !visit.toLowerCase().startsWith("b")
console.log(manual);
if (ret == -1) {
// Impossible
const [_, error] = await overlayAndPop("d-dialog", impossibleDialog(sum), stack);
return [1, visit];
} else if (ret == -2) {
// Bust TODO
const [_, error] = await overlayAndPop("d-dialog", impossibleDialog(sum), stack);
return [1, visit];
// const [_, error] = await overlayAndPop("d-dialog", impossibleDialog(sum), stack);
storeVisit(page, visit.split(","), 0, 3, 0);
saveGame(page);
return [1, undefined];
} else if (ret == 3) {
// Checkins
const [ret, error] = await overlayAndPop("d-dialog", numCheckinTriesDialog(3), stack);
@ -745,10 +804,10 @@ const gameStateMachine = (gamestack, stack, page, computedProps) => {
storeVisit(page, visit.split(","), sum, 3, 0);
saveGame(page);
return [1, undefined]
} else if (ret == 0) {
} else if (ret == 0 && manual) {
// Checkout: Ask for num Darts
[numDarts, tries] = await powerStateMachine(checkoutPipeline(stack), stack, /*initState=*/0, /*initInput=*/sum);
} else if (ret == 1) {
} else if (ret == 1 && manual) {
// <=50: Ask for checkout tries
[numDarts, tries] = await powerStateMachine(checkoutPipeline(stack), stack, /*initState=*/1, /*initInput=*/[3,0]);
}
@ -758,9 +817,12 @@ const gameStateMachine = (gamestack, stack, page, computedProps) => {
return [1, visit];
} else {
const points = storeVisit(page, visit.split(","), sum, numDarts, tries);
console.log(points);
if (points){
// Game Over
const winner = getFinalWinner(page);
let name = "DRAW"
if (winner != -2){
name = page.scorers[winner].member.map((p) => p.forename).join(" + ");
@ -877,6 +939,7 @@ const stateMachine = (stack, page) => {
const ret = await savePregame(page);
return [2, page];
}
await reloadGame(page);
return [4, result];
},
4: async (winnerUUID, reGet) => {

@ -1,12 +1,11 @@
import { reactive, ref } from "vue";
export function connect(endpoint, callback){
const socket = new WebSocket("ws://localhost:4040/subscribe");
const socket = new WebSocket(endpoint);
// Connection opened
socket.addEventListener("open", (event) => {
socket.send(JSON.stringify({
"action": "subscribe",
"value": endpoint
}));
console.log("Connection open");
});
// Listen for messages
@ -16,3 +15,7 @@ export function connect(endpoint, callback){
socket.close();
};
}
export let autodartsState = reactive({
status: null
})

@ -18,8 +18,12 @@ Number: 4
----
Uuid: aHO5FUnIphBwYEjS
Pic: - file://LKjMy1soudIZZ2jy
----
Pic:
Files:
----
Uuid: aHO5FUnIphBwYEjS

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

@ -18,6 +18,14 @@ Number: 32
----
Pic: - file://WH0ovaaT4TO2fXHg
----
Files:
----
Image:
----

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

@ -18,7 +18,11 @@ Number: 7
----
Pic:
Pic: - file://cY3yRntGImTluDAP
----
Files:
----

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

@ -18,8 +18,12 @@ Number: 77
----
Uuid: 5bw1wQY8DAfxUVAw
Pic: - file://R0QVtrTsmZ3xAwPH
----
Pic:
Files:
----
Uuid: 5bw1wQY8DAfxUVAw

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

@ -1,4 +1,4 @@
Title: TODO
Title: 19
----
@ -18,8 +18,12 @@ Number: 19
----
Uuid: 5qeooGppOFqpprW5
Pic: - file://5baUJ1Gjx39STFw3
----
Pic:
Files:
----
Uuid: 5qeooGppOFqpprW5

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@ -0,0 +1,29 @@
Title: 44
----
Forename: Robin
----
Surname: Ritter
----
Nickname: Dark Knight
----
Number: 44
----
Uuid: pKZIBogrnNTG4LFp
----
Pic:
----
Files:

@ -0,0 +1,29 @@
Title: 187
----
Forename: Ramon
----
Surname: Seyer
----
Nickname: TODO
----
Number: 187
----
Uuid: hd5sTvwHIQjPcafl
----
Pic:
----
Files:

@ -0,0 +1,29 @@
Title: 987
----
Forename: Paul
----
Surname: Mahler
----
Nickname: TODO
----
Number: 987
----
Uuid: LBHpqCHE2GPzHvSK
----
Pic:
----
Files:

@ -0,0 +1,29 @@
Title: 842
----
Forename: Leonard
----
Surname: Mahler
----
Nickname: TODO
----
Number: 842
----
Uuid: DYYPDhXs0pAa9FGx
----
Pic:
----
Files:

@ -18,6 +18,14 @@ Number: 57
----
Pic: - file://mKO2GKQMAOG3qUER
----
Files:
----
Uuid: 4CPpeIGeeK8UHTf8
----

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,41 @@
Title: SIDO 301 Bof 6
----
Max: 301
----
Sets: 1
----
Legs: 6
----
In: Straight
----
Out: Double
----
Scorers:
----
Startdate:
----
Enddate:
----
Comment:
----
Uuid: pWrchUzaynd0yxwd

@ -1,4 +1,4 @@
Title: Christmas
Title: Christmas Tandem Masters
----
@ -6,24 +6,32 @@ Participants:
-
member:
- page://7GAUHPdaKdD2sHm9
- page://Jz127lCNtxHgUj2b
- page://xRomcRk5I5n4gkq5
- page://TbZF36aHK27hZvnK
-
member:
- page://UkQNJytohCGIXySl
- page://90CUYLfokdOm9Gw0
- page://CRQRBY9Ac3tXXQse
-
member:
- page://GZaBDcKmbMICoNZ8
- page://5bw1wQY8DAfxUVAw
- page://2ymjLWSMV1xXil3P
-
member:
- page://fShTMgFob20fogyr
- page://xRomcRk5I5n4gkq5
- page://ZUPj0Nw2DcaIQ1H1
-
member:
- page://7GAUHPdaKdD2sHm9
- page://XDZibCkgJ9repYEx
-
member:
- page://5qeooGppOFqpprW5
- page://XDZibCkgJ9repYEx
- page://5qeooGppOFqpprW5
-
member:
- page://5qeooGppOFqpprW5
- page://7GAUHPdaKdD2sHm9
----
@ -31,12 +39,8 @@ Date: 2024-12-14
----
Default: - page://caLr6s1GrTQpYNvj
----
Duo: true
Default: - page://nTn7FZX6JlBEsaIX
----
Uuid: BQqZYReH6e489II3
Uuid: tRCap458BAfJNFUP

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,46 @@
Title: Liga
----
Participants:
- page://fShTMgFob20fogyr
- page://9S2pH2C0vG8XUrye
- page://90CUYLfokdOm9Gw0
- page://Jz127lCNtxHgUj2b
- page://aHO5FUnIphBwYEjS
- page://UkQNJytohCGIXySl
- page://7GAUHPdaKdD2sHm9
- page://CRQRBY9Ac3tXXQse
- page://PGHC3ukSd89IJvZ0
- page://GZaBDcKmbMICoNZ8
- page://2ymjLWSMV1xXil3P
- page://X9VLqkbzJPrGw0tW
- page://Ue0F1SstBqE7xVKr
- page://xRomcRk5I5n4gkq5
- page://j0DfiLQO2GgJ9RN1
- page://4CPpeIGeeK8UHTf8
- page://XDZibCkgJ9repYEx
- page://8TlbKlF7fVBwS24c
- page://5bw1wQY8DAfxUVAw
- page://5qeooGppOFqpprW5
- page://gQUWNqwvWYkT41Ql
- page://x8tm8FzBBY95HqIi
- page://TbZF36aHK27hZvnK
- page://ZUPj0Nw2DcaIQ1H1
- page://pKZIBogrnNTG4LFp
- page://DYYPDhXs0pAa9FGx
- page://LBHpqCHE2GPzHvSK
- page://hd5sTvwHIQjPcafl
----
Date: 2025-12-31
----
Default: - page://nagfzxiV2WxdRc7A
----
Uuid: 6xKxHpqoV7lzsrAQ

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,41 @@
Title: SIDO 501 Set Bof 3:3
----
Max: 501
----
Sets: 3
----
Legs: 3
----
In: Straight
----
Out: Double
----
Scorers:
----
Startdate:
----
Enddate:
----
Comment:
----
Uuid: lBBoyWVHqyYHs5pX

@ -0,0 +1,41 @@
Title: SIDO 501 Set Bof 3:3
----
Max: 501
----
Sets: 3
----
Legs: 3
----
In: Straight
----
Out: Double
----
Scorers:
----
Startdate:
----
Enddate:
----
Comment:
----
Uuid: k005kaVLajujVisg

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,30 @@
Title: WM
----
Participants:
- page://fShTMgFob20fogyr
- page://7GAUHPdaKdD2sHm9
- page://4CPpeIGeeK8UHTf8
- page://TbZF36aHK27hZvnK
- page://x8tm8FzBBY95HqIi
- page://UkQNJytohCGIXySl
- page://90CUYLfokdOm9Gw0
- page://GZaBDcKmbMICoNZ8
- page://LBHpqCHE2GPzHvSK
- page://XDZibCkgJ9repYEx
- page://ZUPj0Nw2DcaIQ1H1
- page://xRomcRk5I5n4gkq5
----
Date: 2025-03-01
----
Default: - page://1Cu65chU61xX5G0M
----
Uuid: NCfxcSiGIOgAi94U

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,5 @@
Title: 2025
----
Uuid: 6AbqIbvgnzjGUY98

@ -2,10 +2,6 @@ Title: SIDO 501 Bof 7
----
Uuid: caLr6s1GrTQpYNvj
----
Max: 501
----
@ -39,3 +35,7 @@ Enddate:
----
Comment:
----
Uuid: caLr6s1GrTQpYNvj

@ -0,0 +1,41 @@
Title: SIDO 301 Bof 6
----
Max: 301
----
Sets: 1
----
Legs: 6
----
In: Straight
----
Out: Double
----
Scorers:
----
Startdate:
----
Enddate:
----
Comment:
----
Uuid: nTn7FZX6JlBEsaIX

@ -0,0 +1,41 @@
Title: SIDO 501 Set Bof 3:3
----
Max: 501
----
Sets: 3
----
Legs: 3
----
In: Straight
----
Out: Double
----
Scorers:
----
Startdate:
----
Enddate:
----
Comment:
----
Uuid: 1Cu65chU61xX5G0M

@ -26,11 +26,54 @@
app.component("d-renderer", renderer);
app.mount('main')
</script>
<!-- <script type="module">
import { connect } from "<?= asset("assets/js/websocket.js") ?>";
connect("<?= $page->id() ?>", (event) => {
console.log("Message from server ", JSON.parse(event.data));
});
<script type="module">
import { connect, autodartsState } from "<?= asset("assets/js/websocket.js") ?>";
</script> -->
document.addEventListener("keydown", (event) => {
if (event.key == "F6"){
event.preventDefault();
fetch('http://localhost:3180/api/reset', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
})
}
if (event.key == "F7"){
event.preventDefault();
fetch('http://localhost:3180/api/start', {
method: 'PUT',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
})
}
if (event.key == "F8"){
event.preventDefault();
fetch('http://localhost:3180/api/stop', {
method: 'PUT',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
})
}
if (event.key == "u"){
event.preventDefault();
connect("ws://localhost:3180/api/events", (event) => {
let data = JSON.parse(event.data);
if(data.type == "state"){
autodartsState.status = data.data.status;
const evt = new CustomEvent("autodarts", {detail: data});
document.body.dispatchEvent(evt);
console.log("Message from server ", data);
console.log(autodartsState.status);
}
});
}
});
</script>
<?php snippet("footer") ?>

Loading…
Cancel
Save