Skip to content

Commit

Permalink
Add zombie death visuals to renderer
Browse files Browse the repository at this point in the history
  • Loading branch information
delasy committed Oct 27, 2024
1 parent dd5060a commit a3d442a
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 18 deletions.
23 changes: 14 additions & 9 deletions renderer/Assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export interface RendererAssets {
player: HTMLImageElement | null;
rock: HTMLImageElement | null;
zombie: HTMLImageElement | null;
zombieDead: HTMLImageElement | null;
zombieWalking: HTMLImageElement | null;
}

Expand All @@ -17,6 +18,7 @@ export const assets: RendererAssets = {
player: null,
rock: null,
zombie: null,
zombieDead: null,
zombieWalking: null,
};

Expand All @@ -27,22 +29,25 @@ export async function loadAssets() {

assets.loading = true;

const [bg, box, player, rock, zombie, zombieHit] = await Promise.all([
loadAssetImage("/map.webp"),
loadAssetImage("/entities/box.svg"),
loadAssetImage("/entities/player-attacking.svg"),
loadAssetImage("/entities/rock.svg"),
loadAssetImage("/entities/zombie-idle.svg"),
loadAssetImage("/entities/zombie-walking.svg"),
]);
const [bg, box, player, rock, zombie, zombieDead, zombieWalking] =
await Promise.all([
loadAssetImage("/map.webp"),
loadAssetImage("/entities/box.svg"),
loadAssetImage("/entities/player-attacking.svg"),
loadAssetImage("/entities/rock.svg"),
loadAssetImage("/entities/zombie-idle.svg"),
loadAssetImage("/entities/zombie-dead.svg"),
loadAssetImage("/entities/zombie-walking.svg"),
]);

assets.loaded = true;
assets.bg = bg;
assets.box = box;
assets.player = player;
assets.rock = rock;
assets.zombie = zombie;
assets.zombieWalking = zombieHit;
assets.zombieDead = zombieDead;
assets.zombieWalking = zombieWalking;
}

export async function loadAssetImage(src: string): Promise<HTMLImageElement> {
Expand Down
6 changes: 4 additions & 2 deletions renderer/Renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,9 @@ export class Renderer {
return assets.rock;
}
case EntityType.Zombie: {
if (entity.hasChange(ChangeType.Walking)) {
if (entity.hasChange(ChangeType.Killed)) {
return assets.zombieDead;
} else if (entity.hasChange(ChangeType.Walking)) {
return assets.zombieWalking;
} else {
return assets.zombie;
Expand Down Expand Up @@ -191,7 +193,7 @@ export class Renderer {
private registerEntity(entity: Entity) {
const entityImage = this.getEntityImage(entity);

if (entityImage === null || entity.dead()) {
if (entityImage === null || (entity.dead() && !entity.hasChanges())) {
return;
}

Expand Down
4 changes: 4 additions & 0 deletions simulators/zombie-survival/Entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ export class Entity {
return this.changes.some((change) => change.type === type);
}

public hasChanges(): boolean {
return this.changes.length !== 0;
}

public hit() {
if (!this.destructible) {
return;
Expand Down
14 changes: 7 additions & 7 deletions simulators/zombie-survival/ZombieSurvival.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,19 +199,19 @@ export class ZombieSurvival {
this.player.clearChanges();
this.player.shoot();

for (let i = 0; i < this.zombies.length; i++) {
for (let i = 0; i < this.zombies.length && !this.player.dead(); i++) {
const zombie = this.zombies[i];

if (this.player.dead()) {
break;
}

const initialPosition = zombie.getPosition();
const initialZombieHealth = initialHealth[i];

zombie.clearChanges();
zombie.walk();

if (initialHealth[i] !== zombie.getHealth()) {
if (initialZombieHealth !== 0 && zombie.getHealth() === 0) {
zombie.addChange({ type: ChangeType.Killed });
}

if (initialZombieHealth !== zombie.getHealth()) {
zombie.addChange({ type: ChangeType.Hit });
}

Expand Down

0 comments on commit a3d442a

Please sign in to comment.