Change elevation level when revealing counter on map

This commit is contained in:
Catalin Constantin Mititiuc 2025-06-16 22:41:34 -07:00
parent d393f23e36
commit 5eb60c0832
2 changed files with 22 additions and 19 deletions

View File

@ -58,6 +58,7 @@ let scenarioTemplate;
async function buildScenario(req) { async function buildScenario(req) {
gameboard.stop(); gameboard.stop();
recordSheet.stop(); recordSheet.stop();
Observable.notify('viewElevation', 0);
const map = document.querySelector('object').contentDocument.querySelector('svg'); const map = document.querySelector('object').contentDocument.querySelector('svg');
const template = scenarioTemplate.querySelector('svg').cloneNode(true); const template = scenarioTemplate.querySelector('svg').cloneNode(true);
@ -146,6 +147,12 @@ function roll(die) {
return numsAsWords[getRandomIntInclusive(0, numsAsWords.length - 1)]; return numsAsWords[getRandomIntInclusive(0, numsAsWords.length - 1)];
} }
function viewElevation(elevationLevel) {
const id = elevationLevel >= 0 ? elevationLevel : 'basement';
document.querySelector(`#select-elevation-${id}`).checked = true;
document.querySelector('object').contentDocument.querySelector('.gameboard').dataset.viewElevation = elevationLevel;
}
async function load() { async function load() {
const svg = this.contentDocument.querySelector('svg'), const svg = this.contentDocument.querySelector('svg'),
startLocs = svg.querySelector('.start-locations') startLocs = svg.querySelector('.start-locations')
@ -172,7 +179,10 @@ document.querySelectorAll('.end-turn').forEach(el =>
gameboard.clearFiringArcs(opponent); gameboard.clearFiringArcs(opponent);
if (opponentRecords.length > 0) { if (opponentRecords.length > 0) {
Observable.notify('select', opponentRecords.at(0), { revealCounter: true, revealRecord: true }); Observable.notify('select', opponentRecords.at(0), {
revealCounter: true,
revealRecord: true
});
} }
}) })
); );
@ -256,17 +266,11 @@ document.querySelectorAll('.select-elevation button').forEach(el => el.addEventL
next = next[siblingMethod]; next = next[siblingMethod];
} while (next !== null && !next.matches('input')); } while (next !== null && !next.matches('input'));
if (next) { if (next) Observable.notify('viewElevation', next.value);
next.checked = true;
const event = new Event('change', { value: next.value });
next.dispatchEvent(event);
}
})); }));
document.querySelectorAll('[name="select-elevation"]').forEach(el => { document.querySelectorAll('[name="select-elevation"]').forEach(el => {
el.addEventListener('change', function (e) { el.addEventListener('change', e => Observable.notify('viewElevation', el.value));
document.querySelector('object').contentDocument.querySelector('.gameboard').dataset.viewElevation = this.value;
});
}); });
document.querySelector('#toggle-grid-vis').addEventListener('change', function () { document.querySelector('#toggle-grid-vis').addEventListener('change', function () {
@ -347,3 +351,4 @@ dice.forEach(el => {
}); });
Observable.subscribe('distance', distance); Observable.subscribe('distance', distance);
Observable.subscribe('viewElevation', viewElevation);

View File

@ -182,10 +182,16 @@ function selectOffBoard() {
Observable.notify('select', this, { revealRecord: true }); Observable.notify('select', this, { revealRecord: true });
} }
function viewElevation(elevationLevel) {
const gb = svg.querySelector('.gameboard');
gb.dataset.viewElevation = elevationLevel;
}
function panMapToCounter(counter) { function panMapToCounter(counter) {
const gb = svg.querySelector('.gameboard'); const gb = svg.querySelector('.gameboard');
if (gb.contains(counter)) { if (gb.contains(counter)) {
Observable.notify('viewElevation', counter.parentElement.dataset.t);
const counterRect = counter.getBoundingClientRect(); const counterRect = counter.getBoundingClientRect();
const mapRect = svg.parentNode.defaultView.frameElement.getBoundingClientRect(); const mapRect = svg.parentNode.defaultView.frameElement.getBoundingClientRect();
@ -400,8 +406,6 @@ export function start(el) {
// //
const trooper1 = soldier.createCounter({ dataset: { allegiance: 'attacker', number: 1, squad: 1 }}, 'blazer'); const trooper1 = soldier.createCounter({ dataset: { allegiance: 'attacker', number: 1, squad: 1 }}, 'blazer');
soldier.place(svg, trooper1, getCell(-3, 9, -6, 0)); soldier.place(svg, trooper1, getCell(-3, 9, -6, 0));
soldier.place( soldier.place(
@ -410,14 +414,6 @@ export function start(el) {
getCell(1, -8, 7, 0) getCell(1, -8, 7, 0)
); );
const t1Rect = trooper1.getBoundingClientRect();
setTimeout(() => {
const t1Rect = trooper1.getBoundingClientRect();
console.log('trooper', trooper1, trooper1.getBoundingClientRect());
}, 10);
// Add some counters in an unoccupied cell // Add some counters in an unoccupied cell
//const countersCell = getCell(-1, 1, 0, 0); //const countersCell = getCell(-1, 1, 0, 0);
@ -447,6 +443,7 @@ export function start(el) {
Observable.subscribe('select', select); Observable.subscribe('select', select);
Observable.subscribe('endmove', endMove); Observable.subscribe('endmove', endMove);
Observable.subscribe('viewElevation', viewElevation);
console.log('gameboard.js loaded'); console.log('gameboard.js loaded');
} }
@ -454,6 +451,7 @@ export function start(el) {
export function stop() { export function stop() {
Observable.unsubscribe('select', select); Observable.unsubscribe('select', select);
Observable.unsubscribe('endmove', endMove); Observable.unsubscribe('endmove', endMove);
Observable.unsubscribe('viewElevation', viewElevation);
} }
export function getUnits() { export function getUnits() {