Commit 72f499b6 by Alexander Bazo

Add health bars for enemies

parent 4c8f7eac
...@@ -36,8 +36,8 @@ class GameConfiguration { ...@@ -36,8 +36,8 @@ class GameConfiguration {
gazePointColor = "#4cd494"; gazePointColor = "#4cd494";
maxNumberOfEnemies = 10; maxNumberOfEnemies = 10;
enemySpawnDelay = 500; enemySpawnDelay = 500;
playerDamage = 50; playerDamage = 100;
worldBackgroundColor = "#333"; worldBackgroundColor = "#332f3a";
debugInfoPosition = { debugInfoPosition = {
x: 10, x: 10,
y: screenHeight - 10, y: screenHeight - 10,
......
...@@ -51,6 +51,8 @@ function updateEnemies(now, delta) { ...@@ -51,6 +51,8 @@ function updateEnemies(now, delta) {
} }
} }
for (let i = enemies.length - 1; i >= 0; i--) { for (let i = enemies.length - 1; i >= 0; i--) {
// Remove focus from enemy
enemies[i].removeFocus();
// Update enemy's position // Update enemy's position
enemies[i].update(delta); enemies[i].update(delta);
// Check if enemy has hit target // Check if enemy has hit target
...@@ -76,6 +78,8 @@ function updateEnemies(now, delta) { ...@@ -76,6 +78,8 @@ function updateEnemies(now, delta) {
x: currentGazePosition.targetX, x: currentGazePosition.targetX,
y: currentGazePosition.targetY, y: currentGazePosition.targetY,
})) { })) {
// Set focus on currently watched enemy
enemies[i].setFocus();
// Update enemy's health // Update enemy's health
enemies[i].health -= GameConfig.getPlayerDamage() / (1000/delta); enemies[i].health -= GameConfig.getPlayerDamage() / (1000/delta);
// Remove enemy if destroyed // Remove enemy if destroyed
......
...@@ -6,31 +6,63 @@ const DEFAULT_VELOCITY = 1, ...@@ -6,31 +6,63 @@ const DEFAULT_VELOCITY = 1,
DEFAULT_HEIGHT = 50, DEFAULT_HEIGHT = 50,
DEFAULT_DAMAGE = 10, DEFAULT_DAMAGE = 10,
DEFAULT_HIT_BOX_RADIUS = 30, DEFAULT_HIT_BOX_RADIUS = 30,
DEFAULT_ENEMEY_COLOR = "#dd3939"; DEFAULT_ENEMY_COLOR = "#3f0d76",
DEFAULT_ENEMEY_TIP_COLOR = "#d2ccf3",
DEFAULT_ENEMY_HEALTH_COLOR = "#d2ccf3",
DEFAULT_ENEMY_HEALTH_WIDTH = 10,
DEFAULT_ENEMY_HEALTH_RADIUS = 50;
class Enemy extends GameObject { class Enemy extends GameObject {
constructor(x, y, direction) { constructor(x, y, direction) {
super(x, y, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_HIT_BOX_RADIUS, super(x, y, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_HIT_BOX_RADIUS,
DEFAULT_VELOCITY, direction, DEFAULT_ENEMEY_COLOR); DEFAULT_VELOCITY, direction, DEFAULT_ENEMY_COLOR);
this.focus = false;
this.health = DEFAULT_HEALTH; this.health = DEFAULT_HEALTH;
this.damage = DEFAULT_DAMAGE; this.damage = DEFAULT_DAMAGE;
} }
draw(context) { draw(context) {
context.save(); context.save();
// Draw health bar if focused
context.translate(this.x, this.y);
if (this.focus === true) {
context.strokeStyle = DEFAULT_ENEMY_HEALTH_COLOR;
context.lineWidth = DEFAULT_ENEMY_HEALTH_WIDTH;
context.beginPath();
context.arc(0, 0, DEFAULT_ENEMY_HEALTH_RADIUS, 0, 3.6 * this.health *
Math.PI / 100);
context.stroke();
context.closePath();
}
// Draw enemy
context.fillStyle = this.color; context.fillStyle = this.color;
context.beginPath(); context.beginPath();
context.translate(this.x, this.y);
context.rotate((90 + this.direction) * Math.PI / 180); context.rotate((90 + this.direction) * Math.PI / 180);
context.moveTo(0, -this.height / 2); context.moveTo(0, -this.height / 2);
context.lineTo(-(this.width / 2), this.height / 2); context.lineTo(-(this.width / 2), this.height / 2);
context.lineTo(this.width / 2, this.height / 2); context.lineTo(this.width / 2, this.height / 2);
context.fill();
context.closePath(); context.closePath();
// Draw tip
context.fillStyle = DEFAULT_ENEMEY_TIP_COLOR;
context.beginPath();
context.moveTo(0, -this.height / 2);
context.lineTo(-(this.width / 4), 0);
context.lineTo(this.width / 4, 0);
context.fill(); context.fill();
context.closePath();
context.restore(); context.restore();
} }
setFocus() {
this.focus = true;
}
removeFocus() {
this.focus = false;
}
static createEnemy(rangeX, rangeY, targetX, targetY) { static createEnemy(rangeX, rangeY, targetX, targetY) {
let xPos = parseInt(Math.random() * rangeX), let xPos = parseInt(Math.random() * rangeX),
yPos = parseInt(Math.random() * rangeY), yPos = parseInt(Math.random() * rangeY),
......
...@@ -4,7 +4,7 @@ const DEFAULT_HEALTH = 100, ...@@ -4,7 +4,7 @@ const DEFAULT_HEALTH = 100,
DEFAULT_WIDTH = 500, DEFAULT_WIDTH = 500,
DEFAULT_HEIGHT = 500, DEFAULT_HEIGHT = 500,
DEFAULT_HIT_BOX_RADIUS = 270, DEFAULT_HIT_BOX_RADIUS = 270,
DEFAULT_PLANET_COLOR = "#5bbe61", DEFAULT_PLANET_COLOR = "#900c47",
DEFAULT_PLANET_BORDER_COLOR = "#dafffe", DEFAULT_PLANET_BORDER_COLOR = "#dafffe",
DEFAULT_PLANET_BORDER_WIDTH = "20"; DEFAULT_PLANET_BORDER_WIDTH = "20";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment