feat: implement dot status
This commit is contained in:
parent
a334e94886
commit
b245e2a426
BIN
dist/shattered_sword_assets/images/bleeding.png
vendored
Normal file
BIN
dist/shattered_sword_assets/images/bleeding.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
dist/shattered_sword_assets/images/burning.png
vendored
Normal file
BIN
dist/shattered_sword_assets/images/burning.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
BIN
dist/shattered_sword_assets/images/poisoning.png
vendored
Normal file
BIN
dist/shattered_sword_assets/images/poisoning.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
|
@ -79,6 +79,9 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI {
|
|||
bleedCounter :number = 0;
|
||||
|
||||
healthBar: Rect;
|
||||
poisonStat: Sprite;
|
||||
burnStat: Sprite;
|
||||
bleedStat: Sprite;
|
||||
|
||||
|
||||
initializeAI(owner: AnimatedSprite, options: Record<string, any>): void {
|
||||
|
@ -285,6 +288,12 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI {
|
|||
else {
|
||||
this.healthBar.color = Color.RED;
|
||||
}
|
||||
this.poisonStat.position = this.owner.collisionShape.center.clone().add(new Vec2(-((<AABB>this.owner.collisionShape).hw)*1.5+5, -((<AABB>this.owner.collisionShape).hh+15)));
|
||||
this.burnStat.position = this.poisonStat.position.clone().add(new Vec2(10, 0));
|
||||
this.bleedStat.position = this.poisonStat.position.clone().add(new Vec2(20, 0));
|
||||
this.poisonStat.visible = this.poisonCounter > 0;
|
||||
this.burnStat.visible = this.burnCounter > 0;
|
||||
this.bleedStat.visible = this.bleedCounter > 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -80,6 +80,10 @@ export default class GameLevel extends Scene {
|
|||
protected shieldLabel : Label;
|
||||
protected shieldBar: Rect;
|
||||
|
||||
protected poisonStat: Sprite;
|
||||
protected burnStat: Sprite;
|
||||
protected bleedStat: Sprite;
|
||||
|
||||
//seed UI
|
||||
protected seedLabel: Label;
|
||||
|
||||
|
@ -139,6 +143,9 @@ export default class GameLevel extends Scene {
|
|||
this.load.spritesheet("slice", "shattered_sword_assets/spritesheets/slice.json");
|
||||
this.load.image("inventorySlot", "shattered_sword_assets/sprites/inventory.png");
|
||||
this.load.image("black", "shattered_sword_assets/images/black.png");
|
||||
this.load.image("poisoning", "shattered_sword_assets/images/poisoning.png");
|
||||
this.load.image("burning", "shattered_sword_assets/images/burning.png");
|
||||
this.load.image("bleeding", "shattered_sword_assets/images/bleeding.png");
|
||||
|
||||
this.load.spritesheet("test_dummy","shattered_sword_assets/spritesheets/test_dummy.json")
|
||||
this.enemies = new Array();
|
||||
|
@ -343,7 +350,7 @@ export default class GameLevel extends Scene {
|
|||
let playerAI = (<PlayerController>this.player.ai);
|
||||
this.healthLabel.text = "Health: "+ playerAI.CURRENT_HP +'/' + (playerAI.MAX_HP +playerAI.CURRENT_BUFFS.hp );
|
||||
this.healthBar.size.set(playerAI.MAX_HP*2, 10);
|
||||
this.healthBar.position.set(playerAI.MAX_HP+50, 20);
|
||||
this.healthBar.position.set(playerAI.MAX_HP+50, 40);
|
||||
this.healthBar.fillWidth = playerAI.CURRENT_HP*2;
|
||||
if (playerAI.CURRENT_HP/playerAI.MAX_HP >= 2/3) {
|
||||
this.healthBar.color = Color.GREEN;
|
||||
|
@ -362,7 +369,7 @@ export default class GameLevel extends Scene {
|
|||
//update shield ui
|
||||
this.shieldLabel.text = "Shield: "+ playerAI.CURRENT_SHIELD +'/' + (playerAI.MAX_SHIELD);
|
||||
this.shieldBar.size.set(playerAI.CURRENT_SHIELD*2, 10);
|
||||
this.shieldBar.position.set(playerAI.CURRENT_SHIELD+50, 60);
|
||||
this.shieldBar.position.set(playerAI.CURRENT_SHIELD+50, 70);
|
||||
// this.shieldLabel.sizeToText();
|
||||
|
||||
//update exp ui
|
||||
|
@ -489,27 +496,37 @@ export default class GameLevel extends Scene {
|
|||
*/
|
||||
protected addUI(){
|
||||
// In-game labels
|
||||
this.healthLabel = <Label> this.add.uiElement(UIElementType.LABEL, "UI",{position: new Vec2(100, 40), text: "Player Health: "+ (<PlayerController>this.player.ai).CURRENT_HP });
|
||||
this.healthLabel = <Label> this.add.uiElement(UIElementType.LABEL, "UI",{position: new Vec2(100, 55), text: "Player Health: "+ (<PlayerController>this.player.ai).CURRENT_HP });
|
||||
this.healthLabel.size.set(200, 50);
|
||||
this.healthLabel.setHAlign(HAlign.LEFT);
|
||||
this.healthLabel.textColor = Color.GREEN;
|
||||
this.healthLabel.font = "PixelSimple";
|
||||
this.healthBar = <Rect>this.add.graphic(GraphicType.RECT, "UI", {position: new Vec2(100+150, 20), size: new Vec2(400, 10)});
|
||||
this.healthBar = <Rect>this.add.graphic(GraphicType.RECT, "UI", {position: new Vec2(100+150, 40), size: new Vec2(400, 10)});
|
||||
this.healthBar.borderColor = Color.BLACK;
|
||||
this.healthBar.borderWidth = 3;
|
||||
this.healthBar.color = Color.GREEN;
|
||||
|
||||
this.shieldLabel = <Label> this.add.uiElement(UIElementType.LABEL, "UI",{position: new Vec2(100, 80), text: "shield: "+ (<PlayerController>this.player.ai).CURRENT_SHIELD });
|
||||
// this.poisonStat = this.add.sprite("poisoning", "UI");
|
||||
// this.poisonStat.position.set(55, 25);
|
||||
// this.poisonStat.scale.set(0.3, 0.3);
|
||||
// this.burnStat = this.add.sprite("burning", "UI");
|
||||
// this.burnStat.position.set(70, 25);
|
||||
// this.burnStat.scale.set(0.3, 0.3);
|
||||
// this.bleedStat = this.add.sprite("bleeding", "UI");
|
||||
// this.bleedStat.position.set(85, 25);
|
||||
// this.bleedStat.scale.set(0.3, 0.3);
|
||||
|
||||
this.shieldLabel = <Label> this.add.uiElement(UIElementType.LABEL, "UI",{position: new Vec2(100, 85), text: "shield: "+ (<PlayerController>this.player.ai).CURRENT_SHIELD });
|
||||
this.shieldLabel.size.set(200, 50);
|
||||
this.shieldLabel.setHAlign(HAlign.LEFT);
|
||||
this.shieldLabel.textColor = Color.ORANGE;
|
||||
this.shieldLabel.font = "PixelSimple";
|
||||
this.shieldBar = <Rect>this.add.graphic(GraphicType.RECT, "UI", {position: new Vec2(100+150, 60), size: new Vec2(400, 10)});
|
||||
this.shieldBar = <Rect>this.add.graphic(GraphicType.RECT, "UI", {position: new Vec2(100+150, 70), size: new Vec2(400, 10)});
|
||||
this.shieldBar.borderColor = Color.BLACK;
|
||||
this.shieldBar.borderWidth = 3;
|
||||
this.shieldBar.color = Color.ORANGE;
|
||||
|
||||
this.expLabel = <Label> this.add.uiElement(UIElementType.LABEL, "UI",{position: new Vec2(100, 120), text: "EXP: "+ (<PlayerController>this.player.ai).CURRENT_EXP });
|
||||
this.expLabel = <Label> this.add.uiElement(UIElementType.LABEL, "UI",{position: new Vec2(100, 115), text: "EXP: "+ (<PlayerController>this.player.ai).CURRENT_EXP });
|
||||
this.expLabel.size.set(200, 50);
|
||||
this.expLabel.setHAlign(HAlign.LEFT);
|
||||
this.expLabel.textColor = Color.BLUE;
|
||||
|
@ -763,6 +780,15 @@ export default class GameLevel extends Scene {
|
|||
(<EnemyAI>enemy._ai).healthBar.borderColor = Color.BLACK;
|
||||
(<EnemyAI>enemy._ai).healthBar.borderWidth = 1;
|
||||
(<EnemyAI>enemy._ai).healthBar.color = Color.GREEN;
|
||||
(<EnemyAI>enemy._ai).poisonStat = this.add.sprite("poisoning", "primary");
|
||||
(<EnemyAI>enemy._ai).poisonStat.position = enemy.collisionShape.center.clone().add(new Vec2((((<AABB>enemy.collisionShape).hw)*-1, -((<AABB>enemy.collisionShape).hh+5))));
|
||||
(<EnemyAI>enemy._ai).poisonStat.scale.set(0.2, 0.2);
|
||||
(<EnemyAI>enemy._ai).burnStat = this.add.sprite("burning", "primary");
|
||||
(<EnemyAI>enemy._ai).burnStat.position = (<EnemyAI>enemy._ai).poisonStat.position.clone().add(new Vec2(15, 0));
|
||||
(<EnemyAI>enemy._ai).burnStat.scale.set(0.2, 0.2);
|
||||
(<EnemyAI>enemy._ai).bleedStat = this.add.sprite("bleeding", "primary");
|
||||
(<EnemyAI>enemy._ai).bleedStat.position = (<EnemyAI>enemy._ai).poisonStat.position.clone().add(new Vec2(30, 0));
|
||||
(<EnemyAI>enemy._ai).bleedStat.scale.set(0.2, 0.2);
|
||||
enemy.setGroup("Enemy");
|
||||
enemy.setTrigger("player", Player_Events.PLAYER_COLLIDE, null);
|
||||
let actionsDefault = [new AttackAction(3, [Statuses.IN_RANGE], [Statuses.REACHED_GOAL]),
|
||||
|
|
Loading…
Reference in New Issue
Block a user