152 lines
5.7 KiB
JavaScript
152 lines
5.7 KiB
JavaScript
//libmain.js
|
|
|
|
return (async function() {
|
|
if(typeof PIXI!="object") {
|
|
if(typeof loadfail=="function") {
|
|
loadfail("libmain.js: PIXI(type of "+(typeof PIXI)+") is not an object");
|
|
} else {
|
|
window.alert("libmain.js: PIXI(type of "+(typeof PIXI)+") is not an object");
|
|
}
|
|
return;
|
|
}
|
|
|
|
var libmain= {};
|
|
|
|
/////////////////////////////////////// set default settings
|
|
|
|
libmain.settings= {};
|
|
|
|
libmain.settings.render= {};
|
|
libmain.settings.render.fixed_ratio=16/9;
|
|
libmain.settings.render.use_fixed_aspect_ratio=true;
|
|
libmain.settings.render.show_fps=true;
|
|
libmain.settings.render.use_anti_alias=true;
|
|
libmain.settings.render.resolution=1;
|
|
|
|
libmain.settings.hud= {};
|
|
libmain.settings.hud.show_tapfx=true;
|
|
libmain.settings.hud.ui_scale=1;
|
|
|
|
libmain.settings.game= {};
|
|
|
|
/////////////////////////////////////// init canvas and frame
|
|
|
|
console.log("[libmain] setting up basic pixi application...");
|
|
// set up main canvas element
|
|
libmain.canvas=document.getElementById("maincanvas");
|
|
if(libmain.canvas==null) {
|
|
libmain.canvas=document.createElement("canvas");
|
|
libmain.canvas.id="maincanvas";
|
|
document.body.appendChild(libmain.canvas);
|
|
}
|
|
libmain.canvas.style.width=0;
|
|
libmain.canvas.style.height=0;
|
|
libmain.canvas.width=0;
|
|
libmain.canvas.height=0;
|
|
libmain.canvas.style.background="rgba(0,0,0,0.5)";
|
|
libmain.canvas.style.display="inline-block";
|
|
libmain.canvas.style.position="absolute";
|
|
libmain.canvas.style.zIndex=1;
|
|
|
|
// setup pixi application
|
|
libmain.renderer=await PIXI.autoDetectRenderer({
|
|
"preference":"webgpu",
|
|
"canvas":libmain.canvas,
|
|
"antialias":libmain.settings.render.use_anti_alias,
|
|
"resolution":libmain.settings.render.resolution,
|
|
"backgroundAlpha":0,
|
|
"width":1,
|
|
"height":1
|
|
});
|
|
|
|
libmain.scenes= {};
|
|
|
|
libmain.scenes.root=new PIXI.Container();
|
|
libmain.scenes.root.boundsArea=new PIXI.Rectangle(0, 0, 0, 0);
|
|
libmain.scenes.root.cullArea=libmain.scenes.root.boundsArea;
|
|
//libmain.scenes.root.interactiveChildren=true;
|
|
libmain.scenes.root.cullableChildren=true;
|
|
|
|
libmain.render_tick=function() {
|
|
try {
|
|
libmain.renderer.render(libmain.scenes.root);
|
|
} catch(e) {
|
|
console.error(e);
|
|
if(typeof loadfail=="function") {
|
|
loadfail(libutil.error2str(e));
|
|
} else {
|
|
window.alert(libutil.error2str(e));
|
|
}
|
|
return;
|
|
}
|
|
requestAnimationFrame(libmain.render_tick);
|
|
};
|
|
requestAnimationFrame(libmain.render_tick);
|
|
|
|
/////////////////////////////////////// add layered containers
|
|
|
|
libmain.scenes.pointer_fx= {};
|
|
libmain.scenes.pointer_fx.judge_rect=new PIXI.Sprite({"texture": PIXI.Texture.EMPTY});
|
|
libmain.scenes.pointer_fx.root=new PIXI.Container();
|
|
|
|
libmain.scenes.menu= {};
|
|
libmain.scenes.menu.root=new PIXI.Container();
|
|
libmain.scenes.menu.startpage=new PIXI.Container();
|
|
libmain.scenes.menu.pause=new PIXI.Container();
|
|
libmain.scenes.menu.settings=new PIXI.Container();
|
|
libmain.scenes.menu.background=new PIXI.Container();
|
|
|
|
libmain.scenes.menu.root.addChildAt(libmain.scenes.menu.background, 0);
|
|
libmain.scenes.menu.root.addChildAt(libmain.scenes.menu.settings, 1);
|
|
libmain.scenes.menu.root.addChildAt(libmain.scenes.menu.pause, 2);
|
|
libmain.scenes.menu.root.addChildAt(libmain.scenes.menu.startpage, 3);
|
|
|
|
libmain.scenes.game= {};
|
|
libmain.scenes.game.root=new PIXI.Container();
|
|
libmain.scenes.game.hud=new PIXI.Container();
|
|
libmain.scenes.game.screen_fx=new PIXI.Container();
|
|
libmain.scenes.game.judgment_fx=new PIXI.Container();
|
|
libmain.scenes.game.player=new PIXI.Container();
|
|
libmain.scenes.game.notes=new PIXI.Container();
|
|
libmain.scenes.game.background=new PIXI.Container();
|
|
|
|
libmain.scenes.game.root.addChildAt(libmain.scenes.game.background, 0);
|
|
libmain.scenes.game.root.addChildAt(libmain.scenes.game.notes, 1);
|
|
libmain.scenes.game.root.addChildAt(libmain.scenes.game.player, 2);
|
|
libmain.scenes.game.root.addChildAt(libmain.scenes.game.judgment_fx, 3);
|
|
libmain.scenes.game.root.addChildAt(libmain.scenes.game.screen_fx, 4);
|
|
libmain.scenes.game.root.addChildAt(libmain.scenes.game.hud, 5);
|
|
|
|
libmain.scenes.root.addChildAt(libmain.scenes.game.root, 0);
|
|
libmain.scenes.root.addChildAt(libmain.scenes.menu.root, 1);
|
|
libmain.scenes.root.addChildAt(libmain.scenes.pointer_fx.root, 2);
|
|
libmain.scenes.root.addChildAt(libmain.scenes.pointer_fx.judge_rect, 3);
|
|
|
|
/////////////////////////////////////// end of setup
|
|
|
|
// document resize handler
|
|
libmain.onresize=function() {
|
|
var res=[document.body.clientWidth, document.body.clientHeight, 0, 0];
|
|
if(libmain.settings.render.use_fixed_aspect_ratio) {
|
|
res=libutil.calcresize(document.body.clientWidth, document.body.clientHeight, libmain.settings.render.fixed_ratio);
|
|
}
|
|
libmain.canvas.width=res[0];
|
|
libmain.canvas.height=res[1];
|
|
libmain.canvas.style.width=res[0]+"px";
|
|
libmain.canvas.style.height=res[1]+"px";
|
|
libmain.canvas.style.left=res[2]+"px";
|
|
libmain.canvas.style.top=res[3]+"px";
|
|
libmain.scenes.root.boundsArea.width=res[0];
|
|
libmain.scenes.root.boundsArea.height=res[1];
|
|
libmain.scenes.pointer_fx.judge_rect.width=res[0];
|
|
libmain.scenes.pointer_fx.judge_rect.height=res[1];
|
|
libmain.renderer.resize(res[0], res[1]);
|
|
};
|
|
|
|
window.addEventListener("resize", libmain.onresize);
|
|
requestAnimationFrame(libmain.onresize);
|
|
|
|
window.libmain=libmain;
|
|
console.log("[libmain] initialized successfully.");
|
|
})();
|