Newer
Older
import Canvas from "../../hampsterengine/src/canvas.js";
import Engine from "../../hampsterengine/src/engine.js";
import Keyboard from "../../hampsterengine/src/keyboard";
import {FontRenderer, Stars} from "./objects";
// dependencies used for debugging. comment out code that uses this and they won't be included
import {rm_mainMenu} from "./rooms/mainMenu";
import {rm_game} from "./rooms/game";
// import {rm_DEBUG_button} from "./rooms/debug_button";
// import {rm_DEBUG_mouse} from "./rooms/debug_mouse";
// import {rm_DEBUG_music} from "./rooms/debug_music";
import {rm_DEBUG_stars} from "./rooms/debug_stars";
import {rm_DEBUG_sprites} from "./rooms/debug_sprites";

Bye
committed
// Parse query parameters
const query = new URLSearchParams(window.location.search);

Bye
committed
const engine = new Engine(canvas);
const assets = engine.assetStore;
const fontRenderer = new FontRenderer(assets.get`font`);
window.fR = fontRenderer
// const mouse = new Mouse(engine);
// window.mouse = mouse;
engine.debug = query.get`debug`;
window.debug = engine.debug;
canvas.width = 256;
canvas.height = 240;
canvas.setScale();
const floor = Math.floor;
const u = _=> {
const w = innerWidth;
const h = innerHeight;
const wS = floor(w/256);
const hS = floor(h/240);
const s=Math.min(wS,hS);
canvas.width = 256*s;
canvas.height= 240*s;
canvas.pixelRatio = s;
canvas.setScale(canvas.scale);
canvas.ctx.imageSmoothingEnabled = false;
}
u();addEventListener('resize', u, !0);
engine.running = false; // Game uses this as a pause state actually
// // Prerender the stars
// const tempCanvasStars = document.createElement("canvas");
// tempCanvasStars.width = 2560;
// tempCanvasStars.height = 2400;
// const stars = new Stars(tempCanvasStars);
// window.starsTest = stars;
// stars.draw(0, 0, 2560, 2400);
// const createStarsObjectURL = blob => {
// assets.addImage('stars', URL.createObjectURL(blob));
// }
// tempCanvasStars.toBlob(createStarsObjectURL);
assets.addMiniSprite('grass', 'IIIIIIQIQQQJZQZZRZRRZRZRSSRSRZZR');
assets.renderMiniSprite('grass', ['#2a6', '#964', '#853']);
engine.registerRoom(rm_mainMenu, 'mainMenu');
engine.registerRoom(rm_game, 'game');
// engine.registerRoom(rm_DEBUG_button, 'debug_button');
// engine.registerRoom(rm_DEBUG_mouse, 'debug_mouse');
// engine.registerRoom(rm_DEBUG_music, 'debug_music');
engine.registerRoom(rm_DEBUG_INCURSION, 'debug_incursion');
engine.registerRoom(rm_DEBUG_stars, 'debug_stars');
engine.registerRoom(rm_DEBUG_sprites, 'debug_sprites');
const stats = new Stats();
stats.showPanel(0);
document.body.appendChild( stats.dom );

Bye
committed
window.physicsFrame = physicsFrame;
let readyTime = 0;
// Draw things. no user interaction or physics here.
engine.frames++;
canvas.fill(engine.room.bgColor ?? 'black');
engine.draw();
engine.drawGui();
// engine.drawCursor();
if (debug) {
canvas.drawText(`physics ticks: ${engine.physicsFrames} (~${(engine.physicsFrames/60).toFixed(1)}sec)`, 0, 0,{textBaseline:'top'})
canvas.drawText(`frames: ${engine.frames}`, 0, 8,{textBaseline:'top'})

Bye
committed
canvas.drawText(`run time: ${((performance.now()-readyTime)/1000).toFixed(1)}sec`, 0, 16, {textBaseline:'top'})
canvas.drawText(`keys: ${JSON.stringify(keyboard.keys)}`, 0, 24, {textBaseline:'top'})
// Ask to run at the next frame
requestAnimationFrame(main);
} catch (e) {
engine.running = false;
canvas.pixelRatio = 2;
canvas.ctx.setTransform(canvas.pixelRatio, 0, 0, canvas.pixelRatio, 0, 0);
canvas.fill('#a05555d0');
canvas.drawImage(logo, 10, 10, logo.width, logo.height)
// Runs 60 times a second regardless of frame rate.
engine.physicsFrames++;
engine.lastPhysicsFrame = performance.now();

Bye
committed
engine.room.step();
keyboard.keysThisFrame = [];
keyboard.keysUpThisFrame = [];
if (query.get`room`) {
console.log('Requesting room', query.get`room`);
engine.room = engine.getRoomIndex(query.get`room`);
// Ensure assets are loaded.
function load() {
if (engine.loading) {
engine.loadLoop();

Bye
committed
readyTime = performance.now();
setInterval(physicsTick, (query.get`slowdown` ? 500 : 1000/60)); // Update physics 60 times a second