index : btroops | |
Virtual board game-aid for BattleTroops, an infantry combat simulator wargame published by FASA in 1989. |
aboutsummaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/game.js | 16 | ||||
-rw-r--r-- | src/modules/game/sightLine.js | 118 |
2 files changed, 61 insertions, 73 deletions
diff --git a/src/modules/game.js b/src/modules/game.js index 1faad8d..d60eff0 100644 --- a/src/modules/game.js +++ b/src/modules/game.js @@ -1,5 +1,5 @@ import * as firingArc from './game/firingArc.js'; -import SightLine from './game/sightLine.js'; +import * as sightLine from './game/sightLine.js'; import Counter from './game/counter.js'; const svgns = "http://www.w3.org/2000/svg"; @@ -77,21 +77,21 @@ function getSelected() { } function clearSightLine() { - sightLine.hexes = []; + sightLine.setHexes([]); sightLine.clear(); distanceCallback && distanceCallback(); } function updateSightLine(cell) { const { dataset: { x: sX }, parentElement: { dataset: { y: sY }}} = cell, - { dataset: { x: tX }, parentElement: { dataset: { y: tY }}} = sightLine.lockTarget; + { dataset: { x: tX }, parentElement: { dataset: { y: tY }}} = sightLine.getLockTarget(); const selector = sightLine.calcIndexes(+sX, +sY, +tX, +tY) .map(([x, y]) => `g[data-y="${y}"] g[data-x="${x}"] use[href="#hex"]`) .join(', '); const hexes = svg.querySelectorAll(selector); - sightLine.hexes = hexes; + sightLine.setHexes(hexes); sightLine.update(getCellPosition(cell)); distanceCallback && distanceCallback(hexes.length - 1); } @@ -105,14 +105,15 @@ function drawSightLine(sourceCell, targetCell) { .join(', '); const hexes = svg.querySelectorAll(selector); - sightLine.hexes = hexes; - sightLine.drawLine(getCellPosition(sourceCell), getCellPosition(targetCell)); + sightLine.setHexes(hexes); + const line = sightLine.create(getCellPosition(sourceCell), getCellPosition(targetCell)); + svg.querySelector('.board').appendChild(line); distanceCallback && distanceCallback(hexes.length - 1); } let svg, distanceCallback, proneFlagCallback, selectCallback; -let board, sightLine, counterMod, +let board, counterMod, placing = []; export function setDistanceCallback(callback) { @@ -130,7 +131,6 @@ export function setSelectCallback(callback) { export function start(el) { svg = el; board = svg.querySelector('.board'); - sightLine = SightLine(board); counterMod = Counter(svg, board); getCells(svg).forEach(cell => { diff --git a/src/modules/game/sightLine.js b/src/modules/game/sightLine.js index f5f52c0..2da99d4 100644 --- a/src/modules/game/sightLine.js +++ b/src/modules/game/sightLine.js @@ -65,7 +65,39 @@ function axial_lerp(q1, r1, q2, r2, t) { return { q: lerp(q1, q2, t), r: lerp(r1, r2, t) }; } -function calcIndexes(x1, y1, x2, y2) { +function lock(sightLine, cell) { + sightLine.classList.remove(activeClassName); + cell.classList.add(targetClassName); + + return cell; +} + +function unlock(sightLine, lockTarget) { + sightLine.classList.add(activeClassName); + lockTarget.classList.remove(targetClassName); + + return null; +} + +let sightLine, lockTarget, + activeHexes = []; + +export function create({ x: x1, y: y1 }, { x: x2, y: y2 }) { + const line = document.createElementNS(svgns, 'line'); + + line.classList.add('sight-line'); + line.classList.add(activeClassName); + line.setAttributeNS(null, 'x1', x1); + line.setAttributeNS(null, 'y1', y1); + line.setAttributeNS(null, 'x2', x2); + line.setAttributeNS(null, 'y2', y2); + + sightLine = line; + + return line; +} + +export function calcIndexes(x1, y1, x2, y2) { const axial1 = evenr_to_axial(x1, y1), axial2 = evenr_to_axial(x2, y2), n = offset_distance(x1, y1, x2, y2), @@ -82,77 +114,33 @@ function calcIndexes(x1, y1, x2, y2) { return results; } -function create({ x: x1, y: y1 }, { x: x2, y: y2 }) { - const sightLine = document.createElementNS(svgns, 'line'); - - sightLine.classList.add('sight-line'); - sightLine.classList.add(activeClassName); - sightLine.setAttributeNS(null, 'x1', x1); - sightLine.setAttributeNS(null, 'y1', y1); - sightLine.setAttributeNS(null, 'x2', x2); - sightLine.setAttributeNS(null, 'y2', y2); +export function clear() { + sightLine && sightLine.remove(); + sightLine = null; - return sightLine; + lockTarget && lockTarget.classList.remove(targetClassName); + lockTarget = null; } -function lock(sightLine, cell) { - sightLine.classList.remove(activeClassName); - cell.classList.add(targetClassName); - - return cell; +export function update({ x, y }) { + sightLine.setAttributeNS(null, 'x1', x); + sightLine.setAttributeNS(null, 'y1', y); } -function unlock(sightLine, lockTarget) { - sightLine.classList.add(activeClassName); - lockTarget.classList.remove(targetClassName); - - return null; +export function toggleLock(cell) { + lockTarget = lockTarget ? unlock(sightLine, lockTarget) : lock(sightLine, cell); } -export default function (board) { - let sightLine, - lockTarget, - activeHexes = []; - - return { - calcIndexes, - - drawLine: function (...positions) { - this.clear(); - - sightLine = create(...positions); - board.appendChild(sightLine); - }, - - clear: function () { - sightLine && sightLine.remove(); - sightLine = null; - - lockTarget && lockTarget.classList.remove(targetClassName); - lockTarget = null; - }, - - update: function ({ x, y }) { - sightLine.setAttributeNS(null, 'x1', x); - sightLine.setAttributeNS(null, 'y1', y); - }, - - toggleLock: function (cell) { - lockTarget = lockTarget ? unlock(sightLine, lockTarget) : lock(sightLine, cell); - }, - - get sightLine() { - return sightLine; - }, +export function getSightLine() { + return sightLine; +} - get lockTarget() { - return lockTarget; - }, +export function getLockTarget() { + return lockTarget; +} - set hexes(hexes) { - activeHexes.forEach(h => h.classList.remove(activeClassName)); - hexes.forEach(h => h.classList.add(activeClassName)); - activeHexes = hexes; - } - }; +export function setHexes(hexes) { + activeHexes.forEach(h => h.classList.remove(activeClassName)); + hexes.forEach(h => h.classList.add(activeClassName)); + activeHexes = hexes; } |