|
|
@@ -60,6 +60,8 @@ class Entity { |
|
|
|
|
|
|
|
intersectsPoint(e) { |
|
|
|
let rect = this.boundingRect; |
|
|
|
let r = new Rectangle(e.pos.x, e.pos.y, e.vel.x, e.vel.y); |
|
|
|
return rect.intersects(r); |
|
|
|
return ( |
|
|
|
e.pos.x > rect.x && e.pos.x < rect.x + rect.width && |
|
|
|
e.pos.y > rect.y && e.pos.y < rect.y + rect.height |
|
|
@@ -153,6 +155,16 @@ class Player extends Entity { |
|
|
|
}); |
|
|
|
|
|
|
|
sock.on("close", () => this.despawn()); |
|
|
|
|
|
|
|
this.healthInterval = setInterval(() => { |
|
|
|
if (this.health < 100) |
|
|
|
this.health += 1; |
|
|
|
}, 200); |
|
|
|
} |
|
|
|
|
|
|
|
despawn() { |
|
|
|
super.despawn(); |
|
|
|
clearInterval(this.healthInterval); |
|
|
|
} |
|
|
|
|
|
|
|
update(dt) { |
|
|
@@ -172,6 +184,7 @@ class Player extends Entity { |
|
|
|
if (this.keys.right) |
|
|
|
this.rotForce += 0.03; |
|
|
|
|
|
|
|
//Shoot |
|
|
|
if (this.keys.shoot && this.canShoot) { |
|
|
|
let vel = new Vec2(0, -1).rotate(this.rot).add(this.vel); |
|
|
|
|
|
|
@@ -181,20 +194,20 @@ class Player extends Entity { |
|
|
|
let b = new Bullet(pos, vel, this.id, this.game.id, this.game); |
|
|
|
this.game.spawn(b); |
|
|
|
this.canShoot = false; |
|
|
|
setTimeout(() => this.canShoot = true, 100); |
|
|
|
setTimeout(() => this.canShoot = true, 300); |
|
|
|
} |
|
|
|
|
|
|
|
f.rotate(this.rot); |
|
|
|
this.force(f.x, f.y); |
|
|
|
|
|
|
|
this.vel.scale(0.9); |
|
|
|
this.rotVel *= 0.84; |
|
|
|
this.rotVel *= 0.8; |
|
|
|
|
|
|
|
//Detect collissions |
|
|
|
this.game.entities.forEach((e) => { |
|
|
|
if (e instanceof Bullet) { |
|
|
|
if (e.ownerId !== this.id && this.intersectsPoint(e)) { |
|
|
|
this.health -= 10; |
|
|
|
this.health -= 20; |
|
|
|
e.despawn(); |
|
|
|
if (this.health <= 0) |
|
|
|
this.despawn(); |