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 }