2025-04-22 23:21:12 +08:00

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.");
})();