From 1b3946f56c9d57984066b53b9be4596c20498e26 Mon Sep 17 00:00:00 2001 From: OfficialCHenry Date: Sun, 10 Apr 2022 21:32:22 -0400 Subject: [PATCH] added enemy killing --- dist/shattered_sword_assets/data/weaponData.json | 2 +- .../spritesheets/test_dummy.json | 6 +++--- src/shattered_sword/AI/EnemyAI.ts | 7 ++++++- src/shattered_sword/AI/EnemyStates/Patrol.ts | 4 +++- src/shattered_sword/GameSystems/BattleManager.ts | 14 +++++++++++++- src/shattered_sword/Scenes/GameLevel.ts | 16 +++++++++++++++- 6 files changed, 41 insertions(+), 8 deletions(-) diff --git a/dist/shattered_sword_assets/data/weaponData.json b/dist/shattered_sword_assets/data/weaponData.json index 637513b..f66b7fd 100644 --- a/dist/shattered_sword_assets/data/weaponData.json +++ b/dist/shattered_sword_assets/data/weaponData.json @@ -7,7 +7,7 @@ "displayName": "Knife", "animationSprite": "slice", "spriteKey": "knife", - "damage": 1, + "damage": 50, "cooldown": 3, "useVolume": 0 } diff --git a/dist/shattered_sword_assets/spritesheets/test_dummy.json b/dist/shattered_sword_assets/spritesheets/test_dummy.json index 8b11a63..788af37 100644 --- a/dist/shattered_sword_assets/spritesheets/test_dummy.json +++ b/dist/shattered_sword_assets/spritesheets/test_dummy.json @@ -25,9 +25,9 @@ }, { "name": "HURT", - "frames": [ {"index": 0, "duration": 250}, - {"index": 1, "duration": 500}, - {"index": 0, "duration": 250} ] + "frames": [ {"index": 0, "duration": 1}, + {"index": 1, "duration": 50}, + {"index": 0, "duration": 25} ] } ] } \ No newline at end of file diff --git a/src/shattered_sword/AI/EnemyAI.ts b/src/shattered_sword/AI/EnemyAI.ts index 1e895d5..a8cd709 100644 --- a/src/shattered_sword/AI/EnemyAI.ts +++ b/src/shattered_sword/AI/EnemyAI.ts @@ -20,6 +20,8 @@ import { Statuses } from "../sword_enums"; import Sprite from "../../Wolfie2D/Nodes/Sprites/Sprite"; import MathUtils from "../../Wolfie2D/Utils/MathUtils"; + +import { Player_Events } from "../sword_enums"; export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { /** The owner of this AI */ owner: AnimatedSprite; @@ -105,6 +107,9 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { damage(damage: number): void { this.CURRENT_HP -= damage; + //TODO - + this.owner.animation.play("HURT"); + console.log(damage +" damage taken, "+this.CURRENT_HP+" hp left"); // If we're low enough, add Low Health status to enemy if (this.CURRENT_HP <= Math.floor(this.maxHealth/2)) { @@ -117,7 +122,7 @@ export default class EnemyAI extends StateMachineGoapAI implements BattlerAI { this.owner.isCollidable = false; this.owner.visible = false; - this.emitter.fireEvent("enemyDied", {enemy: this.owner}) + this.emitter.fireEvent(Player_Events.ENEMY_KILLED, {owner: this.owner.id, ai:this}); if (Math.random() < 0.05) { diff --git a/src/shattered_sword/AI/EnemyStates/Patrol.ts b/src/shattered_sword/AI/EnemyStates/Patrol.ts index aa132bc..be3899b 100644 --- a/src/shattered_sword/AI/EnemyStates/Patrol.ts +++ b/src/shattered_sword/AI/EnemyStates/Patrol.ts @@ -8,6 +8,7 @@ import EnemyState from "./EnemyState"; import Sprite from "../../../Wolfie2D/Nodes/Sprites/Sprite"; import MathUtils from "../../../Wolfie2D/Utils/MathUtils"; import OnGround from "./OnGround"; +import AnimatedSprite from "../../../Wolfie2D/Nodes/Sprites/AnimatedSprite"; export default class Patrol extends EnemyState { @@ -23,6 +24,7 @@ export default class Patrol extends EnemyState { onEnter(options: Record): void { //this.currentPath = this.getNextPath(); + (this.owner).animation.play("IDLE", true); } handleInput(event: GameEvent): void { } @@ -36,7 +38,7 @@ export default class Patrol extends EnemyState { //check if next tile on walking path is collidable if(this.parent.tilemap.isTileCollidable(colrow.x+this.parent.direction,colrow.y)){ //turn around - console.log(this.parent.tilemap.getTileAtRowCol(colrow)); + //console.log(this.parent.tilemap.getTileAtRowCol(colrow)); this.parent.direction *= -1; (this.owner).invertX = MathUtils.sign(1) < 0; //console.log("turn around cus wall in front"); diff --git a/src/shattered_sword/GameSystems/BattleManager.ts b/src/shattered_sword/GameSystems/BattleManager.ts index 9025da6..ed7afc2 100644 --- a/src/shattered_sword/GameSystems/BattleManager.ts +++ b/src/shattered_sword/GameSystems/BattleManager.ts @@ -18,7 +18,8 @@ export default class BattleManager { for (let enemy of this.enemies) { if (weapon.hits(enemy.owner)) { enemy.damage(weapon.type.damage); - console.log("enemy took dmg"); + + //console.log("enemy took dmg"); } } } @@ -45,4 +46,15 @@ export default class BattleManager { addEnemy(enemy : BattlerAI){ this.enemies.push(enemy); } + + removeEnemy(enemy : BattlerAI){ + + + this.enemies = this.enemies.filter(item => item !== enemy) + if(this.enemies.length == 0){ + this.enemies = new Array(); + } + return this.enemies; + + } } \ No newline at end of file diff --git a/src/shattered_sword/Scenes/GameLevel.ts b/src/shattered_sword/Scenes/GameLevel.ts index ad6049e..5f42d26 100644 --- a/src/shattered_sword/Scenes/GameLevel.ts +++ b/src/shattered_sword/Scenes/GameLevel.ts @@ -161,6 +161,17 @@ export default class GameLevel extends Scene { let event = this.receiver.getNextEvent(); switch(event.type){ + case Player_Events.ENEMY_KILLED: + + let node = this.sceneGraph.getNode(event.data.get("owner"));//get enemy id + //remove enemy from enemies + this.enemies = this.enemies.filter(item => item !== event.data.get("ai")); + this.battleManager.removeEnemy(event.data.get("ai")); + + console.log("enemy destroyed"); + node.destroy(); + break; + } } @@ -191,6 +202,8 @@ export default class GameLevel extends Scene { }); } + + } /** @@ -398,7 +411,8 @@ export default class GameLevel extends Scene { //add enemy to the enemy array this.enemies.push(enemy); - this.battleManager.setEnemies(this.enemies.map(enemy => enemy._ai)); + //this.battleManager.setEnemies(this.enemies.map(enemy => enemy._ai)); + this.battleManager.addEnemy(enemy._ai); }