initial commit
This commit is contained in:
96
Player.js
Normal file
96
Player.js
Normal file
@@ -0,0 +1,96 @@
|
||||
class Player extends MovingObject {
|
||||
constructor(game, x, y) {
|
||||
super(game, x, y);
|
||||
this.speed = 3;
|
||||
|
||||
this.score = 0;
|
||||
|
||||
this.mouthAngle = 90; // = 90°
|
||||
this.mouthDecreasing = true;
|
||||
}
|
||||
|
||||
draw(ctx, conf) {
|
||||
const radius = conf.tileSize * 0.5;
|
||||
const cx = this.x * conf.tileSize;
|
||||
const cy = this.y * conf.tileSize;
|
||||
const mouthAngle = this.mouthAngle / 180 * Math.PI;
|
||||
|
||||
ctx.fillStyle = '#ff0';
|
||||
|
||||
ctx.save();
|
||||
ctx.translate(cx, cy);
|
||||
ctx.rotate(this.getRotateDir());
|
||||
|
||||
ctx.beginPath();
|
||||
|
||||
ctx.moveTo(0, 0);
|
||||
ctx.arc(0, 0, radius, mouthAngle / 2, 2 * Math.PI - mouthAngle / 2, false);
|
||||
ctx.lineTo(0, 0);
|
||||
|
||||
ctx.fill();
|
||||
|
||||
ctx.restore();
|
||||
}
|
||||
|
||||
update(deltaTime) {
|
||||
super.update(deltaTime);
|
||||
|
||||
this.checkForCollisions();
|
||||
|
||||
// Collect coins
|
||||
const currentTile = this.getNextTile(0, 0);
|
||||
|
||||
if(currentTile.tile.coin) {
|
||||
if(currentTile.distanceX <= 0.5 || currentTile.distanceY <= 0.5) {
|
||||
currentTile.tile.coin = false;
|
||||
this.score += 10;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.mouthDecreasing) {
|
||||
this.mouthAngle -= this.speed * 4;
|
||||
if(this.mouthAngle <= 0) {
|
||||
this.mouthAngle = 0;
|
||||
this.mouthDecreasing = false;
|
||||
}
|
||||
} else {
|
||||
this.mouthAngle += this.speed * 4;
|
||||
if(this.mouthAngle >= 90) {
|
||||
this.mouthAngle = 90;
|
||||
this.mouthDecreasing = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkForCollisions() {
|
||||
this.game.gameObjects.forEach(object => {
|
||||
if(object === this) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(Math.abs(object.x - this.x) < 1 && Math.abs(object.y - this.y) < 1) {
|
||||
if(object instanceof Ghost) {
|
||||
this.gameOver();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getRotateDir() {
|
||||
if(this.dir.x === -1) {
|
||||
return Math.PI;
|
||||
}
|
||||
if(this.dir.y === 1) {
|
||||
return Math.PI / 2;
|
||||
}
|
||||
if(this.dir.y === -1) {
|
||||
return 3 / 2 * Math.PI;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
gameOver() {
|
||||
this.game.gameOver = true;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user