Menos valores mágicos y spawneo de enemigos

This commit is contained in:
Nulo 2021-06-28 19:20:41 +00:00
parent 9c03414bd2
commit 876bb8a9e5

View file

@ -13,6 +13,13 @@ const jugadorxSprite = loadSprite(jugadorxImg, 133, 266, juego => juego.canvas.h
const larretaSprite = loadSprite(larretaImg, 800, 1069, juego => juego.canvas.height / 4) const larretaSprite = loadSprite(larretaImg, 800, 1069, juego => juego.canvas.height / 4)
const semillaSprite = loadSprite(semillaImg, 480, 640, juego => juego.canvas.height / 8) const semillaSprite = loadSprite(semillaImg, 480, 640, juego => juego.canvas.height / 8)
const ENEMIES_NUM = 20
const SEED_SPEED = 1000
const SEED_COOLDOWN = 300
const MAP_MIN = 1000
const MAP_MAX = 5000
const MAP_SIZE = MAP_MAX - MAP_MIN
export type State = { export type State = {
current: "jugando" current: "jugando"
pos: { x: number } pos: { x: number }
@ -27,11 +34,11 @@ export type State = {
export function createJugandoState(): State { export function createJugandoState(): State {
return { return {
current: "jugando", current: "jugando",
pos: { x: 3000 }, pos: { x: MAP_MIN + MAP_SIZE / 2 },
view: { x: 0 }, view: { x: 0 },
velocity: { x: 0 }, velocity: { x: 0 },
side: "right", side: "right",
enemies: [{ x: 2700 }], enemies: [],
seeds: [], seeds: [],
seedCooldown: 0, seedCooldown: 0,
} }
@ -49,16 +56,16 @@ export function update(juego: Juego<State>, dt: number) {
} }
juego.state.pos.x += (dt / 1000) * juego.state.velocity.x juego.state.pos.x += (dt / 1000) * juego.state.velocity.x
if (juego.state.pos.x < 2000) juego.state.pos.x = 2000 if (juego.state.pos.x < MAP_MIN) juego.state.pos.x = MAP_MIN
if (juego.state.pos.x > 4000) juego.state.pos.x = 4000 if (juego.state.pos.x > MAP_MAX) juego.state.pos.x = MAP_MAX
juego.state.seedCooldown -= dt juego.state.seedCooldown -= dt
if (juego.keyboard.keys[' '] && juego.state.seedCooldown < 0) { if (juego.keyboard.keys[' '] && juego.state.seedCooldown < 0) {
juego.state.seeds.push({ juego.state.seeds.push({
x: juego.state.pos.x, x: juego.state.pos.x,
velocity: { x: juego.state.side === "left" ? -2000 : 2000 }, velocity: { x: juego.state.side === "left" ? -SEED_SPEED : SEED_SPEED },
}) })
juego.state.seedCooldown = 300 juego.state.seedCooldown = SEED_COOLDOWN
} }
for (const seed of juego.state.seeds) { for (const seed of juego.state.seeds) {
seed.x += (dt / 1000) * seed.velocity.x seed.x += (dt / 1000) * seed.velocity.x
@ -81,6 +88,13 @@ export function update(juego: Juego<State>, dt: number) {
} }
} }
while (juego.state.enemies.length < ENEMIES_NUM) {
const x = Math.random() * MAP_SIZE + MAP_MIN
// Don't spawn enemies too close
if (Math.abs(juego.state.pos.x - x) < 300) continue
juego.state.enemies.push({ x })
}
juego.state.view.x = -juego.state.pos.x + juego.canvas.width / 2 - jugadorxSprite.getWidth(juego) / 2 juego.state.view.x = -juego.state.pos.x + juego.canvas.width / 2 - jugadorxSprite.getWidth(juego) / 2
} }