diff --git a/webclient/src/spaceport/Laser.js b/webclient/src/spaceport/Laser.js index 7f82a80..286869e 100644 --- a/webclient/src/spaceport/Laser.js +++ b/webclient/src/spaceport/Laser.js @@ -9,25 +9,32 @@ const geometry = new THREE.BoxGeometry( LASER_SIZE ); +const badLaserMat = new THREE.MeshStandardMaterial(0xffffff, { + flatShading: true, + color: new THREE.Color(`hsl(0,100%,70%)`), +}); + +const goodLaserMat = new THREE.MeshStandardMaterial(0xffffff, { + flatShading: true, + color: new THREE.Color(`hsl(180,100%,70%)`), +}); + export class Laser { - constructor(ship) { + constructor(ship, count) { const position = new THREE.Vector3(); this.direction = ship.direction; this.kill = false; + this.life = 10; this.stepX = (Math.random() - 0.5) * BULLET_SPREAD; this.stepY = (Math.random() - 0.5) * BULLET_SPREAD; ship.mesh.getWorldPosition(position); - const material = new THREE.MeshStandardMaterial(0xffffff, { - flatShading: true, - }); - - this.mesh = new THREE.Mesh(geometry, material); - - this.mesh.material.color.set( - new THREE.Color(`hsl(${ship.direction > 0 ? 0 : 180},100%,70%)`) + this.mesh = new THREE.Mesh( + geometry, + ship.direction > 0 ? goodLaserMat : badLaserMat, + count ); this.mesh.position.set(position.x, position.y, position.z); @@ -37,9 +44,8 @@ export class Laser { this.mesh.position.x += this.stepX; this.mesh.position.y += this.stepY; this.mesh.position.z += 0.5 * this.direction; + this.life -= deltaTime; - if (Math.abs(this.mesh.position.z > 475 / 2)) { - this.kill = true; - } + if (this.life < 0) this.kill = true; } } diff --git a/webclient/src/spaceport/scene.js b/webclient/src/spaceport/scene.js index 9acc117..6c63c27 100644 --- a/webclient/src/spaceport/scene.js +++ b/webclient/src/spaceport/scene.js @@ -50,7 +50,7 @@ export const scene = ({ ref }) => { ref.current.addEventListener('mousemove', (e) => { const x = e.clientX; const ratio = x / ref.current.clientWidth; - camera.position.set(5, 2, ratio*4 - 2); + camera.position.set(5, 2, ratio * 4 - 2); camera.lookAt(new THREE.Vector3(0, 0, 0)); }); @@ -72,6 +72,7 @@ export const scene = ({ ref }) => { if (ship.firing) { const bolt = new Laser(ship); + bolts.push(bolt); scene.add(bolt.mesh); ship.firing = false;