75 lines
3.0 KiB
JavaScript
75 lines
3.0 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.Player = void 0;
|
|
const Wall_1 = require("./Wall");
|
|
const GameSettings_1 = require("./GameSettings");
|
|
class Player {
|
|
constructor(id, name) {
|
|
this.id = id;
|
|
this.name = name;
|
|
this.gameSettings = new GameSettings_1.GameSettings();
|
|
this.bestScore = 0;
|
|
this.angle = 0;
|
|
this.score = 0;
|
|
this.color = '#' + (0x1000000 + (Math.random()) * 0xffffff).toString(16).substr(1, 6);
|
|
this.x = this.gameSettings.arenaSize * (0.25 + Math.random() * 0.5);
|
|
this.y = this.gameSettings.arenaSize * (0.25 + Math.random() * 0.5);
|
|
this.walls = [];
|
|
this.lastWall = 0;
|
|
this.state = 'ALIVE';
|
|
this.reset();
|
|
}
|
|
reset() {
|
|
this.score = 0;
|
|
this.color = '#' + (0x1000000 + (Math.random()) * 0xffffff).toString(16).substr(1, 6);
|
|
this.x = this.gameSettings.arenaSize * (0.25 + Math.random() * 0.5);
|
|
this.y = this.gameSettings.arenaSize * (0.25 + Math.random() * 0.5);
|
|
this.walls = [];
|
|
this.lastWall = 0;
|
|
this.state = 'ALIVE';
|
|
}
|
|
kill() {
|
|
this.state = 'DEAD';
|
|
if (this.bestScore < this.score)
|
|
this.bestScore = this.score;
|
|
}
|
|
isOutOfBorders() {
|
|
return this.x - this.gameSettings.playerSize < 0 ||
|
|
this.x + this.gameSettings.playerSize > this.gameSettings.arenaSize ||
|
|
this.y - this.gameSettings.playerSize < 0 ||
|
|
this.y + this.gameSettings.playerSize > this.gameSettings.arenaSize;
|
|
}
|
|
isCloseToWall(wallA, wallB) {
|
|
const xar = Math.min(wallA.x, wallB.x) - this.gameSettings.playerSize;
|
|
const yar = Math.min(wallA.y, wallB.y) - this.gameSettings.playerSize;
|
|
const xbr = Math.min(wallA.x, wallB.x) + this.gameSettings.playerSize;
|
|
const ybr = Math.min(wallA.y, wallB.y) + this.gameSettings.playerSize;
|
|
return ((this.x >= xar && this.x <= xbr) && (this.y >= yar && this.y <= ybr));
|
|
}
|
|
isCrossingLine(wallA, wallB) {
|
|
const xa = wallA.x;
|
|
const ya = wallA.y;
|
|
const xb = wallB.x;
|
|
const yb = wallB.y;
|
|
const xc = this.x;
|
|
const yc = this.y;
|
|
const radius = this.gameSettings.playerSize;
|
|
return Math.abs((yb - ya) * xc - (xb - xa) * yc + xb * ya - yb * xa) / Math.sqrt(Math.pow(xb - xa, 2) + Math.pow(yb - ya, 2)) < radius;
|
|
}
|
|
step(tickToSimulate) {
|
|
if (this.state === 'DEAD')
|
|
return;
|
|
for (let i = 0; i < tickToSimulate; i++) {
|
|
this.lastWall++;
|
|
if (this.lastWall > this.gameSettings.wallUpdate) {
|
|
this.walls.push(new Wall_1.Wall(this.x, this.y));
|
|
this.score++;
|
|
this.lastWall = 0;
|
|
}
|
|
this.x = this.x + this.gameSettings.playerSpeed * Math.cos(this.angle);
|
|
this.y = this.y + this.gameSettings.playerSpeed * Math.sin(this.angle);
|
|
}
|
|
}
|
|
}
|
|
exports.Player = Player;
|
|
//# sourceMappingURL=Player.js.map
|