Files
canvas/absurd-survivors/src/main.ts
Sheldan a52754ce0d survivors: adding functional container enemy with random chances on death
split between create and spawn methods
adding level drop
adding ability to player to level
fixing hud not showing the label value
adding current level display to hud
adding ability to weapons to level
2025-08-29 22:58:44 +02:00

135 lines
2.8 KiB
TypeScript

import './style.css'
import {docReady} from "canvas-common";
import {World} from "./World.ts";
import {Player} from "./Player.ts";
import {Vector} from "./base.ts";
import {BasicEnemy, ContainerEnemy, Enemy, HealthEnemy, ShootingEnemy} from "./Enemies.ts";
import {HUD} from "./ui.ts";
import {HomingPistol, Pistol} from "./weapons.ts";
let hud: HUD;
let world: World;
let config: Config;
let state: WorldState;
let ctx: CanvasRenderingContext2D;
let canvas;
export class Config {
private _fps: number = 60;
get fps(): number {
return this._fps;
}
}
export class WorldState {
private _ended: boolean = false;
get ended(): boolean {
return this._ended;
}
}
function updateCanvas() {
ctx.clearRect(0, 0, world.size.x, world.size.y);
hud.draw(ctx)
if(!state.ended) {
world.enemiesAct()
world.player.act()
world.draw()
for(let key in keys) {
if(keys[key].state) {
keys[key].fun()
}
}
} else {
ctx.fillText('End', 15, 15)
}
setTimeout(function () {
requestAnimationFrame(updateCanvas);
}, 1000 / config.fps)
}
function makeKey(char, fun) {
keys[char] = {
state: false,
fun: fun
}
}
let keys = {};
makeKey('w', function () {
world.movePlayer(new Vector(0, -world.player.stats.speed))
})
makeKey('s', function () {
world.movePlayer(new Vector(0, world.player.stats.speed))
})
makeKey('a', function () {
world.movePlayer(new Vector(-world.player.stats.speed, 0))
})
makeKey('d', function () {
world.movePlayer(new Vector(world.player.stats.speed, 0))
})
function keyUp(event) {
if(event.key in keys) {
keys[event.key].state = false;
}
}
function keyDown(event) {
if(event.key in keys) {
keys[event.key].state = true;
}
}
document.onkeyup = keyUp;
document.onkeydown = keyDown;
docReady(function () {
canvas = document.getElementById('canvas');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
ctx = canvas.getContext("2d");
config = new Config();
let player = Player.generatePlayer();
world = new World(player, ctx, new Vector(window.innerWidth, window.innerHeight));
state = new WorldState();
BasicEnemy.spawnBasicEnemy(world)
ShootingEnemy.spawnShootingEnemy(world, new Vector(350, 350))
setInterval(() => {
ShootingEnemy.spawnShootingEnemy(world)
}, 1_000)
setInterval(() => {
HealthEnemy.spawnHealthEnemy(world)
}, 15_000)
setInterval(() => {
ContainerEnemy.spawnContainerEnemy(world)
}, 10_000)
player.addWeapon(Pistol.generatePistol(world))
player.addWeapon(HomingPistol.generatePistol(world))
hud = new HUD(world);
requestAnimationFrame(updateCanvas);
})