simponic.xyz/centipede/js/main.js
2024-01-12 19:13:13 -07:00

75 lines
3.2 KiB
JavaScript

let handleInput;
const initialize = () => {
game.level = 1;
game.score = 0;
game.totalTime = 0;
game.keyboard = game.input.Keyboard();
handleInput = game.keyboard.update;
game.lastTimeStamp = performance.now();
game.player = game.Player({x: game.width/2 - 20, y: game.height-40, width: 40, height: 40, sprite: game.sprites.ship});
game.resetObjects();
};
const update = (elapsedTime) => {
game.totalTime += elapsedTime;
game.mushrooms.map((mushroom) => game.getMushroomCollidableObjects().filter((object) => object.intersects(mushroom))).map((objects, i) => {
objects.map((object => object.onMushroomCollision ? object.onMushroomCollision(game.mushrooms[i]) : null));
});
game.bullets.map((bullet) => game.getBulletCollidableObjects().filter((object) => object.intersects(bullet))).map((objects, i) => {
objects.map((object) => object.onBulletCollision ? object.onBulletCollision(game.bullets[i]) : null)
})
game.getPlayerCollidableObjects().map((object) => object.intersects(game.player) ? object.onPlayerCollision(game.player) : null);
game.bullets = game.bullets.filter((bullet) => bullet.alive);
game.spiders = game.spiders.filter((spider) => spider.alive);
game.explosions = game.explosions.filter((explosion) => explosion.alive);
game.mushrooms = game.mushrooms.filter((mushroom) => mushroom.state > 0);
game.scorpions = game.scorpions.filter((scorpion) => scorpion.x >= 0 && scorpion.x <= game.width - scorpion.width && scorpion.alive);
game.fleas = game.fleas.filter((flea) => flea.y < game.height - flea.height && flea.alive);
game.getObjects().map((object) => object.update(elapsedTime));
if (Math.random() < 0.002 * game.level && game.spiders.length < game.level) {
game.spiders.push(game.Spider({x: game.width/2, y: 0, width: 80, height: 40, rot: 0, dx: -0.2, dy: 0, sprite: game.sprites.spider}));
}
if (Math.random() < 0.001 * game.level && game.fleas.length < game.level) {
game.fleas.push(game.Flea({x: Math.floor(Math.random() * game.width / game.mushroomDims.width) * game.mushroomDims.width, y: 0, width: 40, height: 40, rot: 0, dx: 0, dy: 0.2, sprite: game.sprites.flea}));
}
if (Math.random() < 0.001 * game.level && game.scorpions.length < game.level) {
game.scorpions.push(game.Scorpion({y: Math.floor(Math.random() * game.height / game.mushroomDims.height) * game.mushroomDims.height, x: 0, width: 80, height: 40, rot: 0, dx: 0.2, dy: 0, sprite: game.sprites.scorpion}));
}
if (!game.centipede.alive()) {
game.resetObjects();
game.level++;
game.score += game.level*400;
}
};
const render = (elapsedTime) => {
game.graphics.clear();
game.getObjects().map((object) => object.draw(elapsedTime));
document.getElementById("hud").innerHTML = `Level: ${game.level} Lives: ${game.player.lives} Score: ${game.score} ${game.player.poisoned ? "<span style='color:green'>POISONED<span>" : ""}`;
};
const gameLoop = (time) => {
const elapsedTime = time - game.lastTimeStamp;
game.lastTimeStamp = time;
handleInput(elapsedTime);
update(elapsedTime);
render(elapsedTime);
if (!game.stopped) {
requestAnimationFrame(gameLoop);
}
};
initialize();
menu.reRegisterKeys();
requestAnimationFrame(gameLoop);