Remove calling the counter module with 'new'
This commit is contained in:
parent
d73b534f68
commit
ef885b91c2
@ -15,7 +15,7 @@ export default class Game {
|
||||
|
||||
this.firingArc = FiringArc(svg, board);
|
||||
this.sightLine = SightLine(board);
|
||||
this.counter = new Counter(svg);
|
||||
this.counter = Counter(svg, board);
|
||||
|
||||
this.setUpCells();
|
||||
|
||||
|
@ -1,47 +1,15 @@
|
||||
const svgns = "http://www.w3.org/2000/svg";
|
||||
const svgns = "http://www.w3.org/2000/svg",
|
||||
selectedClass = 'selected';
|
||||
|
||||
export default class Counter {
|
||||
#board;
|
||||
|
||||
constructor(svg, board) {
|
||||
this.svg = svg;
|
||||
this.#board = board;
|
||||
this.selectedClass = 'selected';
|
||||
}
|
||||
|
||||
dataSelector({ dataset: { allegiance, number }}) {
|
||||
function dataSelector({ dataset: { allegiance, number }}) {
|
||||
return `[data-number="${number}"][data-allegiance="${allegiance}"]`;
|
||||
}
|
||||
|
||||
position(x, y) {
|
||||
return `g[data-x="${x}"][data-y="${y}"]`;
|
||||
function traceSelector(counter) {
|
||||
return `polyline.move-trace${dataSelector(counter)}`;
|
||||
}
|
||||
|
||||
counterPosition(x, y) {
|
||||
return `.counter[data-x="${x}"][data-x="${y}"]`;
|
||||
}
|
||||
|
||||
traceSelector(counter) {
|
||||
return `polyline.move-trace${this.dataSelector(counter)}`;
|
||||
}
|
||||
|
||||
getClones(counter) {
|
||||
return this.svg.querySelectorAll(`.counter.clone${this.dataSelector(counter)}`);
|
||||
}
|
||||
|
||||
getCounter(selected) {
|
||||
return this.svg.querySelector(`.counter${this.dataSelector(selected)}:not(.clone)`);
|
||||
}
|
||||
|
||||
getCounterAndClones(counter) {
|
||||
return this.svg.querySelectorAll(`.counter${this.dataSelector(counter)}`);
|
||||
}
|
||||
|
||||
getTrace(counter) {
|
||||
return this.svg.querySelector(this.traceSelector(counter));
|
||||
}
|
||||
|
||||
getCellPosition(cell) {
|
||||
function getCellPosition(cell) {
|
||||
let pt = new DOMPoint(0, 0),
|
||||
transform = getComputedStyle(cell).transform.match(/-?\d+\.?\d*/g),
|
||||
mtx = new DOMMatrix(transform);
|
||||
@ -54,16 +22,29 @@ export default class Counter {
|
||||
return pt;
|
||||
}
|
||||
|
||||
getBoard() {
|
||||
return this.svg.querySelector('.board');
|
||||
function getClones(svg, counter) {
|
||||
return svg.querySelectorAll(`.counter.clone${dataSelector(counter)}`);
|
||||
}
|
||||
|
||||
place(selected, cell) {
|
||||
function getCounterAndClones(svg, counter) {
|
||||
return svg.querySelectorAll(`.counter${dataSelector(counter)}`);
|
||||
}
|
||||
|
||||
export default function (svg, board) {
|
||||
function getCounter(selected) {
|
||||
return svg.querySelector(`.counter${dataSelector(selected)}:not(.clone)`);
|
||||
}
|
||||
|
||||
function getTrace(counter) {
|
||||
return svg.querySelector(traceSelector(counter));
|
||||
}
|
||||
|
||||
function place(selected, cell) {
|
||||
let points,
|
||||
counterNodeList = this.getCounterAndClones(selected);
|
||||
counterNodeList = getCounterAndClones(svg, selected);
|
||||
|
||||
if (counterNodeList.length > 0 && selected.parentElement.hasAttribute('data-x')) {
|
||||
let trace = this.svg.querySelector(this.traceSelector(selected));
|
||||
let trace = svg.querySelector(traceSelector(selected));
|
||||
|
||||
let prevCoords = [
|
||||
selected.parentElement.dataset.x,
|
||||
@ -71,7 +52,7 @@ export default class Counter {
|
||||
]
|
||||
|
||||
let clone = selected.cloneNode(true);
|
||||
clone.classList.remove(this.selectedClass);
|
||||
clone.classList.remove(selectedClass);
|
||||
clone.classList.add('clone');
|
||||
|
||||
selected.dataset.previous = prevCoords;
|
||||
@ -86,8 +67,8 @@ export default class Counter {
|
||||
}
|
||||
});
|
||||
|
||||
let previous = this.getCellPosition(clone.parentElement),
|
||||
current = this.getCellPosition(selected.parentElement);
|
||||
let previous = getCellPosition(clone.parentElement),
|
||||
current = getCellPosition(selected.parentElement);
|
||||
|
||||
if (!trace) {
|
||||
trace = document.createElementNS(svgns, 'polyline');
|
||||
@ -98,7 +79,7 @@ export default class Counter {
|
||||
trace.dataset.allegiance = selected.dataset.allegiance;
|
||||
trace.classList.add('move-trace');
|
||||
|
||||
this.getBoard().prepend(trace);
|
||||
board.prepend(trace);
|
||||
} else {
|
||||
points = `${trace.getAttribute('points')} ${current.x},${current.y}`;
|
||||
}
|
||||
@ -110,12 +91,12 @@ export default class Counter {
|
||||
}
|
||||
}
|
||||
|
||||
removeClones(counter) {
|
||||
this.getClones(counter).forEach(c => c.remove());
|
||||
function removeClones(counter) {
|
||||
getClones(svg, counter).forEach(c => c.remove());
|
||||
}
|
||||
|
||||
endMove(counter) {
|
||||
const trace = this.svg.querySelector(this.traceSelector(counter)),
|
||||
function endMove(counter) {
|
||||
const trace = svg.querySelector(traceSelector(counter)),
|
||||
proneCounter = counter.querySelector('[href="#counter-prone"]');
|
||||
|
||||
if (trace) {
|
||||
@ -128,14 +109,14 @@ export default class Counter {
|
||||
proneCounter.dataset.preexisting = '';
|
||||
}
|
||||
|
||||
this.removeClones(counter);
|
||||
removeClones(counter);
|
||||
}
|
||||
|
||||
hasProne(counter) {
|
||||
function hasProne(counter) {
|
||||
return !!counter.querySelector('[href="#counter-prone"]');
|
||||
}
|
||||
|
||||
toggleProne(counter) {
|
||||
function toggleProne(counter) {
|
||||
let proneCounter = counter.querySelector('[href="#counter-prone"]');
|
||||
|
||||
if (!proneCounter) {
|
||||
@ -148,4 +129,17 @@ export default class Counter {
|
||||
proneCounter.remove();
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
get selectedClass() {
|
||||
return selectedClass;
|
||||
},
|
||||
endMove,
|
||||
getCounter,
|
||||
hasProne,
|
||||
toggleProne,
|
||||
place,
|
||||
getTrace,
|
||||
removeClones
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user