p5winter/main.js

149 lines
2.8 KiB
JavaScript

import {
Entity,
Sprite
} from './entity.js';
import { GameScreen } from './screenGame.js';
import { SongSelectScreen } from './screenSongSelect.js';
import {
KeyHint
} from './ui.js'
import chartmgr from './chartmgr.js';
import state from './state.js';
const charts = [
"bozo",
"dashstar",
"golddust",
"pixelpalace"
// "test"
]
// STUFF
let songSelectScreen;
// ASSETS
let sndBoop;
let sndCombobreak;
let sndSongselect;
let fntRenogare;
function blur(col, blurFactor) {
drawingContext.shadowColor = col;
drawingContext.shadowBlur = blurFactor;
}
function debugMsg(msg) {
fill(255);
stroke(0);
textSize(12);
text(msg, 24, 24);
}
function drawFps() {
let fps = frameRate();
fill(255);
stroke(0);
textSize(12);
text("FPS: " + fps.toFixed(2), 10, height - 10);
}
async function preload() {
console.log("preloading..")
// load sounds
soundFormats('mp3')
sndCombobreak = loadSound('./assets/sfx/combobreak');
sndCombobreak.volume = 0.6
sndBoop = loadSound('./assets/sfx/boop')
sndBoop.volume = 0.6
sndSongselect = loadSound('./assets/sfx/songselect')
sndSongselect.volume = 0.4
// load fonts
fntRenogare = loadFont("./assets/fonts/Renogare-Regular.otf");
}
async function setup() {
console.log("setting up..")
// frameRate(144)
frameRate(60)
createCanvas(1280, 720)
for await (let chartid of charts) {
try {
await chartmgr.get(chartid)
} catch(e) {
console.log(`error loading chart ${chartid}`, e)
}
}
songSelectScreen = new SongSelectScreen();
// gameScreen = await chartmgr.loadChart('test')
}
function draw() {
textFont(fntRenogare);
background(10)
switch(state.state) {
case "game":
if(!window.gameScreen) {
debugMsg("err: gamescreen not initialized!")
break;
}
if(!window.gameScreen.song.isLoaded()) {
fill(255);
stroke(0);
textSize(12);
text("Loading song..", (width - textWidth("Loading song..")) / 2, height /2);
fill(40, 40, 255)
rect(0,0,window.gameScreen.loadPercent * width, 12)
break;
}
window.gameScreen.calcBeat();
window.gameScreen.draw();
break;
case "songselect":
if(!songSelectScreen) {
debugMsg(`loading charts (${chartmgr.cache.size}/${charts.length})`)
break;
}
songSelectScreen.draw()
break;
}
drawFps();
}
function keyPressed() {
switch(state.state) {
case "game":
window.gameScreen.checkHit();
break;
case "songselect":
songSelectScreen.keyPressed()
break;
}
}
// make p5 work in a js module environment because variables
// arent exposed to window by default in module
window.preload = preload;
window.setup = setup;
window.draw = draw;
window.keyPressed = keyPressed;
export {
sndCombobreak,
sndBoop,
sndSongselect,
fntRenogare
}