From d9e4ee7dcac584fd97a6c8a6060c5f3b2ee1dac4 Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 26 Jan 2025 16:41:21 -0500 Subject: [PATCH] feat(helpers): add levels --- src/gameobjects/enemy.ts | 11 +--- src/helpers/gameState.ts | 9 +-- src/helpers/index.ts | 1 + src/helpers/levels.ts | 123 +++++++++++++++++++++++++++++++++++++++ src/scenes/game.ts | 56 ++++++++---------- 5 files changed, 150 insertions(+), 50 deletions(-) create mode 100644 src/helpers/levels.ts diff --git a/src/gameobjects/enemy.ts b/src/gameobjects/enemy.ts index 3e1d157..3c3f0bf 100644 --- a/src/gameobjects/enemy.ts +++ b/src/gameobjects/enemy.ts @@ -5,20 +5,13 @@ import { getChildBubble, hurtPlayer } from '.' import { incrementScore } from './score' export function addEnemy() { - const sprites = [ - Sprite.Bubbie, - Sprite.Gooba, - Sprite.Shellie, - Sprite.Spiny, - Sprite.Pokey, - ] - const damage = randi(1, 10) const hp = randi(20, 100) * gameState.enemyHealthMultiplier const speed = randi(100, 300) * gameState.enemySpeedMultiplier + const { enemySprites } = gameState const enemy = add([ - sprite(sprites[randi(sprites.length)]), + sprite(enemySprites[randi(enemySprites.length)]), pos(outsideCoordinates()), anchor('center'), health(hp, hp), diff --git a/src/helpers/gameState.ts b/src/helpers/gameState.ts index 21f72f9..5d73159 100644 --- a/src/helpers/gameState.ts +++ b/src/helpers/gameState.ts @@ -10,14 +10,7 @@ class GameState { this.enemyDamageMultiplier = 1 this.enemyHealthMultiplier = 1 this.enemySpeedMultiplier = 1 - - this.enemySprites = [ - Sprite.Bubbie, - Sprite.Gooba, - Sprite.Shellie, - Sprite.Spiny, - Sprite.Pokey, - ] + this.enemySprites = [] } } diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 3c57c81..1833021 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -2,4 +2,5 @@ export * from './chance' export * from './coordinates' export * from './direction' export * from './gameState' +export * from './levels' export * from './time' diff --git a/src/helpers/levels.ts b/src/helpers/levels.ts new file mode 100644 index 0000000..1e42aa5 --- /dev/null +++ b/src/helpers/levels.ts @@ -0,0 +1,123 @@ +import { Sprite } from '../constants' + +const MINUTE = 60 + +export const levels = [ + // 0 - 0.5 + { + start: 0, + end: 0.5 * MINUTE, + loop: { + enemy: 4, + drain: 10, + }, + enemies: [Sprite.Shellie, Sprite.Spiny], + multiplier: { + damage: 1, + health: 1, + speed: 1, + }, + }, + + // 0.5 - 1 + { + start: 0.5 * MINUTE, + end: 2 * MINUTE, + loop: { + enemy: 3, + drain: 10, + }, + enemies: [Sprite.Gooba], + multiplier: { + damage: 1, + health: 1, + speed: 1, + }, + }, + + // 1 - 2 + { + start: 1 * MINUTE, + end: 2 * MINUTE, + loop: { + enemy: 3, + drain: 10, + }, + enemies: [Sprite.Gooba, Sprite.Shellie, Sprite.Spiny], + multiplier: { + damage: 1, + health: 1, + speed: 1, + }, + }, + + // 2 - 3 + { + start: 2 * MINUTE, + end: 3 * MINUTE, + loop: { + enemy: 3, + drain: 15, + }, + enemies: [Sprite.Bubbie], + multiplier: { + damage: 1, + health: 1, + speed: 1, + }, + }, + + // 3 - 4 + { + start: 3 * MINUTE, + end: 4 * MINUTE, + loop: { + enemy: 3, + drain: 15, + }, + enemies: [Sprite.Pokey], + multiplier: { + damage: 1.5, + health: 1.5, + speed: 1.5, + }, + }, + + // 4 - 5 + { + start: 4 * MINUTE, + end: 5 * MINUTE, + loop: { + enemy: 3, + drain: 20, + }, + enemies: [Sprite.Gooba, Sprite.Bubbie, Sprite.Pokey], + multiplier: { + damage: 1.5, + health: 1.5, + speed: 1.5, + }, + }, + + // 5 - ∞ + { + start: 5 * MINUTE, + end: undefined, + loop: { + enemy: 1, + drain: 30, + }, + enemies: [ + Sprite.Bubbie, + Sprite.Gooba, + Sprite.Shellie, + Sprite.Spiny, + Sprite.Pokey, + ], + multiplier: { + damage: 2, + health: 2, + speed: 2, + }, + }, +] diff --git a/src/scenes/game.ts b/src/scenes/game.ts index ed8dd15..d6a1a33 100644 --- a/src/scenes/game.ts +++ b/src/scenes/game.ts @@ -7,9 +7,7 @@ import { addScore, playMusic, } from '../gameobjects' -import { gameState } from '../helpers' - -const MINUTE = 60 +import { gameState, levels } from '../helpers' scene(Scene.Game, () => { gameState.init() @@ -33,35 +31,27 @@ scene(Scene.Game, () => { const player = addPlayer() addHealth(player) - // 0-1 - wait(0, () => { - const level = MINUTE - const enemy = 5 - const drain = 10 - loop(enemy, addEnemy, level / enemy, true) - loop(drain, addDrain, level / drain, true) - }) - - // 1-3 - wait(MINUTE, () => { - gameState.enemyDamageMultiplier = 1.5 - gameState.enemyHealthMultiplier = 1.5 - gameState.enemySpeedMultiplier = 1.5 - - const level = 3 * MINUTE - const enemy = 3 - const drain = 15 - loop(enemy, addEnemy, level / enemy, true) - loop(drain, addDrain, level / drain, true) - }) - - // 3-∞ - wait(3 * MINUTE, () => { - gameState.enemyDamageMultiplier = 2 - gameState.enemyHealthMultiplier = 2 - gameState.enemySpeedMultiplier = 2 - - loop(1, addEnemy, undefined, true) - loop(20, addDrain, undefined, true) + levels.forEach((level) => { + wait(level.start, () => { + gameState.enemyDamageMultiplier = level.multiplier.damage + gameState.enemyHealthMultiplier = level.multiplier.health + gameState.enemySpeedMultiplier = level.multiplier.speed + gameState.enemySprites = level.enemies + const duration = level.end && level.end - level.start + + loop( + level.loop.enemy, + addEnemy, + duration && duration / level.loop.enemy, + true, + ) + + loop( + level.loop.enemy, + addDrain, + duration && duration / level.loop.drain, + true, + ) + }) }) })