Web Dev Solutions

Catalin Mititiuc

import * as panzoom from './modules/panzoom.js'; import * as game from './modules/game.js'; import * as recordSheet from './modules/recordSheet.js'; globalThis.svgns = "http://www.w3.org/2000/svg"; const mapPlaceholder = document.querySelector('.map-placeholder'), distanceOutput = document.getElementById('status'), proneToggle = document.getElementById('toggle-prone-counter'); document.querySelector('object').addEventListener('load', function () { mapPlaceholder.remove(); this.style.opacity = 1; }); document .querySelector('#content input[type="checkbox"].visible') .addEventListener('input', function () { let divs = document.querySelectorAll('#content div'); divs.forEach(d => { if (this.checked) { d.style.display = d.id == 'record-sheet' ? 'flex' : 'block'; } else { d.style.display = 'none'; } }); }); window.addEventListener('load', () => { const svg = document.querySelector('object').contentDocument.querySelector('svg'); game.start(svg); panzoom.start(svg); game.setDistanceCallback((count = '-') => { distanceOutput.querySelector('#hex-count').textContent = count; distanceOutput.style.display = count === '-' ? 'none' : 'block'; }); game.setProneFlagCallback(checked => proneToggle.checked = checked); game.setSelectCallback(data => recordSheet.select(data)); document.querySelectorAll('.soldier-record').forEach(el => el.addEventListener('click', () => { if (el.classList.contains('selected')) { el.classList.remove('selected'); game.unSelect(); recordSheet.unSelect(); } else { game.select(el); } }) ); document.querySelectorAll('.end-move').forEach(el => el.addEventListener('click', () => { recordSheet.endMove(); game.endMove(); })); document.querySelectorAll('.end-turn').forEach(el => el.addEventListener('click', ({ target: { dataset: { allegiance }}}) => { const dataSelector = `[data-allegiance="${allegiance}"]`, records = Array.from(document.querySelectorAll(`.soldier-record${dataSelector}`)), turnCounter = document.getElementById('turn-count'), { dataset: { update }} = turnCounter; el.setAttribute('disabled', ''); document .querySelector(`button.end-turn:not([data-allegiance="${allegiance}"])`) .removeAttribute('disabled'); if (update === '1') { turnCounter.children.namedItem('count').textContent++ turnCounter.dataset.update = '0'; } else { turnCounter.dataset.update = '1'; } records .sort((el1, el2) => el1.dataset.number > el2.dataset.number) .forEach(el => el.classList.remove('movement-ended')); game.endTurn(allegiance); game.select(records.at(0)); }) ); document.querySelectorAll('.set-firing-arc').forEach(el => el.addEventListener('click', game.setFiringArc) ); document.querySelector('.set-grenade').addEventListener('click', game.setGrenade); document.querySelectorAll('#toggle-firing-arc-vis input').forEach(el => el.addEventListener('input', game.toggleFiringArcVisibility) ); document.getElementById('toggle-prone-counter').addEventListener('input', function () { const selected = recordSheet.getSelected(); selected && game.toggleProne(); }); });