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 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 = {
current: "jugando"
pos: { x: number }
@ -27,11 +34,11 @@ export type State = {
export function createJugandoState(): State {
return {
current: "jugando",
pos: { x: 3000 },
pos: { x: MAP_MIN + MAP_SIZE / 2 },
view: { x: 0 },
velocity: { x: 0 },
side: "right",
enemies: [{ x: 2700 }],
enemies: [],
seeds: [],
seedCooldown: 0,
}
@ -49,16 +56,16 @@ export function update(juego: Juego<State>, dt: number) {
}
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 > 4000) juego.state.pos.x = 4000
if (juego.state.pos.x < MAP_MIN) juego.state.pos.x = MAP_MIN
if (juego.state.pos.x > MAP_MAX) juego.state.pos.x = MAP_MAX
juego.state.seedCooldown -= dt
if (juego.keyboard.keys[' '] && juego.state.seedCooldown < 0) {
juego.state.seeds.push({
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) {
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
}