diff --git a/assets/sprite-pointer_tail.png b/assets/sprite-pointer_tail.png new file mode 100644 index 0000000..f1919bf Binary files /dev/null and b/assets/sprite-pointer_tail.png differ diff --git a/js/1-jsloader.js b/js/1-jsloader.js index d457c0a..fa6732a 100644 --- a/js/1-jsloader.js +++ b/js/1-jsloader.js @@ -10,10 +10,10 @@ return; } - var scriptManager= {}; - scriptManager.loadingcount=0; + var ScriptManager= {}; + ScriptManager.loading_count=0; - scriptManager.loadjs=async function(pth) { + ScriptManager.loadjs=async function(pth) { var resolve; var reject; var ret=new Promise(function(s, r) { @@ -27,7 +27,7 @@ return; } removelisteners(); - scriptManager.loadingcount--; + ScriptManager.loading_count--; if(xhr.status!=200) { onfail(); return; @@ -72,19 +72,19 @@ xhr.open("GET", pth, true); xhr.send(); - scriptManager.loadingcount++; + ScriptManager.loading_count++; return ret; }; - scriptManager.isDone=function() { - return scriptManager.loadingcount==0; + ScriptManager.isDone=function() { + return ScriptManager.loading_count==0; }; - scriptManager.waitAll=async function() { + ScriptManager.waitAll=async function() { return new Promise(function(resolve, reject) { var i; i=setInterval(function() { - if(scriptManager.loadingcount==0) { + if(ScriptManager.loading_count==0) { clearInterval(i); resolve(); } @@ -92,5 +92,5 @@ }); }; - window.scriptManager=scriptManager; + window.ScriptManager=ScriptManager; })(); diff --git a/js/2-jsloadentry.js b/js/2-jsloadentry.js index 8c47bd1..ed2906c 100644 --- a/js/2-jsloadentry.js +++ b/js/2-jsloadentry.js @@ -1,24 +1,25 @@ //jsloadentry.js (async function() { - if(!(typeof scriptManager=="object"&&"loadjs" in scriptManager)) { + if(!(typeof ScriptManager=="object"&&"loadjs" in ScriptManager)) { if(typeof loadfail=="function") { - loadfail("jsloadentry.js: scriptManager.loadjs is not defined"); + loadfail("jsloadentry.js: ScriptManager.loadjs is not defined"); } else { - window.alert("jsloadentry.js: scriptManager.loadjs is not defined"); + window.alert("jsloadentry.js: ScriptManager.loadjs is not defined"); } return; } - scriptManager.loadjs("./js/libpolyfill.requestAnimationFrame.js"); - scriptManager.loadjs("./js/libutil.js"); - scriptManager.loadjs("./js/libcubicbezier.js"); - scriptManager.loadjs("./js/libwebglcheck.js"); - scriptManager.loadjs("./js/libpixi_v891gl.dev.min.js"); - //scriptManager.loadjs("./js/libpixi_v891gl.prod.min.js"); - await scriptManager.waitAll(); - await scriptManager.loadjs("./js/libtransition.js"); - await scriptManager.loadjs("./js/libmain.js"); - scriptManager.loadjs("./js/libpointerfx.js"); - await scriptManager.waitAll(); + ScriptManager.loadjs("./js/libpolyfill.requestAnimationFrame.js"); + ScriptManager.loadjs("./js/libutil.js"); + ScriptManager.loadjs("./js/libcubicbezier.js"); + ScriptManager.loadjs("./js/libwebglcheck.js"); + ScriptManager.loadjs("./js/libpixi_v891gl.dev.min.js"); + //ScriptManager.loadjs("./js/libpixi_v891gl.prod.min.js"); + ScriptManager.loadjs("./js/libassetloader.js"); + await ScriptManager.waitAll(); + await ScriptManager.loadjs("./js/libtransition.js"); + await ScriptManager.loadjs("./js/libmain.js"); + ScriptManager.loadjs("./js/libpointerfx.js"); + await ScriptManager.waitAll(); })(); \ No newline at end of file diff --git a/js/libassetloader.js b/js/libassetloader.js new file mode 100644 index 0000000..07db92b --- /dev/null +++ b/js/libassetloader.js @@ -0,0 +1,112 @@ +//libassetloader.js + +(async function() { + if(typeof XMLHttpRequest!="function") { + if(typeof loadfail=="function") { + loadfail("libassetloader.js: XMLHttpRequest(type of "+(typeof XMLHttpRequest)+") is not a function"); + } else { + window.alert("libassetloader.js: XMLHttpRequest(type of "+(typeof XMLHttpRequest)+") is not a function"); + } + return; + } + if(typeof Blob!="function") { + if(typeof loadfail=="function") { + loadfail("libassetloader.js: Blob(type of "+(typeof Blob)+") is not a function"); + } else { + window.alert("libassetloader.js: Blob(type of "+(typeof Blob)+") is not a function"); + } + return; + } + if(typeof URL!="function") { + if(typeof loadfail=="function") { + loadfail("libassetloader.js: URL(type of "+(typeof URL)+") is not a function"); + } else { + window.alert("libassetloader.js: URL(type of "+(typeof URL)+") is not a function"); + } + return; + } + + var AssetManager= {}; + + // map http url -> blob url + AssetManager.loadedAssets= {}; + + AssetManager.loading_count=0; + + AssetManager.loadWithCache=async function(pth) { + if(pth in AssetManager.loadedAssets) { + return Promise.resolve(AssetManager.loadedAssets[pth]); + } + return AssetManager.do_fetch_res(pth); + }; + + AssetManager.do_fetch_res=async function(pth) { + var resolve; + var reject; + var ret=new Promise(function(s, r) { + resolve=s; + reject=r; + }); + var xhr=new XMLHttpRequest(); + + xhr.responseType = "blob"; + + var onreadystatechange=async function() { + if(xhr.readyState!=XMLHttpRequest.DONE) { + return; + } + removelisteners(); + AssetManager.loading_count--; + if(xhr.status!=200) { + onfail(); + return; + } + AssetManager.loadedAssets[pth]=URL.createObjectURL(xhr.response); + console.debug("asset "+pth+" loaded from source."); + resolve(AssetManager.loadedAssets[pth]); + return; + }; + + var onfail=function() { + removelisteners(); + xhr.abort(); + window.loadfail("asset "+pth+" load failed"); + reject("asset "+pth+" load failed"); + }; + + var removelisteners=function() { + xhr.removeEventListener("readystatechange", onreadystatechange); + xhr.removeEventListener("error", onfail); + xhr.removeEventListener("abort", onfail); + }; + + xhr.addEventListener("readystatechange", onreadystatechange); + xhr.addEventListener("error", onfail); + xhr.addEventListener("abort", onfail); + + xhr.open("GET", pth, true); + xhr.send(); + + AssetManager.loading_count++; + return ret; + }; + + AssetManager.isDone=function() { + return AssetManager.loading_count==0; + }; + + AssetManager.waitAll=async function() { + return new Promise(function(resolve, reject) { + var i; + i=setInterval(function() { + if(AssetManager.loading_count==0) { + clearInterval(i); + resolve(); + } + }, 100); + }); + }; + + window.AssetManager=AssetManager; + +})(); \ No newline at end of file diff --git a/js/libmain.js b/js/libmain.js index 2734fb4..bf22c72 100644 --- a/js/libmain.js +++ b/js/libmain.js @@ -1,3 +1,5 @@ +//libmain.js + return (async function() { if(typeof PIXI!="object") { if(typeof loadfail=="function") {