p5winter/main.js

163 lines
3.5 KiB
JavaScript

import { SongSelectScreen } from './screenSongSelect.js';
import chartmgr from './chartmgr.js';
import state from './state.js';
import { HighscoreInputScreen } from './screenHighscoreInput.js'
import { debugMsg } from './debug.js';
import highscore from './highscore.js';
const charts = [
"bozo",
"dashstar",
"golddust",
"pixelpalace",
// "test"
]
// STUFF
let songSelectScreen;
export let highscoreInputScreen;
// ASSETS
let sndBoop;
let sndCombobreak;
let sndSongselect;
let fntRenogare;
function blur(col, blurFactor) {
drawingContext.shadowColor = col;
drawingContext.shadowBlur = blurFactor;
}
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;
}
if(window.gameScreen.song.duration() - 0.01 < window.gameScreen.song.currentTime()) {
if(
highscore.getHighscore(window.gameScreen.chart.id) == undefined
|| window.gameScreen.score.score > highscore.getHighscore(this.chart.id)
) {
highscoreInputScreen = new HighscoreInputScreen(window.gameScreen.chart.id, window.gameScreen.score.score);
state.setState("highscoreInput")
} else {
state.setState("songselect")
}
}
window.gameScreen.calcBeat();
window.gameScreen.draw();
break;
case "songselect":
if(!songSelectScreen) {
debugMsg(`loading charts (${chartmgr.cache.size}/${charts.length})`)
break;
}
songSelectScreen.draw()
break;
case "highscoreInput":
if(!highscoreInputScreen) {
debugMsg(`ERROR: HSI BUT NO SETUP`)
break;
}
highscoreInputScreen.draw();
break;
}
drawFps();
}
function keyPressed() {
switch(state.state) {
case "game":
window.gameScreen.checkHit();
break;
case "songselect":
songSelectScreen.keyPressed()
break;
case "highscoreInput":
highscoreInputScreen.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
}