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-07-15 18:04:39 -0700 |
---|---|---|
committer | Catalin Mititiuc <webdevcat@proton.me> | 2024-07-15 18:04:39 -0700 |
commit | b4fee4fde92b631e7b57839c581124c443f16856 (patch) | |
tree | 2b7361a8cd0115f8d61cb47e1ee5afce40a25d70 /src | |
parent | a06d8b03259e372a812b7c5c7f0776952157fdd9 (diff) |
WIP: add mech template counter
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/gameboard.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/modules/gameboard.js b/src/modules/gameboard.js index be725b5..d8b43f8 100644 --- a/src/modules/gameboard.js +++ b/src/modules/gameboard.js @@ -295,6 +295,102 @@ export function start(el) { // soldier.place(svg, soldier.createCounter(attacker, 'blazer'), getCell(0, 0, 0, 0)); // soldier.place(svg, soldier.createCounter(defender, 'rifle'), getCell(-1, 0, 1, 0)); + const img = document.createElementNS("http://www.w3.org/2000/svg", 'image'); + img.setAttribute('href', '/assets/images/mech_template.png'); + img.setAttribute('width', '77'); + img.setAttribute('height', '77'); + img.setAttribute('transform', 'translate(-38.75, -38.5)'); + img.style.pointerEvents = 'none'; + + const mech = document.createElementNS("http://www.w3.org/2000/svg", 'g'); + mech.setAttribute('transform', 'rotate(0) translate(-2.25, 0)'); + mech.style.pointerEvents = 'none'; + + const deadZone = document.createElementNS("http://www.w3.org/2000/svg", 'circle'); + deadZone.style.stroke = 'red'; + deadZone.style.strokeOpacity = 0.5; + deadZone.style.pointerEvents = 'none'; + deadZone.setAttribute('r', '36.5'); + + const leftFoot = document.createElementNS("http://www.w3.org/2000/svg", 'rect'); + leftFoot.style.fill = 'red'; + leftFoot.style.fillOpacity = 0.5; + leftFoot.setAttribute('x', '-16.25'); + leftFoot.setAttribute('y', '5.75'); + leftFoot.setAttribute('width', '34.5'); + leftFoot.setAttribute('height', '12.25'); + + const rightFoot = document.createElementNS("http://www.w3.org/2000/svg", 'rect'); + rightFoot.style.fill = 'red'; + rightFoot.style.fillOpacity = 0.5; + rightFoot.setAttribute('x', '-16.25'); + rightFoot.setAttribute('y', '5.75'); + rightFoot.setAttribute('width', '34.5'); + rightFoot.setAttribute('height', '12.25'); + rightFoot.setAttribute('transform', 'scale(1 -1)'); + + const forwardArc = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + forwardArc.setAttribute('d', 'M -4,0 L -32.55,-16.5 A 36.5 36.5 0 0 0 -32.55,16.5 Z'); + + const rearArc = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + rearArc.setAttribute('d', 'M 4,0 L 32.55,-16.5 A 36.5 36.5 0 0 1 32.55,16.5 Z'); + + const forwardRightArc = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + forwardRightArc.setAttribute('d', 'M 0,2.3 L -32.55,-16.5 A 36.5 36.5 0 0 1 0,-36.5 Z'); + + const forwardLeftArc = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + forwardLeftArc.setAttribute('d', 'M 0,-2.3 L -32.55,16.5 A 36.5 36.5 0 0 0 0,36.5 Z'); + + const rightArc = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + rightArc.setAttribute('d', 'M 0,2.3 L 32.55,-16.5 A 36.5 36.5 0 0 0 0,-36.5 Z'); + + const leftArc = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + leftArc.setAttribute('d', 'M 0,-2.3 L 32.55,16.5 A 36.5 36.5 0 0 1 0,36.5 Z'); + + const arcs = document.createElementNS("http://www.w3.org/2000/svg", 'g'); + arcs.setAttribute('mask', 'url(#mech-template-mask)'); + arcs.style.stroke = 'white'; + arcs.style.strokeOpacity = 0.5; + + const mask = document.createElementNS("http://www.w3.org/2000/svg", 'mask'); + mask.id = 'mech-template-mask'; + + const visible = document.createElementNS("http://www.w3.org/2000/svg", 'circle'); + visible.setAttribute('fill', 'white'); + visible.setAttribute('r', '36.5'); + + const invisible = document.createElementNS("http://www.w3.org/2000/svg", 'rect'); + invisible.setAttribute('x', '-16.25'); + invisible.setAttribute('y', '-18'); + invisible.setAttribute('width', '34.5'); + invisible.setAttribute('height', '36'); + invisible.setAttribute('fill', 'black'); + + const arrow = document.createElementNS("http://www.w3.org/2000/svg", 'polyline'); + arrow.setAttribute('points', '-23,-3 -25,0 -23,3'); + arrow.style.stroke = 'black'; + + mask.append(visible); + mask.append(invisible); + + //mech.append(img); + mech.append(deadZone); + mech.append(leftFoot); + mech.append(rightFoot); + mech.append(arrow); + arcs.append(forwardArc); + arcs.append(rearArc); + arcs.append(forwardRightArc); + arcs.append(forwardLeftArc); + arcs.append(rightArc); + arcs.append(leftArc); + mech.append(arcs); + + const cell = getCell(-1, 1, 0, 0); + + cell.append(mask); + cell.append(mech); + console.log(cell); /////////// Observable.subscribe('select', select); |