From 4cabba2561f55ee6d068d631e3272ff7bf984b37 Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Sun, 27 Mar 2022 02:17:26 -0600 Subject: Initial commit - a working dynamic loader with Express --- src/bootstrap.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/game.js | 10 ++++++++++ src/require.js | 5 +++++ 3 files changed, 71 insertions(+) create mode 100644 src/bootstrap.js create mode 100644 src/game.js create mode 100644 src/require.js (limited to 'src') diff --git a/src/bootstrap.js b/src/bootstrap.js new file mode 100644 index 0000000..39453ff --- /dev/null +++ b/src/bootstrap.js @@ -0,0 +1,56 @@ +game.bootstrap = (function() { + const scripts = [ + { src: ['src/game.js'], id: 'game' }, + ]; + const assets = { + bigblue: 'assets/image/bigblue.png', + }; + + const loadScripts = function(onDone) { + while (scripts.length) { + let script = scripts.shift(); + require(script.src, () => { + onDone(script); + }); + } + console.log('scripts loaded'); + } + + const loadAsset = (source) => { + let fileExtension = source.substr(source.lastIndexOf('.') + 1); + return fetch(source) + .then((r) => r.blob()) + .then((r) => { + let asset; + if (["png", "jpg", "jpeg"].includes(fileExtension)) { + asset = new Image(); + } else if (["mp3"].includes(fileExtension)) { + asset = new Audio(); + } + asset.src = URL.createObjectURL(r); + return asset; + }) + } + + const loadAssets = function() { + const promises = []; + for (let key in assets) { + promises.push(loadAsset(assets[key], (asset) => { + game.assets[key] = asset; + }, (error) => { + console.log(error) + })); + } + return Promise.all(Object.keys(assets).map((key) => { + return loadAsset(assets[key]).then((asset) => game.assets[key] = asset); + })); + } + + game.assets = {}; + loadAssets().then(() => { + loadScripts((script) => { + game.initialize(); + }); + }) + +})(); \ No newline at end of file diff --git a/src/game.js b/src/game.js new file mode 100644 index 0000000..4efceae --- /dev/null +++ b/src/game.js @@ -0,0 +1,10 @@ +const context = document.getElementById('game-canvas').getContext('2d'); +context.imageSmoothingEnabled = false; + +console.log("HELLO") +game.initialize = () => { + context.clearRect(0, 0, game.width, game.height); + context.drawImage(game.assets.bigblue, 0, 0, game.width, game.height); + + console.log("BITCH") +} diff --git a/src/require.js b/src/require.js new file mode 100644 index 0000000..a4203f0 --- /dev/null +++ b/src/require.js @@ -0,0 +1,5 @@ +/** vim: et:ts=4:sw=4:sts=4 + * @license RequireJS 2.3.6 Copyright jQuery Foundation and other contributors. + * Released under MIT license, https://github.com/requirejs/requirejs/blob/master/LICENSE + */ +var requirejs,require,define;!function(global,setTimeout){var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.3.6",commentRegExp=/\/\*[\s\S]*?\*\/|([^:"'=]|^)\/\/.*$/gm,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,isBrowser=!("undefined"==typeof window||"undefined"==typeof navigator||!window.document),isWebWorker=!isBrowser&&"undefined"!=typeof importScripts,readyRegExp=isBrowser&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),contexts={},cfg={},globalDefQueue=[],useInteractive=!1;function commentReplace(e,t){return t||""}function isFunction(e){return"[object Function]"===ostring.call(e)}function isArray(e){return"[object Array]"===ostring.call(e)}function each(e,t){var i;if(e)for(i=0;i