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