163 lines
3.5 KiB
JavaScript
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
|
|
} |