feat: implemented healthbar for enemies

This commit is contained in:
Renge 2022-04-20 18:31:53 -04:00
parent 10238c96df
commit bee0a4264a
2 changed files with 21 additions and 0 deletions

View File

@ -25,6 +25,8 @@ import { Player_Events } from "../sword_enums";
import InputWrapper from "../Tools/InputWrapper";
import Timer from "../../Wolfie2D/Timing/Timer";
import PlayerController from "../Player/PlayerController";
import Rect from "../../Wolfie2D/Nodes/Graphics/Rect";
import Color from "../../Wolfie2D/Utils/Color";
export default class EnemyAI extends StateMachineGoapAI implements BattlerAI {
/** The owner of this AI */
owner: AnimatedSprite;
@ -76,6 +78,8 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI {
bleedTimer : Timer;
bleedCounter :number = 0;
healthBar: Rect;
initializeAI(owner: AnimatedSprite, options: Record<string, any>): void {
this.owner = owner;
@ -146,6 +150,7 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI {
this.owner.setAIActive(false, {});
this.owner.isCollidable = false;
this.owner.visible = false;
this.healthBar.destroy();
this.emitter.fireEvent(Player_Events.ENEMY_KILLED, {owner: this.owner.id, ai:this});
@ -237,6 +242,18 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI {
this.bleedTimer.start();
this.damage(5 + (<PlayerController>this.player._ai).extraDotDmg + (<PlayerController>this.player._ai).CURRENT_ATK * .08);
}
this.healthBar.position = this.owner.collisionShape.center.clone().add(new Vec2(0, -((<AABB>this.owner.collisionShape).hh+5)));
this.healthBar.fillWidth = this.CURRENT_HP/this.maxHealth * this.owner.collisionShape.hw * 3;
if (this.CURRENT_HP/this.maxHealth >= 2/3) {
this.healthBar.color = Color.GREEN;
}
else if (this.CURRENT_HP/this.maxHealth >= 1/3) {
this.healthBar.color = Color.YELLOW;
}
else {
this.healthBar.color = Color.RED;
}
}
}

View File

@ -739,6 +739,10 @@ export default class GameLevel extends Scene {
}
enemy.addAI(EnemyAI, aiOptions); //TODO - add individual enemy AI
(<EnemyAI>enemy._ai).healthBar = <Rect>this.add.graphic(GraphicType.RECT, "primary", {position: enemy.collisionShape.center.clone().add(new Vec2(0, -((<AABB>enemy.collisionShape).hh+5))), size: new Vec2((<AABB>enemy.collisionShape).hw*3, 5)});
(<EnemyAI>enemy._ai).healthBar.borderColor = Color.BLACK;
(<EnemyAI>enemy._ai).healthBar.borderWidth = 1;
(<EnemyAI>enemy._ai).healthBar.color = Color.GREEN;
enemy.setGroup("Enemy");
enemy.setTrigger("player", Player_Events.PLAYER_COLLIDE, null);