2025-04-18 21:03:32 +08:00

95 lines
3.1 KiB
JavaScript

//libmain.js
(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= {};
libmain.settings= {};
libmain.api= {};
/////////////////////////////////////// set default settings
libmain.settings.fixed_ratio=16/9;
libmain.settings.use_fixed_aspect_ratio=true;
/////////////////////////////////////// init canvas and frame
console.log("[libmain] setting up basic pixi application...");
// set up main canvas element
libmain.mainframe=document.getElementById("mainframe");
libmain.canvas=document.getElementById("maincanvas");
if(libmain.mainframe==null) {
libmain.mainframe=document.createElement("div");
libmain.mainframe.id="mainframe";
document.body.appendChild(libmain.mainframe);
}
libmain.mainframe.style.display="inline-block";
libmain.mainframe.style.zIndex=0;
libmain.mainframe.style.backgroundColor="#000000";
if(libmain.canvas==null) {
libmain.canvas=document.createElement("canvas");
libmain.canvas.id="maincanvas";
libmain.mainframe.appendChild(libmain.canvas);
}
libmain.canvas.style.width="100%";
libmain.canvas.style.height="100%";
libmain.canvas.style.display="inline-block";
libmain.canvas.style.position="absolute";
libmain.canvas.style.zIndex=1;
// document resize handler
libmain.resize=function() {
var res=[document.body.clientWidth, document.body.clientHeight, 0, 0];
if(libmain.settings.use_fixed_aspect_ratio) {
res=libutil.calcresize(document.body.clientWidth, document.body.clientHeight, libmain.settings.fixed_ratio);
}
libmain.mainframe.style.width=res[0]+"px";
libmain.mainframe.style.height=res[1]+"px";
libmain.mainframe.style.left=res[2]+"px";
libmain.mainframe.style.top=res[3]+"px";
};
window.addEventListener("resize", libmain.resize);
libmain.resize();
// setup pixi application
libmain.renderer=await PIXI.autoDetectRenderer({
"preference":"webgpu",
"canvas":libmain.canvas,
"antialias":true,
"backgroundAlpha":0,
"width":libmain.width,
"height":libmain.height
});
libmain.stageroot=new PIXI.Container();
libmain.stageroot.sortableChildren=true;
libmain.render=function() {
try {
libmain.renderer.render(libmain.stageroot);
} catch(e) {
console.error(e);
if(typeof loadfail=="function") {
loadfail(libutil.error2str(e));
} else {
window.alert(libutil.error2str(e));
}
return;
}
requestAnimationFrame(libmain.render);
};
requestAnimationFrame(libmain.render);
/////////////////////////////////////// end of setup
window.libmain=libmain;
console.log("[libmain] all components initialized successfully.");
})();