index : btroops | |
Virtual board game-aid for BattleTroops, an infantry combat simulator wargame published by FASA in 1989. |
aboutsummaryrefslogtreecommitdiff |
diff options
author | Catalin Mititiuc <webdevcat@proton.me> | 2024-04-23 21:14:30 -0700 |
---|---|---|
committer | Catalin Mititiuc <webdevcat@proton.me> | 2024-04-23 21:14:30 -0700 |
commit | 96e6f8a09afaf7bc729b7e14eb0d72dd372ca9fd (patch) | |
tree | 2e916cb653ec260905e5773aaf056f6c8a9cfb8f /src/modules | |
parent | f60969ef8dc72d3b97c5abb9f637171d2a6f2921 (diff) |
WIP: sight line and trace working again
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/counter.js | 6 | ||||
-rw-r--r-- | src/modules/game.js | 39 | ||||
-rw-r--r-- | src/modules/sightLine.js | 4 |
3 files changed, 42 insertions, 7 deletions
diff --git a/src/modules/counter.js b/src/modules/counter.js index 162e56e..21a0238 100644 --- a/src/modules/counter.js +++ b/src/modules/counter.js @@ -44,6 +44,9 @@ export default class Counter { return this.svg.querySelectorAll(`use[data-allegiance="${al}"][data-number="${n}"]`); } + getTrace({ dataset: { allegiance, number } }) { + return this.svg.querySelector(this.traceSelector(number, allegiance)); + } getCellPosition(cell) { let pt = new DOMPoint(0, 0), @@ -144,9 +147,6 @@ export default class Counter { const counter = this.getCounter(troopAllegiance, troopNumber), lockedSl = this.svg.querySelector('.sight-line:not(.active)'); - counter.setAttributeNS(null, 'x', 0); - counter.setAttributeNS(null, 'y', 0); - if (!lockedSl) { this.container.sightLine.clear(); } else { diff --git a/src/modules/game.js b/src/modules/game.js index ca911ed..a81cb5f 100644 --- a/src/modules/game.js +++ b/src/modules/game.js @@ -166,15 +166,36 @@ export default class Game { } else if (toPlace && !state.occupant) { this.counter.place(point); this.placing.push(toPlace); + const lockedSl = this.svg.querySelector('.sight-line:not(.active)'); + + if (!lockedSl) { + this.sightLine.clear(); + } else { + this.sightLine.update(cell, this.getCellPosition(cell)); + } } else if (toPlace && state.occupant) { if (toPlace === state.occupant) { if ('previous' in toPlace.dataset) { + const trace = this.counter.getTrace(toPlace); toPlace.remove(); toPlace = this.getCounterAtGridIndex(...toPlace.dataset.previous.split(',')); toPlace.classList.remove('clone'); toPlace.classList.add('selected'); - console.log(toPlace); + if (!('previous' in toPlace.dataset)) { + trace.remove(); + } else { + const points = trace.getAttribute('points').split(' '); + points.pop(); + trace.setAttributeNS(null, 'points', points.join(' ')); + } this.placing.push(toPlace); + const lockedSl = this.svg.querySelector('.sight-line:not(.active)'); + + if (!lockedSl) { + this.sightLine.clear(); + } else { + this.sightLine.update(toPlace.parentElement, this.getCellPosition(toPlace.parentElement)); + } } else { this.counter.unSelect(); } @@ -189,10 +210,24 @@ export default class Game { toPlace.remove(); toPlace = state.occupant; this.counter.removeClones(toPlace); + this.counter.getTrace(toPlace).remove(); + const lockedSl = this.svg.querySelector('.sight-line:not(.active)'); + + if (!lockedSl) { + this.sightLine.clear(); + } else { + this.sightLine.update(cell, this.getCellPosition(cell)); + } } else { - const index = this.getGridIndex(state.occupant); + const index = this.getGridIndex(state.occupant), + trace = this.counter.getTrace(toPlace), + pos = this.getCellPosition(cell), + points = trace.getAttribute('points').split(' ').filter(p => p != `${pos.x},${pos.y}`).join(' ');; + let current = toPlace; + trace.setAttributeNS(null, 'points', points); + while (current.dataset.previous != `${index.x},${index.y}`) { current = this.getCounterAtGridIndex(...current.dataset.previous.split(',')); } diff --git a/src/modules/sightLine.js b/src/modules/sightLine.js index de88521..4790bd8 100644 --- a/src/modules/sightLine.js +++ b/src/modules/sightLine.js @@ -170,8 +170,8 @@ export default class SightLine { update(cell, { x, y }) { const sl = this.svg.querySelector('.sight-line'), target = this.svg.querySelector('.sight-line-target').parentElement, - x1 = cell.parentElement.dataset.x, - y1 = cell.parentElement.parentElement.dataset.y, + x1 = cell.dataset.x, + y1 = cell.parentElement.dataset.y, x2 = target.dataset.x, y2 = target.parentElement.dataset.y; |