From d8bb3d6dd9befa2706831e24733d3ae9505f079d Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Fri, 22 Sep 2023 13:49:00 +0000 Subject: [PATCH] Fixed cached loop Co-authored-by: sigonasr2 --- .../C++/scripts/build.sh | 34 + .../C++/scripts/commit.sh | 21 + .../C++/scripts/debug.sh | 22 + .../C++/scripts/filelist | 7 + .../C++/scripts/lines.sh | 14 + ChallengeLeaguePointSolver/C++/scripts/md5 | 7 + .../C++/scripts/release.sh | 20 + ChallengeLeaguePointSolver/C++/scripts/temp | 0 ChallengeLeaguePointSolver/C++/scripts/web.sh | 46 + ChallengeLeaguePointSolver/C++ProjectTemplate | Bin 0 -> 576120 bytes .../C++ProjectTemplate.html | 75 + .../C++ProjectTemplate.js | 1 + .../C++ProjectTemplate.wasm | Bin 0 -> 310415 bytes .../ChampionsLeaguePointSolver.cpp | 26 +- ChallengeLeaguePointSolver/README.md | 33 + ChallengeLeaguePointSolver/a.out | Bin 0 -> 69216 bytes ChallengeLeaguePointSolver/buildtemplate.html | 75 + ChallengeLeaguePointSolver/dirtblock.png | Bin 0 -> 35629 bytes ChallengeLeaguePointSolver/main.cpp | 211 + .../pixelGameEngine.cpp | 2 + ChallengeLeaguePointSolver/pixelGameEngine.h | 6711 +++++++++++++++++ ChallengeLeaguePointSolver/pixelGameEngine.o | Bin 0 -> 1264488 bytes .../pixelGameEngine_wasm.o | Bin 0 -> 187082 bytes ChallengeLeaguePointSolver/sig | 10 + ChallengeLeaguePointSolver/utils/.coauthors | 1 + .../utils/.updateDirectories | 5 + ChallengeLeaguePointSolver/utils/define.sh | 26 + ChallengeLeaguePointSolver/utils/filelist | 5 + ChallengeLeaguePointSolver/utils/main.sh | 28 + ChallengeLeaguePointSolver/utils/md5 | 4 + ChallengeLeaguePointSolver/utils/search.sh | 103 + 31 files changed, 7475 insertions(+), 12 deletions(-) create mode 100755 ChallengeLeaguePointSolver/C++/scripts/build.sh create mode 100755 ChallengeLeaguePointSolver/C++/scripts/commit.sh create mode 100755 ChallengeLeaguePointSolver/C++/scripts/debug.sh create mode 100644 ChallengeLeaguePointSolver/C++/scripts/filelist create mode 100755 ChallengeLeaguePointSolver/C++/scripts/lines.sh create mode 100644 ChallengeLeaguePointSolver/C++/scripts/md5 create mode 100755 ChallengeLeaguePointSolver/C++/scripts/release.sh create mode 100644 ChallengeLeaguePointSolver/C++/scripts/temp create mode 100755 ChallengeLeaguePointSolver/C++/scripts/web.sh create mode 100755 ChallengeLeaguePointSolver/C++ProjectTemplate create mode 100644 ChallengeLeaguePointSolver/C++ProjectTemplate.html create mode 100644 ChallengeLeaguePointSolver/C++ProjectTemplate.js create mode 100755 ChallengeLeaguePointSolver/C++ProjectTemplate.wasm create mode 100644 ChallengeLeaguePointSolver/README.md create mode 100755 ChallengeLeaguePointSolver/a.out create mode 100644 ChallengeLeaguePointSolver/buildtemplate.html create mode 100644 ChallengeLeaguePointSolver/dirtblock.png create mode 100644 ChallengeLeaguePointSolver/main.cpp create mode 100644 ChallengeLeaguePointSolver/pixelGameEngine.cpp create mode 100644 ChallengeLeaguePointSolver/pixelGameEngine.h create mode 100644 ChallengeLeaguePointSolver/pixelGameEngine.o create mode 100644 ChallengeLeaguePointSolver/pixelGameEngine_wasm.o create mode 100755 ChallengeLeaguePointSolver/sig create mode 100644 ChallengeLeaguePointSolver/utils/.coauthors create mode 100644 ChallengeLeaguePointSolver/utils/.updateDirectories create mode 100755 ChallengeLeaguePointSolver/utils/define.sh create mode 100644 ChallengeLeaguePointSolver/utils/filelist create mode 100644 ChallengeLeaguePointSolver/utils/main.sh create mode 100644 ChallengeLeaguePointSolver/utils/md5 create mode 100644 ChallengeLeaguePointSolver/utils/search.sh diff --git a/ChallengeLeaguePointSolver/C++/scripts/build.sh b/ChallengeLeaguePointSolver/C++/scripts/build.sh new file mode 100755 index 0000000..e3c0374 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/build.sh @@ -0,0 +1,34 @@ +#Compiles the entire program then runs it, producing an executable. If the "test" argument is included, will try and run tests too (in the test folder). If the "full" argument is included, it will recopmile the PixelGameEngine (should it change) +#C++ +printf "Running program...\n\n\n" +output=$(dpkg -l | grep libx11-dev) +if [[ -z $output ]] +then + sudo apt install libx11-dev libpulse-dev mesa-common-dev libpng-dev libstdc++-12-dev +fi +if [ ! -f "pixelGameEngine.o" ] +then + printf "Pixel Game Engine compile object missing. Compiling for the first time..." + g++ -c pixelGameEngine.cpp +fi +if [ "$1" = "test" ] +then + printf "Running tests...\n" + echo "#define TEST_SUITE" > ./test/test.h + if g++ $(find . -type f -name "*.cpp" -not -name "pixelGameEngine.cpp") pixelGameEngine.o ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then + ./${PROJECT_NAME} "$@" + fi +elif [ "$1" = "full" ] +then + echo "" > ./test/test.h + g++ -c pixelGameEngine.cpp + if g++ $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine.o ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then + ./${PROJECT_NAME} "$@" + fi +else + echo "" > ./test/test.h + if g++ $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine.o ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then + ./${PROJECT_NAME} "$@" + fi +fi +printf "\n\n" diff --git a/ChallengeLeaguePointSolver/C++/scripts/commit.sh b/ChallengeLeaguePointSolver/C++/scripts/commit.sh new file mode 100755 index 0000000..543a623 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/commit.sh @@ -0,0 +1,21 @@ +#Adds a commit message and pushes project to github repository. +#C++ +COMMIT_MESSAGE="$*" +FIRST_LINE=true +while IFS= read -r line +do +if [ "$FIRST_LINE" = true ]; then + COMMIT_MESSAGE+=" + +Co-authored-by: $line" +FIRST_LINE=false +else + COMMIT_MESSAGE+=" +Co-authored-by: $line" +fi +done < utils/.coauthors +git config --global credential.helper store +git add -u +git add * +git commit -m "$COMMIT_MESSAGE" +git push \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/C++/scripts/debug.sh b/ChallengeLeaguePointSolver/C++/scripts/debug.sh new file mode 100755 index 0000000..9bf2513 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/debug.sh @@ -0,0 +1,22 @@ +#Compiles the entire program with debug flags then runs it in gdb. If the "test" argument is included, will try and run tests too (in the test folder) +#C++ +printf "Running program...\n\n\n" +output=$(dpkg -l | grep libx11-dev) +if [[ -z $output ]] +then + sudo apt install libx11-dev libpulse-dev mesa-common-dev libpng-dev libstdc++-12-dev +fi +if [ "$1" = "test" ] +then + printf "Running tests...\n" + echo "#define TEST_SUITE" > ./test/test.h + if g++ $(find . -type f -name "*.cpp") -g ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then + gdb ./${PROJECT_NAME} "$@" + fi +else + echo "" > ./test/test.h + if g++ $(find . -type f -name "*.cpp" -not -path "./test/*") -g ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then + gdb ./${PROJECT_NAME} "$@" + fi +fi +printf "\n\n" diff --git a/ChallengeLeaguePointSolver/C++/scripts/filelist b/ChallengeLeaguePointSolver/C++/scripts/filelist new file mode 100644 index 0000000..03e1e9a --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/filelist @@ -0,0 +1,7 @@ +build.sh +commit.sh +debug.sh +lines.sh +release.sh +temp +web.sh diff --git a/ChallengeLeaguePointSolver/C++/scripts/lines.sh b/ChallengeLeaguePointSolver/C++/scripts/lines.sh new file mode 100755 index 0000000..90e6d10 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/lines.sh @@ -0,0 +1,14 @@ +#Returns the line counts of your project. +#C++ +shopt -s extglob +ls -1 @(*.h|*.cpp) > temp +while read a; do + if [ "$a" != "pixelGameEngine.h" ] && [ "$a" != "soundwaveEngine.h" ] && [ "$a" != "splash.h" ]; + then + echo -e "$a\n" >> temp2 + fi +done < temp +wc -l $(cat temp2) + +rm temp +rm temp2 \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/C++/scripts/md5 b/ChallengeLeaguePointSolver/C++/scripts/md5 new file mode 100644 index 0000000..8d5b624 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/md5 @@ -0,0 +1,7 @@ +build.sh:c073187e65d0e23aa77aa94af4ec6382 - +commit.sh:1af81bf417dfb932284d8a14fdd10657 - +debug.sh:8125f303032b6cbc137223df63d10096 - +lines.sh:3b907786f7fc9204025993016c9080de - +release.sh:b1ce8461a303e8e7aa9ed74259db3873 - +temp:d41d8cd98f00b204e9800998ecf8427e - +web.sh:cd3b8a99e208244dee7576bc23c0dc80 - diff --git a/ChallengeLeaguePointSolver/C++/scripts/release.sh b/ChallengeLeaguePointSolver/C++/scripts/release.sh new file mode 100755 index 0000000..13aa1eb --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/release.sh @@ -0,0 +1,20 @@ +#Creates a release build that focuses on high runtime performance. Use "full" argument to completely rebuild PGE. +#C++ +printf "Running program...\n\n\n" +output=$(dpkg -l | grep libx11-dev) +if [[ -z $output ]] +then + sudo apt install libx11-dev libpulse-dev mesa-common-dev libpng-dev libstdc++-12-dev +fi +if [ "$1" == "full" ]; then + rm "pixelGameEngine.o" +fi +if [ ! -f "pixelGameEngine.o" ] +then + printf "Pixel Game Engine compile object missing. Compiling for the first time..." + g++ -c pixelGameEngine.cpp +fi +if g++ $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine.o ${CUSTOM_PARAMS} -o ${PROJECT_NAME}; then + ./${PROJECT_NAME} "$@" +fi +printf "\n\n" diff --git a/ChallengeLeaguePointSolver/C++/scripts/temp b/ChallengeLeaguePointSolver/C++/scripts/temp new file mode 100644 index 0000000..e69de29 diff --git a/ChallengeLeaguePointSolver/C++/scripts/web.sh b/ChallengeLeaguePointSolver/C++/scripts/web.sh new file mode 100755 index 0000000..1097efb --- /dev/null +++ b/ChallengeLeaguePointSolver/C++/scripts/web.sh @@ -0,0 +1,46 @@ +#Compiles emscripten instance of this project for the web. Use "full" argument if your PGE has to be completely rebuilt. Use "headless" argument for a headless version. +#C++ +output=$(dpkg -l | grep libx11-dev) +if [[ -z $output ]] +then + sudo apt install libx11-dev libpulse-dev mesa-common-dev libpng-dev libstdc++-12-dev +fi +if [[ "$1" == "full" || "$2" == "full" ]]; then + rm "pixelGameEngine_wasm.o" +fi +source ../emsdk/emsdk_env.sh +if [ ! -f "pixelGameEngine_wasm.o" ] +then + printf "Pixel Game Engine compile object missing. Compiling for the first time..." + em++ -std=c++20 -O2 ${EMSCRIPTEN_CUSTOM_PARAMS} -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 -c pixelGameEngine.cpp -o pixelGameEngine_wasm.o +fi +if [ -d "assets" ]; then + em++ -std=c++20 -O2 ${EMSCRIPTEN_CUSTOM_PARAMS} -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine_wasm.o -o ${PROJECT_NAME}.html --preload-file ./assets +else + em++ -std=c++20 -O2 ${EMSCRIPTEN_CUSTOM_PARAMS} -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_SDL_MIXER=2 -s USE_LIBPNG=1 $(find . -type f -name "*.cpp" -not -path "./test/*" -not -name "pixelGameEngine.cpp") pixelGameEngine_wasm.o -o ${PROJECT_NAME}.html +fi + +cp buildtemplate.html ${PROJECT_NAME}.html +sed -i "s/_REPLACEME_/$PROJECT_NAME.js/" ${PROJECT_NAME}.html + +if [[ "$1" == "headless" || "$2" == "headless" ]]; then + echo "Running as headless web server" + emrun --no_browser ${PROJECT_NAME}.html +else + emrun --serve_after_close ${PROJECT_NAME}.html +fi + +if [ $? -eq 127 ] +then + echo "Failed to find Emscripten. Running install script." + PWD=$(pwd) + cd .. + git clone https://github.com/emscripten-core/emsdk.git + cd emsdk + git pull + ./emsdk install latest + ./emsdk activate latest + source ./emsdk_env.sh + cd $PWD + echo "Emscripten has been installed. Try running the command again." +fi \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/C++ProjectTemplate b/ChallengeLeaguePointSolver/C++ProjectTemplate new file mode 100755 index 0000000000000000000000000000000000000000..c67847072f2a4ba1ae48fe3f8478553b21e03d50 GIT binary patch literal 576120 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 D#bbQU literal 0 HcmV?d00001 diff --git a/ChallengeLeaguePointSolver/C++ProjectTemplate.html b/ChallengeLeaguePointSolver/C++ProjectTemplate.html new file mode 100644 index 0000000..de51b65 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++ProjectTemplate.html @@ -0,0 +1,75 @@ + + + + + + + + Emscripten-Generated Code + + + + + + + + + + diff --git a/ChallengeLeaguePointSolver/C++ProjectTemplate.js b/ChallengeLeaguePointSolver/C++ProjectTemplate.js new file mode 100644 index 0000000..3f37d83 --- /dev/null +++ b/ChallengeLeaguePointSolver/C++ProjectTemplate.js @@ -0,0 +1 @@ +var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="C++ProjectTemplate.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinarySync(binaryFile))}else if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=applySignatureConversions(wasmExports);wasmMemory=wasmExports["memory"];updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={38652:()=>{window.onunload=Module._olc_OnPageUnload},38696:($0,$1)=>{Module.olc_AspectRatio=$0/$1;Module.olc_AssumeDefaultShells=document.querySelectorAll(".emscripten").length>=3?true:false;var olc_ResizeHandler=function(){let isFullscreen=document.fullscreenElement!=null;let width=isFullscreen?window.innerWidth:Module.canvas.parentNode.clientWidth;let height=isFullscreen?window.innerHeight:Module.canvas.parentNode.clientHeight;let viewWidth=width;let viewHeight=width/Module.olc_AspectRatio;if(viewHeight>height){viewWidth=height*Module.olc_AspectRatio;viewHeight=height}viewWidth=parseInt(viewWidth);viewHeight=parseInt(viewHeight);setTimeout(function(){if(Module.olc_AssumeDefaultShells)Module.canvas.parentNode.setAttribute("style","width: 100%; height: 70vh; margin-left: auto; margin-right: auto;");Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);Module.canvas.setAttribute("style",`width: ${viewWidth}px; height: ${viewHeight}px;`);Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus()},200)};var olc_Init=function(){if(Module.olc_AspectRatio===undefined){setTimeout(function(){Module.olc_Init()},50);return}let resizeObserver=new ResizeObserver(function(entries){Module.olc_ResizeHandler()}).observe(Module.canvas.parentNode);let mutationObserver=new MutationObserver(function(mutationsList,observer){setTimeout(function(){Module.olc_ResizeHandler()},200)}).observe(Module.canvas.parentNode,{attributes:false,childList:true,subtree:false});window.addEventListener("fullscreenchange",function(e){setTimeout(function(){Module.olc_ResizeHandler()},200)})};Module.olc_ResizeHandler=Module.olc_ResizeHandler!=undefined?Module.olc_ResizeHandler:olc_ResizeHandler;Module.olc_Init=Module.olc_Init!=undefined?Module.olc_Init:olc_Init;Module.olc_Init()}};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{"once":true})};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var dynCallLegacy=(sig,ptr,args)=>{var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>>2>>>0]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>>2>>>0]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>>2>>>0]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>>2>>>0]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>>0>>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>>0>>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>>0>>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>>0>>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>>2>>>0]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>>2>>>0]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>>2>>>0]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function ___cxa_throw(ptr,type,destructor){ptr>>>=0;type>>>=0;destructor>>>=0;var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast}var setErrNo=value=>{HEAP32[___errno_location()>>>2>>>0]=value;return value};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{idx>>>=0;var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{outIdx>>>=0;if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++>>>0]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++>>>0]=192|u>>6;heap[outIdx++>>>0]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++>>>0]=224|u>>12;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++>>>0]=240|u>>18;heap[outIdx++>>>0]=128|u>>12&63;heap[outIdx++>>>0]=128|u>>6&63;heap[outIdx++>>>0]=128|u&63}}heap[outIdx>>>0]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>>0)}return{ptr:ptr,allocated:allocated}},msync(stream,buffer,offset,length,mmapFlags){MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var asyncLoad=(url,onload,onerror,noRunDep)=>{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn);var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get(){return this.node},set(val){this.node=val}},isRead:{get(){return(this.flags&2097155)!==1}},isWrite:{get(){return(this.flags&2097155)!==0}},isAppend:{get(){return this.flags&1024}},flags:{get(){return this.shared.flags},set(val){this.shared.flags=val}},position:{get(){return this.shared.position},set(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i0,ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>{ptr>>>=0;return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>>2>>>0]=stat.dev;HEAP32[buf+4>>>2>>>0]=stat.mode;HEAPU32[buf+8>>>2>>>0]=stat.nlink;HEAP32[buf+12>>>2>>>0]=stat.uid;HEAP32[buf+16>>>2>>>0]=stat.gid;HEAP32[buf+20>>>2>>>0]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>>2>>>0]=tempI64[0],HEAP32[buf+28>>>2>>>0]=tempI64[1];HEAP32[buf+32>>>2>>>0]=4096;HEAP32[buf+36>>>2>>>0]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>>2>>>0]=tempI64[0],HEAP32[buf+44>>>2>>>0]=tempI64[1];HEAPU32[buf+48>>>2>>>0]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>>2>>>0]=tempI64[0],HEAP32[buf+60>>>2>>>0]=tempI64[1];HEAPU32[buf+64>>>2>>>0]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>>2>>>0]=tempI64[0],HEAP32[buf+76>>>2>>>0]=tempI64[1];HEAPU32[buf+80>>>2>>>0]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>>2>>>0]=tempI64[0],HEAP32[buf+92>>>2>>>0]=tempI64[1];return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>>2>>>0];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.getp();var offset=0;HEAP16[arg+offset>>>1>>>0]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){varargs>>>=0;SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=SYSCALLS.getp();HEAP32[argp>>>2>>>0]=termios.c_iflag||0;HEAP32[argp+4>>>2>>>0]=termios.c_oflag||0;HEAP32[argp+8>>>2>>>0]=termios.c_cflag||0;HEAP32[argp+12>>>2>>>0]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17>>>0>>>0]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=SYSCALLS.getp();var c_iflag=HEAP32[argp>>>2>>>0];var c_oflag=HEAP32[argp+4>>>2>>>0];var c_cflag=HEAP32[argp+8>>>2>>>0];var c_lflag=HEAP32[argp+12>>>2>>>0];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17>>>0>>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();HEAP32[argp>>>2>>>0]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=SYSCALLS.getp();HEAP16[argp>>>1>>>0]=winsize[0];HEAP16[argp+2>>>1>>>0]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){path>>>=0;varargs>>>=0;SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=true;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var __emscripten_throw_longjmp=()=>{throw Infinity};var _abort=()=>{abort("")};var _emscripten_set_main_loop_timing=(mode,value)=>{Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0};var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var setMainLoop=(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var warnOnce=text=>{if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,`Image ${name} could not be decoded`);var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:2};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>>2>>>0];flags=flags|8388608;HEAP32[SDL.screen>>>2>>>0]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>>2>>>0];flags=flags&~8388608;HEAP32[SDL.screen>>>2>>>0]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>>2>>>0];if(param==12321){var alphaSize=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>>2>>>0];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>>2>>>0]=1}if(config&&config_size>0){HEAP32[config>>>2>>>0]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){display>>>=0;attrib_list>>>=0;configs>>>=0;numConfigs>>>=0;return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}var webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"));var webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance=ctx=>!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{var source="";for(var i=0;i>>2>>>0]:-1;source+=UTF8ToString(HEAP32[string+i*4>>>2>>>0],len<0?undefined:len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl2",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:context=>{if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){display>>>=0;config>>>=0;hmm>>>=0;contextAttribs>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>>2>>>0];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>>2>>>0]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion<2||glesContextVersion>3){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){display>>>=0;config>>>=0;attrib_list>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){display>>>=0;context>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){display>>>=0;surface>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}function _eglInitialize(display,majorVersion,minorVersion){display>>>=0;majorVersion>>>=0;minorVersion>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>>2>>>0]=1}if(minorVersion){HEAP32[minorVersion>>>2>>>0]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){display>>>=0;draw>>>=0;read>>>=0;context>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}function _eglSwapBuffers(dpy,surface){dpy>>>=0;surface>>>=0;if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}function _eglSwapInterval(display,interval){display>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){display>>>=0;if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++>>>0]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>>2>>>0]:ch==105?HEAP32[buf>>>2>>>0]:HEAPF64[buf>>>3>>>0]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};function _emscripten_asm_const_int(code,sigPtr,argbuf){code>>>=0;sigPtr>>>=0;argbuf>>>=0;return runEmAsmFunction(code,sigPtr,argbuf)}var _emscripten_cancel_main_loop=()=>{Browser.mainLoop.pause();Browser.mainLoop.func=null};var _emscripten_date_now=()=>Date.now();function _emscripten_memcpy_js(dest,src,num){dest>>>=0;src>>>=0;num>>>=0;return HEAPU8.copyWithin(dest>>>0,src>>>0,src+num>>>0)}var getHeapMax=()=>4294901760;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};function _emscripten_resize_heap(requestedSize){requestedSize>>>=0;var oldSize=HEAPU8.length;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedence{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=(e=event)=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}var findCanvasEventTarget=target=>findEventTarget(target);function _emscripten_set_canvas_element_size(target,width,height){target>>>=0;var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>>3>>>0]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2>>>0]=e.location;HEAP32[idx+3>>>0]=e.ctrlKey;HEAP32[idx+4>>>0]=e.shiftKey;HEAP32[idx+5>>>0]=e.altKey;HEAP32[idx+6>>>0]=e.metaKey;HEAP32[idx+7>>>0]=e.repeat;HEAP32[idx+8>>>0]=e.charCode;HEAP32[idx+9>>>0]=e.keyCode;HEAP32[idx+10>>>0]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){func>>>=0;var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>>3>>>0]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2>>>0]=e.screenX;HEAP32[idx+3>>>0]=e.screenY;HEAP32[idx+4>>>0]=e.clientX;HEAP32[idx+5>>>0]=e.clientY;HEAP32[idx+6>>>0]=e.ctrlKey;HEAP32[idx+7>>>0]=e.shiftKey;HEAP32[idx+8>>>0]=e.altKey;HEAP32[idx+9>>>0]=e.metaKey;HEAP16[idx*2+20>>>0]=e.button;HEAP16[idx*2+21>>>0]=e.buttons;HEAP32[idx+11>>>0]=e["movementX"];HEAP32[idx+12>>>0]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13>>>0]=e.clientX-rect.left;HEAP32[idx+14>>>0]=e.clientY-rect.top};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(var i=0;i>>3>>>0]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3>>>0]=e.ctrlKey;HEAP32[idx+4>>>0]=e.shiftKey;HEAP32[idx+5>>>0]=e.altKey;HEAP32[idx+6>>>0]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0>>>0]=t.identifier;HEAP32[idx+1>>>0]=t.screenX;HEAP32[idx+2>>>0]=t.screenY;HEAP32[idx+3>>>0]=t.clientX;HEAP32[idx+4>>>0]=t.clientY;HEAP32[idx+5>>>0]=t.pageX;HEAP32[idx+6>>>0]=t.pageY;HEAP32[idx+7>>>0]=t.isChanged;HEAP32[idx+8>>>0]=t.onTarget;HEAP32[idx+9>>>0]=t.clientX-targetRect.left;HEAP32[idx+10>>>0]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>>2>>>0]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=(e=event)=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>>3>>>0]=e["deltaX"];HEAPF64[wheelEvent+80>>>3>>>0]=e["deltaY"];HEAPF64[wheelEvent+88>>>3>>>0]=e["deltaZ"];HEAP32[wheelEvent+96>>>2>>>0]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target>>>=0;userData>>>=0;callbackfunc>>>=0;targetThread>>>=0;target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){title>>>=0;return document.title=UTF8ToString(title)}var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>>0>>>0]=str.charCodeAt(i)}HEAP8[buffer>>>0>>>0]=0};var _environ_get=function(__environ,environ_buf){__environ>>>=0;environ_buf>>>=0;var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>>2>>>0]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=function(penviron_count,penviron_buf_size){penviron_count>>>=0;penviron_buf_size>>>=0;var strings=getEnvStrings();HEAPU32[penviron_count>>>2>>>0]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>>2>>>0]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);newOffset>>>=0;try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>>2>>>0]=tempI64[0],HEAP32[newOffset+4>>>2>>>0]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>>2>>>0];var len=HEAPU32[iov+4>>>2>>>0];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){iov>>>=0;iovcnt>>>=0;pnum>>>=0;try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>>2>>>0]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _glBindBuffer=(target,buffer)=>{if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])};var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArrayOES=_glBindVertexArray;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glBufferData(target,size,data,usage){size>>>=0;data>>>=0;if(true){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data>>>0,data+size>>>0):size,usage)}}function _glClear(x0){GLctx.clear(x0)}function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};function _glDeleteTextures(n,textures){textures>>>=0;for(var i=0;i>>2>>>0];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}var _glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};function _glEnable(x0){GLctx.enable(x0)}var _glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var __glGenObject=(n,buffers,createFunction,objectTable)=>{for(var i=0;i>>2>>>0]=id}};function _glGenBuffers(n,buffers){buffers>>>=0;__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){textures>>>=0;__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){arrays>>>=0;__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;function _glGetShaderInfoLog(shader,maxLength,length,infoLog){length>>>=0;infoLog>>>=0;var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>>2>>>0]=numBytesWrittenExclNull}var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var computeUnpackAlignedImageSize=(width,height,sizePerPixel,alignment)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16};var heapAccessShiftForWebGLHeap=heap=>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>>shift,pixels+bytes>>>shift)};function _glReadPixels(x,y,width,height,format,type,pixels){pixels>>>=0;if(true){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){string>>>=0;length>>>=0;var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){pixels>>>=0;if(true){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){ptr>>>=0;GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer>>>0)};function _strftime(s,maxsize,format,tm){s>>>=0;maxsize>>>=0;format>>>=0;tm>>>=0;var tm_zone=HEAPU32[tm+40>>>2>>>0];var date={tm_sec:HEAP32[tm>>>2>>>0],tm_min:HEAP32[tm+4>>>2>>>0],tm_hour:HEAP32[tm+8>>>2>>>0],tm_mday:HEAP32[tm+12>>>2>>>0],tm_mon:HEAP32[tm+16>>>2>>>0],tm_year:HEAP32[tm+20>>>2>>>0],tm_wday:HEAP32[tm+24>>>2>>>0],tm_yday:HEAP32[tm+28>>>2>>>0],tm_isdst:HEAP32[tm+32>>>2>>>0],tm_gmtoff:HEAP32[tm+36>>>2>>>0],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":date=>WEEKDAYS[date.tm_wday].substring(0,3),"%A":date=>WEEKDAYS[date.tm_wday],"%b":date=>MONTHS[date.tm_mon].substring(0,3),"%B":date=>MONTHS[date.tm_mon],"%C":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":date=>leadingNulls(date.tm_mday,2),"%e":date=>leadingSomething(date.tm_mday,2," "),"%g":date=>getWeekBasedYear(date).toString().substring(2),"%G":date=>getWeekBasedYear(date),"%H":date=>leadingNulls(date.tm_hour,2),"%I":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),"%m":date=>leadingNulls(date.tm_mon+1,2),"%M":date=>leadingNulls(date.tm_min,2),"%n":()=>"\n","%p":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":date=>leadingNulls(date.tm_sec,2),"%t":()=>"\t","%u":date=>date.tm_wday||7,"%U":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":date=>{var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":date=>date.tm_wday,"%W":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":date=>(date.tm_year+1900).toString().substring(2),"%Y":date=>date.tm_year+1900,"%z":date=>{var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":date=>date.tm_zone,"%%":()=>"%"};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm,loc){s>>>=0;maxsize>>>=0;format>>>=0;tm>>>=0;loc>>>=0;return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["requestFullscreen"]=(lockPointer,resizeCanvas)=>Browser.requestFullscreen(lockPointer,resizeCanvas);Module["requestAnimationFrame"]=func=>Browser.requestAnimationFrame(func);Module["setCanvasSize"]=(width,height,noUpdates)=>Browser.setCanvasSize(width,height,noUpdates);Module["pauseMainLoop"]=()=>Browser.mainLoop.pause();Module["resumeMainLoop"]=()=>Browser.mainLoop.resume();Module["getUserMedia"]=()=>Browser.getUserMedia();Module["createContext"]=(canvas,useWebGL,setInModule,webGLContextAttributes)=>Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes);var preloadedImages={};var preloadedAudios={};var GLctx;var wasmImports={__cxa_throw:___cxa_throw,__syscall_fcntl64:___syscall_fcntl64,__syscall_ioctl:___syscall_ioctl,__syscall_openat:___syscall_openat,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_emscripten_throw_longjmp:__emscripten_throw_longjmp,abort:_abort,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetDisplay:_eglGetDisplay,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_date_now:_emscripten_date_now,emscripten_get_now:_emscripten_get_now,emscripten_memcpy_js:_emscripten_memcpy_js,emscripten_resize_heap:_emscripten_resize_heap,emscripten_set_blur_callback_on_thread:_emscripten_set_blur_callback_on_thread,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_focus_callback_on_thread:_emscripten_set_focus_callback_on_thread,emscripten_set_keydown_callback_on_thread:_emscripten_set_keydown_callback_on_thread,emscripten_set_keyup_callback_on_thread:_emscripten_set_keyup_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_set_mousedown_callback_on_thread:_emscripten_set_mousedown_callback_on_thread,emscripten_set_mousemove_callback_on_thread:_emscripten_set_mousemove_callback_on_thread,emscripten_set_mouseup_callback_on_thread:_emscripten_set_mouseup_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glAttachShader:_glAttachShader,glBindBuffer:_glBindBuffer,glBindTexture:_glBindTexture,glBindVertexArrayOES:_glBindVertexArrayOES,glBlendFunc:_glBlendFunc,glBufferData:_glBufferData,glClear:_glClear,glClearColor:_glClearColor,glCompileShader:_glCompileShader,glCreateProgram:_glCreateProgram,glCreateShader:_glCreateShader,glDeleteProgram:_glDeleteProgram,glDeleteShader:_glDeleteShader,glDeleteTextures:_glDeleteTextures,glDrawArrays:_glDrawArrays,glEnable:_glEnable,glEnableVertexAttribArray:_glEnableVertexAttribArray,glGenBuffers:_glGenBuffers,glGenTextures:_glGenTextures,glGenVertexArraysOES:_glGenVertexArraysOES,glGetShaderInfoLog:_glGetShaderInfoLog,glLinkProgram:_glLinkProgram,glReadPixels:_glReadPixels,glShaderSource:_glShaderSource,glTexImage2D:_glTexImage2D,glTexParameteri:_glTexParameteri,glUseProgram:_glUseProgram,glVertexAttribPointer:_glVertexAttribPointer,glViewport:_glViewport,invoke_ii:invoke_ii,invoke_iii:invoke_iii,invoke_iiii:invoke_iiii,invoke_iiiii:invoke_iiiii,invoke_vi:invoke_vi,invoke_vii:invoke_vii,invoke_viii:invoke_viii,invoke_viiii:invoke_viiii,invoke_viiiiii:invoke_viiiiii,strftime_l:_strftime_l};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["main"])(a0,a1);var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=()=>(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=wasmExports["olc_OnPageUnload"])();var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=(a0,a1)=>(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=wasmExports["olc_PGE_UpdateWindowSize"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["malloc"])(a0);var setTempRet0=a0=>(setTempRet0=wasmExports["setTempRet0"])(a0);var ___errno_location=()=>(___errno_location=wasmExports["__errno_location"])();var _setThrew=(a0,a1)=>(_setThrew=wasmExports["setThrew"])(a0,a1);var stackSave=()=>(stackSave=wasmExports["stackSave"])();var stackRestore=a0=>(stackRestore=wasmExports["stackRestore"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["stackAlloc"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["__cxa_is_pointer_type"])(a0);var dynCall_viijii=Module["dynCall_viijii"]=(a0,a1,a2,a3,a4,a5,a6)=>(dynCall_viijii=Module["dynCall_viijii"]=wasmExports["dynCall_viijii"])(a0,a1,a2,a3,a4,a5,a6);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["dynCall_jiji"])(a0,a1,a2,a3,a4);var dynCall_iiiiij=Module["dynCall_iiiiij"]=(a0,a1,a2,a3,a4,a5,a6)=>(dynCall_iiiiij=Module["dynCall_iiiiij"]=wasmExports["dynCall_iiiiij"])(a0,a1,a2,a3,a4,a5,a6);var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=wasmExports["dynCall_iiiiijj"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)=>(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=wasmExports["dynCall_iiiiiijj"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function applySignatureConversions(wasmExports){wasmExports=Object.assign({},wasmExports);var makeWrapper_pp=f=>a0=>f(a0)>>>0;var makeWrapper_p=f=>()=>f()>>>0;wasmExports["malloc"]=makeWrapper_pp(wasmExports["malloc"]);wasmExports["__errno_location"]=makeWrapper_p(wasmExports["__errno_location"]);wasmExports["stackSave"]=makeWrapper_p(wasmExports["stackSave"]);wasmExports["stackAlloc"]=makeWrapper_pp(wasmExports["stackAlloc"]);return wasmExports}var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(){var entryFunction=_main;var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/ChallengeLeaguePointSolver/C++ProjectTemplate.wasm b/ChallengeLeaguePointSolver/C++ProjectTemplate.wasm new file mode 100755 index 0000000000000000000000000000000000000000..d27ae91646b514a8d1c5566385d2de0066f7264b GIT binary patch literal 310415 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 gdataA,dataB; std::vector>player1Score,player2Score,player3Score; - std::ifstream file("team2.csv"); + std::ifstream file("team2"); std::string line; //First two lines are garbage data. std::getline(file,line); @@ -64,10 +64,10 @@ int main(){ stoi(GetNext(marker,line)), stoi(GetNext(marker,line)), stoi(GetNext(marker,line))}; - player1Score.emplace_back(std::pair{dat.ex1,0}); - player2Score.emplace_back(std::pair{dat.ex2,0}); - player3Score.emplace_back(std::pair{dat.ex3,0}); - dataA.emplace_back(dat); + player1Score.push_back(std::pair{dat.ex1,0}); + player2Score.push_back(std::pair{dat.ex2,0}); + player3Score.push_back(std::pair{dat.ex3,0}); + dataA.push_back(dat); } //Two more lines of garbage data. std::getline(file,line); @@ -85,7 +85,7 @@ int main(){ player1Score[i].second=dat.ex1; player2Score[i].second=dat.ex2; player3Score[i].second=dat.ex3; - dataB.emplace_back(dat); + dataB.push_back(dat); } std::cout<<"File Contents:"<0&&combinations.p1Picked.count(index)==0&&combinations.p2Picked.count(index)==0&&combinations.p3Picked.count(index)==0){ combinations.remainingA--; combinations.totalEX+=dat[index].ex1; - combinations.p1.emplace_back(std::pair{index,dat[index].ex1}); + combinations.p1.push_back(std::pair{index,dat[index].ex1}); combinations.p1Picked.insert(index); }else if(combinations.remainingB>0&&combinations.p1Picked.count(index)==0&&combinations.p2Picked.count(index)==0&&combinations.p3Picked.count(index)==0){ combinations.remainingB--; combinations.totalEX+=dat[index].ex2; - combinations.p2.emplace_back(std::pair{index,dat[index].ex2}); + combinations.p2.push_back(std::pair{index,dat[index].ex2}); combinations.p2Picked.insert(index); }else if(combinations.remainingC>0&&combinations.p1Picked.count(index)==0&&combinations.p2Picked.count(index)==0&&combinations.p3Picked.count(index)==0){ combinations.remainingC--; combinations.totalEX+=dat[index].ex3; - combinations.p3.emplace_back(std::pair{index,dat[index].ex3}); + combinations.p3.push_back(std::pair{index,dat[index].ex3}); combinations.p3Picked.insert(index); } }; @@ -134,8 +134,9 @@ int main(){ bestComboA[caseInd].remainingA=_case.p1Amt; bestComboA[caseInd].remainingB=_case.p2Amt; bestComboA[caseInd].remainingC=_case.p3Amt; + SongCombinations testCombo=bestComboA[caseInd]; for(int i=0;i<12;i++){ - SongCombinations c1=bestComboA[caseInd]; + SongCombinations c1=testCombo; ChooseSong(c1,dataA,i); for(int j=0;j<12;j++){ SongCombinations c2=c1; @@ -183,8 +184,9 @@ int main(){ bestComboB[caseInd].remainingA=_case.p1Amt; bestComboB[caseInd].remainingB=_case.p2Amt; bestComboB[caseInd].remainingC=_case.p3Amt; + SongCombinations testCombo=bestComboB[caseInd]; for(int i=0;i<12;i++){ - SongCombinations c1=bestComboB[caseInd]; + SongCombinations c1=testCombo; ChooseSong(c1,dataB,i); for(int j=0;j<12;j++){ SongCombinations c2=c1; diff --git a/ChallengeLeaguePointSolver/README.md b/ChallengeLeaguePointSolver/README.md new file mode 100644 index 0000000..0a3a1b9 --- /dev/null +++ b/ChallengeLeaguePointSolver/README.md @@ -0,0 +1,33 @@ +This repository contains general build scripts and pipelines for all languages that I incorporate in my projects. The goal is to provide an easy retrieval and update system for the project. Each script will be a shell script containing the following template: +```bash + #Short description about what I do + #Language[Folder] + # #The script's code goes in here. + # rm -Rf out/* + # javac -Xlint:unchecked -cp ${PROJECT_DIR}/.. -d ${OUT_DIR} ${PROJECT_DIR}/*.java + # printf "\n\n\nRunning Program...\n\n" + # cd $OUT_DIR + # java ${MAIN_CLASS} "$@" + # ../scripts/clean.sh + +``` +Each language will be in the following structure: +``` + - + -- + ---[script files.sh] +``` + +The `sig` script will display by default any scripts in the `scripts` folder, therefore when creating a project, copy over the scripts folder of the desired language into your project then the `sig` script handles the rest appropriately. If your project requires multiple languages and build setups, then you can use the `sig2` command, which has an additional parameter to specify the language when running it. When setting up a multi-language setup, you'll just copy the entire folder to include the programming language itself. So a multi-language project structure may look something like this: +``` + -C + --scripts + ---build.sh + ---clean.sh + ---make.sh + -Java + --scripts + ---build.sh + ---clean.sh + ---jar.sh +``` diff --git a/ChallengeLeaguePointSolver/a.out b/ChallengeLeaguePointSolver/a.out new file mode 100755 index 0000000000000000000000000000000000000000..35dd4c39de8dda85e4387d51d5e9d97ed31d2e27 GIT binary patch literal 69216 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 literal 0 HcmV?d00001 diff --git a/ChallengeLeaguePointSolver/buildtemplate.html b/ChallengeLeaguePointSolver/buildtemplate.html new file mode 100644 index 0000000..7e6698d --- /dev/null +++ b/ChallengeLeaguePointSolver/buildtemplate.html @@ -0,0 +1,75 @@ + + + + + + + + Emscripten-Generated Code + + + + + + + + + + diff --git a/ChallengeLeaguePointSolver/dirtblock.png b/ChallengeLeaguePointSolver/dirtblock.png new file mode 100644 index 0000000000000000000000000000000000000000..af8bd9194d19cb226b0ebc392c2a80044008ad90 GIT binary patch literal 35629 zcmcG$Wl$Xdo9;cp;O_4379=>q2^QQTxI=>LAVGq=1ef4Wu;A|QZV3*91ZQTR{QkA) z*|Sw!d(Ljvc`?(|ch}wD7hTnT_2;_o`KqC&fQd$i1^@ssl@w()0RZ^FKj8r=NPjnf zd={Sp0JtyqGBO%UGBPx7pIvS2ovZ->mZZQWam4{CiXk(j??KuW=QNtMGMNZvr~GQBX@`5z_epYl z%YU;A;q{JBYbySe)Dj1MS`>QLc_mJOoKVDE42lIF|J~aUD*f&OTLU929V9b15)Vhm zTA!H^0^qMX7BFLc!hHM|=HG(xBMm-iM$LR3!T3pYO}}EDu_H`Oaeq5mpQJX0ANe)> z9r=XwWORhGm>h+UcH9kwG=p&3C}-(&ngDprjAY!NeZshmR2n`;KNJOyuacz@1D)4U zKvSi}PV#b(`tvJYyVd8k-qD6&G;PIr>R0R_Z^uJs=FJifisOKWiv(PnHuN_REs#K` zjW~RoD-2_MPSAI($$(^2NBcSY0uXsyn~VJom0LRkhQvuS?OV;@QptSe?V023#@=4e z*`~w$<;{^3gv8R?WTDP0&EC378 z1pvg{+5J;NbyGBO2LQO}|M|fAe3$h4TSWFyQk6qKM5RQhq@{S~r~?3K07|mb+CJ;& zU2E}7N?uI&l(&+WV^Oi2P50-u=Ulo?9dEaOx$)%SvW6l|DiY_QpIGqp0uUzAQE>hM z;r}50oI^N{CJqIB5IPSLb_$X4dPr2&@z!x|=5AMz9q#@~Y4T`uI6;k@<#Lz@g9V14 zMjNkBU91{(yPs#azYf7(sRrPu7 z=tW^?0CszuPyt%(IevU1R&QwNO6U-(!{CDonYBmkv_G%~J&)0^!=&zERdsp$9SA3| z*;`})LMRPND9s@j0{|$E1C)lB`ul|gLugN`3v_dOTGrgl={T;eKs74b9HJE$`_xb7%@u} z(h4>j)h>?xfz<#_YD*>P49PaXFdPo9K3pPqIrZbzV)*5I)aa3%BVRI&>uG-I#BMp4 zh^@}l;rDxv``@e}>N7Jjg`9_^b;GJm-M}mXj2aM~k_R&LQx3tp8r0C(JZjgSYX{+u z<=ef~DuIZnDr2jXj`%GYX+bHi0NPXQcy|=B{@LUVCyQx!!K{Q6sZJIOtbaD5ZyPyh1`pRUDl5$KN1 z{E;n~Kd(lIE=iD${+^@AZw|1D2Q(cu5I=e~a>fp_IGh&OEj4C7PV07%ysv8^{Ui77 z88-?g=lc;YWQTTJ5f=K-n_f1W(ML>OSB9Otf~Hno!ZL5&tc$OUa_UjV^1GSuop|yVMrTKyuLqm zUZk7yM>agGSEoYCgO%}XkF?<_3|ShTyFZ4xNF)g1AvKNMX}j^vFK;Irwg0X3ibnaTS~Q}$8)MVqdqk4b$;RiNs>DrX$3!$0Z@yAf z01$Ql!nBlD}74cNjgDBXdoOD|KN@d&e zURxwE+WAhkkkYjq>8-S`VmC2YT(!6?Qf2!?imoO}_bWFYPbnM7D4*;u8{(hF1nO4$ z#3wgYG5%#Kd==_S#smgEG2qSA$L(}9wZslF7^M<0{lta7#xM&vL^uCNBvGBvO$?$` zFEm1nVXzG#bun&_wMu3UOBVi`U4_E&VA>jkM0BX=D5I#HmgvMB_A|X%6L@zvoP6*A=ii_#M(b>$E z-4RROr2P+1oDX7KZ)F?b^o31{m)l8nr%DtjJlOe12Tr( zuI9dDsnZPsW&+#L#TZtpyXtEEwRdv$o%O-sE(n^MnpQ%ZA+N9W{Fj}SXsSdf1HX-J z(ZM?E>Vr2+o4oK9gP&xriQ5c~4M~^)LzW*0&hn)aEB(ZYsU^0DpAU(2(}|j#R@YH( zGQ@UEAG=yj`y`*HSFT%oUilu^J3f1Qy1Cn8ujmqeWE@LQ+!QnxMU@ZUZj0M_89sa5 zL(Z2IM*OX}tQ|tGm)_9bm2kHeX1s8df?^?7wC&0<{%w}|+rCgj%T;!rpqry-s5aok z0$I~L-2pY7Pi{WiC#7tInRYJ;DMGHMq%`aVB&ydC|GGU<*RIeWKUkCQLCjt(Cx=UI zH4=8~9e)c_w11uPi1*IV@cf{g(XrUd*tNr0k5Y>dYJeJsN2fsK7X{YKZR5L~rVv@q zui=7^pR_F^mL%nfUbm$DJ$$|tYYpXofA1Swg3^G!<40t~B&?#<`T35|w5OZw7jWL- z@jCLMp`j_Es%j$c0yRz>;(yd^^!VA*7AN<$&!75WY?%tWn=4eLyW`Z&7!jF`)7;kC zCS2}pYSQ^;bv0};6Y-SQr%PRm&IOU+CD8>|CJn*(M**-TP?fzDF`Y4+x|# z;6!lB3!~!V&m*d~DJ9~;gE$&Xlmr3Jf79g|%E@RWWq`h0mX5#XZX6dSC-=7UrRyYE zgmg7*n6gw$dd-lHqNr?keg7Qgtcb7hyZKY6`kWY*9U=X309cYeaT!cwg_cQ{HJ}cB zA}v^)HXmsTyPx#%s)V;(lnm+3EUht`Qi~w}6X7%}T@l8Kt0NdRukq_M^Y6% zcN1AK+d-q2cD*mTVYLd2*Rp_isW=m4A^v^O%?oPr;%^J8cIA=@rf<|0bE`)9WJgG9 z55-P$7j-H)h0^!{SZLixi%E?}>QsPAmm}GND9n;fI(0&E^9KLhLp-{bgYNTZo5!FO ztp&im+5pLOQ*M)VPB?N?>W0z7Dyfcs|X-U1^a;OT9 zfS$j`JTBmL>pQ@I_*p28&`6p+M~sFy;KtDCc`AjaPy5>#y_jqJd$-{4{74>X`csVJ zA5Rj!;3y$)QMW5X6ao=F2D9dg45c>^&85ldrM&BmrCWr+lhPLoN9VWRbLTtC)Da6a znccqMj4wFwf(7@~=n*TUaU_Z~e!PPQvOT?N6>^?l$oXitmQ3zLj?vj7NC$71Sx_Cn zM?B491Y0CyMyq6I4z17F9heZ!1-J983+TOB^j4nv7@7PUS-7J zpS$9G1I@hTMq$X!A-bgQW~R_nW-!0_%u%N9Yb91X2A0VuJDUQBuA%Augp(=hHb?u| z-gjbQ7~n5|oCNI_cB_9Rccg}p0ICIHd4H;N;@H9p7D%np(;=c~X(6?z3M@x7)0wqe zwMZ?}e7zA^hmMjFcQqRz47KDZ;ZJ<~A6w;BM&BNN*pBYC+XI~*uvY_E0aFLkk2IUV zUl>WQ#YNi}j&)G+H&)5e*}p#cSL#H}M&dp8ZSNrKoKVqMy7MW03D;!-mg?g2Gy`bp zy1*07WKvadHd)Gn9Tw?Lu$H$GXh=$zo14m+ZR@*!h1N(_b;m3Q6*IX+U?cu*=K=>_q;&*YJr|3_*Ymh~& zaL8Nu3!G=n7T*o^#+M+!6+x~?```@xiNheJ)76$2M`NvNZq81JS3qB9?0>{qtpJ?E zgFkrEcb?P7?_;WJz8`5ws*+}^EmR`4iv0Ke+a(mnPU_%Ep#WMs`ov{6cjsuP2Zu$YeXL1c~K`{ zq?gALY{x92G%9RJ4jntV2vamr+dHf*IxvIWycgRR?;qYS%uadOt~tN-g-6m2{#vSm zQcXgUpF>oICw8l+L!wlG=5zr*=v%N|T@{s17Me&k>6oACP}xv_Nda#UL8eSz&u`0I zKEu-!(J9dwSiwmV@W|7m);EE^Xj>Jq%}N=7SdC(a!iS9c7q*uJe@eC}T8EB^cKCqb z_Z8>Lkd(}tJ8oa14+n1@5S(=&f6uR9Mq=Dc1M%w{DZ9Bf9uFyGZ&dwZa?Dq&lIfQS z{24C!GRJ*>yNv1NL=A5NhnbPkQd1Kh64Lj)Ey00D zvN{f3v;q_KUdDI}zm*744t1=WQ2g`bG>*0M0QaU~O!8^iF{vpxdL!`J3LW+!84&6( zls-W9p;GA$e=sVRn!4M=GMS5+k$h2$M=%%ux##tekAMD1#SrLqtqh0P_hhV}?j#rT zQ(8_3&Jv({yRjbtyy znMGfGJe?8kRfR%v)Gd{n%i%XWJP|>U8?Fb;`C{;c5za`CeIp5i*DD(@*G)mV`prBV z0gt~e#q@Wg-@o4ES8Q9z$>B!WC)_CdOjM|FyLMac5GFOZ4FhZIS;_g$X z<@>*KoElxytatI%!=}ysf|(HZwA11|ExNB@ohJ;^L9Kb+mk&G2CpK5>kFnD;Ad*v=%b3)UreM(+ekG9YmaJ7Te0mv zULAV!=UwZWb)v?a_r<7my*ENi?cB^%dFw@Vdf!@mmyg^=H#JE66dpO%v^!*IKeJeW z@s7$fzBghr3Oy8@Cy-x;Pwl)xle<>>)tk||1xs)Rv*N@q;4^{W_T6cElojS&v!qZ` zWp5D?{(>fDd>eqN^k#)Q%i%$w+>&K3T>HkJS`M`ZGqi|Yhy18XhICtQ#jIeiDe>w| z^5Ws!!+zv3vVB+FhkcQp)91a9O?kXYp_OF#w5zT6CM4?EGbsWi)yZE-1~#yo1r2wX z+=I}WN;ivff-ld!4$>pE7n%@@K8EeeNr=ovVw~!!s%drO_?sV@fIfBWXaGkIpaj9? zST=uTto*v;u2Xh$&s+uqBa1JhoHNv8bAyMLK_}PcJ8~n{K~$zNCK;<98P@R8HSbF! zR1l&S##-8KMI4n8^e9(m!#>d<9-r+NLhHeZdTg#B?%J1oWNEe7V`up@EuS}Pdv^aH zA!mX0#3c7G`u2YyVgKTE|8peQi2*b(cMWNcV=oU(H5dpgY3DVad`kGWuyZN0xWZ84 zf&qg#cg<2*9!FQg&sz|~g$p=CZ3BBGN}caHK}#NsEkZGEQB)(zBbmQkA~eKENAX+Z zHr#~qcmUD`v&U!}lOK>4JD#84U#m3>d;)E?e$%f)I5FV`vBq&__q;P=Vs$7+l)*i* ziU?dkdGkV?bo1~oDerbt&Jho61f?4*2$9kee|t=j6&1^16h-3H^!EML14)XLDh0A- znaJ~8{ZKEd-kwHm3hHp8%tj|49p2700c^>A^e6a%T=}S4XQsUzMH80=IM1h)))w9# zoA|`1c@bHjXAK(?E(|TCOM$fKQ}?k%dw;D-*!FRFFZqRRu065S6c2Cq+iOL?V0x!n zzS#YvZ4paHru>OL2bzucIDk|{lsnHv_%SnriB98FC0wE%<0tMjmYki`^U9fr%0_T$ z@flgwj=&g2bUC~l>Z)CuBLOKa5lhqPa66J>x)Ju1elagi)2$`09r!j?)drj-II2#a zb#`mjM~BLhd~*?Pjx)eKv>ko^EhXxgI~K>TnDLr z0h}zigYiKJP6vg-;XuLQv<`8n2!2)`_^gevWWRxSp_3S7oi90oGMl_s+#=&aeu^Q}M6mfsK zL>N`Rm`8zTUDXUkFs`G9R5RqJ6~>|FhoJrtn608?ey5{lzRF1gTd639>L`iG4j1Rj zDj1G_L=kr~BDUnC9EC5Y#_*q#DqHQ5KGmZ{b4Ja<$Si`>62QLSUo+paKD|f!#V~H@ zzZQ3h=M|wcBrBO)GAo^(yd`Yr(%1fOPWV~!4HI_W1(J=gs-^D8o)Jk-X$u5=x5%Kk zMPwJAhE42w+WZ9RJeK(!&qp6_$9*Nurbp(9b9)q-h|^;4&H7348^B z9pm(b{7&z?Y9uEZtupuS1dYP+had2_@_~BO5PGu!j?&tTs zhy+2Ow8XY0uArN}baH&n>ia_o$@?eMw8`I5shlpQK_Xb9eh>yfq+9HQy=%GtA({SDcf4U5n}8hYY00~{r;hlnU#pkB--4ahz+0nxYH|; za5!)O@fVN?>FfIL%PpN|I^sod+LamfCZo5n%z8=h{qvfc=M@KpItLJN{mbBwv@_TB zMOR?S%Ff{OMXU1fC4rYw*{6wt9;xNk)h^)G4j*iZ@498m`o5trEHSeh ztuT6}wr&>$xrN1c72~VF#pHP7nuqo~ksvfXgZU8*yYgS%76k%w;1wxu&$_Vtt2nS4jrfnaGlKL7yF~_Q(q-PonIZ zq|rEAWOI~F%+h+b2}{L1D^}M<`~Ho-+6pp=(talXi;qYr+fed5%6Zcl5}%u=j5f;tfMJhqgMruj{(IBdA|9u#4jiSlS5t zA`|jx=Lja=$KWcvaGgymC%~>DGY#$DU;bJ^Dmt5{6G8DITV0-n;Or zReU_y>$o-ZS#&-Y^l{*2b#-lIY3a93io?uHQ?%Hl=+D4^hjqUjW;Son3p{Se(OgVT zhE9joPVg<(`^NWyF)=Z7Z1FmXEGf6eTP9+nVnZEO6KlF|+bOyNsu4>Q@39Y2gN4Mh9P@Oa-ePPRFwP1^yrF|--&4zVLIMdN#)APiucxyF|bqx@b!dtPSM zV9rKvR~Xr=;ujJUojO!ioO_Jgw4z0-?qAEg%Ps<+n}fCB&o*#9rsf1yf9z!r)O6{} z9&~>8gA->z;?~J(2gi7qE?ntmtZo;4y;Ak5u)(y`J@v!WL_5t3_)>0jw(BGs-kDmi zgytltUUG$<#EsJLrm(m#82tXAMB#W{y6l_C*qg$_r&j#Lzj=zS87GD0Q3ID z9=~6gPCAh^)1Wg{Eo0lH1Geop%B3WYeA=7Qc5t$t7!?EM6TxNESts4Cw5P+i{X1B? z0viI9YE>+BUQEo%xFP*iY$N2F#MwXdDHRr%ImB(Q@b5g|EOQph7^|D+$i(w0oH(4; z`sJ?UrFCylF+UvqgcI_^d}qWJ66N`RUM_C~yxqE>Q3gd6#$WiXq?T_fYCZMJhF8a? zVMP<T|d7S91N7ipt<5?8oNUD^&h+$fSB3?1+a1~j%Jl-O|4`FF zCU2ZZC?xPJ_!9NkY?y41jymyssx^EwG=_Zh{hUjtXdeum?Gj|BVn!`CWeO;#YLn-Z zX>1dx{nrvKyt)x)i8iZb2MKhAdpjm^;o72PP;p;NC3=2eh9o-Su>91ZCzYB=8(0!T zebvkuy7CWpdE3Sf?^UQCisTX0!b^=$yD-^mC_7%SxfyJKtD@(QhSPG&uMI%S;P^5N zOEfFNpByHJni>;-XV`5glwTQY2ynFLHW%_}?au|MlrIqj^C)BEt{eBZ8n1 zjk6=%b}FK0{bT4G$hndC%&i!z1Gh-4zOLq z=HQ8``V~F9$1b#>QX?xDzQOD9X`E^}$!%C|R%KI;M3BCgJtWGzp?jfhp z_vN|c=Br>9r5_V%GtIBD5Sxhiyri5Uj_7{1T=!i}&|4spoSc+V6KzsZ6K%f7ilVD& z+~-_Nmb5>=6F1~tng?>Th{Um@Zc#fj<~4SaTvsZI!ONE!L&A7%H8ChZecY` zEL|0faBS16S7YLKl?Qawp@bM-tCgSJGDi9HM12;CA)jn`|9wtK>ofUMM3Z_9hnO2q z{S#4Q>xEr%1(>{_*$9;yd42q^{PVj5e*?PN6`+DH!Vf# z(x(1~rSlIQyuld_?gROKuXsS}j5jaxrJ2qN8Lpd0RlZ5;N&u4XD5v>80ri99yIklY zYrAjYNbJlGC6>lseg}p~E8rE_Ya8)Imn&sdy|~Cz%|jy=d!$i=h2hG%w6Zg7rWcYn zz3;&`bS;bsX9DP-iMvaIOxX9))z~zaze1NAd);lQ?PB!rN%X$hH0OWDhumGt?VOEX{rid zJ@ue&UO_+t*M^?r;-O^7ormP;v-)*UFc^j&c;b%v*THwr92|Sy2ygG`h%qr9w&EM3 zC~E#dy8HYrB9ZDTwz-M99=Ky;1s~3fG|WN;K0nd{kbh^w9mV z=!TKi>-;Wa4sBf(8(2C=3``PB4y`G z_T7Jqo`^}QVBlmByjQ<+bKjU46-{YAVlbJy`FRH8kO*vpLk|P8RzEXan`%QX=X<14 zg8O@&J=_p~dS=qCK{0D{Yw6M$u1I(No)p|-4}o|5G08>!t+QAf!fEwabKXYu{~NB0oyIjUT>2zT5|w9h^hg4NrkL&bH9?%F zoXJX1XE$6D+0M*5I=}3+`;%AdAi2aOdu+F@AH6KL(t2ShTwg;lIk>at-=>4BkP`Fw z=#C8N;Puf7`)>N-yC3e^h2N?+1t(4nM~6g>G0vIk>QdD3I}|Ej-RadGs6*#OAODO+ zWDrKs7DQ_)B?{mAHa15-^!S8=yL~4%*f6rbw2Lqb4qVJadmc&AAx1e%=*S{1f74DOBcOejE6*BH~Wii{V@?R+KCM( zVc0u?2s_V**^hndK^Ht%ZYy$a?u~ShS9ARGhjt?1V45jPA0p@uYMYDMu=h1-Xev#IroKb#amwpI_^;*T%Q<9UmY^sGEj1b9J>`H+ z1B1RE=m>b18w5>S_)2~BlO$xHThL2+ZO{-**GtB$udm;G!JhHyZ2WhdRi|P#mCJM- zRJ95d$y>-XvdB;XSepDMRGa0<2wX|1&oI7~CvUo_8p7YM9%c_Gr&q0nheCr?sq@5DLrnpyD& zr`qK14uO?3!$2kq2{KO`?n%L!BD&d@A9R|NCp)2W!2l2BzM?m2kchZlr}b}ul-EEf z8R>pB)233Kq|cqteh$CLqpeR@P|3I*@&{{nGmKiAB+$he!Hw zoe0qA$U8uJOIL~^^pJn8?GNj5@r^crCMp16UbxWE56#I?o$k99|jCe z_W1U^!+Yw4)msg$-1#o{^r1?f@xJDuyoq=C0#!~Qh_*~EI+aPior=@gyN7?2d=Ni! zItw8OG&E6Yr935?6`y|=rLFCkFk8hIa;bPw^OU)r@Md7PDXg`)tICnsYodI{lfUFN z3Sn}=eyraK$%0ZfRf3A?05fO8VZu_8X`Tt+_u{0IKL@lv&{$E2?kNN#g@{K=++75e z23=tPW3Z;%Sqh7R>6jkl`hFuCbHWu0J>^^aGdd*x_{0vde7aX8AN!^Q@wZ3q6;9>q zKML{8oVmSuAB=FkKblkWnS6BS_1#36PHWbC9y2ybw!(j!Vf#;u|8t7=@10`E+E0`| zwGcNJi6IGWzehUva~TQCr%Q;tviWdmP5f1E)E)&bFzOf3#Fme!?CP^JGx(?Q_8mAoH3~&rpw-iV*i08J{+y`35il&@`E!T4I%sfNGUocEBTKH>-+&K3 z9G)(Z?!G3KF6*E|vi0#UQO$?rOk(1>OkRcXgsHl2Yt|y_i93z-+Z~!buJr(4_`l zkbR3L9zFy5aV4Ke9IoM$EF6DP@~XzO(5RTGGKBVM=WccNSr6oLen%9EVPr=IDB+7% ztjDVxUl@IkVL&;pQ4&ACO94DdcIaTIwLNF_s=sL*&o0Kb2t9+*0HyYwJ$ve9gw>bl zn^>{rm4BF$N|7*eQHE?AqFV%GV4!&}4~ndTP(~JN-%p`wvp}kPV#s~oi5lwM?f(=J zCq+U-$cEGoa(q=Psg&`)a($K@TcJ0_gU>8~wmrLTKx-KALdq0I-yzgMM~G@aK62L# zOeX64@%g1BE%gt1a5KcV`MdjRrQ#QicS?hh9v1|XNa)a_>(nilWiy8CZ>U>v;NDNm zx|~8%Sy*)7QSu+)CKM-0-dN8rFOXac6WGw2|7KLgtnC>dfu;htpH28aD|oqz8esk= zt`g*I#G|WHe1)$?%(Q{5fKcD7vZqBtVHsMp71l^#|B+1XEkWJ|<-z0QD*8{Iw`@{Z zgpz0LZ-sj!^TqoA=AEQCHfvWTI)bw!^a%6*ddsj^;6AJdXSIjyYvW~ho>O%tHCvn0ZFPf`IWVp2rfJjB66NoPV0dLXYunu7iqW@F^;A!Awg#=2^n zp*rYW4jKm5U^ZT82)2Kf`oSVu>eJa3dFGgLJ$%95g`aS{yWtHsXI1LtwR9mi&=K3% zPN)UR44CYgZSVA6k174|?I^L>n`eBD0e8n;KnCWy+g|2rw-t2YQUHQORV!SUM?B%> z;b{!97XqOLoMVUo?j5F)AZp^)S*%LZR^;WYF!?+zIevghBqDlAN5?_vU!Sk}om{~P z-+Gm4_DxDw+rbkkt3c#3<~Dyv%+@+i`VU4(=31u?J$|;aAxItbT>=1qxzZ+!!BCWB29?ABkcj<##^+WX zJp{dUrnq1N(MzlfkYxxL1MWB&{=tG6VW>;5_Q2nDYj7v`$0C*%d;l~f(ogV2{g?*KcJ9vN~xgX zY?a;DmOAy?OR;z`aW0|ZX?t;eBL%#YGxcVU=)#@pKri%qijLbNVBS-X<5s+@=Znd>AHQL4pbAUQ zwizmH;MyhZx(%%@AQpL<$VqT+o}mNWeUF6RHuLWex&6$8yibCEqfQe(E~Zo2b@2{b zOMSY*oUuaFI)o5;p9(I3n2qZgM_x?fk8&yEGvkJ)H&*s|qZpM_`%)A=j1GG69KChq z;9vFkT;@tq+(2Z6h~z4_|4~t>%iP&m`$D{cI2Lgx@*DAcJerA_-|Br%L!$AR5bzaW zYR}{6X{2K^o#&{Y86R7nwEW8yRFnGskB1l1A8k+j@G~Ae9o~3`qV|HnR7-4Fj`$+7 zSB5q2r>6mtmawfQ5~OyVka*z@xV#LzyLQ1l+X}7c1O=`O0^;hL5^)kZhb{b-g0E69 zQ)PU_N(yIWvAb27VRrz6SY~;gOU+sqTZ!KmOCgDMzq-*6wtWZ{nk zw7d2CB^9g)=85b;?QRnSAG@0l=h}dneBt$ClJn_D0xgm_H|(h=YjC_4__HJd^;yKs z{1kJfS}ha7GO^tJ$w@Y#K&$Vz;`EO~LeqOM--yFc+EM1i!=~OIR>E=bCA$Z_j!v&p z(O^sC{&nUCDgG^`^*>K%{aC9@SFT_~R`{SJ37++QtR*gjsk*gcu0T9J?nGE_`vn33cF2JyTyaP^NK@<5IN?vf zQg9>A%M6l0x%xkF3pEH68}w)*?j`@i34M6)xB?tMalo-LB0`9o0dzL{WK5jdly2T1 zaX2uK7asjuaeMZ6w_v0Yc1cNjr*&3qDj90_eYarI%u%pqjm#+%Z59Dd2>)K@jW;{( zQCfx6GiA?j15*_iE1We-eMjWxr#W4~J2ctFkL_%6QgcLNHrQy=4cPX`s1cRx?~wew z#7<#O6tj54J0U)p1CI<=NRJ^NzjMzKt}BbOu7W~e9TL?$?j|T%i56T%LkrYQf1(&M|4z!X zS?$5p$Z0#B@Yeg8D*03FLoz{rHlE`JuP;}LkWIb-KJp5<2^V5YFRNp6)Idc(#W zSl8omoNfls9a_?oer#s*wBl^&{^SpStJrT1@h13s85!HcEOYw-ZuX>)hF}d4EK7)F zuLM8%bZfvmVB>!V-5gr8C(zMX;yX0chPQYF^QiW;M+v+PS&m>^-moLnflVLK*fw0x zr?Zb z$YLnf9T>b)TVuheVtdiv5p=wGGL^vIL>U%0~*RkH+CI&G0I3rUa$w zPR+>GYW}`Mw^b_=-efHy$)Rf@A{0aw zp0JvcT0sctF&r-@20W`my~CFh1xyp22xWaTV?B#!Vz)xy_NTJ-8oEGH$VSMdC-tnd z{YiiwY?>y~tljlfI$16AV0;wv7iOQf_6tVSyN4Wmc(=d{zU`k~$xVAXxnv7qiFyJ9 z*Zqb`*PX5~(BnBSmDpBoW}#A|ouL=<44JkHYnWqI#wQ3hgjY~V2-!EIM?$mu6-2$u z&`e4jMweCsQz_Uyt{TlB{|^s*^fZQ<_|3_Rvg_LhbdxVk`dvA@4?Wic0nb+Sq9J?( zs?0_I0uq{m{|+RoHp4J;18pY?02sRI#MfZxqxbaywnWS}*z#k2E9lFg3%!PVH&)?m z5<_Uvf#+f5ayqlm!<5kVK>{@b0M80!Q;6{9pa``}+_|(##=79oy6EYZWsfxH;{+Jgc(xaIK;SD?;Hr zns57mCB$%X>vsS2^fZmZQHEL2*Y7n50SD7*-#!kuhnZj8&}qM6Sz_m>)*j&^B$CGr zdRY>ET!B4OzW$z({4CNC;(IKC!veLiWX>4jdC3P{O*^(;SwpF06yav&hlvNUB9lS9 zdh|%>=;%Io>x9Ne>rR0^IOzts&VAfHo4tK~aN4>#XsWB{9TKn&J+6c0w282_y(`t= z`5=iOps{Q}vfZ9YevrMck6g~oOIq&dKC+CkK8w%mlKu%o0$JV6pft2(DOE{c zif^x0;}sNHOKK$fUt_Is7K8$O8e=+p0YA3i~20i6qly4tdw+)3z+fPO{ z{UnfnncisHte38n9k)M?r`7jTQ;&Yb-RdB*lGlQ@(D0XP5zT$88%NaTCeP7(deKP` zwltL9ww?RKg%(GaIZ}`G_nxZFXnHI6X{&5KfLeEa*KEf-ufka6`+N>uvvkoTj!YHGDDM?AFJXg4CDl?645ldB_no~vUz zH?j?A>vTiC|0{0Jo`K=~!>qo<{dYP5{=&H!Caq8FctQKYj5^#=Rg$^Qr@qC;naPrg zrzl0+(w&EA;z=kS(u!@C8U;jjMs(8f0rcszQ=(3G0k_L+(?P~)H$%#Hc7y{Y+KU|7 z39y@-T;F;x4KRGLLGUVE#ygmHa!=<9Z9g`C&hgg+Nv|M^H915bK}MA(>7|mI>rY;% zetrLu&^;o?%^R@xn|fl!Oc7~Wo<73z$5|GPZ1*-j)8?8g_@oqv`Ic0d$ktX&Ud9Bm zDvl~RV@T=Cdzj`VVX5{$lEK614RwFnv&?t__|0%8UzTUK*5pH4ZLarL!Y}dt?t!%p zF+nTlyh+GP>k;`lxB4(MB(=|2?>|dr|6e}R|GOb?Q$Bbay4hERskIs0;V;0a4sP~T z>d`zp3UvKD5Txi?2=7x2O0@=ZWTOAmPDt8E6xe%}m6t;2zCj|Xk2wEoQo}q?7WMsS zRBbx+hVUkGeR;@xg}FuIZxYCF7Z-u#`tNxxm0$c9cNj}HW3FSp>bzBs^r+qKve8+? zEVe5}($t6bBWYj3!b)pAzkWE!S?|h48Nv1PI4P9HI?`^x(;rc`Wz_nhL&DolFqrBN zp2m4oPy2j;+GtjlX@?{{Xc(gi1rvlW7rT>u-ll^ucSZ_4S_u!tk^@@Q1g?nu!0k7< z={dNK+;XI1qe&2Gh&6&MN2N_IcC~q$Iij$ZXK9T3wS;MQ?U>r@F5AGDEZ@uoxIXsF zYpH3*)I4*FSv=WFf8&4t=DGy(>#o|i9MAu%_TKTGz>Qt)An_G{=D;D`5=QO(08~=p@3PgfRS#1xVv4RjJG^Pbi{&Qf&8(04T|$ zRg6QOPSuP7|DD1a9MtRd>*bXjwoTTA3Ifnw`T5w9bdz`cRxlm*6XUc2jw(Ntr2NS0CqDF zi7vftZ9_Im&u>&jDGxmXcs1wA{WKwz`g<7Kh@k{#9ln_Pb&>$GL225!quZl*Xnr0~mk95iI``esFJP~32u-l1nry*0I>NA# z>=zBdif%^IvAs(IQzw>PdeYxaGCt_3X=m5g%*CQ8IQkBqKpZn)neZycOugE|`H3$* zoqO-sFNW2Cjl8q9ZzwHZ*oou7qKZ}s!D+56aM{r5oN71bj#JF1g}n2mIVS-=I6MuQ z;O+HKa)yWtaiP88X-DKfA>or-03Hv1`n@?D5tCBz7(5nMLP0X{;iWsC)X52aaC}_y zLfM2_QV-lMquxqLe@i_T1MLTvj#45Y&3foH2op1oI-+JQuK~1-CwFzNp)hY4!C5wF<0C`tkO39DTG&dDQWyv%l`_JomdFNEA(;o_ElkY}Q75^DD`zjCk25%B# zN0@o~qRFcq0`BxeH*+~RPoMMb1pnKNw9nbH4uin=6solPhI@DhfJ?QpOO9-m4B!Tk z_y90AHIDs>gxCaIuW@|b7BUTa8omE~)VtQ6SkQLSZx{WK`?TYGM)+EW-5vE4OE+;# z>B^1&+v|p#wLP47ZO#7ux{H zN~0JGSs*@(ZpOh`ez>{i0||Kt^LKF;2EV(tL9OTb>4T7jA`(j*m!2NglPa^-iW_eJ zFI1#<83C5*^c(S8tia{Lxj=A~9#?{_R^|`VSHh28fTgK7IlQX7HnY#}(aZSkN(4{& z*08yYS%-GABD7+Abb~WV1gdP9vuGi~PoNnnsB++sw2t7B*({+b5oXJ?T+ZF^Q&qM|jKCSo0^>x-u{0{KN5C^zG}8u5zbW4wriHASk-&zBbmYk4{EpF2bJl=IvCckO#S@ zpzu^7<7LXA4TGyh!M$y9-Uu+mU^n7yIY_*ovKR619c*~?wPSc9fF=|~Kakeozu@DG z(e(j!j7^5uiVp?Ojr(2ZaH0hza`M|Qf{x2q_K}^|0Q6$_@oAgh*hL51fsf?{B{QFf zRL%Ov#9d9jc8;dS1-=re>JWZKo%6*`u<|Oc6NHo0ffBFk1)j7&8Ieq{3!3M{j*t(9^O*7Mf$*z^_lZG74k0u z!R9RVXK+#CHhQia`F*g?1oC&(NX&q7c2))Q-DmIVk8Bv+=a_6})e(L_?1NYkbUu&WA-At+u#m8Ll9N+q|Ib1+mW;D)Bxi+DEq?Vsv z))p^gQDh}HBMmMp_4MMC0S%o5tCYK{EJO4ye$vej?}yTNdM`L34jK8RBRO(4)Hs7* zjLujkDz1`fJqvyAeLakT^a~Tdv;a6tb;#N!wtdKAI)E(i>=*PE64vxP7 z|3BK^GAPcjT^DSc#@*c^xNCwn9uhpbyAwiiZ8W$hNN`Dj;4VQLcPF?@aM#AC-~H{W z`S#SFbN2Z$zgAV(s(Px{)7|&A?)#FtHoJD^Ov%&e$3#FT-kza~?jr{R(i@?TWD z1nn{H9@@_&(?bm_9GCzOP~TfXb58t~5dR4G*AA<*40L9*V)9+W z`oM|b6BB&vB*^>EZ4+H=)HDuC)eDbG;e5zcEd@uFY;km_zj|$(GVQdyH7oZ1yjMqkOV}D$nZy=JdLNfJNAhLtpm(_SqXn2*=<65+rpVIY3 zB0UL7x{nUx0A6uR4TaUtq!R7!L-#~+|Kt=kUkVtMd`ldUc1=6*e6{BwZCwzjA>L(b28r+(kC~!80g)#jn`=@v$5I<#V^>n3R2oXd=4uPPLr;|LB)xk zROE+o57x6uf+;XZ*|GOai|Jp>+V;U>Ot?u+wyT&Gt z1j=*KDdHa;9l7;IB#1~z^qp7t_Q%hfC3gJLmaL=EZ)=SSQv^CV$-M;%%Lt)%PzcZE zH%o7mnM8r)IjNmaHaBMJK9+HOTPfB@&9h;un&2bA`>!+*|9$|FU-hjXGW2&%jIU>f z`RQJdD{fKJ_IGtCwunV@Qv6pqvzB_+GrsD=t+Z1^hAlS;j(t)|Uctr;8qfCcRc0aU zn&yVVeD4$TJC!+a;#ALXX(W1XHs~}I0Y%KOY_+6oqEvk{Uq7Q98c-wb&7o0zTk^}V zLQnI{oU5oLRFs{f_(BW$Z*FF5Jpt-}^5rxN;^XlM6@`J>q5)$-tbXJg$U zl#KDS4V^=n{oprH?jL_au!-e>cZwzOOO&a%83OeB9_xsPx)Ha>F;PZX zg>@#_-&6__5s|>5C-Z2u^LeL^q92ddA&>n@uHy+efa0d-)G_cMLcjFVysfr z+Uk*g9jpTq`7iyO#FU$lkY0W*qCQl(bxlD`1SdB#Rpa}jn2PSM&7C3pY-0N=bhVWm zOu}2^<~X>+jr}VWUhp<&T5xv1yFa~m%dfB~pIF*Fa?{_aas@BouBZYxJ~ijEiglXb zgw_TrlD0VVZ7BJFVM}GmFAaeyQG++Zh{MpSmYp_?z6KqAA7|OCV3Qr}Y5pN9|IYyS zMf){2iH(^+l8w4@MSmKJFDuakiUC`>ZzE`rw9*P+vPf@=a9Qw$IXObi*F1C^nWIZ~ z!E_;@7dRP;X#2R3Q&>hSM5KeQSU{`8SNPZjZ}R$Fui+1<3{aak z!$J_!k9<9+e;@pLm|(H`)rLF&8w6XoHkI$6PD#{lYbh4lhaK4DJqy`*#VVDC z-Cg^$CPMBKl(1lQzbB%bBc_kb@6+7|tND{2s0QN3iG}@={9?e)XVx)y?h%Hoimmw=7^Y%@5 zCH9=>5n0|3x2mM2S;_evG1aTfHu+}(1D49c~#ZN)-v|5xI%nuOm z7NbR8c;n2J`w8si*&BX>lE`vz(qhu_hr4ILJ@g&@Rd>&yuvvUBSt^cTKZEhFtnas; zUWJw{{Q9!FThUR1s^iU?ZPWI?v4&yX2_&||ySEPN$O*?R3p|$$^GW1j^BWu&j^PCv zWfgD(51QK}c}C{W7b`YThVSZE>lTu*Ls=lDcE}*rMa0xh@{5M^^iLMundf*Vc95b| z^pR-TzHw64<8A{wc*H$D)Fx}orGqap(U7qt%ox^CpLXgDRhX3&FY3drW5nOM8MbR6 zHGlbV^uCZ$erJqpFZc_i)xSf(|9?H7dPvba>Qwzp4?e9G>-?)}BM zyBLqgu;h7~#tVorw0v$yk>plWW(5UB|j1)mB?Rmw|g+VKM`Y*RH_}CJuNV+lpClKkRJGfyXFq-e&N-e8Y|{ z)0Rt^1)8(;uMsWRJK>cf^Tu3SK^CxOZNqQ}w{ZZoi!5UuC7h+AdPK5`^MB~*_v$aE zxF@Z z5n_z6P*nhakXKkAH8l~Wm5nE=f93+W-mGiTPqml{^y%0skHWDWW&w-!u{IMNw>5a{ zF{trQQg)ICgQw4WehvLuJ_cn;7kz0LjwI#wFQ<65Jxfs~=n~R>ury)~j z$Rx8|rC`*>V(|wWx0}u9J8nZ{YqQ{#0@09WmRuEN@(I@2SS43((>k`^-3^hk5`)n> zY5gqC;%1V|uPHl232)Zgv(ID7lusHX!?%uIi1iqCoF$W>wm3^@B&$br^Scb~=cyFa^!_ z)P6242SI}uewN*Azh-w{*$P;OSq3U|i zbuz1{o+WZ0^={8w!`Ke*_SoIPi-V|9vb0IU#!AD!lXF%f&)bBdAL+F_DpL2ULD9z{ zGL$qlHmAfBI}z#J6C>2wN2fBX8XShd343-k^9V&mv?;R-=NBb8N~JEPK%BA&>}da@ z0*&!5KepA69{al5klYGqo1Kch2OR;D(%>?A^4z1`w@jVFCT($$`x8;ve$io?trq!s zjO?&{y+kSA!o4**95RAv{OjYoyZwIv-?sDQVbM9<@V$-4$u&PS^&e&c(DmzR(c*OV zGcz~+ZUwLdCkg2zJ<)4SZVX}#5^@y`9$=6AI%;@nUK8tZqk&k#}9$-5m=i=>!uoj_eIL zDpl>xVaY#xl}^jCYO(Ygh}nW=KeXOPc0%uL*7_=G9Icbz*1J{{vmr+odewNwTxTJ+ zy89x{Dn7>Wwk?_(JtOM@VK>KukFyTKE@|XS0@wF>%kS*efK?4Og!PzP=$o+_4qjV3 zf_@jDT6*tc;($~Vk^<`>B)C!07f<81sFjfJy_)eG0Lg{$&@D5=kvdUS zIsBWli~Ao2NUeMc?7CMa^!evEW=L>-{<5w?=fVBQv!lxS%W}&1!N&z3jwmJA8}rOx zXL*Ox<2;YOp`oJQ*wb{e+1F43JluMJFq9O~I-<_{=X)1ppGQ~A3Q;)e6{;(y{||jw zNb7V)J<~y< z%M6smFLS>9*>4X;zo#q>`m{yjUT@{}vG#oD1K=#sTA(z?s+lTzU^9KGCb=j_@oGf* z(kbajl$#yNuEYRi4sxfZ5IqeF?yzmaNoQSXA@kz;qNzmY*<~Uz>({RMfl=rd`s$fA zp%|3ghQ__xWJHy#!Hk68ch&;T6x6WVpz0$RB2cy`^MMW(85tc5$?XJO9Eol+skt-z z5$mBdJxB{H_jD{Vrt7B!ETEDy@no0#N%P zNRPvGVVhmFSK~Gg?s|=!yfXC%N~=Gf^Zub+EpGvm%Ae37KkrUd7|}6Hsy5)j-?sbr z3Gfk&?*CY>g}lgUOkPE@!O?~)E?-&^8JX^mdwj!Gk1>7!Q96Zn$?qhs_6LelkL1@z zxf1;C&FWdkstt#9G@B!b=z`hDW!Iu!bInj%Y7G3+EQ`o5sX?O77Vd0j=vE*sD~9?mY4Bbou4cgk(aEWH{nR1;F%=$@38PT# zj5eIsSG~HVR&()@dRVw*^)e9>kW#7Ld1Aw*Z&fglj$FOPz^&-FXS-Q5SN&{Ke)*~8 zA6^<=evb=gW4l4;IBtQMywLlb(uYdO8_rcxW!vDbPL_d)$m!SdK@S=U`GEYW?2s=Xt!DssU zndFLi+C5fpYPH48=y&|EB?Lq@lQ@0aai@_*elxL4@g9KuqsjQ&Gw2>Z>JQI5l5xuS z0Q+gIf-UqUIydOd3n;zv!La=9o83K8bl|8sLd2lk3KDmpAbHL&59>z+%Z=Bqae?N5 z2%%kx8^`^yZTc`jrEcEP^xL}Y*uQ7u3Y2#KTBYb6-aBOUu$CL=H>kI|kGT;eN=V>; zdRljcP_9TEzqTVzgin7DVm62t^{)bn0uj>8U}ZIY73PMA2j9P*m)M`m>$13uW4I)@ z-HV>TP05mJV@Fjr|1i$mGxAvP6zizF`S&1Leii?Nt3(pTL0gpjL?&uH-GGNxcdZ73 znie=FCsOp1Ju>iXrtP!pKo9#bJT7g3yfy-AH9*lAyW(5rfY8K1!UMI5mH|7i{;}ZUJ)QxE&RoxYrloJZePFxPu zA6_X;neaONe7@8c@iVb3cu3u}5#>R%L;~0Q2LVatEvn0<9W%!QRr04dj(nMD7u$E8 z>C{k_X#4!t3owadl$=_X8h~HtBs7)wL+f@u_r8_FM{BPuWYN)??l^C{3o2W>q+Lga zSAFkh(Ds#|-Mypqi%IA4n%1~Z`Eh!3brI*DrAHv-ojfHWH(#oOxmq030)ehM!1YYvf;6;qf;7lJ=5!Kwz>5Q4oNoO?Uo;io*h zi?vY0mcC$KlPBpc;)lC=`*w&|$g}}JfL`E?*h(N{3DFZlY(Cos05C6t{JCS8X=MQ}{8eB@W*~X0&?}2TWAk7px7lYLK z+=)Po?7Y@|U@1=SWrz_GRJ>X5Ff1bey7%VUW$X*5W9XRcc$3_x&p!A+cJs3^)28+v z1D-+S*s7*6=g;y6@>3bzBtiC3nwZqiCo%|z21fGvMc#RRb=Exyq-fZ2MBzoO4L3Lx zZM=E4tFlC?+$LQYF2T%84_4r~#N<-wxiCxIH3&!8)3g`DT&@*nyvPBSi$A=8)VS(C z8{1NG^r>q-?#5GZEKL3bZp`T3(!HfW>@_3+Fa-Z6WA_75A-9}BU&mq@gBDVg=OOy@ zS>sxts)RQvBFl%K79Gzd97>>)KGl(<~;3AeZzP0&Mj@WLx!r5)!(Ndsk$U ziTP`dvh{A{Z|{4rr#>Rb6Dn;?BTmhv8t}^3!n}n8+fP0|QAJBFP3;Yf_AviLb9c%y zX+p0CNN{|+e*eaXga(3a=}w(QmT5sN*Z&J!ATx=dWMTreFdSa#8vYLTJX!AO>iQYu zWtUktTn~kg4J!PJ5s@^{AnimkDc`y*8qXj1kC1iF|E2R0^0bJ)P4Pmgpr8OR-Q7j1 z=lg5WaN!CrhU6cM$T8nys(=7fV07}&_nmRiuavA+50p2r(K&#kpbuRX(^A>o=MM0WH7 zxE+~4QnnBhtkX9K-Z`Ud_t-_opZ~l%?)ve`97Jo9(TcKuvAIc`QuNFGb`Jy}vYKgz zRQOX=R4&VJ&dZND3Zy)_x1)giNa1!$9iuaUzqiARO3|;F;m_fQUUQ!p&^*~D+^s<& zG(|!W8 zlx}n&+;Hn4M^~1b>Fk&V4Vv&Y$hooIdmI%G>36`1u90y0b87!KRo_dUNti$`g3mkB zegulqA*lOxWoov}p7gF=^n^Ic;_B(Xyg%mi@J%Y?v3%Q8P1Y^=dqBpRlh7P*xKCwCJ>$p5hlHD3v28zNR4IdT zMceOg2N~O%x?A`J)QFD5F}S?Co%(}>R*R%&_~=l#G7-%gJQ1K*<`G91)Hhaw_2!BEU>R8&>2E`cZ;ZidpDE-L zn?c#&y>cr<)nCqp>(g>C;TrnW#3)ZGVz?D>^)Yb>bl_>*pDm9l@;NVcr`dVmazl@J ze!6LjN|V5$Ekeh0s*N;_xBf8u=k(*q>#@FDWuF28sPe;Jq!2UZ1*1w!#o)-&T3F2_ zS*VtPG9vMG=eO?oN^^3=uzAQBUw|ay z0Opzs6?Y$BFKf_y?+3G$eK(i#c0N}Z#5S`21rPqDsRyx-2$-B16@?S?OA|=14DH!q zX*F>Z2zFIvMYGGVxs`RD?yVUrl6|(~i_XT@-$O-{A8Y@2Vxbp^uT70*f8x*G7cax@ zKv^JdB5jlfk#4>|eM>pA)1to9?0YAD1E<9+^r;VfRCRx(ooVfQW24&kgoeuI^CM-d z)hr1>ybSz_m!l(R1#(I!yvs^F-QpitVUoInt_Ku&C;j7hp$;Gex@u>f4d?W|Q22=m2T7(T*gxp=!%@r(8aZDH& z9#2Kke#3cMrp8hMv1Dm~mQTyo20#|1T@rmCv^H`So%Td{p^tvOI5ivKY|xi)+_fuK z>0AJynZ;?Shb+zGII&yt@tAV($+&^rq;cEx3@C#Zn^C{yRdUk@F7~<0GXTpx=0j)& zrv{`~g4Pr$^xziR>`V2lUd1Jd(OORlvj7vLN?RKC4Ows-_Xie$ozshHxmqndB6`p~ zTHssX*2pZ{=3DicFuG7M+%XfEl-D?9t~P}9Ko>O8dR|^1Qc`ts9~7gag}@stL~TJ# z4}5#K9Mw~(B~g;>dh+4vA%~#~?uoq!^WPy{L~`K3E5Sb@XRFQ1Lc3blP7h!T0;ol7 zL4F6zIJ+k-ivLLBkwzhDIN2M%7yY`5FNf*rubqLT&BFLu<>RJ%Xg+Li2evrGl^3je zU48JYicS`+PLEBMu(aq)h}}`k4DJLYD|xh-^# zS~LUvx$8mj#yHx$Xdp!{X2EE$nM?3ilTeUlkldj$T`i(Zj}3J){6hOCr$XXWmPSmo z!Wyin)*Ee)q}TW40MaWL-LYoFlv~OvhpD8Hds@5JqTf|@Pa{0}n{k@ciQbzI1U8Vb zGo&n=VA-WKN+s2;l8pRqF68k>&+`?_V4H^zU{y0iae8t~=_#&n+Erh@&(E zd+YXPw9wD6gR{x^kLjHn4+abTJ9aQa{}A|=-E~!n9u6d zB;RHG3yi7VAMU6g;jb-!AT{#z2zR|WBRO69Vy{J2mEgz*fOD(Q?*LVGZb);Ga~s_j zZ`Xv}tG>#BFi8oYK$P)@)&~MD(y!p?qvE;tf!Spx0XP}hX!+rstU@WNOu~%w&)Xm8 z+;CT;^SN9?Q4g@$gtM>BY6Jc}FsL_VSJdk&JU)?8@mpx|6{0zyKJ7%cy4e+Eq3VjT z3ITc*0(4FEqO?O<|Fms)?oIpRoSUEG(zMs&wIUvjaSkJQKY?jANNlE$S z`@|+RTZzplQX#fVtxnXz$zgTl`EtkQfn5kYTZwH_K?4@B20T4y!1mxnrxlVlPis`O zP&I9LSZ|-Z(qEz3xjB>tqR)PQF*NZW)ztxl2C+1(XL^H0G}O*gbWN_VoHU2mS*FD3M*dbi)lts^ROWniMS#bk=>YSoIS7lc%Se@=&chZ$94*j}`m9A>RjSOOF`dOTbz1TtX4s@V{ z*D3dJf>;(J2yCOui+O8nUMwM?oY2o)Krs#DC2J4U%1W9SpXcH^eez22*+VLT7 z^p6$v+^`_3d8BYj^d^xjY4tyMB5-Ig?n zbp8v*?7%BrV}Qu_fIIj0bp`m~1-FRaol4-_ap#=tlapcpALvAJHhdhMsRWj51^k#O zQ<~c~qaBNMb?U4b0LJDn2ICfRI=-=;P}lmAC|B*IgrYSk7>9MWPuf!A4?MrmPyqEO z8uf~lopx8M;-OskyVf9yJ`#dmHmO0q=%R8D+C`hY{y3o(GU57E@p@u%#+jc|#2K=b zjB=}VE~9$^Q+o>or_4xdCo{98KR=&otEs(-npo~hAeHhjl4nk z*3MOrn_0KWjfYB>o>F{JKjzU#~&or*K0T{IZhj?#zf?9t=3C1;~$+*kV*SaugM^Ui@ynM zjm?82rx7YwZDmLmlE3tNhE_kAam>g=2mdN5EP2w5Vg@AeXKF!j`AWxSkXydztW*O; zwzZ3A$F*Z`G>C8E95D~Ubw>l7N$x_1Jsc{6SJmWCQ>K=Av5*+VfNapNn4$2;hn&BT zqqM=z=N=<;tB75gkh7=`Tnqo~!W690pnr-!&A*EO{|Qj|pJ9t_4OBqZ7Rhw!PxTRX zXV6{i<>DIdsYA|gb*B*NTv|rK+^oss`PwyE5(@d`Jyl=*6TCL@yut&^2I_Z@4Ce~V z?;-B=ZM=7GNHvmqS3qJbw5;E1$Sd+d9#gsbmJymmmwDP6BNcgdMo)QYWWhzjk8vT3 z7zYV!h=UM)eQDfhH;)1kj5otxlJ!fR4F8g`T)v49i7xNxqlO{jFXI`MX76d@{h(i% zaIB6r|8$e;xyK#})WSOPW2d8LrX{v;o)wHT3B#wK5f`};Mxi&Q4jZ5+GTU)^Y+;P! z9sq@yL^fXmJDe;(2-VcF)6b~PTutknlyq`$Dpt%oY(q&<-zNrz1mPiu`5Z4pGHgOj zG!c~9MgNqv)8g&=NA0p_1{Ysvzvfpb5M$6mDvP~crcc745a-{!BEwyY=le$${V5}y zclA}Abae22lYyx-zs?pkwl3w74Uj0(?ES5@_`_^n{n)-ncbnCw28E$UBnHMcD2OB? zmjmz1(7l7dVSvf-z`cvw-7Xn|K5}x&O$BWH@@VFmsotid#4PVvmC+7MHV@RHH_k92 zKXJnU)qSa9;@;?1phrMfm(I}HVGwaE-#7D)^kuP`IM=(9_v`q&>IsFr7G8q6N?+PK zTbbs3Y*LJuD-S&oNe4k5E6~b!7h4hddZPltYJ~RKbf!@*QtiTly}D(=rv4cme2=j9 zS8rUgFUwa5Ym%mgkH?MJm^hQ94gO1nrD88#^oH*U701>iq-q1|-Vne?GT%Yt!wGD! z(opw4+sc0+E#e^ja2KEGv&4oO*i(v}Y|(wQn;`4{1vs~O+n~A8nQejzw|%zn#tSC| zmb9btSC#*~OX~!i*^lvNp0P3&X>OTh+J)13`2Pu0xH@M+$2bQDaio!^rJkP-jEP6~JGSi5;9Bt}LyD+MG~B2>}8y&`P;M3aN+~$99Cq$Gue@{WbtO@^AYDG^kMwmZFl0K zEl4iv$DC=|PbPBnO@v~0IgK5e@TDG2it6tqkO42TarwpZ+qb9;4~t0d{q8eUOuK! zbk%(E5;LyF5<}`}2>p_rOa!$ceGIvA*+?Kl9&fnK1yuCbN!2fy(-J8au?DoeP3#ms+Uk6cGY)^F$Se}QQJHr8 z?Y;LTGF-<$%ZX>&~X=wVtIUp*jGSJ%ZuOl7x++!U`2iuV&2o*z=z6 zxfYq>C4iALT3oqf1x4=i6;-so6$je5Sj@{*lUr_7Hzj&tLm&k|10HG!WDgVP7$vjm za>Ht;0N;^kR<`+wahJb`Jq<1Xeu`y#rFl%@0NP`E1UbIYzJTq>Qv@V3#-$3I1+8`FDbD(x7A1FcM4hq$oMY9Mtc4p zQ85e6;yLE4gA&dxFQxh+MpvUo8511v%Y6b~6ul6_|KQ61Kda>b>L~nYmmm)S+efwB zxjk3+7y{<&UzZN}wJ{j}fkFdvM6K2i6D;05*PHZ)V{bTX3G(0Hw~Z_`{Qxu-(`6UP z5FKFQ#R{1I&I$%W$EvU+r68+|CQO-^1d8%DzDX~l@iaAKYroO}$K1QW*8-Tr#~zi` z4HmofAQT*2#gE%J`G5$^G!i~=;-zRtgo>gdKaBKCVaZ?j9&dSzkxXm$)U_Kn6bp*E z{of}OT1BM(#)cM{*xGqj-U){dc;H+fl`cA)$Ct-%Le3uLLP;^WisNPD9I~or7#|IK zFC^(_irG&X94dQnA+B_QMM`OtF{w`;XO-+%6I3RC?Ra0cs4@@3ni?n`Ymf5p7Z+iO zAG2AqB{g}5-o+G7_V?cYLjN=Rm@DN}F@1ueKsf-aaY+-(JR0woftG*gr!l%`< zrO0GQz-3?JLd-q1ExXNf}^XV#tTHzHb?W zG>vrM-w@}b?`lc+;K<~$(_FsgT{^!1F>#ZM_R_$LjPPcbA`Nh>A(4|-c7PDHlRPou zlBc}9C>t4d^As=CJHmdwfD%$SzKwi3)(zVITA?60$KML^GUM=Jbj zc9&LmeOR`_eHK789T<6N<74bOv5Gr;?qO#k)9F+id9#P5 z`%n6Uk4n>NT*CnlM**=tzTfpH3IBKuZBwW!Voke;i!WldJk& z7izN77V>qvZblUylW+q+2xqN5cJ29s)9>Q%E$Yf~$?6fYX3*T6&bj$6fcpmfl6f>N zl{77p5&X42nH^E&83gQgK3(lpIDNv*5y95AzqFvcyIPfTJfU9itDlkI=M3fN8ZOOO zBZWJ_gaDfw8p!LPFqrujU!}bouG;s)wq?yM!wdQOlWEx)8Wnq8svf4$*;lXStZtuq z)WY(D-X2gD+1)KuT&AT}0xq2-(mV59GV>AWz0y4I8%h>awEg&=0`d1ZP!961(`sS0 zR>-d4<6R2{?5KrV#j5ZCq15h^)J^<6WcI&1V|OUFVYe)|ePx>&~3@ zynI4(YE)a!st^mB7q>q8CfmdV`)3)hXIqZ9-#|0ufpmNcgpt`FZf5)1#->@O5>HQug+1BHp|D)QU4Nj!M)KUqv<7 zNZ@Sz>XB=tWR(lH4WI`9*b3T^gwUayuXO9yh~eFK6vcJgGH#mj^a^gJ_+|0@@xiR0 zar|D@*|hdya<^7TF&P3ZU`a^dh+Z*^5BAK~Q$GG}6v>7JJ`HJG;9XQlK;=hGic?8W zNv&h)a(uCM2)|ekqFep*H|lH3mLAC{0?wUSNuW5x65B`aOc_VxHF5Me6&ACzVTpHl zZlpTY#Qi62t~YsiH@o)3OM2}GeDUvZ6Y7sJza6Y#+_}hhCXG*G1kSD(>LCGQg+s3o z1Gz5n{3)y#HH_^kWhkpzriqUTIBqtfdvjMHxI!q?=BC_%deL&0lmIWrg&BM#Tc#h) zq@srTq7nrgH>9j%`dK!@)~1o&pCNN^5ab^(2J1h|7&XTe*$6t7kdN0qjFue|BZ&``0UMz zLx(O+%F4L{Aknaoj+M$Y*@ym@8>@;mFaC#9Uc|?a1*A8^p|M|cW`!|kbnZl0`aCuc ztz)l01(?bL!7g~=>}^-RzJ}2j%jj9J6J(thkZqovOhT5OPV*tMjOm^Igya=ZtRQ;6 z7Rg+MCHi(5t;%viX!wzhe5sH|#GE$W5&YI1(^)-c^hvTmZ92Viwj)^Z3k5uc^cU9- zN&tVY5iu`a6c=C&{U%BDFY0Ec;91|^wjSbOm#|XCnhq+GepF0~&1||f_QGk&g7}|P zhHo(SnTzz=`+_E_Tjz(?03GNTtcV%c`7X2_A!{mL7PSa{7RIzoZi#7dNZlnp$}R>I zZ6&=e;-dNVNp~aMK#K5p^SSS8qmyCWAY%bKAgCka91+`Ev|nwgb|9v#UMfVjd&k)9 ztp9V|iMyfA5iB!L$U;*_CvtQ(Pa!C;P`k^JMPGVvWcjWk>68f@rRtwe!8gdCy)6sPdt)Y;97^N^fW=hbzXmo7@bVPN7(QahSd!rnqO z(2kc+r5~f-kG~y0nPsE!2Mi+$oAf&vb{R^NglOY+7t8)4>zZ(oOCQqOM(1cEs7mLK zOOi(>_rq=HEG%A zpJ)F}{HCzi{N0~(+QvogGcHN$)p%F^XCC}HR79>^XC>FZdd!meWRuQR5jEHLsGLsc zP-&Mp({S}n&KLe1N$9KK0VG|Ba*Nh18q5h(*1%gQfl-o@p=TH-YTqnt6AVgJh1m}b z9tknl(#Ne!yf*^bT1hoy8&WROLM4I|xKTfMS|rsR8I2>~kGU!s2MPAnM^8vKka5}GaC+^-?~cA5xkDXG2dcQ;(^8A@mWiJBB-Lv-_kcG%|E@81P?f3-T* zXwc0iE&&4mBY*S%!7QT=I4;BrR=qf#of`;KgXF6%{#1R7HNXiW+K0GM^!2~PRD1hq z+NmkQl8ucGQk)v!*Hz<<*Wp5?Q>xb8J)B4YE7 zG(=zsdUuwNcKZ1StHaGF1_Imh^?Tl`y*R~>wRi~Zq?psG&a@oQ?y5r##X}8jbT*2& zKKPYZ6QV_wfzl6qtaVOE>oF)J6oRpu)|7Og52Af6fu z`t^WDa%|m5cmH~bu<)6wtFRAJU)1{Q*W==GwzD}SO4WE?ajn+s&rF_4qwZu+`nk}) zt@62wt&p6Rj@1qIR-sRnhfky8nfkp34m#>e5epr2+!c9Aum7$TSS+_)`g|k+1JQmH z)qR9S7U~-5QR~cBqJg5;R@*}2S0BhE?k?JeQShj0+0^7eJl;PEpHH@Up0#kdJ7Zmmq2yM^Q1nu7n^PowWBwM& z7E`!ERVhI7X!WjgBD-lE_&GZjcfpx9Q$2iultntI@QRDj+z3(>>okxjYdWm|qHhIK z51qJMj0EQ9jCu0;yQomHfB90rBCXRfYk;i1n${`w)^zVlGpXo^33FGhs&`9Q>Fm~(N#<(a^*ID~=u;?e^ zxgMqd!Rk3~4eM`odQr#y)|3&%%BN1wy|8{U*q5%Uw)QtipDYY+IW=O{a~NtpOH@cX z@4ly2>XHuQ?netCtZB)W3t!rq@>+O1>}oK|m?xDR5@8RV);&J@+Adq1`&4^iUT2Sk z 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 literal 0 HcmV?d00001 diff --git a/ChallengeLeaguePointSolver/main.cpp b/ChallengeLeaguePointSolver/main.cpp new file mode 100644 index 0000000..dda48a5 --- /dev/null +++ b/ChallengeLeaguePointSolver/main.cpp @@ -0,0 +1,211 @@ + +#include "pixelGameEngine.h" + +//THIS IS WRITTEN USING OLC GPE, CHECK OUT onelonecoder.com +//Or else +class Snake : public olc::PixelGameEngine { +public: + Snake() { + sAppName = "Snake"; + } + + enum direction { STOP, LEFT, RIGHT, DOWN, UP }; + direction dir; + //Game variables + int score; + //Snake variables + float SnakeXPos, SnakeYPos; + float tailUpdateTimer=0; + int tailX[1000], tailY[1000], tailLength = 0; + float x, y; + //Target variables + int fruit1X, fruit1Y, fruit2X, fruit2Y; + bool fruit1 = false, fruit2 = false; + bool GameOver; + + void SnakeDead() { + if (GameOver == true) { + Clear(olc::BLACK); + DrawString(ScreenWidth() - ((ScreenWidth() / 2) + (ScreenWidth() / 2.8)), ScreenHeight() / 2 - 5, "Game Over", olc::RED, 1); + } + } + void BorderCollisionCheck() { + if (SnakeXPos <= 3) { + GameOver = true; + SnakeDead(); + } + if (SnakeXPos >= ScreenWidth() - 3) { + GameOver = true; + SnakeDead(); + } + if (SnakeYPos <= 3) { + GameOver = true; + SnakeDead(); + } + if (SnakeYPos >= ScreenHeight() - 3) { + GameOver = true; + SnakeDead(); + } + } + void userInput(float speed) { + if (GetKey(olc::Key::UP).bPressed && dir != DOWN) { + dir = UP; + } + if (GetKey(olc::Key::DOWN).bPressed && dir != UP) { + dir = DOWN; + } + if (GetKey(olc::Key::LEFT).bPressed && dir != RIGHT) { + dir = LEFT; + } + if (GetKey(olc::Key::RIGHT).bPressed && dir != LEFT) { + dir = RIGHT; + } + + //Move Snake + switch (dir) { + case LEFT: + SnakeXPos -= speed; + break; + case RIGHT: + SnakeXPos += speed; + break; + case DOWN: + SnakeYPos += speed; + break; + case UP: + SnakeYPos -= speed; + break; + } + } + void FruitCoordGen() { + //Fruit1 + if (fruit1 == false) { + fruit1X = rand() & ScreenWidth(); + fruit1Y = rand() & ScreenHeight(); + fruit1 = true; + } + if (fruit1X <= 2 || fruit1X >= ScreenWidth() - 2) { + fruit1X = rand() & ScreenWidth(); + } + if (fruit1Y <= 2 || fruit1Y >= ScreenHeight() - 2) { + fruit1Y = rand() & ScreenHeight(); + } + //Fruit2 + //if (fruit2 == false) { + //fruit2X = rand() & ScreenWidth(); + //fruit2Y = rand() & ScreenHeight(); + //fruit2 = true; + //} + //if (fruit2X <= 2 || fruit2X >= ScreenWidth() - 2) { + //fruit1X = rand() & ScreenWidth(); + //} + //if (fruit2Y <= 2 || fruit2Y >= ScreenHeight() - 2) { + //fruit1Y = rand() & ScreenHeight(); + //} + //if (fruit1X == fruit2X) { + //fruit1X = rand() & ScreenWidth(); + //} + //if (fruit1Y == fruit2Y) { + //fruit1Y = rand() & ScreenWidth(); + //} + } + +private: + +public: + bool OnUserUpdate(float fElapsedTime) override { + + float speed = 20 * fElapsedTime; + Clear(olc::BLACK); + //Draw top border + DrawLine(2, 2, ScreenWidth() - 2, 2, olc::WHITE); + //Draw left border + DrawLine(2, 2, 2, ScreenHeight() - 2, olc::WHITE); + //Draw right border + DrawLine(ScreenWidth() - 2, 2, ScreenWidth() - 2, ScreenHeight() - 2, olc::WHITE); + //Draw bottom border + DrawLine(2, ScreenHeight() - 2, ScreenWidth() - 2, ScreenHeight() - 2, olc::WHITE); + + olc::vi2d SnakeHead(SnakeXPos, SnakeYPos); + olc::vi2d SnakeHeadSize(2, 2); + + olc::vi2d Fruit(fruit1X, fruit1Y); + olc::vu2d FruitSize(2, 2); + + //Snake and fruit collision + if (SnakeHead.x < Fruit.x + FruitSize.x && + SnakeHead.x + SnakeHeadSize.x > Fruit.x && + SnakeHead.y < Fruit.y + FruitSize.y && + SnakeHead.y + SnakeHeadSize.y > Fruit.y) { + fruit1 = false; + score++; + tailLength++; + } + + //Draw fruit + DrawRect(fruit1X, fruit1Y, 1, 1, olc::RED); + + //Fruit coord gen + FruitCoordGen(); + + //Border collision + BorderCollisionCheck(); + + tailUpdateTimer -= fElapsedTime; //Decrement the tail timer by the game elapsed time. + if ( tailUpdateTimer <= 0 ) { + //In order to create a tail following trail, start from the back-most tail and work your way up to the front, setting the previous tail's position to the current tail index's position. + for (int i = tailLength - 1; i > 0; i--) { + tailX[i]=tailX[i-1]; + tailY[i]=tailY[i-1]; + } + //Now set the front-most tail to the current snake head's position. + tailX[0]=SnakeXPos; + tailY[0]=SnakeYPos; + tailUpdateTimer=0.05; //Every 0.05 seconds we will re-update the tail positions instead of doing it by frame-based timing. + } + + //Draw Snake tail + if (tailLength >= 1) { + for (int i = 0; i < tailLength; i++) { + DrawRect(tailX[i], tailY[i], 1, 1, olc::GREEN); + } + } + + //Snake position gets adjusted here. + userInput(speed); + + //Draw the Snake at its new position. + DrawRect(SnakeXPos, SnakeYPos, 1, 1, olc::DARK_GREEN); + + return true; + } + + bool OnUserCreate() override { + srand(time(NULL)); + dir = STOP; + //Snake X coord gen + SnakeXPos = rand() & ScreenWidth(); + if (SnakeXPos <= 3 || SnakeXPos >= ScreenWidth() - 3) { + SnakeXPos = rand() & ScreenWidth(); + } + if (SnakeXPos <= 3 || SnakeXPos >= ScreenHeight() - 3) { + SnakeXPos = rand() & ScreenHeight(); + } + //Snake Y coord gen + SnakeYPos = rand() & ScreenWidth(); + if (SnakeYPos <= 3 || SnakeYPos >= ScreenWidth() - 3) { + SnakeYPos = rand() & ScreenWidth(); + } + if (SnakeYPos <= 3 || SnakeYPos >= ScreenHeight() - 3) { + SnakeYPos = rand() & ScreenHeight(); + } + return true; + } +}; + +int main() { + Snake demo; + if (demo.Construct(100, 100, 10, 10)) + demo.Start(); + return 0; +} \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/pixelGameEngine.cpp b/ChallengeLeaguePointSolver/pixelGameEngine.cpp new file mode 100644 index 0000000..c8488f8 --- /dev/null +++ b/ChallengeLeaguePointSolver/pixelGameEngine.cpp @@ -0,0 +1,2 @@ +#define OLC_PGE_APPLICATION +#include "pixelGameEngine.h" \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/pixelGameEngine.h b/ChallengeLeaguePointSolver/pixelGameEngine.h new file mode 100644 index 0000000..87f8813 --- /dev/null +++ b/ChallengeLeaguePointSolver/pixelGameEngine.h @@ -0,0 +1,6711 @@ +#pragma region license_and_help +/* + olcPixelGameEngine.h + + +-------------------------------------------------------------+ + | OneLoneCoder Pixel Game Engine v2.23 | + | "What do you need? Pixels... Lots of Pixels..." - javidx9 | + +-------------------------------------------------------------+ + + What is this? + ~~~~~~~~~~~~~ + olc::PixelGameEngine is a single file, cross platform graphics and userinput + framework used for games, visualisations, algorithm exploration and learning. + It was developed by YouTuber "javidx9" as an assistive tool for many of his + videos. The goal of this project is to provide high speed graphics with + minimal project setup complexity, to encourage new programmers, younger people, + and anyone else that wants to make fun things. + + However, olc::PixelGameEngine is not a toy! It is a powerful and fast utility + capable of delivering high resolution, high speed, high quality applications + which behave the same way regardless of the operating system or platform. + + This file provides the core utility set of the olc::PixelGameEngine, including + window creation, keyboard/mouse input, main game thread, timing, pixel drawing + routines, image/sprite loading and drawing routines, and a bunch of utility + types to make rapid development of games/visualisations possible. + + + License (OLC-3) + ~~~~~~~~~~~~~~~ + + Copyright 2018 - 2022 OneLoneCoder.com + + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + + 1. Redistributions or derivations of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions or derivative works in binary form must reproduce the above + copyright notice. This list of conditions and the following disclaimer must be + reproduced in the documentation and/or other materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its contributors may + be used to endorse or promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + Links + ~~~~~ + YouTube: https://www.youtube.com/javidx9 + https://www.youtube.com/javidx9extra + Discord: https://discord.gg/WhwHUMV + Twitter: https://www.twitter.com/javidx9 + Twitch: https://www.twitch.tv/javidx9 + GitHub: https://www.github.com/onelonecoder + Homepage: https://www.onelonecoder.com + Patreon: https://www.patreon.com/javidx9 + Community: https://community.onelonecoder.com + + + + Compiling in Linux + ~~~~~~~~~~~~~~~~~~ + You will need a modern C++ compiler, so update yours! + To compile use the command: + + g++ -o YourProgName YourSource.cpp -lX11 -lGL -lpthread -lpng -lstdc++fs -std=c++17 + + On some Linux configurations, the frame rate is locked to the refresh + rate of the monitor. This engine tries to unlock it but may not be + able to, in which case try launching your program like this: + + vblank_mode=0 ./YourProgName + + + + Compiling in Code::Blocks on Windows + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Well I wont judge you, but make sure your Code::Blocks installation + is really up to date - you may even consider updating your C++ toolchain + to use MinGW32-W64. + + Guide for installing recent GCC for Windows: + https://www.msys2.org/ + Guide for configuring code::blocks: + https://solarianprogrammer.com/2019/11/05/install-gcc-windows/ + https://solarianprogrammer.com/2019/11/16/install-codeblocks-gcc-windows-build-c-cpp-fortran-programs/ + + Add these libraries to "Linker Options": + user32 gdi32 opengl32 gdiplus Shlwapi dwmapi stdc++fs + + Set these compiler options: -std=c++17 + + + + Compiling on Mac - EXPERIMENTAL! PROBABLY HAS BUGS + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Yes yes, people use Macs for C++ programming! Who knew? Anyway, enough + arguing, thanks to Mumflr the PGE is now supported on Mac. Now I know nothing + about Mac, so if you need support, I suggest checking out the instructions + here: https://github.com/MumflrFumperdink/olcPGEMac + + clang++ -arch x86_64 -std=c++17 -mmacosx-version-min=10.15 -Wall -framework OpenGL + -framework GLUT -framework Carbon -lpng YourSource.cpp -o YourProgName + + + + Compiling with Emscripten (New & Experimental) + ~~~~~~~~~~~~~~~~~~~~~~~~~ + Emscripten compiler will turn your awesome C++ PixelGameEngine project into WASM! + This means you can run your application in teh browser, great for distributing + and submission in to jams and things! It's a bit new at the moment. + + em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 ./YourSource.cpp -o pge.html + + + + Using stb_image.h + ~~~~~~~~~~~~~~~~~ + The PGE will load png images by default (with help from libpng on non-windows systems). + However, the excellent "stb_image.h" can be used instead, supporting a variety of + image formats, and has no library dependence - something we like at OLC studios ;) + To use stb_image.h, make sure it's in your code base, and simply: + + #define OLC_IMAGE_STB + + Before including the olcPixelGameEngine.h header file. stb_image.h works on many systems + and can be downloaded here: https://github.com/nothings/stb/blob/master/stb_image.h + + + + Multiple cpp file projects? + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + As a single header solution, the OLC_PGE_APPLICATION definition is used to + insert the engine implementation at a project location of your choosing. + The simplest way to setup multifile projects is to create a file called + "olcPixelGameEngine.cpp" which includes the following: + + #define OLC_PGE_APPLICATION + #include "olcPixelGameEngine.h" + + That's all it should include. You can also include PGEX includes and + defines in here too. With this in place, you dont need to + #define OLC_PGE_APPLICATION anywhere, and can simply include this + header file as an when you need to. + + + + Ports + ~~~~~ + olc::PixelGameEngine has been ported and tested with varying degrees of + success to: WinXP, Win7, Win8, Win10, Various Linux, Raspberry Pi, + Chromebook, Playstation Portable (PSP) and Nintendo Switch. If you are + interested in the details of these ports, come and visit the Discord! + + + + Thanks + ~~~~~~ + I'd like to extend thanks to Ian McKay, Bispoo, Eremiell, slavka, Kwizatz77, gurkanctn, Phantim, + IProgramInCPP, JackOJC, KrossX, Huhlig, Dragoneye, Appa, JustinRichardsMusic, SliceNDice, + dandistine, Ralakus, Gorbit99, raoul, joshinils, benedani, Moros1138, Alexio, SaladinAkara + & MagetzUb for advice, ideas and testing, and I'd like to extend my appreciation to the + 250K YouTube followers, 80+ Patreons, 4.8K Twitch followers and 10K Discord server members + who give me the motivation to keep going with all this :D + + Significant Contributors: @Moros1138, @SaladinAkara, @MaGetzUb, @slavka, + @Dragoneye, @Gorbit99, @dandistine & @Mumflr + + Special thanks to those who bring gifts! + GnarGnarHead.......Domina + Gorbit99...........Bastion, Ori & The Blind Forest, Terraria, Spelunky 2, Skully + Marti Morta........Gris + Danicron...........Terraria + SaladinAkara.......Aseprite, Inside, Quern: Undying Thoughts, Outer Wilds + AlterEgo...........Final Fantasy XII - The Zodiac Age + SlicEnDicE.........Noita, Inside + TGD................Voucher Gift + Dragoneye..........Lucas Arts Adventure Game Pack + Anonymous Pirate...Return To Monkey Island + + Special thanks to my Patreons too - I wont name you on here, but I've + certainly enjoyed my tea and flapjacks :D + + + + Author + ~~~~~~ + David Barr, aka javidx9, (c) OneLoneCoder 2018, 2019, 2020, 2021, 2022 +*/ +#pragma endregion + +#pragma region version_history +/* + 2.01: Made renderer and platform static for multifile projects + 2.02: Added Decal destructor, optimised Pixel constructor + 2.03: Added FreeBSD flags, Added DrawStringDecal() + 2.04: Windows Full-Screen bug fixed + 2.05: +DrawPartialWarpedDecal() - draws a warped decal from a subset image + +DrawPartialRotatedDecal() - draws a rotated decal from a subset image + 2.06: +GetTextSize() - returns area occupied by multiline string + +GetWindowSize() - returns actual window size + +GetElapsedTime() - returns last calculated fElapsedTime + +GetWindowMouse() - returns actual mouse location in window + +DrawExplicitDecal() - bow-chikka-bow-bow + +DrawPartialDecal(pos, size) - draws a partial decal to specified area + +FillRectDecal() - draws a flat shaded rectangle as a decal + +GradientFillRectDecal() - draws a rectangle, with unique colour corners + +Modified DrawCircle() & FillCircle() - Thanks IanM-Matrix1 (#PR121) + +Gone someway to appeasing pedants + 2.07: +GetPixelSize() - returns user specified pixel size + +GetScreenPixelSize() - returns actual size in monitor pixels + +Pixel Cohesion Mode (flag in Construct()) - disallows arbitrary window scaling + +Working VSYNC in Windows windowed application - now much smoother + +Added string conversion for olc::vectors + +Added comparator operators for olc::vectors + +Added DestroyWindow() on windows platforms for serial PGE launches + +Added GetMousePos() to stop TarriestPython whinging + 2.08: Fix SetScreenSize() aspect ratio pre-calculation + Fix DrawExplicitDecal() - stupid oversight with multiple decals + Disabled olc::Sprite copy constructor + +olc::Sprite Duplicate() - produces a new clone of the sprite + +olc::Sprite Duplicate(pos, size) - produces a new sprite from the region defined + +Unary operators for vectors + +More pedant mollification - Thanks TheLandfill + +ImageLoader modules - user selectable image handling core, gdi+, libpng, stb_image + +Mac Support via GLUT - thanks Mumflr! + 2.09: Fix olc::Renderable Image load error - Thanks MaGetzUb & Zij-IT for finding and moaning about it + Fix file rejection in image loaders when using resource packs + Tidied Compiler defines per platform - Thanks slavka + +Pedant fixes, const correctness in parts + +DecalModes - Normal, Additive, Multiplicative blend modes + +Pixel Operators & Lerping + +Filtered Decals - If you hate pixels, then erase this file + +DrawStringProp(), GetTextSizeProp(), DrawStringPropDecal() - Draws non-monospaced font + 2.10: Fix PixelLerp() - oops my bad, lerped the wrong way :P + Fix "Shader" support for strings - thanks Megarev for crying about it + Fix GetTextSizeProp() - Height was just plain wrong... + +vec2d operator overloads (element wise *=, /=) + +vec2d comparison operators... :| yup... hmmmm... + +vec2d ceil(), floor(), min(), max() functions - surprising how often I do it manually + +DrawExplicitDecal(... uint32_t elements) - complete control over convex polygons and lines + +DrawPolygonDecal() - to keep Bispoo happy, required significant rewrite of EVERYTHING, but hey ho + +Complete rewrite of decal renderer + +OpenGL 3.3 Renderer (also supports Raspberry Pi) + +PGEX Break-In Hooks - with a push from Dandistine + +Wireframe Decal Mode - For debug overlays + 2.11: Made PGEX hooks optional - (provide true to super constructor) + 2.12: Fix for MinGW compiler non-compliance :( - why is its sdk structure different?? why??? + 2.13: +GetFontSprite() - allows access to font data + 2.14: Fix WIN32 Definition reshuffle + Fix DrawPartialDecal() - messed up dimension during renderer experiment, didnt remove junk code, thanks Alexio + Fix? Strange error regarding GDI+ Image Loader not knowing about COM, SDK change? + 2.15: Big Reformat + +WASM Platform (via Emscripten) - Big Thanks to OLC Community - See Platform for details + +Sample Mode for Decals + +Made olc_ConfigureSystem() accessible + +Added OLC_----_CUSTOM_EX for externalised platforms, renderers and image loaders + =Refactored olc::Sprite pixel data store + -Deprecating LoadFromPGESprFile() + -Deprecating SaveToPGESprFile() + Fix Pixel -= operator (thanks Au Lit) + 2.16: FIX Emscripten JS formatting in VS IDE (thanks Moros) + +"Headless" Mode + +DrawLineDecal() + +Mouse Button Constants + +Move Constructor for olc::Renderable + +Polar/Cartesian conversion for v2d_generic + +DrawRotatedStringDecal()/DrawRotatedStringPropDecal() (thanks Oso-Grande/Sopadeoso (PR #209)) + =Using olc::Renderable for layer surface + +Major Mac and GLUT Update (thanks Mumflr) + 2.17: +Clipping for DrawLine() functions + +Reintroduced sub-pixel decals + +Modified DrawPartialDecal() to quantise and correctly sample from tile atlasses + +olc::Sprite::GetPixel() - Clamp Mode + 2.18: +Option to not "dirty" layers with SetDrawTarget() - Thanks TerasKasi! + =Detection for Mac M1, fix for scroll wheel interrogation - Thanks ruarq! + 2.19: Textual Input(of)course Edition! + =Built in font is now olc::Renderable + +EnablePixelTransfer() - Gate if layer content transfers occur (speedup in decal only apps) + +TextEntryEnable() - Enables/Disables text entry mode + +TextEntryGetString() - Gets the current accumulated string in text entry mode + +TextEntryGetCursor() - Gets the current cursor position in text entry mode + +IsTextEntryEnabled() - Returns true if text entry mode is activated + +OnTextEntryComplete() - Override is called when user presses "ENTER" in text entry mode + +Potential for regional keyboard mappings - needs volunteers to do this + +ConsoleShow() - Opens built in command console + +ConsoleClear() - Clears built in command console output + +ConsoleOut() - Stream strings to command console output + +ConsoleCaptureStdOut() - Capture std::cout by redirecting to built-in console + +OnConsoleCommand() - Override is called when command is entered into built in console + 2.20: +DrawRectDecal() - Keeps OneSketchyGuy quiet + +GetScreenSize() + +olc::Sprite::Size() - returns size of sprite in vector format + 2.21: Emscripten Overhaul - Thanks Moros! + +DrawPolygonDecal() tint overload, can now tint a polygon accounting for vertex colours + +Multiplicative Pixel overload + +v2d_generic clamp() + +v2d_generic lerp() + +GetDroppedFiles() - returns files dropped onto engine window for that frame (MSW only) + +GetDroppedFilesPoint() - returns location of dropped files (MSW only) + +Exposed OpenGL33 Loader interface so the typedefs can be shared with PGEX & user + +Fix OGL33 DecalStructure types - wow, how did that one get missed?? lol + +FillTexturedTriangle() - Software rasterizes a textured, coloured, triangle + +FillTexturedPolygon() - Hijacks DecalStructure for configuration + +olc::vf2d arguments for Sprite::Sample() functions + + SIG Updates: + The following additions are included in Sig's version of the PGE header (this is a sig version) + +GetAnyKey() - Returns when a key is activated + +GetAnyKeyPress() - Returns when a key is pressed down (and if a keyboard key, which key it was) + + !! Apple Platforms will not see these updates immediately - Sorry, I dont have a mac to test... !! + !! Volunteers willing to help appreciated, though PRs are manually integrated with credit !! +*/ +#pragma endregion + +#pragma region hello_world_example +// O------------------------------------------------------------------------------O +// | Example "Hello World" Program (main.cpp) | +// O------------------------------------------------------------------------------O +/* + +#define OLC_PGE_APPLICATION +#include "olcPixelGameEngine.h" + +// Override base class with your custom functionality +class Example : public olc::PixelGameEngine +{ +public: + Example() + { + // Name your application + sAppName = "Example"; + } + +public: + bool OnUserCreate() override + { + // Called once at the start, so create things here + return true; + } + + bool OnUserUpdate(float fElapsedTime) override + { + // Called once per frame, draws random coloured pixels + for (int x = 0; x < ScreenWidth(); x++) + for (int y = 0; y < ScreenHeight(); y++) + Draw(x, y, olc::Pixel(rand() % 256, rand() % 256, rand() % 256)); + return true; + } +}; + +int main() +{ + Example demo; + if (demo.Construct(256, 240, 4, 4)) + demo.Start(); + return 0; +} + +*/ +#pragma endregion + +#ifndef OLC_PGE_DEF +#define OLC_PGE_DEF + +#pragma region std_includes +// O------------------------------------------------------------------------------O +// | STANDARD INCLUDES | +// O------------------------------------------------------------------------------O +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#pragma endregion + +#define PGE_VER 223 + +// O------------------------------------------------------------------------------O +// | COMPILER CONFIGURATION ODDITIES | +// O------------------------------------------------------------------------------O +#pragma region compiler_config +#define USE_EXPERIMENTAL_FS +#if defined(_WIN32) + #if _MSC_VER >= 1920 && _MSVC_LANG >= 201703L + #undef USE_EXPERIMENTAL_FS + #endif +#endif +#if defined(__linux__) || defined(__MINGW32__) || defined(__EMSCRIPTEN__) || defined(__FreeBSD__) || defined(__APPLE__) + #if __cplusplus >= 201703L + #undef USE_EXPERIMENTAL_FS + #endif +#endif + +#if !defined(OLC_KEYBOARD_UK) + #define OLC_KEYBOARD_UK +#endif + + +#if defined(USE_EXPERIMENTAL_FS) || defined(FORCE_EXPERIMENTAL_FS) + // C++14 + #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING + #include + namespace _gfs = std::experimental::filesystem::v1; +#else + // C++17 + #include + namespace _gfs = std::filesystem; +#endif + +#if defined(UNICODE) || defined(_UNICODE) + #define olcT(s) L##s +#else + #define olcT(s) s +#endif + +#define UNUSED(x) (void)(x) + +// O------------------------------------------------------------------------------O +// | PLATFORM SELECTION CODE, Thanks slavka! | +// O------------------------------------------------------------------------------O + +#if defined(OLC_PGE_HEADLESS) + #define OLC_PLATFORM_HEADLESS + #define OLC_GFX_HEADLESS + #if !defined(OLC_IMAGE_STB) && !defined(OLC_IMAGE_GDI) && !defined(OLC_IMAGE_LIBPNG) + #define OLC_IMAGE_HEADLESS + #endif +#endif + +// Platform +#if !defined(OLC_PLATFORM_WINAPI) && !defined(OLC_PLATFORM_X11) && !defined(OLC_PLATFORM_GLUT) && !defined(OLC_PLATFORM_EMSCRIPTEN) && !defined(OLC_PLATFORM_HEADLESS) + #if !defined(OLC_PLATFORM_CUSTOM_EX) + #if defined(_WIN32) + #define OLC_PLATFORM_WINAPI + #endif + #if defined(__linux__) || defined(__FreeBSD__) + #define OLC_PLATFORM_X11 + #endif + #if defined(__APPLE__) + #define GL_SILENCE_DEPRECATION + #define OLC_PLATFORM_GLUT + #endif + #if defined(__EMSCRIPTEN__) + #define OLC_PLATFORM_EMSCRIPTEN + #endif + #endif +#endif + +// Start Situation +#if defined(OLC_PLATFORM_GLUT) || defined(OLC_PLATFORM_EMSCRIPTEN) + #define PGE_USE_CUSTOM_START +#endif + + + +// Renderer +#if !defined(OLC_GFX_OPENGL10) && !defined(OLC_GFX_OPENGL33) && !defined(OLC_GFX_DIRECTX10) && !defined(OLC_GFX_HEADLESS) + #if !defined(OLC_GFX_CUSTOM_EX) + #if defined(OLC_PLATFORM_EMSCRIPTEN) + #define OLC_GFX_OPENGL33 + #else + #define OLC_GFX_OPENGL10 + #endif + #endif +#endif + +// Image loader +#if !defined(OLC_IMAGE_STB) && !defined(OLC_IMAGE_GDI) && !defined(OLC_IMAGE_LIBPNG) && !defined(OLC_IMAGE_HEADLESS) + #if !defined(OLC_IMAGE_CUSTOM_EX) + #if defined(_WIN32) + #define OLC_IMAGE_GDI + #endif + #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__) + #define OLC_IMAGE_LIBPNG + #endif + #endif +#endif + + +// O------------------------------------------------------------------------------O +// | PLATFORM-SPECIFIC DEPENDENCIES | +// O------------------------------------------------------------------------------O +#if !defined(OLC_PGE_HEADLESS) +#if defined(OLC_PLATFORM_WINAPI) + #define _WINSOCKAPI_ // Thanks Cornchipss + #if !defined(VC_EXTRALEAN) + #define VC_EXTRALEAN + #endif + #if !defined(NOMINMAX) + #define NOMINMAX + #endif + + // In Code::Blocks + #if !defined(_WIN32_WINNT) + #ifdef HAVE_MSMF + #define _WIN32_WINNT 0x0600 // Windows Vista + #else + #define _WIN32_WINNT 0x0500 // Windows 2000 + #endif + #endif + + #include + #undef _WINSOCKAPI_ +#endif + +#if defined(OLC_PLATFORM_X11) + namespace X11 + { + #include + #include + } +#endif + +#if defined(OLC_PLATFORM_GLUT) + #if defined(__linux__) + #include + #include + #endif + #if defined(__APPLE__) + #include + #include + #include + #endif +#endif +#endif + +#if defined(OLC_PGE_HEADLESS) +#if defined max +#undef max +#endif +#if defined min +#undef min +#endif +#endif +#pragma endregion + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine INTERFACE DECLARATION | +// O------------------------------------------------------------------------------O +#pragma region pge_declaration +namespace olc +{ + class PixelGameEngine; + class Sprite; + + // Pixel Game Engine Advanced Configuration + constexpr uint8_t nMouseButtons = 5; + constexpr uint8_t nDefaultAlpha = 0xFF; + constexpr uint32_t nDefaultPixel = (nDefaultAlpha << 24); + constexpr uint8_t nTabSizeInSpaces = 4; + constexpr size_t OLC_MAX_VERTS = 128; + enum rcode { FAIL = 0, OK = 1, NO_FILE = -1 }; + + // O------------------------------------------------------------------------------O + // | olc::Pixel - Represents a 32-Bit RGBA colour | + // O------------------------------------------------------------------------------O + struct Pixel + { + union + { + uint32_t n = nDefaultPixel; + struct { uint8_t r; uint8_t g; uint8_t b; uint8_t a; }; + }; + + enum Mode { NORMAL, MASK, ALPHA, CUSTOM }; + + Pixel(); + Pixel(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha = nDefaultAlpha); + Pixel(uint32_t p); + Pixel& operator = (const Pixel& v) = default; + bool operator ==(const Pixel& p) const; + bool operator !=(const Pixel& p) const; + Pixel operator * (const float i) const; + Pixel operator / (const float i) const; + Pixel& operator *=(const float i); + Pixel& operator /=(const float i); + Pixel operator + (const Pixel& p) const; + Pixel operator - (const Pixel& p) const; + Pixel& operator +=(const Pixel& p); + Pixel& operator -=(const Pixel& p); + Pixel operator * (const Pixel& p) const; + Pixel& operator *=(const Pixel& p); + Pixel inv() const; + }; + + Pixel PixelF(float red, float green, float blue, float alpha = 1.0f); + Pixel PixelLerp(const olc::Pixel& p1, const olc::Pixel& p2, float t); + + + // O------------------------------------------------------------------------------O + // | USEFUL CONSTANTS | + // O------------------------------------------------------------------------------O + static const Pixel + GREY(192, 192, 192), DARK_GREY(128, 128, 128), VERY_DARK_GREY(64, 64, 64), + RED(255, 0, 0), DARK_RED(128, 0, 0), VERY_DARK_RED(64, 0, 0), + YELLOW(255, 255, 0), DARK_YELLOW(128, 128, 0), VERY_DARK_YELLOW(64, 64, 0), + GREEN(0, 255, 0), DARK_GREEN(0, 128, 0), VERY_DARK_GREEN(0, 64, 0), + CYAN(0, 255, 255), DARK_CYAN(0, 128, 128), VERY_DARK_CYAN(0, 64, 64), + BLUE(0, 0, 255), DARK_BLUE(0, 0, 128), VERY_DARK_BLUE(0, 0, 64), + MAGENTA(255, 0, 255), DARK_MAGENTA(128, 0, 128), VERY_DARK_MAGENTA(64, 0, 64), + WHITE(255, 255, 255), BLACK(0, 0, 0), BLANK(0, 0, 0, 0); + + // Thanks to scripticuk and others for updating the key maps + // NOTE: The GLUT platform will need updating, open to contributions ;) + enum Key + { + NONE, + A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + K0, K1, K2, K3, K4, K5, K6, K7, K8, K9, + F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, + UP, DOWN, LEFT, RIGHT, + SPACE, TAB, SHIFT, CTRL, INS, DEL, HOME, END, PGUP, PGDN, + BACK, ESCAPE, RETURN, ENTER, PAUSE, SCROLL, + NP0, NP1, NP2, NP3, NP4, NP5, NP6, NP7, NP8, NP9, + NP_MUL, NP_DIV, NP_ADD, NP_SUB, NP_DECIMAL, PERIOD, + EQUALS, COMMA, MINUS, + OEM_1, OEM_2, OEM_3, OEM_4, OEM_5, OEM_6, OEM_7, OEM_8, + CAPS_LOCK, ENUM_END + }; + + namespace Mouse + { + static constexpr int32_t LEFT = 0; + static constexpr int32_t RIGHT = 1; + static constexpr int32_t MIDDLE = 2; + }; + + // O------------------------------------------------------------------------------O + // | olc::HWButton - Represents the state of a hardware button (mouse/key/joy) | + // O------------------------------------------------------------------------------O + struct HWButton + { + bool bPressed = false; // Set once during the frame the event occurs + bool bReleased = false; // Set once during the frame the event occurs + bool bHeld = false; // Set true for all frames between pressed and released events + }; + + + + + // O------------------------------------------------------------------------------O + // | olc::vX2d - A generic 2D vector type | + // O------------------------------------------------------------------------------O +#if !defined(OLC_IGNORE_VEC2D) + template + struct v2d_generic + { + T x = 0; + T y = 0; + v2d_generic() : x(0), y(0) {} + v2d_generic(T _x, T _y) : x(_x), y(_y) {} + v2d_generic(const v2d_generic& v) : x(v.x), y(v.y) {} + v2d_generic& operator=(const v2d_generic& v) = default; + T mag() const { return T(std::sqrt(x * x + y * y)); } + T mag2() const { return x * x + y * y; } + v2d_generic norm() const { T r = 1 / mag(); return v2d_generic(x * r, y * r); } + v2d_generic perp() const { return v2d_generic(-y, x); } + v2d_generic floor() const { return v2d_generic(std::floor(x), std::floor(y)); } + v2d_generic ceil() const { return v2d_generic(std::ceil(x), std::ceil(y)); } + v2d_generic max(const v2d_generic& v) const { return v2d_generic(std::max(x, v.x), std::max(y, v.y)); } + v2d_generic min(const v2d_generic& v) const { return v2d_generic(std::min(x, v.x), std::min(y, v.y)); } + v2d_generic cart() { return { std::cos(y) * x, std::sin(y) * x }; } + v2d_generic polar() { return { mag(), std::atan2(y, x) }; } + v2d_generic clamp(const v2d_generic& v1, const v2d_generic& v2) const { return this->max(v1).min(v2); } + v2d_generic lerp(const v2d_generic& v1, const double t) { return this->operator*(T(1.0 - t)) + (v1 * T(t)); } + T dot(const v2d_generic& rhs) const { return this->x * rhs.x + this->y * rhs.y; } + T cross(const v2d_generic& rhs) const { return this->x * rhs.y - this->y * rhs.x; } + v2d_generic operator + (const v2d_generic& rhs) const { return v2d_generic(this->x + rhs.x, this->y + rhs.y); } + v2d_generic operator - (const v2d_generic& rhs) const { return v2d_generic(this->x - rhs.x, this->y - rhs.y); } + v2d_generic operator * (const T& rhs) const { return v2d_generic(this->x * rhs, this->y * rhs); } + v2d_generic operator * (const v2d_generic& rhs) const { return v2d_generic(this->x * rhs.x, this->y * rhs.y); } + v2d_generic operator / (const T& rhs) const { return v2d_generic(this->x / rhs, this->y / rhs); } + v2d_generic operator / (const v2d_generic& rhs) const { return v2d_generic(this->x / rhs.x, this->y / rhs.y); } + v2d_generic& operator += (const v2d_generic& rhs) { this->x += rhs.x; this->y += rhs.y; return *this; } + v2d_generic& operator -= (const v2d_generic& rhs) { this->x -= rhs.x; this->y -= rhs.y; return *this; } + v2d_generic& operator *= (const T& rhs) { this->x *= rhs; this->y *= rhs; return *this; } + v2d_generic& operator /= (const T& rhs) { this->x /= rhs; this->y /= rhs; return *this; } + v2d_generic& operator *= (const v2d_generic& rhs) { this->x *= rhs.x; this->y *= rhs.y; return *this; } + v2d_generic& operator /= (const v2d_generic& rhs) { this->x /= rhs.x; this->y /= rhs.y; return *this; } + v2d_generic operator + () const { return { +x, +y }; } + v2d_generic operator - () const { return { -x, -y }; } + bool operator == (const v2d_generic& rhs) const { return (this->x == rhs.x && this->y == rhs.y); } + bool operator != (const v2d_generic& rhs) const { return (this->x != rhs.x || this->y != rhs.y); } + const std::string str() const { return std::string("(") + std::to_string(this->x) + "," + std::to_string(this->y) + ")"; } + friend std::ostream& operator << (std::ostream& os, const v2d_generic& rhs) { os << rhs.str(); return os; } + operator v2d_generic() const { return { static_cast(this->x), static_cast(this->y) }; } + operator v2d_generic() const { return { static_cast(this->x), static_cast(this->y) }; } + operator v2d_generic() const { return { static_cast(this->x), static_cast(this->y) }; } + }; + + // Note: joshinils has some good suggestions here, but they are complicated to implement at this moment, + // however they will appear in a future version of PGE + template inline v2d_generic operator * (const float& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs * (float)rhs.x), (T)(lhs * (float)rhs.y)); } + template inline v2d_generic operator * (const double& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs * (double)rhs.x), (T)(lhs * (double)rhs.y)); } + template inline v2d_generic operator * (const int& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs * (int)rhs.x), (T)(lhs * (int)rhs.y)); } + template inline v2d_generic operator / (const float& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs / (float)rhs.x), (T)(lhs / (float)rhs.y)); } + template inline v2d_generic operator / (const double& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs / (double)rhs.x), (T)(lhs / (double)rhs.y)); } + template inline v2d_generic operator / (const int& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs / (int)rhs.x), (T)(lhs / (int)rhs.y)); } + + // To stop dandistine crying... + template inline bool operator < (const v2d_generic& lhs, const v2d_generic& rhs) + { return lhs.y < rhs.y || (lhs.y == rhs.y && lhs.x < rhs.x); } + template inline bool operator > (const v2d_generic& lhs, const v2d_generic& rhs) + { return lhs.y > rhs.y || (lhs.y == rhs.y && lhs.x > rhs.x); } + + typedef v2d_generic vi2d; + typedef v2d_generic vu2d; + typedef v2d_generic vf2d; + typedef v2d_generic vd2d; +#endif + + + + + + + // O------------------------------------------------------------------------------O + // | olc::ResourcePack - A virtual scrambled filesystem to pack your assets into | + // O------------------------------------------------------------------------------O + struct ResourceBuffer : public std::streambuf + { + ResourceBuffer(std::ifstream& ifs, uint32_t offset, uint32_t size); + std::vector vMemory; + }; + + class ResourcePack : public std::streambuf + { + public: + ResourcePack(); + ~ResourcePack(); + bool AddFile(const std::string& sFile); + bool LoadPack(const std::string& sFile, const std::string& sKey); + bool SavePack(const std::string& sFile, const std::string& sKey); + ResourceBuffer GetFileBuffer(const std::string& sFile); + bool Loaded(); + private: + struct sResourceFile { uint32_t nSize; uint32_t nOffset; }; + std::map mapFiles; + std::ifstream baseFile; + std::vector scramble(const std::vector& data, const std::string& key); + std::string makeposix(const std::string& path); + }; + + + class ImageLoader + { + public: + ImageLoader() = default; + virtual ~ImageLoader() = default; + virtual olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) = 0; + virtual olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) = 0; + }; + + + // O------------------------------------------------------------------------------O + // | olc::Sprite - An image represented by a 2D array of olc::Pixel | + // O------------------------------------------------------------------------------O + class Sprite + { + public: + Sprite(); + Sprite(const std::string& sImageFile, olc::ResourcePack* pack = nullptr); + Sprite(int32_t w, int32_t h); + Sprite(const olc::Sprite&) = delete; + ~Sprite(); + + public: + olc::rcode LoadFromFile(const std::string& sImageFile, olc::ResourcePack* pack = nullptr); + + public: + int32_t width = 0; + int32_t height = 0; + enum Mode { NORMAL, PERIODIC, CLAMP }; + enum Flip { NONE = 0, HORIZ = 1, VERT = 2 }; + + public: + void SetSampleMode(olc::Sprite::Mode mode = olc::Sprite::Mode::NORMAL); + Pixel GetPixel(int32_t x, int32_t y) const; + bool SetPixel(int32_t x, int32_t y, Pixel p); + Pixel GetPixel(const olc::vi2d& a) const; + bool SetPixel(const olc::vi2d& a, Pixel p); + Pixel Sample(float x, float y) const; + Pixel Sample(const olc::vf2d& uv) const; + Pixel SampleBL(float u, float v) const; + Pixel SampleBL(const olc::vf2d& uv) const; + Pixel* GetData(); + olc::Sprite* Duplicate(); + olc::Sprite* Duplicate(const olc::vi2d& vPos, const olc::vi2d& vSize); + olc::vi2d Size() const; + std::vector pColData; + Mode modeSample = Mode::NORMAL; + + static std::unique_ptr loader; + }; + + // O------------------------------------------------------------------------------O + // | olc::Decal - A GPU resident storage of an olc::Sprite | + // O------------------------------------------------------------------------------O + class Decal + { + public: + Decal(olc::Sprite* spr, bool filter = false, bool clamp = true); + Decal(const uint32_t nExistingTextureResource, olc::Sprite* spr); + virtual ~Decal(); + void Update(); + void UpdateSprite(); + + public: // But dont touch + int32_t id = -1; + olc::Sprite* sprite = nullptr; + olc::vf2d vUVScale = { 1.0f, 1.0f }; + }; + + enum class DecalMode + { + NORMAL, + ADDITIVE, + MULTIPLICATIVE, + STENCIL, + ILLUMINATE, + WIREFRAME, + MODEL3D, + }; + + enum class DecalStructure + { + LINE, + FAN, + STRIP, + LIST + }; + + // O------------------------------------------------------------------------------O + // | olc::Renderable - Convenience class to keep a sprite and decal together | + // O------------------------------------------------------------------------------O + class Renderable + { + public: + Renderable() = default; + Renderable(Renderable&& r) : pSprite(std::move(r.pSprite)), pDecal(std::move(r.pDecal)) {} + Renderable(const Renderable&) = delete; + olc::rcode Load(const std::string& sFile, ResourcePack* pack = nullptr, bool filter = false, bool clamp = true); + void Create(uint32_t width, uint32_t height, bool filter = false, bool clamp = true); + olc::Decal* Decal() const; + olc::Sprite* Sprite() const; + + private: + std::unique_ptr pSprite = nullptr; + std::unique_ptr pDecal = nullptr; + }; + + + // O------------------------------------------------------------------------------O + // | Auxilliary components internal to engine | + // O------------------------------------------------------------------------------O + + struct DecalInstance + { + olc::Decal* decal = nullptr; + std::vector pos; + std::vector uv; + std::vector w; + std::vector tint; + olc::DecalMode mode = olc::DecalMode::NORMAL; + olc::DecalStructure structure = olc::DecalStructure::FAN; + uint32_t points = 0; + }; + + struct LayerDesc + { + olc::vf2d vOffset = { 0, 0 }; + olc::vf2d vScale = { 1, 1 }; + bool bShow = false; + bool bUpdate = false; + olc::Renderable pDrawTarget; + uint32_t nResID = 0; + std::vector vecDecalInstance; + olc::Pixel tint = olc::WHITE; + std::function funcHook = nullptr; + }; + + class Renderer + { + public: + virtual ~Renderer() = default; + virtual void PrepareDevice() = 0; + virtual olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) = 0; + virtual olc::rcode DestroyDevice() = 0; + virtual void DisplayFrame() = 0; + virtual void PrepareDrawing() = 0; + virtual void SetDecalMode(const olc::DecalMode& mode) = 0; + virtual void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) = 0; + virtual void DrawDecal(const olc::DecalInstance& decal) = 0; + virtual uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered = false, const bool clamp = true) = 0; + virtual void UpdateTexture(uint32_t id, olc::Sprite* spr) = 0; + virtual void ReadTexture(uint32_t id, olc::Sprite* spr) = 0; + virtual uint32_t DeleteTexture(const uint32_t id) = 0; + virtual void ApplyTexture(uint32_t id) = 0; + virtual void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) = 0; + virtual void ClearBuffer(olc::Pixel p, bool bDepth) = 0; + static olc::PixelGameEngine* ptrPGE; + }; + + class Platform + { + public: + virtual ~Platform() = default; + virtual olc::rcode ApplicationStartUp() = 0; + virtual olc::rcode ApplicationCleanUp() = 0; + virtual olc::rcode ThreadStartUp() = 0; + virtual olc::rcode ThreadCleanUp() = 0; + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) = 0; + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) = 0; + virtual olc::rcode SetWindowTitle(const std::string& s) = 0; + virtual olc::rcode StartSystemEventLoop() = 0; + virtual olc::rcode HandleSystemEvent() = 0; + static olc::PixelGameEngine* ptrPGE; + }; + + class PGEX; + + // The Static Twins (plus one) + static std::unique_ptr renderer; + static std::unique_ptr platform; + static std::map mapKeys; + + // O------------------------------------------------------------------------------O + // | olc::PixelGameEngine - The main BASE class for your application | + // O------------------------------------------------------------------------------O + class PixelGameEngine + { + public: + PixelGameEngine(); + virtual ~PixelGameEngine(); + public: + olc::rcode Construct(int32_t screen_w, int32_t screen_h, int32_t pixel_w, int32_t pixel_h, + bool full_screen = false, bool vsync = false, bool cohesion = false); + olc::rcode Start(); + + public: // User Override Interfaces + // Called once on application startup, use to load your resources + virtual bool OnUserCreate(); + // Called every frame, and provides you with a time per frame value + virtual bool OnUserUpdate(float fElapsedTime); + // Called once on application termination, so you can be one clean coder + virtual bool OnUserDestroy(); + virtual void GetAnyKey(); + virtual void GetAnyKeyPress(olc::Key pressedKey); + + // Called when a text entry is confirmed with "enter" key + virtual void OnTextEntryComplete(const std::string& sText); + // Called when a console command is executed + virtual bool OnConsoleCommand(const std::string& sCommand); + + + public: // Hardware Interfaces + // Returns true if window is currently in focus + bool IsFocused() const; + // Get the state of a specific keyboard button + HWButton GetKey(Key k) const; + // Get the state of a specific mouse button + HWButton GetMouse(uint32_t b) const; + // Get Mouse X coordinate in "pixel" space + int32_t GetMouseX() const; + // Get Mouse Y coordinate in "pixel" space + int32_t GetMouseY() const; + // Get Mouse Wheel Delta + int32_t GetMouseWheel() const; + // Get the mouse in window space + const olc::vi2d& GetWindowMouse() const; + // Gets the mouse as a vector to keep Tarriest happy + const olc::vi2d& GetMousePos() const; + + static const std::map& GetKeyMap() { return mapKeys; } + + public: // Utility + // Returns the width of the screen in "pixels" + int32_t ScreenWidth() const; + // Returns the height of the screen in "pixels" + int32_t ScreenHeight() const; + // Returns the width of the currently selected drawing target in "pixels" + int32_t GetDrawTargetWidth() const; + // Returns the height of the currently selected drawing target in "pixels" + int32_t GetDrawTargetHeight() const; + // Returns the currently active draw target + olc::Sprite* GetDrawTarget() const; + // Resize the primary screen sprite + void SetScreenSize(int w, int h); + // Specify which Sprite should be the target of drawing functions, use nullptr + // to specify the primary screen + void SetDrawTarget(Sprite* target); + // Gets the current Frames Per Second + uint32_t GetFPS() const; + // Gets last update of elapsed time + float GetElapsedTime() const; + // Gets Actual Window size + const olc::vi2d& GetWindowSize() const; + // Gets pixel scale + const olc::vi2d& GetPixelSize() const; + // Gets actual pixel scale + const olc::vi2d& GetScreenPixelSize() const; + // Gets "screen" size + const olc::vi2d& GetScreenSize() const; + // Gets any files dropped this frame + const std::vector& GetDroppedFiles() const; + const olc::vi2d& GetDroppedFilesPoint() const; + + public: // CONFIGURATION ROUTINES + // Layer targeting functions + void SetDrawTarget(uint8_t layer, bool bDirty = true); + void EnableLayer(uint8_t layer, bool b); + void SetLayerOffset(uint8_t layer, const olc::vf2d& offset); + void SetLayerOffset(uint8_t layer, float x, float y); + void SetLayerScale(uint8_t layer, const olc::vf2d& scale); + void SetLayerScale(uint8_t layer, float x, float y); + void SetLayerTint(uint8_t layer, const olc::Pixel& tint); + void SetLayerCustomRenderFunction(uint8_t layer, std::function f); + + std::vector& GetLayers(); + uint32_t CreateLayer(); + + // Change the pixel mode for different optimisations + // olc::Pixel::NORMAL = No transparency + // olc::Pixel::MASK = Transparent if alpha is < 255 + // olc::Pixel::ALPHA = Full transparency + void SetPixelMode(Pixel::Mode m); + Pixel::Mode GetPixelMode(); + // Use a custom blend function + void SetPixelMode(std::function pixelMode); + // Change the blend factor from between 0.0f to 1.0f; + void SetPixelBlend(float fBlend); + + + + public: // DRAWING ROUTINES + // Draws a single Pixel + virtual bool Draw(int32_t x, int32_t y, Pixel p = olc::WHITE); + bool Draw(const olc::vi2d& pos, Pixel p = olc::WHITE); + // Draws a line from (x1,y1) to (x2,y2) + void DrawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, Pixel p = olc::WHITE, uint32_t pattern = 0xFFFFFFFF); + void DrawLine(const olc::vi2d& pos1, const olc::vi2d& pos2, Pixel p = olc::WHITE, uint32_t pattern = 0xFFFFFFFF); + // Draws a circle located at (x,y) with radius + void DrawCircle(int32_t x, int32_t y, int32_t radius, Pixel p = olc::WHITE, uint8_t mask = 0xFF); + void DrawCircle(const olc::vi2d& pos, int32_t radius, Pixel p = olc::WHITE, uint8_t mask = 0xFF); + // Fills a circle located at (x,y) with radius + void FillCircle(int32_t x, int32_t y, int32_t radius, Pixel p = olc::WHITE); + void FillCircle(const olc::vi2d& pos, int32_t radius, Pixel p = olc::WHITE); + // Draws a rectangle at (x,y) to (x+w,y+h) + void DrawRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p = olc::WHITE); + void DrawRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p = olc::WHITE); + // Fills a rectangle at (x,y) to (x+w,y+h) + void FillRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p = olc::WHITE); + void FillRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p = olc::WHITE); + // Draws a triangle between points (x1,y1), (x2,y2) and (x3,y3) + void DrawTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p = olc::WHITE); + void DrawTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p = olc::WHITE); + // Flat fills a triangle between points (x1,y1), (x2,y2) and (x3,y3) + void FillTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p = olc::WHITE); + void FillTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p = olc::WHITE); + // Fill a textured and coloured triangle + void FillTexturedTriangle(const std::vector& vPoints, std::vector vTex, std::vector vColour, olc::Sprite* sprTex); + void FillTexturedPolygon(const std::vector& vPoints, const std::vector& vTex, const std::vector& vColour, olc::Sprite* sprTex, olc::DecalStructure structure = olc::DecalStructure::LIST); + // Draws an entire sprite at location (x,y) + void DrawSprite(int32_t x, int32_t y, Sprite* sprite, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + void DrawSprite(const olc::vi2d& pos, Sprite* sprite, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + // Draws an area of a sprite at location (x,y), where the + // selected area is (ox,oy) to (ox+w,oy+h) + void DrawPartialSprite(int32_t x, int32_t y, Sprite* sprite, int32_t ox, int32_t oy, int32_t w, int32_t h, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + void DrawPartialSprite(const olc::vi2d& pos, Sprite* sprite, const olc::vi2d& sourcepos, const olc::vi2d& size, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + // Draws a single line of text - traditional monospaced + void DrawString(int32_t x, int32_t y, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + void DrawString(const olc::vi2d& pos, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + olc::vi2d GetTextSize(const std::string& s); + // Draws a single line of text - non-monospaced + void DrawStringProp(int32_t x, int32_t y, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + void DrawStringProp(const olc::vi2d& pos, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + olc::vi2d GetTextSizeProp(const std::string& s); + + // Decal Quad functions + void SetDecalMode(const olc::DecalMode& mode); + void SetDecalStructure(const olc::DecalStructure& structure); + // Draws a whole decal, with optional scale and tinting + void DrawDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& scale = { 1.0f,1.0f }, const olc::Pixel& tint = olc::WHITE); + // Draws a region of a decal, with optional scale and tinting + void DrawPartialDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale = { 1.0f,1.0f }, const olc::Pixel& tint = olc::WHITE); + void DrawPartialDecal(const olc::vf2d& pos, const olc::vf2d& size, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + // Draws fully user controlled 4 vertices, pos(pixels), uv(pixels), colours + void DrawExplicitDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d* uv, const olc::Pixel* col, uint32_t elements = 4); + // Draws a decal with 4 arbitrary points, warping the texture to look "correct" + void DrawWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::Pixel& tint = olc::WHITE); + void DrawWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::Pixel& tint = olc::WHITE); + void DrawWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::Pixel& tint = olc::WHITE); + // As above, but you can specify a region of a decal source sprite + void DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + void DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + void DrawPartialWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + // Draws a decal rotated to specified angle, wit point of rotation offset + void DrawRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::vf2d& scale = { 1.0f,1.0f }, const olc::Pixel& tint = olc::WHITE); + void DrawPartialRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale = { 1.0f, 1.0f }, const olc::Pixel& tint = olc::WHITE); + // Draws a multiline string as a decal, with tiniting and scaling + void DrawStringDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + void DrawStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + // Draws a single shaded filled rectangle as a decal + void DrawRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col = olc::WHITE); + void FillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col = olc::WHITE); + // Draws a corner shaded rectangle as a decal + void GradientFillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel colTL, const olc::Pixel colBL, const olc::Pixel colBR, const olc::Pixel colTR); + // Draws an arbitrary convex textured polygon using GPU + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const olc::Pixel tint = olc::WHITE); + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const olc::Pixel tint = olc::WHITE); + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& tint); + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& colours, const olc::Pixel tint); + // Draws a line in Decal Space + void DrawLineDecal(const olc::vf2d& pos1, const olc::vf2d& pos2, Pixel p = olc::WHITE); + void DrawRotatedStringDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + void DrawRotatedStringPropDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + // Clears entire draw target to Pixel + void Clear(Pixel p); + // Clears the rendering back buffer + void ClearBuffer(Pixel p, bool bDepth = true); + // Returns the font image + olc::Sprite* GetFontSprite(); + + // Clip a line segment to visible area + bool ClipLineToScreen(olc::vi2d& in_p1, olc::vi2d& in_p2); + + // Dont allow PGE to mark layers as dirty, so pixel graphics don't update + void EnablePixelTransfer(const bool bEnable = true); + + // Command Console Routines + void ConsoleShow(const olc::Key &keyExit, bool bSuspendTime = true); + bool IsConsoleShowing() const; + void ConsoleClear(); + std::stringstream& ConsoleOut(); + void ConsoleCaptureStdOut(const bool bCapture); + + // Text Entry Routines + void TextEntryEnable(const bool bEnable, const std::string& sText = ""); + std::string TextEntryGetString() const; + int32_t TextEntryGetCursor() const; + bool IsTextEntryEnabled() const; + + + + private: + void UpdateTextEntry(); + void UpdateConsole(); + + public: + + // Experimental Lightweight 3D Routines ================ +#ifdef OLC_ENABLE_EXPERIMENTAL + // Set Manual View Matrix + void LW3D_View(const std::array& m); + // Set Manual World Matrix + void LW3D_World(const std::array& m); + // Set Manual Projection Matrix + void LW3D_Projection(const std::array& m); + + // Draws a vector of vertices, interprted as individual triangles + void LW3D_DrawTriangles(olc::Decal* decal, const std::vector>& pos, const std::vector& tex, const std::vector& col); + + void LW3D_ModelTranslate(const float x, const float y, const float z); + + // Camera convenience functions + void LW3D_SetCameraAtTarget(const float fEyeX, const float fEyeY, const float fEyeZ, + const float fTargetX, const float fTargetY, const float fTargetZ, + const float fUpX = 0.0f, const float fUpY = 1.0f, const float fUpZ = 0.0f); + void LW3D_SetCameraAlongDirection(const float fEyeX, const float fEyeY, const float fEyeZ, + const float fDirX, const float fDirY, const float fDirZ, + const float fUpX = 0.0f, const float fUpY = 1.0f, const float fUpZ = 0.0f); + + // 3D Rendering Flags + void LW3D_EnableDepthTest(const bool bEnableDepth); + void LW3D_EnableBackfaceCulling(const bool bEnableCull); +#endif + public: // Branding + std::string sAppName; + + private: // Inner mysterious workings + olc::Sprite* pDrawTarget = nullptr; + Pixel::Mode nPixelMode = Pixel::NORMAL; + float fBlendFactor = 1.0f; + olc::vi2d vScreenSize = { 256, 240 }; + olc::vf2d vInvScreenSize = { 1.0f / 256.0f, 1.0f / 240.0f }; + olc::vi2d vPixelSize = { 4, 4 }; + olc::vi2d vScreenPixelSize = { 4, 4 }; + olc::vi2d vMousePos = { 0, 0 }; + int32_t nMouseWheelDelta = 0; + olc::vi2d vMousePosCache = { 0, 0 }; + olc::vi2d vMouseWindowPos = { 0, 0 }; + int32_t nMouseWheelDeltaCache = 0; + olc::vi2d vWindowSize = { 0, 0 }; + olc::vi2d vViewPos = { 0, 0 }; + olc::vi2d vViewSize = { 0,0 }; + bool bFullScreen = false; + olc::vf2d vPixel = { 1.0f, 1.0f }; + bool bHasInputFocus = false; + bool bHasMouseFocus = false; + bool bEnableVSYNC = false; + float fFrameTimer = 1.0f; + float fLastElapsed = 0.0f; + int nFrameCount = 0; + bool bSuspendTextureTransfer = false; + Renderable fontRenderable; + std::vector vLayers; + uint8_t nTargetLayer = 0; + uint32_t nLastFPS = 0; + bool bPixelCohesion = false; + DecalMode nDecalMode = DecalMode::NORMAL; + DecalStructure nDecalStructure = DecalStructure::FAN; + std::function funcPixelMode; + std::chrono::time_point m_tp1, m_tp2; + std::vector vFontSpacing; + std::vector vDroppedFiles; + std::vector vDroppedFilesCache; + olc::vi2d vDroppedFilesPoint; + olc::vi2d vDroppedFilesPointCache; + + // Command Console Specific + bool bConsoleShow = false; + bool bConsoleSuspendTime = false; + olc::Key keyConsoleExit = olc::Key::F1; + std::stringstream ssConsoleOutput; + std::streambuf* sbufOldCout = nullptr; + olc::vi2d vConsoleSize; + olc::vi2d vConsoleCursor = { 0,0 }; + olc::vf2d vConsoleCharacterScale = { 1.0f, 2.0f }; + std::vector sConsoleLines; + std::list sCommandHistory; + std::list::iterator sCommandHistoryIt; + + // Text Entry Specific + bool bTextEntryEnable = false; + std::string sTextEntryString = ""; + int32_t nTextEntryCursor = 0; + std::vector> vKeyboardMap; + + + + // State of keyboard + bool pKeyNewState[256] = { 0 }; + bool pKeyOldState[256] = { 0 }; + HWButton pKeyboardState[256] = { 0 }; + + // State of mouse + bool pMouseNewState[nMouseButtons] = { 0 }; + bool pMouseOldState[nMouseButtons] = { 0 }; + HWButton pMouseState[nMouseButtons] = { 0 }; + + // The main engine thread + void EngineThread(); + + + // If anything sets this flag to false, the engine + // "should" shut down gracefully + static std::atomic bAtomActive; + + public: + // "Break In" Functions + void olc_UpdateMouse(int32_t x, int32_t y); + void olc_UpdateMouseWheel(int32_t delta); + void olc_UpdateWindowSize(int32_t x, int32_t y); + void olc_UpdateViewport(); + void olc_ConstructFontSheet(); + void olc_CoreUpdate(); + void olc_PrepareEngine(); + void olc_UpdateMouseState(int32_t button, bool state); + void olc_UpdateKeyState(int32_t key, bool state); + void olc_UpdateMouseFocus(bool state); + void olc_UpdateKeyFocus(bool state); + void olc_Terminate(); + void olc_DropFiles(int32_t x, int32_t y, const std::vector& vFiles); + void olc_Reanimate(); + bool olc_IsRunning(); + + // At the very end of this file, chooses which + // components to compile + virtual void olc_ConfigureSystem(); + + // NOTE: Items Here are to be deprecated, I have left them in for now + // in case you are using them, but they will be removed. + // olc::vf2d vSubPixelOffset = { 0.0f, 0.0f }; + + public: // PGEX Stuff + friend class PGEX; + void pgex_Register(olc::PGEX* pgex); + + private: + std::vector vExtensions; + }; + + + + // O------------------------------------------------------------------------------O + // | PGE EXTENSION BASE CLASS - Permits access to PGE functions from extension | + // O------------------------------------------------------------------------------O + class PGEX + { + friend class olc::PixelGameEngine; + public: + PGEX(bool bHook = false); + + protected: + virtual void OnBeforeUserCreate(); + virtual void OnAfterUserCreate(); + virtual bool OnBeforeUserUpdate(float &fElapsedTime); + virtual void OnAfterUserUpdate(float fElapsedTime); + + protected: + static PixelGameEngine* pge; + }; +} + +#pragma endregion + + +#pragma region opengl33_iface +// In order to facilitate more advanced graphics features, some PGEX +// will rely on shaders. Instead of having each PGEX responsible for +// managing this, for convenience, this interface exists. + +#if defined(OLC_GFX_OPENGL33) + + #if defined(OLC_PLATFORM_WINAPI) + #include + #define CALLSTYLE __stdcall + #endif + + #if defined(__linux__) || defined(__FreeBSD__) + #include + #endif + + #if defined(OLC_PLATFORM_X11) + namespace X11 { + #include + } + #define CALLSTYLE + #endif + + #if defined(__APPLE__) + #define GL_SILENCE_DEPRECATION + #include + #include + #include + #endif + + #if defined(OLC_PLATFORM_EMSCRIPTEN) + #include + #include + #define GL_GLEXT_PROTOTYPES + #include + #include + #define CALLSTYLE + #define GL_CLAMP GL_CLAMP_TO_EDGE + #endif + +namespace olc +{ + typedef char GLchar; + typedef ptrdiff_t GLsizeiptr; + + typedef GLuint CALLSTYLE locCreateShader_t(GLenum type); + typedef GLuint CALLSTYLE locCreateProgram_t(void); + typedef void CALLSTYLE locDeleteShader_t(GLuint shader); + typedef void CALLSTYLE locCompileShader_t(GLuint shader); + typedef void CALLSTYLE locLinkProgram_t(GLuint program); + typedef void CALLSTYLE locDeleteProgram_t(GLuint program); + typedef void CALLSTYLE locAttachShader_t(GLuint program, GLuint shader); + typedef void CALLSTYLE locBindBuffer_t(GLenum target, GLuint buffer); + typedef void CALLSTYLE locBufferData_t(GLenum target, GLsizeiptr size, const void* data, GLenum usage); + typedef void CALLSTYLE locGenBuffers_t(GLsizei n, GLuint* buffers); + typedef void CALLSTYLE locVertexAttribPointer_t(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); + typedef void CALLSTYLE locEnableVertexAttribArray_t(GLuint index); + typedef void CALLSTYLE locUseProgram_t(GLuint program); + typedef void CALLSTYLE locBindVertexArray_t(GLuint array); + typedef void CALLSTYLE locGenVertexArrays_t(GLsizei n, GLuint* arrays); + typedef void CALLSTYLE locGetShaderInfoLog_t(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); + typedef GLint CALLSTYLE locGetUniformLocation_t(GLuint program, const GLchar* name); + typedef void CALLSTYLE locUniform1f_t(GLint location, GLfloat v0); + typedef void CALLSTYLE locUniform1i_t(GLint location, GLint v0); + typedef void CALLSTYLE locUniform2fv_t(GLint location, GLsizei count, const GLfloat* value); + typedef void CALLSTYLE locActiveTexture_t(GLenum texture); + typedef void CALLSTYLE locGenFrameBuffers_t(GLsizei n, GLuint* ids); + typedef void CALLSTYLE locBindFrameBuffer_t(GLenum target, GLuint fb); + typedef GLenum CALLSTYLE locCheckFrameBufferStatus_t(GLenum target); + typedef void CALLSTYLE locDeleteFrameBuffers_t(GLsizei n, const GLuint* fbs); + typedef void CALLSTYLE locFrameBufferTexture2D_t(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + typedef void CALLSTYLE locDrawBuffers_t(GLsizei n, const GLenum* bufs); + typedef void CALLSTYLE locBlendFuncSeparate_t(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +#if defined(OLC_PLATFORM_WINAPI) + typedef void __stdcall locSwapInterval_t(GLsizei n); +#endif + +#if defined(OLC_PLATFORM_X11) + typedef int(locSwapInterval_t)(X11::Display* dpy, X11::GLXDrawable drawable, int interval); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); + typedef EGLBoolean(locSwapInterval_t)(EGLDisplay display, EGLint interval); +#else + typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar** string, const GLint* length); +#endif + +} // olc namespace +#endif // OpenGL33 Definitions +#pragma endregion + + +#endif // OLC_PGE_DEF + + +// O------------------------------------------------------------------------------O +// | START OF OLC_PGE_APPLICATION | +// O------------------------------------------------------------------------------O +#ifdef OLC_PGE_APPLICATION +#undef OLC_PGE_APPLICATION + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine INTERFACE IMPLEMENTATION (CORE) | +// | Note: The core implementation is platform independent | +// O------------------------------------------------------------------------------O +#pragma region pge_implementation +namespace olc +{ + // O------------------------------------------------------------------------------O + // | olc::Pixel IMPLEMENTATION | + // O------------------------------------------------------------------------------O + Pixel::Pixel() + { r = 0; g = 0; b = 0; a = nDefaultAlpha; } + + Pixel::Pixel(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) + { n = red | (green << 8) | (blue << 16) | (alpha << 24); } // Thanks jarekpelczar + + Pixel::Pixel(uint32_t p) + { n = p; } + + bool Pixel::operator==(const Pixel& p) const + { return n == p.n; } + + bool Pixel::operator!=(const Pixel& p) const + { return n != p.n; } + + Pixel Pixel::operator * (const float i) const + { + float fR = std::min(255.0f, std::max(0.0f, float(r) * i)); + float fG = std::min(255.0f, std::max(0.0f, float(g) * i)); + float fB = std::min(255.0f, std::max(0.0f, float(b) * i)); + return Pixel(uint8_t(fR), uint8_t(fG), uint8_t(fB), a); + } + + Pixel Pixel::operator / (const float i) const + { + float fR = std::min(255.0f, std::max(0.0f, float(r) / i)); + float fG = std::min(255.0f, std::max(0.0f, float(g) / i)); + float fB = std::min(255.0f, std::max(0.0f, float(b) / i)); + return Pixel(uint8_t(fR), uint8_t(fG), uint8_t(fB), a); + } + + Pixel& Pixel::operator *=(const float i) + { + this->r = uint8_t(std::min(255.0f, std::max(0.0f, float(r) * i))); + this->g = uint8_t(std::min(255.0f, std::max(0.0f, float(g) * i))); + this->b = uint8_t(std::min(255.0f, std::max(0.0f, float(b) * i))); + return *this; + } + + Pixel& Pixel::operator /=(const float i) + { + this->r = uint8_t(std::min(255.0f, std::max(0.0f, float(r) / i))); + this->g = uint8_t(std::min(255.0f, std::max(0.0f, float(g) / i))); + this->b = uint8_t(std::min(255.0f, std::max(0.0f, float(b) / i))); + return *this; + } + + Pixel Pixel::operator + (const Pixel& p) const + { + uint8_t nR = uint8_t(std::min(255, std::max(0, int(r) + int(p.r)))); + uint8_t nG = uint8_t(std::min(255, std::max(0, int(g) + int(p.g)))); + uint8_t nB = uint8_t(std::min(255, std::max(0, int(b) + int(p.b)))); + return Pixel(nR, nG, nB, a); + } + + Pixel Pixel::operator - (const Pixel& p) const + { + uint8_t nR = uint8_t(std::min(255, std::max(0, int(r) - int(p.r)))); + uint8_t nG = uint8_t(std::min(255, std::max(0, int(g) - int(p.g)))); + uint8_t nB = uint8_t(std::min(255, std::max(0, int(b) - int(p.b)))); + return Pixel(nR, nG, nB, a); + } + + Pixel& Pixel::operator += (const Pixel& p) + { + this->r = uint8_t(std::min(255, std::max(0, int(r) + int(p.r)))); + this->g = uint8_t(std::min(255, std::max(0, int(g) + int(p.g)))); + this->b = uint8_t(std::min(255, std::max(0, int(b) + int(p.b)))); + return *this; + } + + Pixel& Pixel::operator -= (const Pixel& p) // Thanks Au Lit + { + this->r = uint8_t(std::min(255, std::max(0, int(r) - int(p.r)))); + this->g = uint8_t(std::min(255, std::max(0, int(g) - int(p.g)))); + this->b = uint8_t(std::min(255, std::max(0, int(b) - int(p.b)))); + return *this; + } + + Pixel Pixel::operator * (const Pixel& p) const + { + uint8_t nR = uint8_t(std::min(255.0f, std::max(0.0f, float(r) * float(p.r) / 255.0f))); + uint8_t nG = uint8_t(std::min(255.0f, std::max(0.0f, float(g) * float(p.g) / 255.0f))); + uint8_t nB = uint8_t(std::min(255.0f, std::max(0.0f, float(b) * float(p.b) / 255.0f))); + uint8_t nA = uint8_t(std::min(255.0f, std::max(0.0f, float(a) * float(p.a) / 255.0f))); + return Pixel(nR, nG, nB, nA); + } + + Pixel& Pixel::operator *=(const Pixel& p) + { + this->r = uint8_t(std::min(255.0f, std::max(0.0f, float(r) * float(p.r) / 255.0f))); + this->g = uint8_t(std::min(255.0f, std::max(0.0f, float(g) * float(p.g) / 255.0f))); + this->b = uint8_t(std::min(255.0f, std::max(0.0f, float(b) * float(p.b) / 255.0f))); + this->a = uint8_t(std::min(255.0f, std::max(0.0f, float(a) * float(p.a) / 255.0f))); + return *this; + } + + Pixel Pixel::inv() const + { + uint8_t nR = uint8_t(std::min(255, std::max(0, 255 - int(r)))); + uint8_t nG = uint8_t(std::min(255, std::max(0, 255 - int(g)))); + uint8_t nB = uint8_t(std::min(255, std::max(0, 255 - int(b)))); + return Pixel(nR, nG, nB, a); + } + + Pixel PixelF(float red, float green, float blue, float alpha) + { return Pixel(uint8_t(red * 255.0f), uint8_t(green * 255.0f), uint8_t(blue * 255.0f), uint8_t(alpha * 255.0f)); } + + Pixel PixelLerp(const olc::Pixel& p1, const olc::Pixel& p2, float t) + { return (p2 * t) + p1 * (1.0f - t); } + + // O------------------------------------------------------------------------------O + // | olc::Sprite IMPLEMENTATION | + // O------------------------------------------------------------------------------O + Sprite::Sprite() + { width = 0; height = 0; } + + Sprite::Sprite(const std::string& sImageFile, olc::ResourcePack* pack) + { LoadFromFile(sImageFile, pack); } + + Sprite::Sprite(int32_t w, int32_t h) + { + width = w; height = h; + pColData.resize(width * height); + pColData.resize(width * height, nDefaultPixel); + } + + Sprite::~Sprite() + { pColData.clear(); } + + void Sprite::SetSampleMode(olc::Sprite::Mode mode) + { modeSample = mode; } + + Pixel Sprite::GetPixel(const olc::vi2d& a) const + { return GetPixel(a.x, a.y); } + + bool Sprite::SetPixel(const olc::vi2d& a, Pixel p) + { return SetPixel(a.x, a.y, p); } + + Pixel Sprite::GetPixel(int32_t x, int32_t y) const + { + if (modeSample == olc::Sprite::Mode::NORMAL) + { + if (x >= 0 && x < width && y >= 0 && y < height) + return pColData[y * width + x]; + else + return Pixel(0, 0, 0, 0); + } + else + { + if (modeSample == olc::Sprite::Mode::PERIODIC) + return pColData[abs(y % height) * width + abs(x % width)]; + else + return pColData[std::max(0, std::min(y, height-1)) * width + std::max(0, std::min(x, width-1))]; + } + } + + bool Sprite::SetPixel(int32_t x, int32_t y, Pixel p) + { + if (x >= 0 && x < width && y >= 0 && y < height) + { + pColData[y * width + x] = p; + return true; + } + else + return false; + } + + Pixel Sprite::Sample(float x, float y) const + { + int32_t sx = std::min((int32_t)((x * (float)width)), width - 1); + int32_t sy = std::min((int32_t)((y * (float)height)), height - 1); + return GetPixel(sx, sy); + } + + Pixel Sprite::Sample(const olc::vf2d& uv) const + { + return Sample(uv.x, uv.y); + } + + Pixel Sprite::SampleBL(float u, float v) const + { + u = u * width - 0.5f; + v = v * height - 0.5f; + int x = (int)floor(u); // cast to int rounds toward zero, not downward + int y = (int)floor(v); // Thanks @joshinils + float u_ratio = u - x; + float v_ratio = v - y; + float u_opposite = 1 - u_ratio; + float v_opposite = 1 - v_ratio; + + olc::Pixel p1 = GetPixel(std::max(x, 0), std::max(y, 0)); + olc::Pixel p2 = GetPixel(std::min(x + 1, (int)width - 1), std::max(y, 0)); + olc::Pixel p3 = GetPixel(std::max(x, 0), std::min(y + 1, (int)height - 1)); + olc::Pixel p4 = GetPixel(std::min(x + 1, (int)width - 1), std::min(y + 1, (int)height - 1)); + + return olc::Pixel( + (uint8_t)((p1.r * u_opposite + p2.r * u_ratio) * v_opposite + (p3.r * u_opposite + p4.r * u_ratio) * v_ratio), + (uint8_t)((p1.g * u_opposite + p2.g * u_ratio) * v_opposite + (p3.g * u_opposite + p4.g * u_ratio) * v_ratio), + (uint8_t)((p1.b * u_opposite + p2.b * u_ratio) * v_opposite + (p3.b * u_opposite + p4.b * u_ratio) * v_ratio)); + } + + Pixel Sprite::SampleBL(const olc::vf2d& uv) const + { + return SampleBL(uv.x, uv.y); + } + + Pixel* Sprite::GetData() + { return pColData.data(); } + + + olc::rcode Sprite::LoadFromFile(const std::string& sImageFile, olc::ResourcePack* pack) + { + UNUSED(pack); + return loader->LoadImageResource(this, sImageFile, pack); + } + + olc::Sprite* Sprite::Duplicate() + { + olc::Sprite* spr = new olc::Sprite(width, height); + std::memcpy(spr->GetData(), GetData(), width * height * sizeof(olc::Pixel)); + spr->modeSample = modeSample; + return spr; + } + + olc::Sprite* Sprite::Duplicate(const olc::vi2d& vPos, const olc::vi2d& vSize) + { + olc::Sprite* spr = new olc::Sprite(vSize.x, vSize.y); + for (int y = 0; y < vSize.y; y++) + for (int x = 0; x < vSize.x; x++) + spr->SetPixel(x, y, GetPixel(vPos.x + x, vPos.y + y)); + return spr; + } + + olc::vi2d olc::Sprite::Size() const + { + return { width, height }; + } + + // O------------------------------------------------------------------------------O + // | olc::Decal IMPLEMENTATION | + // O------------------------------------------------------------------------------O + Decal::Decal(olc::Sprite* spr, bool filter, bool clamp) + { + id = -1; + if (spr == nullptr) return; + sprite = spr; + id = renderer->CreateTexture(sprite->width, sprite->height, filter, clamp); + Update(); + } + + Decal::Decal(const uint32_t nExistingTextureResource, olc::Sprite* spr) + { + if (spr == nullptr) return; + id = nExistingTextureResource; + } + + void Decal::Update() + { + if (sprite == nullptr) return; + vUVScale = { 1.0f / float(sprite->width), 1.0f / float(sprite->height) }; + renderer->ApplyTexture(id); + renderer->UpdateTexture(id, sprite); + } + + void Decal::UpdateSprite() + { + if (sprite == nullptr) return; + renderer->ApplyTexture(id); + renderer->ReadTexture(id, sprite); + } + + Decal::~Decal() + { + if (id != -1) + { + renderer->DeleteTexture(id); + id = -1; + } + } + + void Renderable::Create(uint32_t width, uint32_t height, bool filter, bool clamp) + { + pSprite = std::make_unique(width, height); + pDecal = std::make_unique(pSprite.get(), filter, clamp); + } + + olc::rcode Renderable::Load(const std::string& sFile, ResourcePack* pack, bool filter, bool clamp) + { + pSprite = std::make_unique(); + if (pSprite->LoadFromFile(sFile, pack) == olc::rcode::OK) + { + pDecal = std::make_unique(pSprite.get(), filter, clamp); + return olc::rcode::OK; + } + else + { + pSprite.release(); + pSprite = nullptr; + return olc::rcode::NO_FILE; + } + } + + olc::Decal* Renderable::Decal() const + { return pDecal.get(); } + + olc::Sprite* Renderable::Sprite() const + { return pSprite.get(); } + + // O------------------------------------------------------------------------------O + // | olc::ResourcePack IMPLEMENTATION | + // O------------------------------------------------------------------------------O + + + //============================================================= + // Resource Packs - Allows you to store files in one large + // scrambled file - Thanks MaGetzUb for debugging a null char in std::stringstream bug + ResourceBuffer::ResourceBuffer(std::ifstream& ifs, uint32_t offset, uint32_t size) + { + vMemory.resize(size); + ifs.seekg(offset); ifs.read(vMemory.data(), vMemory.size()); + setg(vMemory.data(), vMemory.data(), vMemory.data() + size); + } + + ResourcePack::ResourcePack() { } + ResourcePack::~ResourcePack() { baseFile.close(); } + + bool ResourcePack::AddFile(const std::string& sFile) + { + const std::string file = makeposix(sFile); + + if (_gfs::exists(file)) + { + sResourceFile e; + e.nSize = (uint32_t)_gfs::file_size(file); + e.nOffset = 0; // Unknown at this stage + mapFiles[file] = e; + return true; + } + return false; + } + + bool ResourcePack::LoadPack(const std::string& sFile, const std::string& sKey) + { + // Open the resource file + baseFile.open(sFile, std::ifstream::binary); + if (!baseFile.is_open()) return false; + + // 1) Read Scrambled index + uint32_t nIndexSize = 0; + baseFile.read((char*)&nIndexSize, sizeof(uint32_t)); + + std::vector buffer(nIndexSize); + for (uint32_t j = 0; j < nIndexSize; j++) + buffer[j] = baseFile.get(); + + std::vector decoded = scramble(buffer, sKey); + size_t pos = 0; + auto read = [&decoded, &pos](char* dst, size_t size) { + memcpy((void*)dst, (const void*)(decoded.data() + pos), size); + pos += size; + }; + + auto get = [&read]() -> int { char c; read(&c, 1); return c; }; + + // 2) Read Map + uint32_t nMapEntries = 0; + read((char*)&nMapEntries, sizeof(uint32_t)); + for (uint32_t i = 0; i < nMapEntries; i++) + { + uint32_t nFilePathSize = 0; + read((char*)&nFilePathSize, sizeof(uint32_t)); + + std::string sFileName(nFilePathSize, ' '); + for (uint32_t j = 0; j < nFilePathSize; j++) + sFileName[j] = get(); + + sResourceFile e; + read((char*)&e.nSize, sizeof(uint32_t)); + read((char*)&e.nOffset, sizeof(uint32_t)); + mapFiles[sFileName] = e; + } + + // Don't close base file! we will provide a stream + // pointer when the file is requested + return true; + } + + bool ResourcePack::SavePack(const std::string& sFile, const std::string& sKey) + { + // Create/Overwrite the resource file + std::ofstream ofs(sFile, std::ofstream::binary); + if (!ofs.is_open()) return false; + + // Iterate through map + uint32_t nIndexSize = 0; // Unknown for now + ofs.write((char*)&nIndexSize, sizeof(uint32_t)); + uint32_t nMapSize = uint32_t(mapFiles.size()); + ofs.write((char*)&nMapSize, sizeof(uint32_t)); + for (auto& e : mapFiles) + { + // Write the path of the file + size_t nPathSize = e.first.size(); + ofs.write((char*)&nPathSize, sizeof(uint32_t)); + ofs.write(e.first.c_str(), nPathSize); + + // Write the file entry properties + ofs.write((char*)&e.second.nSize, sizeof(uint32_t)); + ofs.write((char*)&e.second.nOffset, sizeof(uint32_t)); + } + + // 2) Write the individual Data + std::streampos offset = ofs.tellp(); + nIndexSize = (uint32_t)offset; + for (auto& e : mapFiles) + { + // Store beginning of file offset within resource pack file + e.second.nOffset = (uint32_t)offset; + + // Load the file to be added + std::vector vBuffer(e.second.nSize); + std::ifstream i(e.first, std::ifstream::binary); + i.read((char*)vBuffer.data(), e.second.nSize); + i.close(); + + // Write the loaded file into resource pack file + ofs.write((char*)vBuffer.data(), e.second.nSize); + offset += e.second.nSize; + } + + // 3) Scramble Index + std::vector stream; + auto write = [&stream](const char* data, size_t size) { + size_t sizeNow = stream.size(); + stream.resize(sizeNow + size); + memcpy(stream.data() + sizeNow, data, size); + }; + + // Iterate through map + write((char*)&nMapSize, sizeof(uint32_t)); + for (auto& e : mapFiles) + { + // Write the path of the file + size_t nPathSize = e.first.size(); + write((char*)&nPathSize, sizeof(uint32_t)); + write(e.first.c_str(), nPathSize); + + // Write the file entry properties + write((char*)&e.second.nSize, sizeof(uint32_t)); + write((char*)&e.second.nOffset, sizeof(uint32_t)); + } + std::vector sIndexString = scramble(stream, sKey); + uint32_t nIndexStringLen = uint32_t(sIndexString.size()); + // 4) Rewrite Map (it has been updated with offsets now) + // at start of file + ofs.seekp(0, std::ios::beg); + ofs.write((char*)&nIndexStringLen, sizeof(uint32_t)); + ofs.write(sIndexString.data(), nIndexStringLen); + ofs.close(); + return true; + } + + ResourceBuffer ResourcePack::GetFileBuffer(const std::string& sFile) + { return ResourceBuffer(baseFile, mapFiles[sFile].nOffset, mapFiles[sFile].nSize); } + + bool ResourcePack::Loaded() + { return baseFile.is_open(); } + + std::vector ResourcePack::scramble(const std::vector& data, const std::string& key) + { + if (key.empty()) return data; + std::vector o; + size_t c = 0; + for (auto s : data) o.push_back(s ^ key[(c++) % key.size()]); + return o; + }; + + std::string ResourcePack::makeposix(const std::string& path) + { + std::string o; + for (auto s : path) o += std::string(1, s == '\\' ? '/' : s); + return o; + }; + + // O------------------------------------------------------------------------------O + // | olc::PixelGameEngine IMPLEMENTATION | + // O------------------------------------------------------------------------------O + PixelGameEngine::PixelGameEngine() + { + sAppName = "Undefined"; + olc::PGEX::pge = this; + + // Bring in relevant Platform & Rendering systems depending + // on compiler parameters + olc_ConfigureSystem(); + } + + PixelGameEngine::~PixelGameEngine() + {} + + + olc::rcode PixelGameEngine::Construct(int32_t screen_w, int32_t screen_h, int32_t pixel_w, int32_t pixel_h, bool full_screen, bool vsync, bool cohesion) + { + bPixelCohesion = cohesion; + vScreenSize = { screen_w, screen_h }; + vInvScreenSize = { 1.0f / float(screen_w), 1.0f / float(screen_h) }; + vPixelSize = { pixel_w, pixel_h }; + vWindowSize = vScreenSize * vPixelSize; + bFullScreen = full_screen; + bEnableVSYNC = vsync; + vPixel = 2.0f / vScreenSize; + + if (vPixelSize.x <= 0 || vPixelSize.y <= 0 || vScreenSize.x <= 0 || vScreenSize.y <= 0) + return olc::FAIL; + return olc::OK; + } + + + void PixelGameEngine::SetScreenSize(int w, int h) + { + vScreenSize = { w, h }; + vInvScreenSize = { 1.0f / float(w), 1.0f / float(h) }; + for (auto& layer : vLayers) + { + layer.pDrawTarget.Create(vScreenSize.x, vScreenSize.y); + layer.bUpdate = true; + } + SetDrawTarget(nullptr); + renderer->ClearBuffer(olc::BLACK, true); + renderer->DisplayFrame(); + renderer->ClearBuffer(olc::BLACK, true); + renderer->UpdateViewport(vViewPos, vViewSize); + } + +#if !defined(PGE_USE_CUSTOM_START) + olc::rcode PixelGameEngine::Start() + { + if (platform->ApplicationStartUp() != olc::OK) return olc::FAIL; + + // Construct the window + if (platform->CreateWindowPane({ 30,30 }, vWindowSize, bFullScreen) != olc::OK) return olc::FAIL; + olc_UpdateWindowSize(vWindowSize.x, vWindowSize.y); + + // Start the thread + bAtomActive = true; + std::thread t = std::thread(&PixelGameEngine::EngineThread, this); + + // Some implementations may form an event loop here + platform->StartSystemEventLoop(); + + // Wait for thread to be exited + t.join(); + + if (platform->ApplicationCleanUp() != olc::OK) return olc::FAIL; + + return olc::OK; + } +#endif + + void PixelGameEngine::SetDrawTarget(Sprite* target) + { + if (target) + { + pDrawTarget = target; + } + else + { + nTargetLayer = 0; + pDrawTarget = vLayers[0].pDrawTarget.Sprite(); + } + } + + void PixelGameEngine::SetDrawTarget(uint8_t layer, bool bDirty) + { + if (layer < vLayers.size()) + { + pDrawTarget = vLayers[layer].pDrawTarget.Sprite(); + vLayers[layer].bUpdate = bDirty; + nTargetLayer = layer; + } + } + + void PixelGameEngine::EnableLayer(uint8_t layer, bool b) + { if (layer < vLayers.size()) vLayers[layer].bShow = b; } + + void PixelGameEngine::SetLayerOffset(uint8_t layer, const olc::vf2d& offset) + { SetLayerOffset(layer, offset.x, offset.y); } + + void PixelGameEngine::SetLayerOffset(uint8_t layer, float x, float y) + { if (layer < vLayers.size()) vLayers[layer].vOffset = { x, y }; } + + void PixelGameEngine::SetLayerScale(uint8_t layer, const olc::vf2d& scale) + { SetLayerScale(layer, scale.x, scale.y); } + + void PixelGameEngine::SetLayerScale(uint8_t layer, float x, float y) + { if (layer < vLayers.size()) vLayers[layer].vScale = { x, y }; } + + void PixelGameEngine::SetLayerTint(uint8_t layer, const olc::Pixel& tint) + { if (layer < vLayers.size()) vLayers[layer].tint = tint; } + + void PixelGameEngine::SetLayerCustomRenderFunction(uint8_t layer, std::function f) + { if (layer < vLayers.size()) vLayers[layer].funcHook = f; } + + std::vector& PixelGameEngine::GetLayers() + { return vLayers; } + + uint32_t PixelGameEngine::CreateLayer() + { + LayerDesc ld; + ld.pDrawTarget.Create(vScreenSize.x, vScreenSize.y); + vLayers.push_back(std::move(ld)); + return uint32_t(vLayers.size()) - 1; + } + + Sprite* PixelGameEngine::GetDrawTarget() const + { return pDrawTarget; } + + int32_t PixelGameEngine::GetDrawTargetWidth() const + { + if (pDrawTarget) + return pDrawTarget->width; + else + return 0; + } + + int32_t PixelGameEngine::GetDrawTargetHeight() const + { + if (pDrawTarget) + return pDrawTarget->height; + else + return 0; + } + + uint32_t PixelGameEngine::GetFPS() const + { return nLastFPS; } + + bool PixelGameEngine::IsFocused() const + { return bHasInputFocus; } + + HWButton PixelGameEngine::GetKey(Key k) const + { return pKeyboardState[k]; } + + HWButton PixelGameEngine::GetMouse(uint32_t b) const + { return pMouseState[b]; } + + int32_t PixelGameEngine::GetMouseX() const + { return vMousePos.x; } + + int32_t PixelGameEngine::GetMouseY() const + { return vMousePos.y; } + + const olc::vi2d& PixelGameEngine::GetMousePos() const + { return vMousePos; } + + int32_t PixelGameEngine::GetMouseWheel() const + { return nMouseWheelDelta; } + + int32_t PixelGameEngine::ScreenWidth() const + { return vScreenSize.x; } + + int32_t PixelGameEngine::ScreenHeight() const + { return vScreenSize.y; } + + float PixelGameEngine::GetElapsedTime() const + { return fLastElapsed; } + + const olc::vi2d& PixelGameEngine::GetWindowSize() const + { return vWindowSize; } + + const olc::vi2d& PixelGameEngine::GetPixelSize() const + { return vPixelSize; } + + const olc::vi2d& PixelGameEngine::GetScreenPixelSize() const + { return vScreenPixelSize; } + + const olc::vi2d& PixelGameEngine::GetScreenSize() const + { return vScreenSize; } + + const olc::vi2d& PixelGameEngine::GetWindowMouse() const + { return vMouseWindowPos; } + + bool PixelGameEngine::Draw(const olc::vi2d& pos, Pixel p) + { return Draw(pos.x, pos.y, p); } + + // This is it, the critical function that plots a pixel + bool PixelGameEngine::Draw(int32_t x, int32_t y, Pixel p) + { + if (!pDrawTarget) return false; + + if (nPixelMode == Pixel::NORMAL) + { + return pDrawTarget->SetPixel(x, y, p); + } + + if (nPixelMode == Pixel::MASK) + { + if (p.a == 255) + return pDrawTarget->SetPixel(x, y, p); + } + + if (nPixelMode == Pixel::ALPHA) + { + Pixel d = pDrawTarget->GetPixel(x, y); + float a = (float)(p.a / 255.0f) * fBlendFactor; + float c = 1.0f - a; + float r = a * (float)p.r + c * (float)d.r; + float g = a * (float)p.g + c * (float)d.g; + float b = a * (float)p.b + c * (float)d.b; + return pDrawTarget->SetPixel(x, y, Pixel((uint8_t)r, (uint8_t)g, (uint8_t)b/*, (uint8_t)(p.a * fBlendFactor)*/)); + } + + if (nPixelMode == Pixel::CUSTOM) + { + return pDrawTarget->SetPixel(x, y, funcPixelMode(x, y, p, pDrawTarget->GetPixel(x, y))); + } + + return false; + } + + + void PixelGameEngine::DrawLine(const olc::vi2d& pos1, const olc::vi2d& pos2, Pixel p, uint32_t pattern) + { DrawLine(pos1.x, pos1.y, pos2.x, pos2.y, p, pattern); } + + void PixelGameEngine::DrawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, Pixel p, uint32_t pattern) + { + int x, y, dx, dy, dx1, dy1, px, py, xe, ye, i; + dx = x2 - x1; dy = y2 - y1; + + auto rol = [&](void) { pattern = (pattern << 1) | (pattern >> 31); return pattern & 1; }; + + olc::vi2d p1(x1, y1), p2(x2, y2); + //if (!ClipLineToScreen(p1, p2)) + // return; + x1 = p1.x; y1 = p1.y; + x2 = p2.x; y2 = p2.y; + + // straight lines idea by gurkanctn + if (dx == 0) // Line is vertical + { + if (y2 < y1) std::swap(y1, y2); + for (y = y1; y <= y2; y++) if (rol()) Draw(x1, y, p); + return; + } + + if (dy == 0) // Line is horizontal + { + if (x2 < x1) std::swap(x1, x2); + for (x = x1; x <= x2; x++) if (rol()) Draw(x, y1, p); + return; + } + + // Line is Funk-aye + dx1 = abs(dx); dy1 = abs(dy); + px = 2 * dy1 - dx1; py = 2 * dx1 - dy1; + if (dy1 <= dx1) + { + if (dx >= 0) + { + x = x1; y = y1; xe = x2; + } + else + { + x = x2; y = y2; xe = x1; + } + + if (rol()) Draw(x, y, p); + + for (i = 0; x < xe; i++) + { + x = x + 1; + if (px < 0) + px = px + 2 * dy1; + else + { + if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0)) y = y + 1; else y = y - 1; + px = px + 2 * (dy1 - dx1); + } + if (rol()) Draw(x, y, p); + } + } + else + { + if (dy >= 0) + { + x = x1; y = y1; ye = y2; + } + else + { + x = x2; y = y2; ye = y1; + } + + if (rol()) Draw(x, y, p); + + for (i = 0; y < ye; i++) + { + y = y + 1; + if (py <= 0) + py = py + 2 * dx1; + else + { + if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0)) x = x + 1; else x = x - 1; + py = py + 2 * (dx1 - dy1); + } + if (rol()) Draw(x, y, p); + } + } + } + + void PixelGameEngine::DrawCircle(const olc::vi2d& pos, int32_t radius, Pixel p, uint8_t mask) + { DrawCircle(pos.x, pos.y, radius, p, mask); } + + void PixelGameEngine::DrawCircle(int32_t x, int32_t y, int32_t radius, Pixel p, uint8_t mask) + { // Thanks to IanM-Matrix1 #PR121 + if (radius < 0 || x < -radius || y < -radius || x - GetDrawTargetWidth() > radius || y - GetDrawTargetHeight() > radius) + return; + + if (radius > 0) + { + int x0 = 0; + int y0 = radius; + int d = 3 - 2 * radius; + + while (y0 >= x0) // only formulate 1/8 of circle + { + // Draw even octants + if (mask & 0x01) Draw(x + x0, y - y0, p);// Q6 - upper right right + if (mask & 0x04) Draw(x + y0, y + x0, p);// Q4 - lower lower right + if (mask & 0x10) Draw(x - x0, y + y0, p);// Q2 - lower left left + if (mask & 0x40) Draw(x - y0, y - x0, p);// Q0 - upper upper left + if (x0 != 0 && x0 != y0) + { + if (mask & 0x02) Draw(x + y0, y - x0, p);// Q7 - upper upper right + if (mask & 0x08) Draw(x + x0, y + y0, p);// Q5 - lower right right + if (mask & 0x20) Draw(x - y0, y + x0, p);// Q3 - lower lower left + if (mask & 0x80) Draw(x - x0, y - y0, p);// Q1 - upper left left + } + + if (d < 0) + d += 4 * x0++ + 6; + else + d += 4 * (x0++ - y0--) + 10; + } + } + else + Draw(x, y, p); + } + + void PixelGameEngine::FillCircle(const olc::vi2d& pos, int32_t radius, Pixel p) + { FillCircle(pos.x, pos.y, radius, p); } + + void PixelGameEngine::FillCircle(int32_t x, int32_t y, int32_t radius, Pixel p) + { // Thanks to IanM-Matrix1 #PR121 + if (radius < 0 || x < -radius || y < -radius || x - GetDrawTargetWidth() > radius || y - GetDrawTargetHeight() > radius) + return; + + if (radius > 0) + { + int x0 = 0; + int y0 = radius; + int d = 3 - 2 * radius; + + auto drawline = [&](int sx, int ex, int y) + { + for (int x = sx; x <= ex; x++) + Draw(x, y, p); + }; + + while (y0 >= x0) + { + drawline(x - y0, x + y0, y - x0); + if (x0 > 0) drawline(x - y0, x + y0, y + x0); + + if (d < 0) + d += 4 * x0++ + 6; + else + { + if (x0 != y0) + { + drawline(x - x0, x + x0, y - y0); + drawline(x - x0, x + x0, y + y0); + } + d += 4 * (x0++ - y0--) + 10; + } + } + } + else + Draw(x, y, p); + } + + void PixelGameEngine::DrawRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p) + { DrawRect(pos.x, pos.y, size.x, size.y, p); } + + void PixelGameEngine::DrawRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p) + { + DrawLine(x, y, x + w, y, p); + DrawLine(x + w, y, x + w, y + h, p); + DrawLine(x + w, y + h, x, y + h, p); + DrawLine(x, y + h, x, y, p); + } + + void PixelGameEngine::Clear(Pixel p) + { + int pixels = GetDrawTargetWidth() * GetDrawTargetHeight(); + Pixel* m = GetDrawTarget()->GetData(); + for (int i = 0; i < pixels; i++) m[i] = p; + } + + void PixelGameEngine::ClearBuffer(Pixel p, bool bDepth) + { renderer->ClearBuffer(p, bDepth); } + + olc::Sprite* PixelGameEngine::GetFontSprite() + { return fontRenderable.Sprite(); } + + bool PixelGameEngine::ClipLineToScreen(olc::vi2d& in_p1, olc::vi2d& in_p2) + { + // https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm + static constexpr int SEG_I = 0b0000, SEG_L = 0b0001, SEG_R = 0b0010, SEG_B = 0b0100, SEG_T = 0b1000; + auto Segment = [&vScreenSize = vScreenSize](const olc::vi2d& v) + { + int i = SEG_I; + if (v.x < 0) i |= SEG_L; else if (v.x > vScreenSize.x) i |= SEG_R; + if (v.y < 0) i |= SEG_B; else if (v.y > vScreenSize.y) i |= SEG_T; + return i; + }; + + int s1 = Segment(in_p1), s2 = Segment(in_p2); + + while (true) + { + if (!(s1 | s2)) return true; + else if (s1 & s2) return false; + else + { + int s3 = s2 > s1 ? s2 : s1; + olc::vi2d n; + if (s3 & SEG_T) { n.x = in_p1.x + (in_p2.x - in_p1.x) * (vScreenSize.y - in_p1.y) / (in_p2.y - in_p1.y); n.y = vScreenSize.y; } + else if (s3 & SEG_B) { n.x = in_p1.x + (in_p2.x - in_p1.x) * (0 - in_p1.y) / (in_p2.y - in_p1.y); n.y = 0; } + else if (s3 & SEG_R) { n.x = vScreenSize.x; n.y = in_p1.y + (in_p2.y - in_p1.y) * (vScreenSize.x - in_p1.x) / (in_p2.x - in_p1.x); } + else if (s3 & SEG_L) { n.x = 0; n.y = in_p1.y + (in_p2.y - in_p1.y) * (0 - in_p1.x) / (in_p2.x - in_p1.x); } + if (s3 == s1) { in_p1 = n; s1 = Segment(in_p1); } + else { in_p2 = n; s2 = Segment(in_p2); } + } + } + return true; + } + + void PixelGameEngine::EnablePixelTransfer(const bool bEnable) + { + bSuspendTextureTransfer = !bEnable; + } + + + void PixelGameEngine::FillRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p) + { FillRect(pos.x, pos.y, size.x, size.y, p); } + + void PixelGameEngine::FillRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p) + { + int32_t x2 = x + w; + int32_t y2 = y + h; + + if (x < 0) x = 0; + if (x >= (int32_t)GetDrawTargetWidth()) x = (int32_t)GetDrawTargetWidth(); + if (y < 0) y = 0; + if (y >= (int32_t)GetDrawTargetHeight()) y = (int32_t)GetDrawTargetHeight(); + + if (x2 < 0) x2 = 0; + if (x2 >= (int32_t)GetDrawTargetWidth()) x2 = (int32_t)GetDrawTargetWidth(); + if (y2 < 0) y2 = 0; + if (y2 >= (int32_t)GetDrawTargetHeight()) y2 = (int32_t)GetDrawTargetHeight(); + + for (int i = x; i < x2; i++) + for (int j = y; j < y2; j++) + Draw(i, j, p); + } + + void PixelGameEngine::DrawTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p) + { DrawTriangle(pos1.x, pos1.y, pos2.x, pos2.y, pos3.x, pos3.y, p); } + + void PixelGameEngine::DrawTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p) + { + DrawLine(x1, y1, x2, y2, p); + DrawLine(x2, y2, x3, y3, p); + DrawLine(x3, y3, x1, y1, p); + } + + void PixelGameEngine::FillTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p) + { FillTriangle(pos1.x, pos1.y, pos2.x, pos2.y, pos3.x, pos3.y, p); } + + // https://www.avrfreaks.net/sites/default/files/triangles.c + void PixelGameEngine::FillTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p) + { + auto drawline = [&](int sx, int ex, int ny) { for (int i = sx; i <= ex; i++) Draw(i, ny, p); }; + + int t1x, t2x, y, minx, maxx, t1xp, t2xp; + bool changed1 = false; + bool changed2 = false; + int signx1, signx2, dx1, dy1, dx2, dy2; + int e1, e2; + // Sort vertices + if (y1 > y2) { std::swap(y1, y2); std::swap(x1, x2); } + if (y1 > y3) { std::swap(y1, y3); std::swap(x1, x3); } + if (y2 > y3) { std::swap(y2, y3); std::swap(x2, x3); } + + t1x = t2x = x1; y = y1; // Starting points + dx1 = (int)(x2 - x1); + if (dx1 < 0) { dx1 = -dx1; signx1 = -1; } + else signx1 = 1; + dy1 = (int)(y2 - y1); + + dx2 = (int)(x3 - x1); + if (dx2 < 0) { dx2 = -dx2; signx2 = -1; } + else signx2 = 1; + dy2 = (int)(y3 - y1); + + if (dy1 > dx1) { std::swap(dx1, dy1); changed1 = true; } + if (dy2 > dx2) { std::swap(dy2, dx2); changed2 = true; } + + e2 = (int)(dx2 >> 1); + // Flat top, just process the second half + if (y1 == y2) goto next; + e1 = (int)(dx1 >> 1); + + for (int i = 0; i < dx1;) { + t1xp = 0; t2xp = 0; + if (t1x < t2x) { minx = t1x; maxx = t2x; } + else { minx = t2x; maxx = t1x; } + // process first line until y value is about to change + while (i < dx1) { + i++; + e1 += dy1; + while (e1 >= dx1) { + e1 -= dx1; + if (changed1) t1xp = signx1;//t1x += signx1; + else goto next1; + } + if (changed1) break; + else t1x += signx1; + } + // Move line + next1: + // process second line until y value is about to change + while (1) { + e2 += dy2; + while (e2 >= dx2) { + e2 -= dx2; + if (changed2) t2xp = signx2;//t2x += signx2; + else goto next2; + } + if (changed2) break; + else t2x += signx2; + } + next2: + if (minx > t1x) minx = t1x; + if (minx > t2x) minx = t2x; + if (maxx < t1x) maxx = t1x; + if (maxx < t2x) maxx = t2x; + drawline(minx, maxx, y); // Draw line from min to max points found on the y + // Now increase y + if (!changed1) t1x += signx1; + t1x += t1xp; + if (!changed2) t2x += signx2; + t2x += t2xp; + y += 1; + if (y == y2) break; + } + next: + // Second half + dx1 = (int)(x3 - x2); if (dx1 < 0) { dx1 = -dx1; signx1 = -1; } + else signx1 = 1; + dy1 = (int)(y3 - y2); + t1x = x2; + + if (dy1 > dx1) { // swap values + std::swap(dy1, dx1); + changed1 = true; + } + else changed1 = false; + + e1 = (int)(dx1 >> 1); + + for (int i = 0; i <= dx1; i++) { + t1xp = 0; t2xp = 0; + if (t1x < t2x) { minx = t1x; maxx = t2x; } + else { minx = t2x; maxx = t1x; } + // process first line until y value is about to change + while (i < dx1) { + e1 += dy1; + while (e1 >= dx1) { + e1 -= dx1; + if (changed1) { t1xp = signx1; break; }//t1x += signx1; + else goto next3; + } + if (changed1) break; + else t1x += signx1; + if (i < dx1) i++; + } + next3: + // process second line until y value is about to change + while (t2x != x3) { + e2 += dy2; + while (e2 >= dx2) { + e2 -= dx2; + if (changed2) t2xp = signx2; + else goto next4; + } + if (changed2) break; + else t2x += signx2; + } + next4: + + if (minx > t1x) minx = t1x; + if (minx > t2x) minx = t2x; + if (maxx < t1x) maxx = t1x; + if (maxx < t2x) maxx = t2x; + drawline(minx, maxx, y); + if (!changed1) t1x += signx1; + t1x += t1xp; + if (!changed2) t2x += signx2; + t2x += t2xp; + y += 1; + if (y > y3) return; + } + } + + void PixelGameEngine::FillTexturedTriangle(const std::vector& vPoints, std::vector vTex, std::vector vColour, olc::Sprite* sprTex) + { + olc::vi2d p1 = vPoints[0]; + olc::vi2d p2 = vPoints[1]; + olc::vi2d p3 = vPoints[2]; + + if (p2.y < p1.y){std::swap(p1.y, p2.y); std::swap(p1.x, p2.x); std::swap(vTex[0].x, vTex[1].x); std::swap(vTex[0].y, vTex[1].y); std::swap(vColour[0], vColour[1]);} + if (p3.y < p1.y){std::swap(p1.y, p3.y); std::swap(p1.x, p3.x); std::swap(vTex[0].x, vTex[2].x); std::swap(vTex[0].y, vTex[2].y); std::swap(vColour[0], vColour[2]);} + if (p3.y < p2.y){std::swap(p2.y, p3.y); std::swap(p2.x, p3.x); std::swap(vTex[1].x, vTex[2].x); std::swap(vTex[1].y, vTex[2].y); std::swap(vColour[1], vColour[2]);} + + olc::vi2d dPos1 = p2 - p1; + olc::vf2d dTex1 = vTex[1] - vTex[0]; + int dcr1 = vColour[1].r - vColour[0].r; + int dcg1 = vColour[1].g - vColour[0].g; + int dcb1 = vColour[1].b - vColour[0].b; + int dca1 = vColour[1].a - vColour[0].a; + + olc::vi2d dPos2 = p3 - p1; + olc::vf2d dTex2 = vTex[2] - vTex[0]; + int dcr2 = vColour[2].r - vColour[0].r; + int dcg2 = vColour[2].g - vColour[0].g; + int dcb2 = vColour[2].b - vColour[0].b; + int dca2 = vColour[2].a - vColour[0].a; + + float dax_step = 0, dbx_step = 0, dcr1_step = 0, dcr2_step = 0, dcg1_step = 0, dcg2_step = 0, dcb1_step = 0, dcb2_step = 0, dca1_step = 0, dca2_step = 0; + olc::vf2d vTex1Step, vTex2Step; + + if (dPos1.y) + { + dax_step = dPos1.x / (float)abs(dPos1.y); + vTex1Step = dTex1 / (float)abs(dPos1.y); + dcr1_step = dcr1 / (float)abs(dPos1.y); + dcg1_step = dcg1 / (float)abs(dPos1.y); + dcb1_step = dcb1 / (float)abs(dPos1.y); + dca1_step = dca1 / (float)abs(dPos1.y); + } + + if (dPos2.y) + { + dbx_step = dPos2.x / (float)abs(dPos2.y); + vTex2Step = dTex2 / (float)abs(dPos2.y); + dcr2_step = dcr2 / (float)abs(dPos2.y); + dcg2_step = dcg2 / (float)abs(dPos2.y); + dcb2_step = dcb2 / (float)abs(dPos2.y); + dca2_step = dca2 / (float)abs(dPos2.y); + } + + olc::vi2d vStart; + olc::vi2d vEnd; + int vStartIdx; + + for (int pass = 0; pass < 2; pass++) + { + if (pass == 0) + { + vStart = p1; vEnd = p2; vStartIdx = 0; + } + else + { + dPos1 = p3 - p2; + dTex1 = vTex[2] - vTex[1]; + dcr1 = vColour[2].r - vColour[1].r; + dcg1 = vColour[2].g - vColour[1].g; + dcb1 = vColour[2].b - vColour[1].b; + dca1 = vColour[2].a - vColour[1].a; + dcr1_step = 0; dcg1_step = 0; dcb1_step = 0; dca1_step = 0; + + if (dPos2.y) dbx_step = dPos2.x / (float)abs(dPos2.y); + if (dPos1.y) + { + dax_step = dPos1.x / (float)abs(dPos1.y); + vTex1Step = dTex1 / (float)abs(dPos1.y); + dcr1_step = dcr1 / (float)abs(dPos1.y); + dcg1_step = dcg1 / (float)abs(dPos1.y); + dcb1_step = dcb1 / (float)abs(dPos1.y); + dca1_step = dca1 / (float)abs(dPos1.y); + } + + vStart = p2; vEnd = p3; vStartIdx = 1; + } + + if (dPos1.y) + { + for (int i = vStart.y; i <= vEnd.y; i++) + { + int ax = int(vStart.x + (float)(i - vStart.y) * dax_step); + int bx = int(p1.x + (float)(i - p1.y) * dbx_step); + + olc::vf2d tex_s(vTex[vStartIdx].x + (float)(i - vStart.y) * vTex1Step.x, vTex[vStartIdx].y + (float)(i - vStart.y) * vTex1Step.y); + olc::vf2d tex_e(vTex[0].x + (float)(i - p1.y) * vTex2Step.x, vTex[0].y + (float)(i - p1.y) * vTex2Step.y); + + olc::Pixel col_s(vColour[vStartIdx].r + uint8_t((float)(i - vStart.y) * dcr1_step), vColour[vStartIdx].g + uint8_t((float)(i - vStart.y) * dcg1_step), + vColour[vStartIdx].b + uint8_t((float)(i - vStart.y) * dcb1_step), vColour[vStartIdx].a + uint8_t((float)(i - vStart.y) * dca1_step)); + + olc::Pixel col_e(vColour[0].r + uint8_t((float)(i - p1.y) * dcr2_step), vColour[0].g + uint8_t((float)(i - p1.y) * dcg2_step), + vColour[0].b + uint8_t((float)(i - p1.y) * dcb2_step), vColour[0].a + uint8_t((float)(i - p1.y) * dca2_step)); + + if (ax > bx) { std::swap(ax, bx); std::swap(tex_s, tex_e); std::swap(col_s, col_e); } + + float tstep = 1.0f / ((float)(bx - ax)); + float t = 0.0f; + + for (int j = ax; j < bx; j++) + { + olc::Pixel pixel = PixelLerp(col_s, col_e, t); + if (sprTex != nullptr) pixel *= sprTex->Sample(tex_s.lerp(tex_e, t)); + Draw(j, i, pixel); + t += tstep; + } + } + } + } + } + + void PixelGameEngine::FillTexturedPolygon(const std::vector& vPoints, const std::vector& vTex, const std::vector& vColour, olc::Sprite* sprTex, olc::DecalStructure structure) + { + if (structure == olc::DecalStructure::LINE) + { + return; // Meaningless, so do nothing + } + + if (vPoints.size() < 3 || vTex.size() < 3 || vColour.size() < 3) + return; + + if (structure == olc::DecalStructure::LIST) + { + for (int tri = 0; tri < vPoints.size() / 3; tri++) + { + std::vector vP = { vPoints[tri * 3 + 0], vPoints[tri * 3 + 1], vPoints[tri * 3 + 2] }; + std::vector vT = { vTex[tri * 3 + 0], vTex[tri * 3 + 1], vTex[tri * 3 + 2] }; + std::vector vC = { vColour[tri * 3 + 0], vColour[tri * 3 + 1], vColour[tri * 3 + 2] }; + FillTexturedTriangle(vP, vT, vC, sprTex); + } + return; + } + + if (structure == olc::DecalStructure::STRIP) + { + for (int tri = 2; tri < vPoints.size(); tri++) + { + std::vector vP = { vPoints[tri - 2], vPoints[tri-1], vPoints[tri] }; + std::vector vT = { vTex[tri - 2], vTex[tri - 1], vTex[tri] }; + std::vector vC = { vColour[tri - 2], vColour[tri - 1], vColour[tri] }; + FillTexturedTriangle(vP, vT, vC, sprTex); + } + return; + } + + if (structure == olc::DecalStructure::FAN) + { + for (int tri = 2; tri < vPoints.size(); tri++) + { + std::vector vP = { vPoints[0], vPoints[tri - 1], vPoints[tri] }; + std::vector vT = { vTex[0], vTex[tri - 1], vTex[tri] }; + std::vector vC = { vColour[0], vColour[tri - 1], vColour[tri] }; + FillTexturedTriangle(vP, vT, vC, sprTex); + } + return; + } + } + + + void PixelGameEngine::DrawSprite(const olc::vi2d& pos, Sprite* sprite, uint32_t scale, uint8_t flip) + { DrawSprite(pos.x, pos.y, sprite, scale, flip); } + + void PixelGameEngine::DrawSprite(int32_t x, int32_t y, Sprite* sprite, uint32_t scale, uint8_t flip) + { + if (sprite == nullptr) + return; + + int32_t fxs = 0, fxm = 1, fx = 0; + int32_t fys = 0, fym = 1, fy = 0; + if (flip & olc::Sprite::Flip::HORIZ) { fxs = sprite->width - 1; fxm = -1; } + if (flip & olc::Sprite::Flip::VERT) { fys = sprite->height - 1; fym = -1; } + + if (scale > 1) + { + fx = fxs; + for (int32_t i = 0; i < sprite->width; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < sprite->height; j++, fy += fym) + for (uint32_t is = 0; is < scale; is++) + for (uint32_t js = 0; js < scale; js++) + Draw(x + (i * scale) + is, y + (j * scale) + js, sprite->GetPixel(fx, fy)); + } + } + else + { + fx = fxs; + for (int32_t i = 0; i < sprite->width; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < sprite->height; j++, fy += fym) + Draw(x + i, y + j, sprite->GetPixel(fx, fy)); + } + } + } + + void PixelGameEngine::DrawPartialSprite(const olc::vi2d& pos, Sprite* sprite, const olc::vi2d& sourcepos, const olc::vi2d& size, uint32_t scale, uint8_t flip) + { DrawPartialSprite(pos.x, pos.y, sprite, sourcepos.x, sourcepos.y, size.x, size.y, scale, flip); } + + void PixelGameEngine::DrawPartialSprite(int32_t x, int32_t y, Sprite* sprite, int32_t ox, int32_t oy, int32_t w, int32_t h, uint32_t scale, uint8_t flip) + { + if (sprite == nullptr) + return; + + int32_t fxs = 0, fxm = 1, fx = 0; + int32_t fys = 0, fym = 1, fy = 0; + if (flip & olc::Sprite::Flip::HORIZ) { fxs = w - 1; fxm = -1; } + if (flip & olc::Sprite::Flip::VERT) { fys = h - 1; fym = -1; } + + if (scale > 1) + { + fx = fxs; + for (int32_t i = 0; i < w; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < h; j++, fy += fym) + for (uint32_t is = 0; is < scale; is++) + for (uint32_t js = 0; js < scale; js++) + Draw(x + (i * scale) + is, y + (j * scale) + js, sprite->GetPixel(fx + ox, fy + oy)); + } + } + else + { + fx = fxs; + for (int32_t i = 0; i < w; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < h; j++, fy += fym) + Draw(x + i, y + j, sprite->GetPixel(fx + ox, fy + oy)); + } + } + } + + void PixelGameEngine::SetDecalMode(const olc::DecalMode& mode) + { nDecalMode = mode; } + + void PixelGameEngine::SetDecalStructure(const olc::DecalStructure& structure) + { nDecalStructure = structure; } + + void PixelGameEngine::DrawPartialDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale, const olc::Pixel& tint) + { + olc::vf2d vScreenSpacePos = + { + (pos.x * vInvScreenSize.x) * 2.0f - 1.0f, + -((pos.y * vInvScreenSize.y) * 2.0f - 1.0f) + }; + + + olc::vf2d vScreenSpaceDim = + { + ((pos.x + source_size.x * scale.x) * vInvScreenSize.x) * 2.0f - 1.0f, + -(((pos.y + source_size.y * scale.y) * vInvScreenSize.y) * 2.0f - 1.0f) + }; + + olc::vf2d vWindow = olc::vf2d(vViewSize); + olc::vf2d vQuantisedPos = ((vScreenSpacePos * vWindow) + olc::vf2d(0.5f, 0.5f)).floor() / vWindow; + olc::vf2d vQuantisedDim = ((vScreenSpaceDim * vWindow) + olc::vf2d(0.5f, -0.5f)).ceil() / vWindow; + + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.pos = { { vQuantisedPos.x, vQuantisedPos.y }, { vQuantisedPos.x, vQuantisedDim.y }, { vQuantisedDim.x, vQuantisedDim.y }, { vQuantisedDim.x, vQuantisedPos.y } }; + olc::vf2d uvtl = (source_pos + olc::vf2d(0.0001f, 0.0001f)) * decal->vUVScale; + olc::vf2d uvbr = (source_pos + source_size - olc::vf2d(0.0001f, 0.0001f)) * decal->vUVScale; + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + di.w = { 1,1,1,1 }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPartialDecal(const olc::vf2d& pos, const olc::vf2d& size, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { + olc::vf2d vScreenSpacePos = + { + (pos.x * vInvScreenSize.x) * 2.0f - 1.0f, + ((pos.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f + }; + + olc::vf2d vScreenSpaceDim = + { + vScreenSpacePos.x + (2.0f * size.x * vInvScreenSize.x), + vScreenSpacePos.y - (2.0f * size.y * vInvScreenSize.y) + }; + + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.pos = { { vScreenSpacePos.x, vScreenSpacePos.y }, { vScreenSpacePos.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpacePos.y } }; + olc::vf2d uvtl = (source_pos) * decal->vUVScale; + olc::vf2d uvbr = uvtl + ((source_size) * decal->vUVScale); + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + di.w = { 1,1,1,1 }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + + void PixelGameEngine::DrawDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& scale, const olc::Pixel& tint) + { + olc::vf2d vScreenSpacePos = + { + (pos.x * vInvScreenSize.x) * 2.0f - 1.0f, + ((pos.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f + }; + + olc::vf2d vScreenSpaceDim = + { + vScreenSpacePos.x + (2.0f * (float(decal->sprite->width) * vInvScreenSize.x)) * scale.x, + vScreenSpacePos.y - (2.0f * (float(decal->sprite->height) * vInvScreenSize.y)) * scale.y + }; + + DecalInstance di; + di.decal = decal; + di.points = 4; + di.tint = { tint, tint, tint, tint }; + di.pos = { { vScreenSpacePos.x, vScreenSpacePos.y }, { vScreenSpacePos.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpacePos.y } }; + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + di.w = { 1, 1, 1, 1 }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawExplicitDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d* uv, const olc::Pixel* col, uint32_t elements) + { + DecalInstance di; + di.decal = decal; + di.pos.resize(elements); + di.uv.resize(elements); + di.w.resize(elements); + di.tint.resize(elements); + di.points = elements; + for (uint32_t i = 0; i < elements; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = col[i]; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const olc::Pixel tint) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = tint; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector &tint) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = tint[i]; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& colours, const olc::Pixel tint) + { + std::vector newColours(colours.size(), olc::WHITE); + std::transform(colours.begin(), colours.end(), newColours.begin(), + [&tint](const olc::Pixel pin) { return pin * tint; }); + DrawPolygonDecal(decal, pos, uv, newColours); + } + + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const olc::Pixel tint) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = tint; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + +#ifdef OLC_ENABLE_EXPERIMENTAL + // Lightweight 3D + void PixelGameEngine::LW3D_DrawTriangles(olc::Decal* decal, const std::vector>& pos, const std::vector& tex, const std::vector& col) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { pos[i][0], pos[i][1] }; + di.w[i] = pos[i][2]; + di.uv[i] = tex[i]; + di.tint[i] = col[i]; + } + di.mode = DecalMode::MODEL3D; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } +#endif + + void PixelGameEngine::DrawLineDecal(const olc::vf2d& pos1, const olc::vf2d& pos2, Pixel p) + { + auto m = nDecalMode; + nDecalMode = olc::DecalMode::WIREFRAME; + DrawPolygonDecal(nullptr, { pos1, pos2 }, { {0, 0}, {0,0} }, p); + nDecalMode = m; + + /*DecalInstance di; + di.decal = nullptr; + di.points = uint32_t(2); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + di.pos[0] = { (pos1.x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos1.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[0] = { 0.0f, 0.0f }; + di.tint[0] = p; + di.w[0] = 1.0f; + di.pos[1] = { (pos2.x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos2.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[1] = { 0.0f, 0.0f }; + di.tint[1] = p; + di.w[1] = 1.0f; + di.mode = olc::DecalMode::WIREFRAME; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di);*/ + } + + void PixelGameEngine::DrawRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col) + { + auto m = nDecalMode; + SetDecalMode(olc::DecalMode::WIREFRAME); + olc::vf2d vNewSize = size;// (size - olc::vf2d(0.375f, 0.375f)).ceil(); + std::array points = { { {pos}, {pos.x, pos.y + vNewSize.y}, {pos + vNewSize}, {pos.x + vNewSize.x, pos.y} } }; + std::array uvs = { {{0,0},{0,0},{0,0},{0,0}} }; + std::array cols = { {col, col, col, col} }; + DrawExplicitDecal(nullptr, points.data(), uvs.data(), cols.data(), 4); + SetDecalMode(m); + + } + + void PixelGameEngine::FillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col) + { + olc::vf2d vNewSize = size;// (size - olc::vf2d(0.375f, 0.375f)).ceil(); + std::array points = { { {pos}, {pos.x, pos.y + vNewSize.y}, {pos + vNewSize}, {pos.x + vNewSize.x, pos.y} } }; + std::array uvs = { {{0,0},{0,0},{0,0},{0,0}} }; + std::array cols = { {col, col, col, col} }; + DrawExplicitDecal(nullptr, points.data(), uvs.data(), cols.data(), 4); + } + + void PixelGameEngine::GradientFillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel colTL, const olc::Pixel colBL, const olc::Pixel colBR, const olc::Pixel colTR) + { + std::array points = { { {pos}, {pos.x, pos.y + size.y}, {pos + size}, {pos.x + size.x, pos.y} } }; + std::array uvs = { {{0,0},{0,0},{0,0},{0,0}} }; + std::array cols = { {colTL, colBL, colBR, colTR} }; + DrawExplicitDecal(nullptr, points.data(), uvs.data(), cols.data(), 4); + } + + void PixelGameEngine::DrawRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center, const olc::vf2d& scale, const olc::Pixel& tint) + { + DecalInstance di; + di.decal = decal; + di.pos.resize(4); + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + di.w = { 1, 1, 1, 1 }; + di.tint = { tint, tint, tint, tint }; + di.points = 4; + di.pos[0] = (olc::vf2d(0.0f, 0.0f) - center) * scale; + di.pos[1] = (olc::vf2d(0.0f, float(decal->sprite->height)) - center) * scale; + di.pos[2] = (olc::vf2d(float(decal->sprite->width), float(decal->sprite->height)) - center) * scale; + di.pos[3] = (olc::vf2d(float(decal->sprite->width), 0.0f) - center) * scale; + float c = cos(fAngle), s = sin(fAngle); + for (int i = 0; i < 4; i++) + { + di.pos[i] = pos + olc::vf2d(di.pos[i].x * c - di.pos[i].y * s, di.pos[i].x * s + di.pos[i].y * c); + di.pos[i] = di.pos[i] * vInvScreenSize * 2.0f - olc::vf2d(1.0f, 1.0f); + di.pos[i].y *= -1.0f; + di.w[i] = 1; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + + void PixelGameEngine::DrawPartialRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale, const olc::Pixel& tint) + { + DecalInstance di; + di.decal = decal; + di.points = 4; + di.tint = { tint, tint, tint, tint }; + di.w = { 1, 1, 1, 1 }; + di.pos.resize(4); + di.pos[0] = (olc::vf2d(0.0f, 0.0f) - center) * scale; + di.pos[1] = (olc::vf2d(0.0f, source_size.y) - center) * scale; + di.pos[2] = (olc::vf2d(source_size.x, source_size.y) - center) * scale; + di.pos[3] = (olc::vf2d(source_size.x, 0.0f) - center) * scale; + float c = cos(fAngle), s = sin(fAngle); + for (int i = 0; i < 4; i++) + { + di.pos[i] = pos + olc::vf2d(di.pos[i].x * c - di.pos[i].y * s, di.pos[i].x * s + di.pos[i].y * c); + di.pos[i] = di.pos[i] * vInvScreenSize * 2.0f - olc::vf2d(1.0f, 1.0f); + di.pos[i].y *= -1.0f; + } + + olc::vf2d uvtl = source_pos * decal->vUVScale; + olc::vf2d uvbr = uvtl + (source_size * decal->vUVScale); + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.w = { 1, 1, 1, 1 }; + di.pos.resize(4); + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + olc::vf2d center; + float rd = ((pos[2].x - pos[0].x) * (pos[3].y - pos[1].y) - (pos[3].x - pos[1].x) * (pos[2].y - pos[0].y)); + if (rd != 0) + { + olc::vf2d uvtl = source_pos * decal->vUVScale; + olc::vf2d uvbr = uvtl + (source_size * decal->vUVScale); + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + + rd = 1.0f / rd; + float rn = ((pos[3].x - pos[1].x) * (pos[0].y - pos[1].y) - (pos[3].y - pos[1].y) * (pos[0].x - pos[1].x)) * rd; + float sn = ((pos[2].x - pos[0].x) * (pos[0].y - pos[1].y) - (pos[2].y - pos[0].y) * (pos[0].x - pos[1].x)) * rd; + if (!(rn < 0.f || rn > 1.f || sn < 0.f || sn > 1.f)) center = pos[0] + rn * (pos[2] - pos[0]); + float d[4]; for (int i = 0; i < 4; i++) d[i] = (pos[i] - center).mag(); + for (int i = 0; i < 4; i++) + { + float q = d[i] == 0.0f ? 1.0f : (d[i] + d[(i + 2) & 3]) / d[(i + 2) & 3]; + di.uv[i] *= q; di.w[i] *= q; + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + } + + void PixelGameEngine::DrawWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::Pixel& tint) + { + // Thanks Nathan Reed, a brilliant article explaining whats going on here + // http://www.reedbeta.com/blog/quadrilateral-interpolation-part-1/ + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.w = { 1, 1, 1, 1 }; + di.pos.resize(4); + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + olc::vf2d center; + float rd = ((pos[2].x - pos[0].x) * (pos[3].y - pos[1].y) - (pos[3].x - pos[1].x) * (pos[2].y - pos[0].y)); + if (rd != 0) + { + rd = 1.0f / rd; + float rn = ((pos[3].x - pos[1].x) * (pos[0].y - pos[1].y) - (pos[3].y - pos[1].y) * (pos[0].x - pos[1].x)) * rd; + float sn = ((pos[2].x - pos[0].x) * (pos[0].y - pos[1].y) - (pos[2].y - pos[0].y) * (pos[0].x - pos[1].x)) * rd; + if (!(rn < 0.f || rn > 1.f || sn < 0.f || sn > 1.f)) center = pos[0] + rn * (pos[2] - pos[0]); + float d[4]; for (int i = 0; i < 4; i++) d[i] = (pos[i] - center).mag(); + for (int i = 0; i < 4; i++) + { + float q = d[i] == 0.0f ? 1.0f : (d[i] + d[(i + 2) & 3]) / d[(i + 2) & 3]; + di.uv[i] *= q; di.w[i] *= q; + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + } + + void PixelGameEngine::DrawWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::Pixel& tint) + { DrawWarpedDecal(decal, pos.data(), tint); } + + void PixelGameEngine::DrawWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::Pixel& tint) + { DrawWarpedDecal(decal, &pos[0], tint); } + + void PixelGameEngine::DrawPartialWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { DrawPartialWarpedDecal(decal, pos.data(), source_pos, source_size, tint); } + + void PixelGameEngine::DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { DrawPartialWarpedDecal(decal, &pos[0], source_pos, source_size, tint); } + + void PixelGameEngine::DrawStringDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const olc::vf2d& scale) + { + olc::vf2d spos = { 0.0f, 0.0f }; + for (auto c : sText) + { + if (c == '\n') + { + spos.x = 0; spos.y += 8.0f * scale.y; + } + else if (c == '\t') + { + spos.x += 8.0f * float(nTabSizeInSpaces) * scale.x; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + DrawPartialDecal(pos + spos, fontRenderable.Decal(), {float(ox) * 8.0f, float(oy) * 8.0f}, {8.0f, 8.0f}, scale, col); + spos.x += 8.0f * scale.x; + } + } + } + + void PixelGameEngine::DrawStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const olc::vf2d& scale) + { + olc::vf2d spos = { 0.0f, 0.0f }; + for (auto c : sText) + { + if (c == '\n') + { + spos.x = 0; spos.y += 8.0f * scale.y; + } + else if (c == '\t') + { + spos.x += 8.0f * float(nTabSizeInSpaces) * scale.x; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + DrawPartialDecal(pos + spos, fontRenderable.Decal(), { float(ox) * 8.0f + float(vFontSpacing[c - 32].x), float(oy) * 8.0f }, { float(vFontSpacing[c - 32].y), 8.0f }, scale, col); + spos.x += float(vFontSpacing[c - 32].y) * scale.x; + } + } + } + // Thanks Oso-Grande/Sopadeoso For these awesom and stupidly clever Text Rotation routines... duh XD + void PixelGameEngine::DrawRotatedStringDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center, const Pixel col, const olc::vf2d& scale) + { + olc::vf2d spos = center; + for (auto c : sText) + { + if (c == '\n') + { + spos.x = center.x; spos.y -= 8.0f; + } + else if (c == '\t') + { + spos.x += 8.0f * float(nTabSizeInSpaces) * scale.x; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + DrawPartialRotatedDecal(pos, fontRenderable.Decal(), fAngle, spos, { float(ox) * 8.0f, float(oy) * 8.0f }, { 8.0f, 8.0f }, scale, col); + spos.x -= 8.0f; + } + } + } + + void PixelGameEngine::DrawRotatedStringPropDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center, const Pixel col, const olc::vf2d& scale) + { + olc::vf2d spos = center; + for (auto c : sText) + { + if (c == '\n') + { + spos.x = center.x; spos.y -= 8.0f; + } + else if (c == '\t') + { + spos.x += 8.0f * float(nTabSizeInSpaces) * scale.x; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + DrawPartialRotatedDecal(pos, fontRenderable.Decal(), fAngle, spos, { float(ox) * 8.0f + float(vFontSpacing[c - 32].x), float(oy) * 8.0f }, { float(vFontSpacing[c - 32].y), 8.0f }, scale, col); + spos.x -= float(vFontSpacing[c - 32].y); + } + } + } + + olc::vi2d PixelGameEngine::GetTextSize(const std::string& s) + { + olc::vi2d size = { 0,1 }; + olc::vi2d pos = { 0,1 }; + for (auto c : s) + { + if (c == '\n') { pos.y++; pos.x = 0; } + else if (c == '\t') { pos.x += nTabSizeInSpaces; } + else pos.x++; + size.x = std::max(size.x, pos.x); + size.y = std::max(size.y, pos.y); + } + return size * 8; + } + + void PixelGameEngine::DrawString(const olc::vi2d& pos, const std::string& sText, Pixel col, uint32_t scale) + { DrawString(pos.x, pos.y, sText, col, scale); } + + void PixelGameEngine::DrawString(int32_t x, int32_t y, const std::string& sText, Pixel col, uint32_t scale) + { + int32_t sx = 0; + int32_t sy = 0; + Pixel::Mode m = nPixelMode; + // Thanks @tucna, spotted bug with col.ALPHA :P + if (m != Pixel::CUSTOM) // Thanks @Megarev, required for "shaders" + { + if (col.a != 255) SetPixelMode(Pixel::ALPHA); + else SetPixelMode(Pixel::MASK); + } + for (auto c : sText) + { + if (c == '\n') + { + sx = 0; sy += 8 * scale; + } + else if (c == '\t') + { + sx += 8 * nTabSizeInSpaces * scale; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + + if (scale > 1) + { + for (uint32_t i = 0; i < 8; i++) + for (uint32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8, j + oy * 8).r > 0) + for (uint32_t is = 0; is < scale; is++) + for (uint32_t js = 0; js < scale; js++) + Draw(x + sx + (i * scale) + is, y + sy + (j * scale) + js, col); + } + else + { + for (uint32_t i = 0; i < 8; i++) + for (uint32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8, j + oy * 8).r > 0) + Draw(x + sx + i, y + sy + j, col); + } + sx += 8 * scale; + } + } + SetPixelMode(m); + } + + olc::vi2d PixelGameEngine::GetTextSizeProp(const std::string& s) + { + olc::vi2d size = { 0,1 }; + olc::vi2d pos = { 0,1 }; + for (auto c : s) + { + if (c == '\n') { pos.y += 1; pos.x = 0; } + else if (c == '\t') { pos.x += nTabSizeInSpaces * 8; } + else pos.x += vFontSpacing[c - 32].y; + size.x = std::max(size.x, pos.x); + size.y = std::max(size.y, pos.y); + } + + size.y *= 8; + return size; + } + + void PixelGameEngine::DrawStringProp(const olc::vi2d& pos, const std::string& sText, Pixel col, uint32_t scale) + { DrawStringProp(pos.x, pos.y, sText, col, scale); } + + void PixelGameEngine::DrawStringProp(int32_t x, int32_t y, const std::string& sText, Pixel col, uint32_t scale) + { + int32_t sx = 0; + int32_t sy = 0; + Pixel::Mode m = nPixelMode; + + if (m != Pixel::CUSTOM) + { + if (col.a != 255) SetPixelMode(Pixel::ALPHA); + else SetPixelMode(Pixel::MASK); + } + for (auto c : sText) + { + if (c == '\n') + { + sx = 0; sy += 8 * scale; + } + else if (c == '\t') + { + sx += 8 * nTabSizeInSpaces * scale; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + + if (scale > 1) + { + for (int32_t i = 0; i < vFontSpacing[c - 32].y; i++) + for (int32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8 + vFontSpacing[c - 32].x, j + oy * 8).r > 0) + for (int32_t is = 0; is < int(scale); is++) + for (int32_t js = 0; js < int(scale); js++) + Draw(x + sx + (i * scale) + is, y + sy + (j * scale) + js, col); + } + else + { + for (int32_t i = 0; i < vFontSpacing[c - 32].y; i++) + for (int32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8 + vFontSpacing[c - 32].x, j + oy * 8).r > 0) + Draw(x + sx + i, y + sy + j, col); + } + sx += vFontSpacing[c - 32].y * scale; + } + } + SetPixelMode(m); + } + + void PixelGameEngine::SetPixelMode(Pixel::Mode m) + { nPixelMode = m; } + + Pixel::Mode PixelGameEngine::GetPixelMode() + { return nPixelMode; } + + void PixelGameEngine::SetPixelMode(std::function pixelMode) + { + funcPixelMode = pixelMode; + nPixelMode = Pixel::Mode::CUSTOM; + } + + void PixelGameEngine::SetPixelBlend(float fBlend) + { + fBlendFactor = fBlend; + if (fBlendFactor < 0.0f) fBlendFactor = 0.0f; + if (fBlendFactor > 1.0f) fBlendFactor = 1.0f; + } + + std::stringstream& PixelGameEngine::ConsoleOut() + { return ssConsoleOutput; } + + bool PixelGameEngine::IsConsoleShowing() const + { return bConsoleShow; } + + void PixelGameEngine::ConsoleShow(const olc::Key& keyExit, bool bSuspendTime) + { + if (bConsoleShow) + return; + + bConsoleShow = true; + bConsoleSuspendTime = bSuspendTime; + TextEntryEnable(true); + keyConsoleExit = keyExit; + pKeyboardState[keyConsoleExit].bHeld = false; + pKeyboardState[keyConsoleExit].bPressed = false; + pKeyboardState[keyConsoleExit].bReleased = true; + } + + void PixelGameEngine::ConsoleClear() + { sConsoleLines.clear(); } + + void PixelGameEngine::ConsoleCaptureStdOut(const bool bCapture) + { + if(bCapture) + sbufOldCout = std::cout.rdbuf(ssConsoleOutput.rdbuf()); + else + std::cout.rdbuf(sbufOldCout); + } + + void PixelGameEngine::UpdateConsole() + { + if (GetKey(keyConsoleExit).bPressed) + { + TextEntryEnable(false); + bConsoleSuspendTime = false; + bConsoleShow = false; + return; + } + + // Keep Console sizes based in real screen dimensions + vConsoleCharacterScale = olc::vf2d(1.0f, 2.0f) / (olc::vf2d(vViewSize) * vInvScreenSize); + vConsoleSize = (vViewSize / olc::vi2d(8, 16)) - olc::vi2d(2, 4); + + // If console has changed size, simply reset it + if (vConsoleSize.y != sConsoleLines.size()) + { + vConsoleCursor = { 0,0 }; + sConsoleLines.clear(); + sConsoleLines.resize(vConsoleSize.y); + } + + auto TypeCharacter = [&](const char c) + { + if (c >= 32 && c < 127) + { + sConsoleLines[vConsoleCursor.y].append(1, c); + vConsoleCursor.x++; + } + + if( c == '\n' || vConsoleCursor.x >= vConsoleSize.x) + { + vConsoleCursor.y++; vConsoleCursor.x = 0; + } + + if (vConsoleCursor.y >= vConsoleSize.y) + { + vConsoleCursor.y = vConsoleSize.y - 1; + for (size_t i = 1; i < vConsoleSize.y; i++) + sConsoleLines[i - 1] = sConsoleLines[i]; + sConsoleLines[vConsoleCursor.y].clear(); + } + }; + + // Empty out "std::cout", parsing as we go + while (ssConsoleOutput.rdbuf()->sgetc() != -1) + { + char c = ssConsoleOutput.rdbuf()->sbumpc(); + TypeCharacter(c); + } + + // Draw Shadow + GradientFillRectDecal({ 0,0 }, olc::vf2d(vScreenSize), olc::PixelF(0, 0, 0.5f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f)); + + // Draw the console buffer + SetDecalMode(olc::DecalMode::NORMAL); + for (int32_t nLine = 0; nLine < vConsoleSize.y; nLine++) + DrawStringDecal(olc::vf2d( 1, 1 + float(nLine) ) * vConsoleCharacterScale * 8.0f, sConsoleLines[nLine], olc::WHITE, vConsoleCharacterScale); + + // Draw Input State + FillRectDecal(olc::vf2d(1 + float((TextEntryGetCursor() + 1)), 1 + float((vConsoleSize.y - 1))) * vConsoleCharacterScale * 8.0f, olc::vf2d(8, 8) * vConsoleCharacterScale, olc::DARK_CYAN); + DrawStringDecal(olc::vf2d(1, 1 + float((vConsoleSize.y - 1))) * vConsoleCharacterScale * 8.0f, std::string(">") + TextEntryGetString(), olc::YELLOW, vConsoleCharacterScale); + } + + + const std::vector& PixelGameEngine::GetDroppedFiles() const + { return vDroppedFiles; } + + const olc::vi2d& PixelGameEngine::GetDroppedFilesPoint() const + { return vDroppedFilesPoint; } + + + void PixelGameEngine::TextEntryEnable(const bool bEnable, const std::string& sText) + { + if (bEnable) + { + nTextEntryCursor = int32_t(sText.size()); + sTextEntryString = sText; + bTextEntryEnable = true; + } + else + { + bTextEntryEnable = false; + } + } + + std::string PixelGameEngine::TextEntryGetString() const + { return sTextEntryString; } + + int32_t PixelGameEngine::TextEntryGetCursor() const + { return nTextEntryCursor; } + + bool PixelGameEngine::IsTextEntryEnabled() const + { return bTextEntryEnable; } + + + void PixelGameEngine::UpdateTextEntry() + { + // Check for typed characters + for (const auto& key : vKeyboardMap) + if (GetKey(std::get<0>(key)).bPressed) + { + sTextEntryString.insert(nTextEntryCursor, GetKey(olc::Key::SHIFT).bHeld ? std::get<2>(key) : std::get<1>(key)); + nTextEntryCursor++; + } + + // Check for command characters + if (GetKey(olc::Key::LEFT).bPressed) + nTextEntryCursor = std::max(0, nTextEntryCursor - 1); + if (GetKey(olc::Key::RIGHT).bPressed) + nTextEntryCursor = std::min(int32_t(sTextEntryString.size()), nTextEntryCursor + 1); + if (GetKey(olc::Key::BACK).bPressed && nTextEntryCursor > 0) + { + sTextEntryString.erase(nTextEntryCursor-1, 1); + nTextEntryCursor = std::max(0, nTextEntryCursor - 1); + } + if (GetKey(olc::Key::DEL).bPressed && nTextEntryCursor < sTextEntryString.size()) + sTextEntryString.erase(nTextEntryCursor, 1); + + if (GetKey(olc::Key::UP).bPressed) + { + if (!sCommandHistory.empty()) + { + if (sCommandHistoryIt != sCommandHistory.begin()) + sCommandHistoryIt--; + + nTextEntryCursor = int32_t(sCommandHistoryIt->size()); + sTextEntryString = *sCommandHistoryIt; + } + } + + if (GetKey(olc::Key::DOWN).bPressed) + { + if (!sCommandHistory.empty()) + { + if (sCommandHistoryIt != sCommandHistory.end()) + { + sCommandHistoryIt++; + if (sCommandHistoryIt != sCommandHistory.end()) + { + nTextEntryCursor = int32_t(sCommandHistoryIt->size()); + sTextEntryString = *sCommandHistoryIt; + } + else + { + nTextEntryCursor = 0; + sTextEntryString = ""; + } + } + } + } + + if (GetKey(olc::Key::ENTER).bPressed) + { + if (bConsoleShow) + { + std::cout << ">" + sTextEntryString + "\n"; + if (OnConsoleCommand(sTextEntryString)) + { + sCommandHistory.push_back(sTextEntryString); + sCommandHistoryIt = sCommandHistory.end(); + } + sTextEntryString.clear(); + nTextEntryCursor = 0; + } + else + { + OnTextEntryComplete(sTextEntryString); + TextEntryEnable(false); + } + } + } + + // User must override these functions as required. I have not made + // them abstract because I do need a default behaviour to occur if + // they are not overwritten + + bool PixelGameEngine::OnUserCreate() + { return false; } + + bool PixelGameEngine::OnUserUpdate(float fElapsedTime) + { UNUSED(fElapsedTime); return false; } + + bool PixelGameEngine::OnUserDestroy() + { return true; } + + void PixelGameEngine::GetAnyKey(){}; + void PixelGameEngine::GetAnyKeyPress(olc::Key pressedKey){}; + + void PixelGameEngine::OnTextEntryComplete(const std::string& sText) { UNUSED(sText); } + bool PixelGameEngine::OnConsoleCommand(const std::string& sCommand) { UNUSED(sCommand); return false; } + + // Externalised API + void PixelGameEngine::olc_UpdateViewport() + { + int32_t ww = vScreenSize.x * vPixelSize.x; + int32_t wh = vScreenSize.y * vPixelSize.y; + float wasp = (float)ww / (float)wh; + + if (bPixelCohesion) + { + vScreenPixelSize = (vWindowSize / vScreenSize); + vViewSize = (vWindowSize / vScreenSize) * vScreenSize; + } + else + { + vViewSize.x = (int32_t)vWindowSize.x; + vViewSize.y = (int32_t)((float)vViewSize.x / wasp); + + if (vViewSize.y > vWindowSize.y) + { + vViewSize.y = vWindowSize.y; + vViewSize.x = (int32_t)((float)vViewSize.y * wasp); + } + } + + vViewPos = (vWindowSize - vViewSize) / 2; + } + + void PixelGameEngine::olc_UpdateWindowSize(int32_t x, int32_t y) + { + vWindowSize = { x, y }; + olc_UpdateViewport(); + } + + void PixelGameEngine::olc_UpdateMouseWheel(int32_t delta) + { nMouseWheelDeltaCache += delta; } + + void PixelGameEngine::olc_UpdateMouse(int32_t x, int32_t y) + { + // Mouse coords come in screen space + // But leave in pixel space + bHasMouseFocus = true; + vMouseWindowPos = { x, y }; + // Full Screen mode may have a weird viewport we must clamp to + x -= vViewPos.x; + y -= vViewPos.y; + vMousePosCache.x = (int32_t)(((float)x / (float)(vWindowSize.x - (vViewPos.x * 2)) * (float)vScreenSize.x)); + vMousePosCache.y = (int32_t)(((float)y / (float)(vWindowSize.y - (vViewPos.y * 2)) * (float)vScreenSize.y)); + if (vMousePosCache.x >= (int32_t)vScreenSize.x) vMousePosCache.x = vScreenSize.x - 1; + if (vMousePosCache.y >= (int32_t)vScreenSize.y) vMousePosCache.y = vScreenSize.y - 1; + if (vMousePosCache.x < 0) vMousePosCache.x = 0; + if (vMousePosCache.y < 0) vMousePosCache.y = 0; + } + + void PixelGameEngine::olc_UpdateMouseState(int32_t button, bool state) + { pMouseNewState[button] = state; } + + void PixelGameEngine::olc_UpdateKeyState(int32_t key, bool state) + { pKeyNewState[key] = state; } + + void PixelGameEngine::olc_UpdateMouseFocus(bool state) + { bHasMouseFocus = state; } + + void PixelGameEngine::olc_UpdateKeyFocus(bool state) + { bHasInputFocus = state; } + + void PixelGameEngine::olc_DropFiles(int32_t x, int32_t y, const std::vector& vFiles) + { + x -= vViewPos.x; + y -= vViewPos.y; + vDroppedFilesPointCache.x = (int32_t)(((float)x / (float)(vWindowSize.x - (vViewPos.x * 2)) * (float)vScreenSize.x)); + vDroppedFilesPointCache.y = (int32_t)(((float)y / (float)(vWindowSize.y - (vViewPos.y * 2)) * (float)vScreenSize.y)); + if (vDroppedFilesPointCache.x >= (int32_t)vScreenSize.x) vDroppedFilesPointCache.x = vScreenSize.x - 1; + if (vDroppedFilesPointCache.y >= (int32_t)vScreenSize.y) vDroppedFilesPointCache.y = vScreenSize.y - 1; + if (vDroppedFilesPointCache.x < 0) vDroppedFilesPointCache.x = 0; + if (vDroppedFilesPointCache.y < 0) vDroppedFilesPointCache.y = 0; + vDroppedFilesCache = vFiles; + } + + void PixelGameEngine::olc_Reanimate() + { bAtomActive = true; } + + bool PixelGameEngine::olc_IsRunning() + { return bAtomActive; } + + void PixelGameEngine::olc_Terminate() + { bAtomActive = false; } + + void PixelGameEngine::EngineThread() + { + // Allow platform to do stuff here if needed, since its now in the + // context of this thread + if (platform->ThreadStartUp() == olc::FAIL) return; + + // Do engine context specific initialisation + olc_PrepareEngine(); + + // Create user resources as part of this thread + for (auto& ext : vExtensions) ext->OnBeforeUserCreate(); + if (!OnUserCreate()) bAtomActive = false; + for (auto& ext : vExtensions) ext->OnAfterUserCreate(); + + while (bAtomActive) + { + // Run as fast as possible + while (bAtomActive) { olc_CoreUpdate(); } + + // Allow the user to free resources if they have overrided the destroy function + if (!OnUserDestroy()) + { + // User denied destroy for some reason, so continue running + bAtomActive = true; + } + } + + platform->ThreadCleanUp(); + } + + void PixelGameEngine::olc_PrepareEngine() + { + // Start OpenGL, the context is owned by the game thread + if (platform->CreateGraphics(bFullScreen, bEnableVSYNC, vViewPos, vViewSize) == olc::FAIL) return; + + // Construct default font sheet + olc_ConstructFontSheet(); + + // Create Primary Layer "0" + CreateLayer(); + vLayers[0].bUpdate = true; + vLayers[0].bShow = true; + SetDrawTarget(nullptr); + + m_tp1 = std::chrono::system_clock::now(); + m_tp2 = std::chrono::system_clock::now(); + } + + + void PixelGameEngine::olc_CoreUpdate() + { + // Handle Timing + m_tp2 = std::chrono::system_clock::now(); + std::chrono::duration elapsedTime = m_tp2 - m_tp1; + m_tp1 = m_tp2; + + // Our time per frame coefficient + float fElapsedTime = elapsedTime.count(); + fLastElapsed = fElapsedTime; + + if (bConsoleSuspendTime) + fElapsedTime = 0.0f; + + // Some platforms will need to check for events + platform->HandleSystemEvent(); + + // Compare hardware input states from previous frame + auto ScanHardware = [&](HWButton* pKeys, bool* pStateOld, bool* pStateNew, uint32_t nKeyCount,bool keyboard=true) + { + bool pressed=false; + int key; + for (uint32_t i = 0; i < nKeyCount; i++) + { + pKeys[i].bPressed = false; + pKeys[i].bReleased = false; + if (pStateNew[i] != pStateOld[i]) + { + if (pStateNew[i]) + { + pressed=true; + key=i; + pKeys[i].bPressed = !pKeys[i].bHeld; + pKeys[i].bHeld = true; + } + else + { + pKeys[i].bReleased = true; + pKeys[i].bHeld = false; + } + GetAnyKey(); + } + pStateOld[i] = pStateNew[i]; + } + if (pressed) { + if (keyboard) {GetAnyKeyPress((olc::Key)key);} + else {GetAnyKeyPress(olc::Key::NONE);} + } + }; + + ScanHardware(pKeyboardState, pKeyOldState, pKeyNewState, 256); + ScanHardware(pMouseState, pMouseOldState, pMouseNewState, nMouseButtons, false); + + // Cache mouse coordinates so they remain consistent during frame + vMousePos = vMousePosCache; + nMouseWheelDelta = nMouseWheelDeltaCache; + nMouseWheelDeltaCache = 0; + + vDroppedFiles = vDroppedFilesCache; + vDroppedFilesPoint = vDroppedFilesPointCache; + vDroppedFilesCache.clear(); + + if (bTextEntryEnable) + { + UpdateTextEntry(); + } + + // Handle Frame Update + bool bExtensionBlockFrame = false; + for (auto& ext : vExtensions) bExtensionBlockFrame |= ext->OnBeforeUserUpdate(fElapsedTime); + if (!bExtensionBlockFrame) + { + if (!OnUserUpdate(fElapsedTime)) bAtomActive = false; + + } + for (auto& ext : vExtensions) ext->OnAfterUserUpdate(fElapsedTime); + + if (bConsoleShow) + { + SetDrawTarget((uint8_t)0); + UpdateConsole(); + } + + + + // Display Frame + renderer->UpdateViewport(vViewPos, vViewSize); + renderer->ClearBuffer(olc::BLACK, true); + + // Layer 0 must always exist + vLayers[0].bUpdate = true; + vLayers[0].bShow = true; + SetDecalMode(DecalMode::NORMAL); + renderer->PrepareDrawing(); + + for (auto layer = vLayers.rbegin(); layer != vLayers.rend(); ++layer) + { + if (layer->bShow) + { + if (layer->funcHook == nullptr) + { + renderer->ApplyTexture(layer->pDrawTarget.Decal()->id); + if (!bSuspendTextureTransfer && layer->bUpdate) + { + layer->pDrawTarget.Decal()->Update(); + layer->bUpdate = false; + } + + renderer->DrawLayerQuad(layer->vOffset, layer->vScale, layer->tint); + + // Display Decals in order for this layer + for (auto& decal : layer->vecDecalInstance) + renderer->DrawDecal(decal); + layer->vecDecalInstance.clear(); + } + else + { + // Mwa ha ha.... Have Fun!!! + layer->funcHook(); + } + } + } + + + + // Present Graphics to screen + renderer->DisplayFrame(); + + // Update Title Bar + fFrameTimer += fElapsedTime; + nFrameCount++; + if (fFrameTimer >= 1.0f) + { + nLastFPS = nFrameCount; + fFrameTimer -= 1.0f; + std::string sTitle = "OneLoneCoder.com - Pixel Game Engine - " + sAppName + " - FPS: " + std::to_string(nFrameCount); + platform->SetWindowTitle(sTitle); + nFrameCount = 0; + } + } + + void PixelGameEngine::olc_ConstructFontSheet() + { + std::string data; + data += "?Q`0001oOch0o01o@F40o000000000"; + data += "O000000nOT0063Qo4d8>?7a14Gno94AA4gno94AaOT0>o3`oO400o7QN00000400"; + data += "Of80001oOg<7O7moBGT7O7lABET024@aBEd714AiOdl717a_=TH013Q>00000000"; + data += "720D000V?V5oB3Q_HdUoE7a9@DdDE4A9@DmoE4A;Hg]oM4Aj8S4D84@`00000000"; + data += "OaPT1000Oa`^13P1@AI[?g`1@A=[OdAoHgljA4Ao?WlBA7l1710007l100000000"; + data += "ObM6000oOfMV?3QoBDD`O7a0BDDH@5A0BDD<@5A0BGeVO5ao@CQR?5Po00000000"; + data += "Oc``000?Ogij70PO2D]??0Ph2DUM@7i`2DTg@7lh2GUj?0TO0C1870T?00000000"; + data += "70<4001o?P<7?1QoHg43O;`h@GT0@:@LB@d0>:@hN@L0@?aoN@<0O7ao0000?000"; + data += "OcH0001SOglLA7mg24TnK7ln24US>0PL24U140PnOgl0>7QgOcH0K71S0000A000"; + data += "00H00000@Dm1S007@DUSg00?OdTnH7YhOfTL<7Yh@Cl0700?@Ah0300700000000"; + data += "<008001QL00ZA41a@6HnI<1i@FHLM81M@@0LG81?O`0nC?Y7?`0ZA7Y300080000"; + data += "O`082000Oh0827mo6>Hn?Wmo?6HnMb11MP08@C11H`08@FP0@@0004@000000000"; + data += "00P00001Oab00003OcKP0006@6=PMgl<@440MglH@000000`@000001P00000000"; + data += "Ob@8@@00Ob@8@Ga13R@8Mga172@8?PAo3R@827QoOb@820@0O`0007`0000007P0"; + data += "O`000P08Od400g`<3V=P0G`673IP0`@3>1`00P@6O`P00g`SetPixel(px, py, olc::Pixel(k, k, k, k)); + if (++py == 48) { px++; py = 0; } + } + } + + fontRenderable.Decal()->Update(); + + constexpr std::array vSpacing = { { + 0x03,0x25,0x16,0x08,0x07,0x08,0x08,0x04,0x15,0x15,0x08,0x07,0x15,0x07,0x24,0x08, + 0x08,0x17,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x24,0x15,0x06,0x07,0x16,0x17, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x17,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x08,0x08,0x17,0x08,0x15,0x08,0x15,0x08,0x08, + 0x24,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x33,0x17,0x17,0x33,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x07,0x17,0x17,0x18,0x18,0x17,0x17,0x07,0x33,0x07,0x08,0x00, } }; + + for (auto c : vSpacing) vFontSpacing.push_back({ c >> 4, c & 15 }); + + // UK Standard Layout +#ifdef OLC_KEYBOARD_UK + vKeyboardMap = + { + {olc::Key::A, "a", "A"}, {olc::Key::B, "b", "B"}, {olc::Key::C, "c", "C"}, {olc::Key::D, "d", "D"}, {olc::Key::E, "e", "E"}, + {olc::Key::F, "f", "F"}, {olc::Key::G, "g", "G"}, {olc::Key::H, "h", "H"}, {olc::Key::I, "i", "I"}, {olc::Key::J, "j", "J"}, + {olc::Key::K, "k", "K"}, {olc::Key::L, "l", "L"}, {olc::Key::M, "m", "M"}, {olc::Key::N, "n", "N"}, {olc::Key::O, "o", "O"}, + {olc::Key::P, "p", "P"}, {olc::Key::Q, "q", "Q"}, {olc::Key::R, "r", "R"}, {olc::Key::S, "s", "S"}, {olc::Key::T, "t", "T"}, + {olc::Key::U, "u", "U"}, {olc::Key::V, "v", "V"}, {olc::Key::W, "w", "W"}, {olc::Key::X, "x", "X"}, {olc::Key::Y, "y", "Y"}, + {olc::Key::Z, "z", "Z"}, + + {olc::Key::K0, "0", ")"}, {olc::Key::K1, "1", "!"}, {olc::Key::K2, "2", "\""}, {olc::Key::K3, "3", "#"}, {olc::Key::K4, "4", "$"}, + {olc::Key::K5, "5", "%"}, {olc::Key::K6, "6", "^"}, {olc::Key::K7, "7", "&"}, {olc::Key::K8, "8", "*"}, {olc::Key::K9, "9", "("}, + + {olc::Key::NP0, "0", "0"}, {olc::Key::NP1, "1", "1"}, {olc::Key::NP2, "2", "2"}, {olc::Key::NP3, "3", "3"}, {olc::Key::NP4, "4", "4"}, + {olc::Key::NP5, "5", "5"}, {olc::Key::NP6, "6", "6"}, {olc::Key::NP7, "7", "7"}, {olc::Key::NP8, "8", "8"}, {olc::Key::NP9, "9", "9"}, + {olc::Key::NP_MUL, "*", "*"}, {olc::Key::NP_DIV, "/", "/"}, {olc::Key::NP_ADD, "+", "+"}, {olc::Key::NP_SUB, "-", "-"}, {olc::Key::NP_DECIMAL, ".", "."}, + + {olc::Key::PERIOD, ".", ">"}, {olc::Key::EQUALS, "=", "+"}, {olc::Key::COMMA, ",", "<"}, {olc::Key::MINUS, "-", "_"}, {olc::Key::SPACE, " ", " "}, + + {olc::Key::OEM_1, ";", ":"}, {olc::Key::OEM_2, "/", "?"}, {olc::Key::OEM_3, "\'", "@"}, {olc::Key::OEM_4, "[", "{"}, + {olc::Key::OEM_5, "\\", "|"}, {olc::Key::OEM_6, "]", "}"}, {olc::Key::OEM_7, "#", "~"}, + + // {olc::Key::TAB, "\t", "\t"} + }; +#endif + } + + void PixelGameEngine::pgex_Register(olc::PGEX* pgex) + { + if (std::find(vExtensions.begin(), vExtensions.end(), pgex) == vExtensions.end()) + vExtensions.push_back(pgex); + } + + + PGEX::PGEX(bool bHook) { if(bHook) pge->pgex_Register(this); } + void PGEX::OnBeforeUserCreate() {} + void PGEX::OnAfterUserCreate() {} + bool PGEX::OnBeforeUserUpdate(float& fElapsedTime) { return false; } + void PGEX::OnAfterUserUpdate(float fElapsedTime) {} + + // Need a couple of statics as these are singleton instances + // read from multiple locations + std::atomic PixelGameEngine::bAtomActive{ false }; + olc::PixelGameEngine* olc::PGEX::pge = nullptr; + olc::PixelGameEngine* olc::Platform::ptrPGE = nullptr; + olc::PixelGameEngine* olc::Renderer::ptrPGE = nullptr; + std::unique_ptr olc::Sprite::loader = nullptr; +}; +#pragma endregion + + +#pragma region platform_headless +namespace olc +{ +#if defined(OLC_GFX_HEADLESS) + class Renderer_Headless : public olc::Renderer + { + public: + virtual void PrepareDevice() {}; + virtual olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) { return olc::rcode::OK; } + virtual olc::rcode DestroyDevice() { return olc::rcode::OK; } + virtual void DisplayFrame() {} + virtual void PrepareDrawing() {} + virtual void SetDecalMode(const olc::DecalMode& mode) {} + virtual void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) {} + virtual void DrawDecal(const olc::DecalInstance& decal) {} + virtual uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered = false, const bool clamp = true) {return 1;}; + virtual void UpdateTexture(uint32_t id, olc::Sprite* spr) {} + virtual void ReadTexture(uint32_t id, olc::Sprite* spr) {} + virtual uint32_t DeleteTexture(const uint32_t id) {return 1;} + virtual void ApplyTexture(uint32_t id) {} + virtual void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) {} + virtual void ClearBuffer(olc::Pixel p, bool bDepth) {} + }; +#endif +#if defined(OLC_PLATFORM_HEADLESS) + class Platform_Headless : public olc::Platform + { + public: + virtual olc::rcode ApplicationStartUp() { return olc::rcode::OK; } + virtual olc::rcode ApplicationCleanUp() { return olc::rcode::OK; } + virtual olc::rcode ThreadStartUp() { return olc::rcode::OK; } + virtual olc::rcode ThreadCleanUp() { return olc::rcode::OK; } + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) { return olc::rcode::OK; } + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) { return olc::rcode::OK; } + virtual olc::rcode SetWindowTitle(const std::string& s) { return olc::rcode::OK; } + virtual olc::rcode StartSystemEventLoop() { return olc::rcode::OK; } + virtual olc::rcode HandleSystemEvent() { return olc::rcode::OK; } + }; +#endif +} +#pragma endregion + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Renderers - the draw-y bits | +// O------------------------------------------------------------------------------O + +#pragma region image_stb +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: stb_image.h, all systems, very fast | +// O------------------------------------------------------------------------------O +// Thanks to Sean Barrett - https://github.com/nothings/stb/blob/master/stb_image.h +// MIT License - Copyright(c) 2017 Sean Barrett + +// Note you need to download the above file into your project folder, and +// #define OLC_IMAGE_STB +// #define OLC_PGE_APPLICATION +// #include "olcPixelGameEngine.h" + +#if defined(OLC_IMAGE_STB) +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" +namespace olc +{ + class ImageLoader_STB : public olc::ImageLoader + { + public: + ImageLoader_STB() : ImageLoader() + {} + + olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) override + { + UNUSED(pack); + // clear out existing sprite + spr->pColData.clear(); + // Open file + stbi_uc* bytes = nullptr; + int w = 0, h = 0, cmp = 0; + if (pack != nullptr) + { + ResourceBuffer rb = pack->GetFileBuffer(sImageFile); + bytes = stbi_load_from_memory((unsigned char*)rb.vMemory.data(), rb.vMemory.size(), &w, &h, &cmp, 4); + } + else + { + // Check file exists + if (!_gfs::exists(sImageFile)) return olc::rcode::NO_FILE; + bytes = stbi_load(sImageFile.c_str(), &w, &h, &cmp, 4); + } + + if (!bytes) return olc::rcode::FAIL; + spr->width = w; spr->height = h; + spr->pColData.resize(spr->width * spr->height); + std::memcpy(spr->pColData.data(), bytes, spr->width * spr->height * 4); + delete[] bytes; + return olc::rcode::OK; + } + + olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) override + { + return olc::rcode::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: stb_image.h | +// O------------------------------------------------------------------------------O +#pragma endregion + + + +#if !defined(OLC_PGE_HEADLESS) + +#pragma region renderer_ogl10 +// O------------------------------------------------------------------------------O +// | START RENDERER: OpenGL 1.0 (the original, the best...) | +// O------------------------------------------------------------------------------O +#if defined(OLC_GFX_OPENGL10) + +#if defined(OLC_PLATFORM_WINAPI) + #include + #include + #if !defined(__MINGW32__) + #pragma comment(lib, "Dwmapi.lib") + #endif + typedef BOOL(WINAPI wglSwapInterval_t) (int interval); + static wglSwapInterval_t* wglSwapInterval = nullptr; + typedef HDC glDeviceContext_t; + typedef HGLRC glRenderContext_t; +#endif + +#if defined(__linux__) || defined(__FreeBSD__) + #include +#endif + +#if defined(OLC_PLATFORM_X11) + namespace X11 + { + #include + } + typedef int(glSwapInterval_t)(X11::Display* dpy, X11::GLXDrawable drawable, int interval); + static glSwapInterval_t* glSwapIntervalEXT; + typedef X11::GLXContext glDeviceContext_t; + typedef X11::GLXContext glRenderContext_t; +#endif + +#if defined(__APPLE__) + #define GL_SILENCE_DEPRECATION + #include + #include + #include +#endif + +namespace olc +{ + class Renderer_OGL10 : public olc::Renderer + { + private: +#if defined(OLC_PLATFORM_GLUT) + bool mFullScreen = false; +#else + glDeviceContext_t glDeviceContext = 0; + glRenderContext_t glRenderContext = 0; +#endif + + bool bSync = false; + olc::DecalMode nDecalMode = olc::DecalMode(-1); // Thanks Gusgo & Bispoo + olc::DecalStructure nDecalStructure = olc::DecalStructure(-1); +#if defined(OLC_PLATFORM_X11) + X11::Display* olc_Display = nullptr; + X11::Window* olc_Window = nullptr; + X11::XVisualInfo* olc_VisualInfo = nullptr; +#endif + + public: + void PrepareDevice() override + { +#if defined(OLC_PLATFORM_GLUT) + //glutInit has to be called with main() arguments, make fake ones + int argc = 0; + char* argv[1] = { (char*)"" }; + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(512, 512); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); + // Creates the window and the OpenGL context for it + glutCreateWindow("OneLoneCoder.com - Pixel Game Engine"); + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif + } + + olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) override + { +#if defined(OLC_PLATFORM_WINAPI) + // Create Device Context + glDeviceContext = GetDC((HWND)(params[0])); + PIXELFORMATDESCRIPTOR pfd = + { + sizeof(PIXELFORMATDESCRIPTOR), 1, + PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, + PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + PFD_MAIN_PLANE, 0, 0, 0, 0 + }; + + int pf = 0; + if (!(pf = ChoosePixelFormat(glDeviceContext, &pfd))) return olc::FAIL; + SetPixelFormat(glDeviceContext, pf, &pfd); + + if (!(glRenderContext = wglCreateContext(glDeviceContext))) return olc::FAIL; + wglMakeCurrent(glDeviceContext, glRenderContext); + + // Remove Frame cap + wglSwapInterval = (wglSwapInterval_t*)wglGetProcAddress("wglSwapIntervalEXT"); + if (wglSwapInterval && !bVSYNC) wglSwapInterval(0); + bSync = bVSYNC; +#endif + +#if defined(OLC_PLATFORM_X11) + using namespace X11; + // Linux has tighter coupling between OpenGL and X11, so we store + // various "platform" handles in the renderer + olc_Display = (X11::Display*)(params[0]); + olc_Window = (X11::Window*)(params[1]); + olc_VisualInfo = (X11::XVisualInfo*)(params[2]); + + glDeviceContext = glXCreateContext(olc_Display, olc_VisualInfo, nullptr, GL_TRUE); + glXMakeCurrent(olc_Display, *olc_Window, glDeviceContext); + + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, *olc_Window, &gwa); + glViewport(0, 0, gwa.width, gwa.height); + + glSwapIntervalEXT = nullptr; + glSwapIntervalEXT = (glSwapInterval_t*)glXGetProcAddress((unsigned char*)"glXSwapIntervalEXT"); + + if (glSwapIntervalEXT == nullptr && !bVSYNC) + { + printf("NOTE: Could not disable VSYNC, glXSwapIntervalEXT() was not found!\n"); + printf(" Don't worry though, things will still work, it's just the\n"); + printf(" frame rate will be capped to your monitors refresh rate - javidx9\n"); + } + + if (glSwapIntervalEXT != nullptr && !bVSYNC) + glSwapIntervalEXT(olc_Display, *olc_Window, 0); +#endif + +#if defined(OLC_PLATFORM_GLUT) + mFullScreen = bFullScreen; + if (!bVSYNC) + { +#if defined(__APPLE__) + GLint sync = 0; + CGLContextObj ctx = CGLGetCurrentContext(); + if (ctx) CGLSetParameter(ctx, kCGLCPSwapInterval, &sync); +#endif + } +#else + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif + return olc::rcode::OK; + } + + olc::rcode DestroyDevice() override + { +#if defined(OLC_PLATFORM_WINAPI) + wglDeleteContext(glRenderContext); +#endif + +#if defined(OLC_PLATFORM_X11) + glXMakeCurrent(olc_Display, None, NULL); + glXDestroyContext(olc_Display, glDeviceContext); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutDestroyWindow(glutGetWindow()); +#endif + return olc::rcode::OK; + } + + void DisplayFrame() override + { +#if defined(OLC_PLATFORM_WINAPI) + SwapBuffers(glDeviceContext); + if (bSync) DwmFlush(); // Woooohooooooo!!!! SMOOOOOOOTH! +#endif + +#if defined(OLC_PLATFORM_X11) + X11::glXSwapBuffers(olc_Display, *olc_Window); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutSwapBuffers(); +#endif + } + + void PrepareDrawing() override + { + + //ClearBuffer(olc::GREEN, true); + glEnable(GL_BLEND); + nDecalMode = DecalMode::NORMAL; + nDecalStructure = DecalStructure::FAN; + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + void SetDecalMode(const olc::DecalMode& mode) + { + if (mode != nDecalMode) + { + switch (mode) + { + case olc::DecalMode::NORMAL: + case olc::DecalMode::MODEL3D: + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + break; + case olc::DecalMode::ADDITIVE: + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + break; + case olc::DecalMode::MULTIPLICATIVE: + glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); + break; + case olc::DecalMode::STENCIL: + glBlendFunc(GL_ZERO, GL_SRC_ALPHA); + break; + case olc::DecalMode::ILLUMINATE: + glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); + break; + case olc::DecalMode::WIREFRAME: + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + break; + } + + nDecalMode = mode; + } + } + + void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) override + { + glBegin(GL_QUADS); + glColor4ub(tint.r, tint.g, tint.b, tint.a); + glTexCoord2f(0.0f * scale.x + offset.x, 1.0f * scale.y + offset.y); + glVertex3f(-1.0f /*+ vSubPixelOffset.x*/, -1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glTexCoord2f(0.0f * scale.x + offset.x, 0.0f * scale.y + offset.y); + glVertex3f(-1.0f /*+ vSubPixelOffset.x*/, 1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glTexCoord2f(1.0f * scale.x + offset.x, 0.0f * scale.y + offset.y); + glVertex3f(1.0f /*+ vSubPixelOffset.x*/, 1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glTexCoord2f(1.0f * scale.x + offset.x, 1.0f * scale.y + offset.y); + glVertex3f(1.0f /*+ vSubPixelOffset.x*/, -1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glEnd(); + } + + void DrawDecal(const olc::DecalInstance& decal) override + { + SetDecalMode(decal.mode); + + if (decal.decal == nullptr) + glBindTexture(GL_TEXTURE_2D, 0); + else + glBindTexture(GL_TEXTURE_2D, decal.decal->id); + + if (nDecalMode == DecalMode::MODEL3D) + { +#ifdef OLC_ENABLE_EXPERIMENTAL + glMatrixMode(GL_PROJECTION); glPushMatrix(); + glMatrixMode(GL_MODELVIEW); glPushMatrix(); + + glEnable(GL_DEPTH_TEST); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-1.0f, 1.0f, -1.0f, 1.0f, 1, 1000); + + #pragma comment (lib, "winmm.lib") + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0, -40, -200); + glRotatef(float(clock()) * 0.1f, 1, 0, 0); + glRotatef(float(clock()) * 0.1f * 2, 0, 1, 0); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glBegin(GL_TRIANGLES); + + + // Render as 3D Spatial Entity + for (uint32_t n = 0; n < decal.points; n++) + { + glColor4ub(decal.tint[n].r, decal.tint[n].g, decal.tint[n].b, decal.tint[n].a); + glTexCoord2f(decal.uv[n].x, decal.uv[n].y); + glVertex3f(decal.pos[n].x, decal.pos[n].y, decal.w[n]); + } + + glEnd(); + + glMatrixMode(GL_PROJECTION); glPopMatrix(); + glMatrixMode(GL_MODELVIEW); glPopMatrix(); + glDisable(GL_DEPTH_TEST); +#endif + } + else + { + if (nDecalMode == DecalMode::WIREFRAME) + glBegin(GL_LINE_LOOP); + else + { + if(decal.structure == olc::DecalStructure::FAN) + glBegin(GL_TRIANGLE_FAN); + else if(decal.structure == olc::DecalStructure::STRIP) + glBegin(GL_TRIANGLE_STRIP); + else if(decal.structure == olc::DecalStructure::LIST) + glBegin(GL_TRIANGLES); + } + + // Render as 2D Spatial entity + for (uint32_t n = 0; n < decal.points; n++) + { + glColor4ub(decal.tint[n].r, decal.tint[n].g, decal.tint[n].b, decal.tint[n].a); + glTexCoord4f(decal.uv[n].x, decal.uv[n].y, 0.0f, decal.w[n]); + glVertex2f(decal.pos[n].x, decal.pos[n].y); + } + + glEnd(); + } + + + //glDisable(GL_DEPTH_TEST); + } + + uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered, const bool clamp) override + { + UNUSED(width); + UNUSED(height); + uint32_t id = 0; + glGenTextures(1, &id); + glBindTexture(GL_TEXTURE_2D, id); + if (filtered) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + + if (clamp) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + } + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + return id; + } + + uint32_t DeleteTexture(const uint32_t id) override + { + glDeleteTextures(1, &id); + return id; + } + + void UpdateTexture(uint32_t id, olc::Sprite* spr) override + { + UNUSED(id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, spr->width, spr->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ReadTexture(uint32_t id, olc::Sprite* spr) override + { + glReadPixels(0, 0, spr->width, spr->height, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ApplyTexture(uint32_t id) override + { + glBindTexture(GL_TEXTURE_2D, id); + } + + void ClearBuffer(olc::Pixel p, bool bDepth) override + { + glClearColor(float(p.r) / 255.0f, float(p.g) / 255.0f, float(p.b) / 255.0f, float(p.a) / 255.0f); + glClear(GL_COLOR_BUFFER_BIT); + if (bDepth) glClear(GL_DEPTH_BUFFER_BIT); + } + + void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) override + { + glViewport(pos.x, pos.y, size.x, size.y); + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END RENDERER: OpenGL 1.0 (the original, the best...) | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region renderer_ogl33 +// O------------------------------------------------------------------------------O +// | START RENDERER: OpenGL 3.3 (3.0 es) (sh-sh-sh-shaders....) | +// O------------------------------------------------------------------------------O +#if defined(OLC_GFX_OPENGL33) + +#if defined(OLC_PLATFORM_WINAPI) + #include + //#include + #if !defined(__MINGW32__) + #pragma comment(lib, "Dwmapi.lib") + #endif + //typedef void __stdcall locSwapInterval_t(GLsizei n); + typedef HDC glDeviceContext_t; + typedef HGLRC glRenderContext_t; + //#define CALLSTYLE __stdcall + #define OGL_LOAD(t, n) (t*)wglGetProcAddress(#n) +#endif +// +//#if defined(__linux__) || defined(__FreeBSD__) +// #include +//#endif + +#if defined(OLC_PLATFORM_X11) + /*namespace X11 + { + #include + } + typedef int(locSwapInterval_t)(X11::Display* dpy, X11::GLXDrawable drawable, int interval);*/ + typedef X11::GLXContext glDeviceContext_t; + typedef X11::GLXContext glRenderContext_t; + //#define CALLSTYLE + #define OGL_LOAD(t, n) (t*)glXGetProcAddress((unsigned char*)#n); +#endif + +//#if defined(__APPLE__) +// #define GL_SILENCE_DEPRECATION +// #include +// #include +// #include +//#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + #include + #include + #define GL_GLEXT_PROTOTYPES + #include + #include + #define CALLSTYLE + typedef EGLBoolean(locSwapInterval_t)(EGLDisplay display, EGLint interval); + #define GL_CLAMP GL_CLAMP_TO_EDGE + #define OGL_LOAD(t, n) n; +#endif + +namespace olc +{ +// typedef char GLchar; +// typedef ptrdiff_t GLsizeiptr; +// typedef GLuint CALLSTYLE locCreateShader_t(GLenum type); +// typedef GLuint CALLSTYLE locCreateProgram_t(void); +// typedef void CALLSTYLE locDeleteShader_t(GLuint shader); +//#if defined(OLC_PLATFORM_EMSCRIPTEN) +// typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); +//#else +// typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar** string, const GLint* length); +//#endif +// typedef void CALLSTYLE locCompileShader_t(GLuint shader); +// typedef void CALLSTYLE locLinkProgram_t(GLuint program); +// typedef void CALLSTYLE locDeleteProgram_t(GLuint program); +// typedef void CALLSTYLE locAttachShader_t(GLuint program, GLuint shader); +// typedef void CALLSTYLE locBindBuffer_t(GLenum target, GLuint buffer); +// typedef void CALLSTYLE locBufferData_t(GLenum target, GLsizeiptr size, const void* data, GLenum usage); +// typedef void CALLSTYLE locGenBuffers_t(GLsizei n, GLuint* buffers); +// typedef void CALLSTYLE locVertexAttribPointer_t(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); +// typedef void CALLSTYLE locEnableVertexAttribArray_t(GLuint index); +// typedef void CALLSTYLE locUseProgram_t(GLuint program); +// typedef void CALLSTYLE locBindVertexArray_t(GLuint array); +// typedef void CALLSTYLE locGenVertexArrays_t(GLsizei n, GLuint* arrays); +// typedef void CALLSTYLE locGetShaderInfoLog_t(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); +// typedef GLint CALLSTYLE locGetUniformLocation_t(GLuint program, const GLchar* name); +// typedef void CALLSTYLE locUniform1f_t(GLint location, GLfloat v0); +// typedef void CALLSTYLE locUniform1i_t(GLint location, GLint v0); +// typedef void CALLSTYLE locUniform2fv_t(GLint location, GLsizei count, const GLfloat* value); +// typedef void CALLSTYLE locActiveTexture_t(GLenum texture); +// typedef void CALLSTYLE locGenFrameBuffers_t(GLsizei n, GLuint* ids); +// typedef void CALLSTYLE locBindFrameBuffer_t(GLenum target, GLuint fb); +// typedef GLenum CALLSTYLE locCheckFrameBufferStatus_t(GLenum target); +// typedef void CALLSTYLE locDeleteFrameBuffers_t(GLsizei n, const GLuint* fbs); +// typedef void CALLSTYLE locFrameBufferTexture2D_t(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +// typedef void CALLSTYLE locDrawBuffers_t(GLsizei n, const GLenum* bufs); +// typedef void CALLSTYLE locBlendFuncSeparate_t(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + + + + class Renderer_OGL33 : public olc::Renderer + { + private: +#if defined(OLC_PLATFORM_EMSCRIPTEN) + EGLDisplay olc_Display; + EGLConfig olc_Config; + EGLContext olc_Context; + EGLSurface olc_Surface; +#endif + +#if defined(OLC_PLATFORM_GLUT) + bool mFullScreen = false; +#else + #if !defined(OLC_PLATFORM_EMSCRIPTEN) + glDeviceContext_t glDeviceContext = 0; + glRenderContext_t glRenderContext = 0; + #endif +#endif + bool bSync = false; + olc::DecalMode nDecalMode = olc::DecalMode(-1); // Thanks Gusgo & Bispoo +#if defined(OLC_PLATFORM_X11) + X11::Display* olc_Display = nullptr; + X11::Window* olc_Window = nullptr; + X11::XVisualInfo* olc_VisualInfo = nullptr; +#endif + + private: + locCreateShader_t* locCreateShader = nullptr; + locShaderSource_t* locShaderSource = nullptr; + locCompileShader_t* locCompileShader = nullptr; + locDeleteShader_t* locDeleteShader = nullptr; + locCreateProgram_t* locCreateProgram = nullptr; + locDeleteProgram_t* locDeleteProgram = nullptr; + locLinkProgram_t* locLinkProgram = nullptr; + locAttachShader_t* locAttachShader = nullptr; + locBindBuffer_t* locBindBuffer = nullptr; + locBufferData_t* locBufferData = nullptr; + locGenBuffers_t* locGenBuffers = nullptr; + locVertexAttribPointer_t* locVertexAttribPointer = nullptr; + locEnableVertexAttribArray_t* locEnableVertexAttribArray = nullptr; + locUseProgram_t* locUseProgram = nullptr; + locBindVertexArray_t* locBindVertexArray = nullptr; + locGenVertexArrays_t* locGenVertexArrays = nullptr; + locSwapInterval_t* locSwapInterval = nullptr; + locGetShaderInfoLog_t* locGetShaderInfoLog = nullptr; + + uint32_t m_nFS = 0; + uint32_t m_nVS = 0; + uint32_t m_nQuadShader = 0; + uint32_t m_vbQuad = 0; + uint32_t m_vaQuad = 0; + + struct locVertex + { + float pos[3]; + olc::vf2d tex; + olc::Pixel col; + }; + + locVertex pVertexMem[OLC_MAX_VERTS]; + + olc::Renderable rendBlankQuad; + + public: + void PrepareDevice() override + { +#if defined(OLC_PLATFORM_GLUT) + //glutInit has to be called with main() arguments, make fake ones + int argc = 0; + char* argv[1] = { (char*)"" }; + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(512, 512); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); + // Creates the window and the OpenGL context for it + glutCreateWindow("OneLoneCoder.com - Pixel Game Engine"); + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif + } + + olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) override + { + // Create OpenGL Context +#if defined(OLC_PLATFORM_WINAPI) + // Create Device Context + glDeviceContext = GetDC((HWND)(params[0])); + PIXELFORMATDESCRIPTOR pfd = + { + sizeof(PIXELFORMATDESCRIPTOR), 1, + PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, + PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + PFD_MAIN_PLANE, 0, 0, 0, 0 + }; + + int pf = 0; + if (!(pf = ChoosePixelFormat(glDeviceContext, &pfd))) return olc::FAIL; + SetPixelFormat(glDeviceContext, pf, &pfd); + + if (!(glRenderContext = wglCreateContext(glDeviceContext))) return olc::FAIL; + wglMakeCurrent(glDeviceContext, glRenderContext); + + // Set Vertical Sync + locSwapInterval = OGL_LOAD(locSwapInterval_t, wglSwapIntervalEXT); + if (locSwapInterval && !bVSYNC) locSwapInterval(0); + bSync = bVSYNC; +#endif + +#if defined(OLC_PLATFORM_X11) + using namespace X11; + // Linux has tighter coupling between OpenGL and X11, so we store + // various "platform" handles in the renderer + olc_Display = (X11::Display*)(params[0]); + olc_Window = (X11::Window*)(params[1]); + olc_VisualInfo = (X11::XVisualInfo*)(params[2]); + + glDeviceContext = glXCreateContext(olc_Display, olc_VisualInfo, nullptr, GL_TRUE); + glXMakeCurrent(olc_Display, *olc_Window, glDeviceContext); + + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, *olc_Window, &gwa); + glViewport(0, 0, gwa.width, gwa.height); + + locSwapInterval = OGL_LOAD(locSwapInterval_t, glXSwapIntervalEXT); + + if (locSwapInterval == nullptr && !bVSYNC) + { + printf("NOTE: Could not disable VSYNC, glXSwapIntervalEXT() was not found!\n"); + printf(" Don't worry though, things will still work, it's just the\n"); + printf(" frame rate will be capped to your monitors refresh rate - javidx9\n"); + } + + if (locSwapInterval != nullptr && !bVSYNC) + locSwapInterval(olc_Display, *olc_Window, 0); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + EGLint const attribute_list[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_ALPHA_SIZE, 8, EGL_NONE }; + EGLint const context_config[] = { EGL_CONTEXT_CLIENT_VERSION , 2, EGL_NONE }; + EGLint num_config; + + olc_Display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(olc_Display, nullptr, nullptr); + eglChooseConfig(olc_Display, attribute_list, &olc_Config, 1, &num_config); + + /* create an EGL rendering context */ + olc_Context = eglCreateContext(olc_Display, olc_Config, EGL_NO_CONTEXT, context_config); + olc_Surface = eglCreateWindowSurface(olc_Display, olc_Config, NULL, nullptr); + eglMakeCurrent(olc_Display, olc_Surface, olc_Surface, olc_Context); + //eglSwapInterval is currently a NOP, plement anyways in case it becomes supported + locSwapInterval = &eglSwapInterval; + locSwapInterval(olc_Display, bVSYNC ? 1 : 0); +#endif + +#if defined(OLC_PLATFORM_GLUT) + mFullScreen = bFullScreen; + if (!bVSYNC) + { +#if defined(__APPLE__) + GLint sync = 0; + CGLContextObj ctx = CGLGetCurrentContext(); + if (ctx) CGLSetParameter(ctx, kCGLCPSwapInterval, &sync); +#endif + } +#else + #if !defined(OLC_PLATFORM_EMSCRIPTEN) + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + #endif +#endif + // Load External OpenGL Functions + locCreateShader = OGL_LOAD(locCreateShader_t, glCreateShader); + locCompileShader = OGL_LOAD(locCompileShader_t, glCompileShader); + locShaderSource = OGL_LOAD(locShaderSource_t, glShaderSource); + locDeleteShader = OGL_LOAD(locDeleteShader_t, glDeleteShader); + locCreateProgram = OGL_LOAD(locCreateProgram_t, glCreateProgram); + locDeleteProgram = OGL_LOAD(locDeleteProgram_t, glDeleteProgram); + locLinkProgram = OGL_LOAD(locLinkProgram_t, glLinkProgram); + locAttachShader = OGL_LOAD(locAttachShader_t, glAttachShader); + locBindBuffer = OGL_LOAD(locBindBuffer_t, glBindBuffer); + locBufferData = OGL_LOAD(locBufferData_t, glBufferData); + locGenBuffers = OGL_LOAD(locGenBuffers_t, glGenBuffers); + locVertexAttribPointer = OGL_LOAD(locVertexAttribPointer_t, glVertexAttribPointer); + locEnableVertexAttribArray = OGL_LOAD(locEnableVertexAttribArray_t, glEnableVertexAttribArray); + locUseProgram = OGL_LOAD(locUseProgram_t, glUseProgram); + locGetShaderInfoLog = OGL_LOAD(locGetShaderInfoLog_t, glGetShaderInfoLog); +#if !defined(OLC_PLATFORM_EMSCRIPTEN) + locBindVertexArray = OGL_LOAD(locBindVertexArray_t, glBindVertexArray); + locGenVertexArrays = OGL_LOAD(locGenVertexArrays_t, glGenVertexArrays); +#else + locBindVertexArray = glBindVertexArrayOES; + locGenVertexArrays = glGenVertexArraysOES; +#endif + + // Load & Compile Quad Shader - assumes no errors + m_nFS = locCreateShader(0x8B30); + const GLchar* strFS = +#if defined(__arm__) || defined(OLC_PLATFORM_EMSCRIPTEN) + "#version 300 es\n" + "precision mediump float;" +#else + "#version 330 core\n" +#endif + "out vec4 pixel;\n""in vec2 oTex;\n" + "in vec4 oCol;\n""uniform sampler2D sprTex;\n""void main(){pixel = texture(sprTex, oTex) * oCol;}"; + locShaderSource(m_nFS, 1, &strFS, NULL); + locCompileShader(m_nFS); + + m_nVS = locCreateShader(0x8B31); + const GLchar* strVS = +#if defined(__arm__) || defined(OLC_PLATFORM_EMSCRIPTEN) + "#version 300 es\n" + "precision mediump float;" +#else + "#version 330 core\n" +#endif + "layout(location = 0) in vec3 aPos;\n""layout(location = 1) in vec2 aTex;\n" + "layout(location = 2) in vec4 aCol;\n""out vec2 oTex;\n""out vec4 oCol;\n" + "void main(){ float p = 1.0 / aPos.z; gl_Position = p * vec4(aPos.x, aPos.y, 0.0, 1.0); oTex = p * aTex; oCol = aCol;}"; + locShaderSource(m_nVS, 1, &strVS, NULL); + locCompileShader(m_nVS); + + m_nQuadShader = locCreateProgram(); + locAttachShader(m_nQuadShader, m_nFS); + locAttachShader(m_nQuadShader, m_nVS); + locLinkProgram(m_nQuadShader); + + // Create Quad + locGenBuffers(1, &m_vbQuad); + locGenVertexArrays(1, &m_vaQuad); + locBindVertexArray(m_vaQuad); + locBindBuffer(0x8892, m_vbQuad); + + locVertex verts[OLC_MAX_VERTS]; + locBufferData(0x8892, sizeof(locVertex) * OLC_MAX_VERTS, verts, 0x88E0); + locVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(locVertex), 0); locEnableVertexAttribArray(0); + locVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(locVertex), (void*)(3 * sizeof(float))); locEnableVertexAttribArray(1); + locVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(locVertex), (void*)(5 * sizeof(float))); locEnableVertexAttribArray(2); + locBindBuffer(0x8892, 0); + locBindVertexArray(0); + + // Create blank texture for spriteless decals + rendBlankQuad.Create(1, 1); + rendBlankQuad.Sprite()->GetData()[0] = olc::WHITE; + rendBlankQuad.Decal()->Update(); + return olc::rcode::OK; + } + + olc::rcode DestroyDevice() override + { +#if defined(OLC_PLATFORM_WINAPI) + wglDeleteContext(glRenderContext); +#endif + +#if defined(OLC_PLATFORM_X11) + glXMakeCurrent(olc_Display, None, NULL); + glXDestroyContext(olc_Display, glDeviceContext); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutDestroyWindow(glutGetWindow()); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + eglMakeCurrent(olc_Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglDestroyContext(olc_Display, olc_Context); + eglDestroySurface(olc_Display, olc_Surface); + eglTerminate(olc_Display); + olc_Display = EGL_NO_DISPLAY; + olc_Surface = EGL_NO_SURFACE; + olc_Context = EGL_NO_CONTEXT; +#endif + return olc::rcode::OK; + } + + void DisplayFrame() override + { +#if defined(OLC_PLATFORM_WINAPI) + SwapBuffers(glDeviceContext); + if (bSync) DwmFlush(); // Woooohooooooo!!!! SMOOOOOOOTH! +#endif + +#if defined(OLC_PLATFORM_X11) + X11::glXSwapBuffers(olc_Display, *olc_Window); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutSwapBuffers(); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + eglSwapBuffers(olc_Display, olc_Surface); +#endif + } + + void PrepareDrawing() override + { + glEnable(GL_BLEND); + nDecalMode = DecalMode::NORMAL; + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + locUseProgram(m_nQuadShader); + locBindVertexArray(m_vaQuad); + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + locVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(locVertex), 0); locEnableVertexAttribArray(0); + locVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(locVertex), (void*)(3 * sizeof(float))); locEnableVertexAttribArray(1); + locVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(locVertex), (void*)(5 * sizeof(float))); locEnableVertexAttribArray(2); +#endif + } + + void SetDecalMode(const olc::DecalMode& mode) override + { + if (mode != nDecalMode) + { + switch (mode) + { + case olc::DecalMode::NORMAL: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; + case olc::DecalMode::ADDITIVE: glBlendFunc(GL_SRC_ALPHA, GL_ONE); break; + case olc::DecalMode::MULTIPLICATIVE: glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); break; + case olc::DecalMode::STENCIL: glBlendFunc(GL_ZERO, GL_SRC_ALPHA); break; + case olc::DecalMode::ILLUMINATE: glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); break; + case olc::DecalMode::WIREFRAME: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; + } + + nDecalMode = mode; + } + } + + void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) override + { + locBindBuffer(0x8892, m_vbQuad); + locVertex verts[4] = { + {{-1.0f, -1.0f, 1.0}, {0.0f * scale.x + offset.x, 1.0f * scale.y + offset.y}, tint}, + {{+1.0f, -1.0f, 1.0}, {1.0f * scale.x + offset.x, 1.0f * scale.y + offset.y}, tint}, + {{-1.0f, +1.0f, 1.0}, {0.0f * scale.x + offset.x, 0.0f * scale.y + offset.y}, tint}, + {{+1.0f, +1.0f, 1.0}, {1.0f * scale.x + offset.x, 0.0f * scale.y + offset.y}, tint}, + }; + + locBufferData(0x8892, sizeof(locVertex) * 4, verts, 0x88E0); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } + + void DrawDecal(const olc::DecalInstance& decal) override + { + SetDecalMode(decal.mode); + if (decal.decal == nullptr) + glBindTexture(GL_TEXTURE_2D, rendBlankQuad.Decal()->id); + else + glBindTexture(GL_TEXTURE_2D, decal.decal->id); + + locBindBuffer(0x8892, m_vbQuad); + + for (uint32_t i = 0; i < decal.points; i++) + pVertexMem[i] = { { decal.pos[i].x, decal.pos[i].y, decal.w[i] }, { decal.uv[i].x, decal.uv[i].y }, decal.tint[i] }; + + locBufferData(0x8892, sizeof(locVertex) * decal.points, pVertexMem, 0x88E0); + + if (nDecalMode == DecalMode::WIREFRAME) + glDrawArrays(GL_LINE_LOOP, 0, decal.points); + else + { + if (decal.structure == olc::DecalStructure::FAN) + glDrawArrays(GL_TRIANGLE_FAN, 0, decal.points); + else if (decal.structure == olc::DecalStructure::STRIP) + glDrawArrays(GL_TRIANGLE_STRIP, 0, decal.points); + else if (decal.structure == olc::DecalStructure::LIST) + glDrawArrays(GL_TRIANGLES, 0, decal.points); + } + } + + uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered, const bool clamp) override + { + UNUSED(width); + UNUSED(height); + uint32_t id = 0; + glGenTextures(1, &id); + glBindTexture(GL_TEXTURE_2D, id); + + if (filtered) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + + if (clamp) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + } +#if !defined(OLC_PLATFORM_EMSCRIPTEN) + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); +#endif + return id; + } + + uint32_t DeleteTexture(const uint32_t id) override + { + glDeleteTextures(1, &id); + return id; + } + + void UpdateTexture(uint32_t id, olc::Sprite* spr) override + { + UNUSED(id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, spr->width, spr->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ReadTexture(uint32_t id, olc::Sprite* spr) override + { + glReadPixels(0, 0, spr->width, spr->height, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ApplyTexture(uint32_t id) override + { + glBindTexture(GL_TEXTURE_2D, id); + } + + void ClearBuffer(olc::Pixel p, bool bDepth) override + { + glClearColor(float(p.r) / 255.0f, float(p.g) / 255.0f, float(p.b) / 255.0f, float(p.a) / 255.0f); + glClear(GL_COLOR_BUFFER_BIT); + if (bDepth) glClear(GL_DEPTH_BUFFER_BIT); + } + + void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) override + { + glViewport(pos.x, pos.y, size.x, size.y); + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END RENDERER: OpenGL 3.3 (3.0 es) (sh-sh-sh-shaders....) | +// O------------------------------------------------------------------------------O +#pragma endregion + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Image loaders | +// O------------------------------------------------------------------------------O + +#pragma region image_gdi +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: GDI+, Windows Only, always exists, a little slow | +// O------------------------------------------------------------------------------O +#if defined(OLC_IMAGE_GDI) + +#define min(a, b) ((a < b) ? a : b) +#define max(a, b) ((a > b) ? a : b) +#include +#include +#if defined(__MINGW32__) // Thanks Gusgo & Dandistine, but c'mon mingw!! wtf?! + #include +#else + #include +#endif +#include +#undef min +#undef max + +#if !defined(__MINGW32__) + #pragma comment(lib, "gdiplus.lib") + #pragma comment(lib, "Shlwapi.lib") +#endif + +namespace olc +{ + // Thanks @MaGetzUb for this, which allows sprites to be defined + // at construction, by initialising the GDI subsystem + static class GDIPlusStartup + { + public: + GDIPlusStartup() + { + Gdiplus::GdiplusStartupInput startupInput; + GdiplusStartup(&token, &startupInput, NULL); + } + + ULONG_PTR token; + + ~GDIPlusStartup() + { + // Well, MarcusTU thought this was important :D + Gdiplus::GdiplusShutdown(token); + } + } gdistartup; + + class ImageLoader_GDIPlus : public olc::ImageLoader + { + private: + std::wstring ConvertS2W(std::string s) + { +#ifdef __MINGW32__ + wchar_t* buffer = new wchar_t[s.length() + 1]; + mbstowcs(buffer, s.c_str(), s.length()); + buffer[s.length()] = L'\0'; +#else + int count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0); + wchar_t* buffer = new wchar_t[count]; + MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, buffer, count); +#endif + std::wstring w(buffer); + delete[] buffer; + return w; + } + + public: + ImageLoader_GDIPlus() : ImageLoader() + {} + + olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) override + { + // clear out existing sprite + spr->pColData.clear(); + + // Open file + UNUSED(pack); + Gdiplus::Bitmap* bmp = nullptr; + if (pack != nullptr) + { + // Load sprite from input stream + ResourceBuffer rb = pack->GetFileBuffer(sImageFile); + bmp = Gdiplus::Bitmap::FromStream(SHCreateMemStream((BYTE*)rb.vMemory.data(), UINT(rb.vMemory.size()))); + } + else + { + // Check file exists + if (!_gfs::exists(sImageFile)) return olc::rcode::NO_FILE; + + // Load sprite from file + bmp = Gdiplus::Bitmap::FromFile(ConvertS2W(sImageFile).c_str()); + } + + if (bmp->GetLastStatus() != Gdiplus::Ok) return olc::rcode::FAIL; + spr->width = bmp->GetWidth(); + spr->height = bmp->GetHeight(); + + spr->pColData.resize(spr->width * spr->height); + + for (int y = 0; y < spr->height; y++) + for (int x = 0; x < spr->width; x++) + { + Gdiplus::Color c; + bmp->GetPixel(x, y, &c); + spr->SetPixel(x, y, olc::Pixel(c.GetRed(), c.GetGreen(), c.GetBlue(), c.GetAlpha())); + } + delete bmp; + return olc::rcode::OK; + } + + olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) override + { + return olc::rcode::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END IMAGE LOADER: GDI+ | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region image_libpng +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: libpng, default on linux, requires -lpng (libpng-dev) | +// O------------------------------------------------------------------------------O +#if defined(OLC_IMAGE_LIBPNG) +#include +namespace olc +{ + void pngReadStream(png_structp pngPtr, png_bytep data, png_size_t length) + { + png_voidp a = png_get_io_ptr(pngPtr); + ((std::istream*)a)->read((char*)data, length); + } + + class ImageLoader_LibPNG : public olc::ImageLoader + { + public: + ImageLoader_LibPNG() : ImageLoader() + {} + + olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) override + { + UNUSED(pack); + + // clear out existing sprite + spr->pColData.clear(); + + //////////////////////////////////////////////////////////////////////////// + // Use libpng, Thanks to Guillaume Cottenceau + // https://gist.github.com/niw/5963798 + // Also reading png from streams + // http://www.piko3d.net/tutorials/libpng-tutorial-loading-png-files-from-streams/ + png_structp png; + png_infop info; + + auto loadPNG = [&]() + { + png_read_info(png, info); + png_byte color_type; + png_byte bit_depth; + png_bytep* row_pointers; + spr->width = png_get_image_width(png, info); + spr->height = png_get_image_height(png, info); + color_type = png_get_color_type(png, info); + bit_depth = png_get_bit_depth(png, info); + if (bit_depth == 16) png_set_strip_16(png); + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png); + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png); + if (png_get_valid(png, info, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png); + if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_PALETTE) + png_set_filler(png, 0xFF, PNG_FILLER_AFTER); + if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb(png); + png_read_update_info(png, info); + row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * spr->height); + for (int y = 0; y < spr->height; y++) { + row_pointers[y] = (png_byte*)malloc(png_get_rowbytes(png, info)); + } + png_read_image(png, row_pointers); + //////////////////////////////////////////////////////////////////////////// + // Create sprite array + spr->pColData.resize(spr->width * spr->height); + // Iterate through image rows, converting into sprite format + for (int y = 0; y < spr->height; y++) + { + png_bytep row = row_pointers[y]; + for (int x = 0; x < spr->width; x++) + { + png_bytep px = &(row[x * 4]); + spr->SetPixel(x, y, Pixel(px[0], px[1], px[2], px[3])); + } + } + + for (int y = 0; y < spr->height; y++) // Thanks maksym33 + free(row_pointers[y]); + free(row_pointers); + png_destroy_read_struct(&png, &info, nullptr); + }; + + png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png) goto fail_load; + + info = png_create_info_struct(png); + if (!info) goto fail_load; + + if (setjmp(png_jmpbuf(png))) goto fail_load; + + if (pack == nullptr) + { + FILE* f = fopen(sImageFile.c_str(), "rb"); + if (!f) return olc::rcode::NO_FILE; + png_init_io(png, f); + loadPNG(); + fclose(f); + } + else + { + ResourceBuffer rb = pack->GetFileBuffer(sImageFile); + std::istream is(&rb); + png_set_read_fn(png, (png_voidp)&is, pngReadStream); + loadPNG(); + } + + return olc::rcode::OK; + + fail_load: + spr->width = 0; + spr->height = 0; + spr->pColData.clear(); + return olc::rcode::FAIL; + } + + olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) override + { + return olc::rcode::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END IMAGE LOADER: | +// O------------------------------------------------------------------------------O +#pragma endregion + + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Platforms | +// O------------------------------------------------------------------------------O + +#pragma region platform_windows +// O------------------------------------------------------------------------------O +// | START PLATFORM: MICROSOFT WINDOWS XP, VISTA, 7, 8, 10 | +// O------------------------------------------------------------------------------O +#if defined(OLC_PLATFORM_WINAPI) + +#if defined(_WIN32) && !defined(__MINGW32__) + #pragma comment(lib, "user32.lib") // Visual Studio Only + #pragma comment(lib, "gdi32.lib") // For other Windows Compilers please add + #pragma comment(lib, "opengl32.lib") // these libs to your linker input +#endif + +namespace olc +{ + class Platform_Windows : public olc::Platform + { + private: + HWND olc_hWnd = nullptr; + std::wstring wsAppName; + + std::wstring ConvertS2W(std::string s) + { +#ifdef __MINGW32__ + wchar_t* buffer = new wchar_t[s.length() + 1]; + mbstowcs(buffer, s.c_str(), s.length()); + buffer[s.length()] = L'\0'; +#else + int count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0); + wchar_t* buffer = new wchar_t[count]; + MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, buffer, count); +#endif + std::wstring w(buffer); + delete[] buffer; + return w; + } + + + + public: + virtual olc::rcode ApplicationStartUp() override { return olc::rcode::OK; } + virtual olc::rcode ApplicationCleanUp() override { return olc::rcode::OK; } + virtual olc::rcode ThreadStartUp() override { return olc::rcode::OK; } + + virtual olc::rcode ThreadCleanUp() override + { + renderer->DestroyDevice(); + PostMessage(olc_hWnd, WM_DESTROY, 0, 0); + return olc::OK; + } + + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) override + { + if (renderer->CreateDevice({ olc_hWnd }, bFullScreen, bEnableVSYNC) == olc::rcode::OK) + { + renderer->UpdateViewport(vViewPos, vViewSize); + return olc::rcode::OK; + } + else + return olc::rcode::FAIL; + } + + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) override + { + WNDCLASS wc; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; + wc.hInstance = GetModuleHandle(nullptr); + wc.lpfnWndProc = olc_WindowEvent; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.lpszMenuName = nullptr; + wc.hbrBackground = nullptr; + wc.lpszClassName = olcT("OLC_PIXEL_GAME_ENGINE"); + RegisterClass(&wc); + + // Define window furniture + DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; + DWORD dwStyle = WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_THICKFRAME; + + olc::vi2d vTopLeft = vWindowPos; + + // Handle Fullscreen + if (bFullScreen) + { + dwExStyle = 0; + dwStyle = WS_VISIBLE | WS_POPUP; + HMONITOR hmon = MonitorFromWindow(olc_hWnd, MONITOR_DEFAULTTONEAREST); + MONITORINFO mi = { sizeof(mi) }; + if (!GetMonitorInfo(hmon, &mi)) return olc::rcode::FAIL; + vWindowSize = { mi.rcMonitor.right, mi.rcMonitor.bottom }; + vTopLeft.x = 0; + vTopLeft.y = 0; + } + + // Keep client size as requested + RECT rWndRect = { 0, 0, vWindowSize.x, vWindowSize.y }; + AdjustWindowRectEx(&rWndRect, dwStyle, FALSE, dwExStyle); + int width = rWndRect.right - rWndRect.left; + int height = rWndRect.bottom - rWndRect.top; + + olc_hWnd = CreateWindowEx(dwExStyle, olcT("OLC_PIXEL_GAME_ENGINE"), olcT(""), dwStyle, + vTopLeft.x, vTopLeft.y, width, height, NULL, NULL, GetModuleHandle(nullptr), this); + + DragAcceptFiles(olc_hWnd, true); + + // Create Keyboard Mapping + mapKeys[0x00] = Key::NONE; + mapKeys[0x41] = Key::A; mapKeys[0x42] = Key::B; mapKeys[0x43] = Key::C; mapKeys[0x44] = Key::D; mapKeys[0x45] = Key::E; + mapKeys[0x46] = Key::F; mapKeys[0x47] = Key::G; mapKeys[0x48] = Key::H; mapKeys[0x49] = Key::I; mapKeys[0x4A] = Key::J; + mapKeys[0x4B] = Key::K; mapKeys[0x4C] = Key::L; mapKeys[0x4D] = Key::M; mapKeys[0x4E] = Key::N; mapKeys[0x4F] = Key::O; + mapKeys[0x50] = Key::P; mapKeys[0x51] = Key::Q; mapKeys[0x52] = Key::R; mapKeys[0x53] = Key::S; mapKeys[0x54] = Key::T; + mapKeys[0x55] = Key::U; mapKeys[0x56] = Key::V; mapKeys[0x57] = Key::W; mapKeys[0x58] = Key::X; mapKeys[0x59] = Key::Y; + mapKeys[0x5A] = Key::Z; + + mapKeys[VK_F1] = Key::F1; mapKeys[VK_F2] = Key::F2; mapKeys[VK_F3] = Key::F3; mapKeys[VK_F4] = Key::F4; + mapKeys[VK_F5] = Key::F5; mapKeys[VK_F6] = Key::F6; mapKeys[VK_F7] = Key::F7; mapKeys[VK_F8] = Key::F8; + mapKeys[VK_F9] = Key::F9; mapKeys[VK_F10] = Key::F10; mapKeys[VK_F11] = Key::F11; mapKeys[VK_F12] = Key::F12; + + mapKeys[VK_DOWN] = Key::DOWN; mapKeys[VK_LEFT] = Key::LEFT; mapKeys[VK_RIGHT] = Key::RIGHT; mapKeys[VK_UP] = Key::UP; + //mapKeys[VK_RETURN] = Key::ENTER;// mapKeys[VK_RETURN] = Key::RETURN; + + mapKeys[VK_BACK] = Key::BACK; mapKeys[VK_ESCAPE] = Key::ESCAPE; mapKeys[VK_RETURN] = Key::ENTER; mapKeys[VK_PAUSE] = Key::PAUSE; + mapKeys[VK_SCROLL] = Key::SCROLL; mapKeys[VK_TAB] = Key::TAB; mapKeys[VK_DELETE] = Key::DEL; mapKeys[VK_HOME] = Key::HOME; + mapKeys[VK_END] = Key::END; mapKeys[VK_PRIOR] = Key::PGUP; mapKeys[VK_NEXT] = Key::PGDN; mapKeys[VK_INSERT] = Key::INS; + mapKeys[VK_SHIFT] = Key::SHIFT; mapKeys[VK_CONTROL] = Key::CTRL; + mapKeys[VK_SPACE] = Key::SPACE; + + mapKeys[0x30] = Key::K0; mapKeys[0x31] = Key::K1; mapKeys[0x32] = Key::K2; mapKeys[0x33] = Key::K3; mapKeys[0x34] = Key::K4; + mapKeys[0x35] = Key::K5; mapKeys[0x36] = Key::K6; mapKeys[0x37] = Key::K7; mapKeys[0x38] = Key::K8; mapKeys[0x39] = Key::K9; + + mapKeys[VK_NUMPAD0] = Key::NP0; mapKeys[VK_NUMPAD1] = Key::NP1; mapKeys[VK_NUMPAD2] = Key::NP2; mapKeys[VK_NUMPAD3] = Key::NP3; mapKeys[VK_NUMPAD4] = Key::NP4; + mapKeys[VK_NUMPAD5] = Key::NP5; mapKeys[VK_NUMPAD6] = Key::NP6; mapKeys[VK_NUMPAD7] = Key::NP7; mapKeys[VK_NUMPAD8] = Key::NP8; mapKeys[VK_NUMPAD9] = Key::NP9; + mapKeys[VK_MULTIPLY] = Key::NP_MUL; mapKeys[VK_ADD] = Key::NP_ADD; mapKeys[VK_DIVIDE] = Key::NP_DIV; mapKeys[VK_SUBTRACT] = Key::NP_SUB; mapKeys[VK_DECIMAL] = Key::NP_DECIMAL; + + // Thanks scripticuk + mapKeys[VK_OEM_1] = Key::OEM_1; // On US and UK keyboards this is the ';:' key + mapKeys[VK_OEM_2] = Key::OEM_2; // On US and UK keyboards this is the '/?' key + mapKeys[VK_OEM_3] = Key::OEM_3; // On US keyboard this is the '~' key + mapKeys[VK_OEM_4] = Key::OEM_4; // On US and UK keyboards this is the '[{' key + mapKeys[VK_OEM_5] = Key::OEM_5; // On US keyboard this is '\|' key. + mapKeys[VK_OEM_6] = Key::OEM_6; // On US and UK keyboards this is the ']}' key + mapKeys[VK_OEM_7] = Key::OEM_7; // On US keyboard this is the single/double quote key. On UK, this is the single quote/@ symbol key + mapKeys[VK_OEM_8] = Key::OEM_8; // miscellaneous characters. Varies by keyboard + mapKeys[VK_OEM_PLUS] = Key::EQUALS; // the '+' key on any keyboard + mapKeys[VK_OEM_COMMA] = Key::COMMA; // the comma key on any keyboard + mapKeys[VK_OEM_MINUS] = Key::MINUS; // the minus key on any keyboard + mapKeys[VK_OEM_PERIOD] = Key::PERIOD; // the period key on any keyboard + mapKeys[VK_CAPITAL] = Key::CAPS_LOCK; + return olc::OK; + } + + virtual olc::rcode SetWindowTitle(const std::string& s) override + { +#ifdef UNICODE + SetWindowText(olc_hWnd, ConvertS2W(s).c_str()); +#else + SetWindowText(olc_hWnd, s.c_str()); +#endif + return olc::OK; + } + + virtual olc::rcode StartSystemEventLoop() override + { + MSG msg; + while (GetMessage(&msg, NULL, 0, 0) > 0) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return olc::OK; + } + + virtual olc::rcode HandleSystemEvent() override { return olc::rcode::FAIL; } + + // Windows Event Handler - this is statically connected to the windows event system + static LRESULT CALLBACK olc_WindowEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) + { + switch (uMsg) + { + case WM_MOUSEMOVE: + { + // Thanks @ForAbby (Discord) + uint16_t x = lParam & 0xFFFF; uint16_t y = (lParam >> 16) & 0xFFFF; + int16_t ix = *(int16_t*)&x; int16_t iy = *(int16_t*)&y; + ptrPGE->olc_UpdateMouse(ix, iy); + return 0; + } + case WM_SIZE: ptrPGE->olc_UpdateWindowSize(lParam & 0xFFFF, (lParam >> 16) & 0xFFFF); return 0; + case WM_MOUSEWHEEL: ptrPGE->olc_UpdateMouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); return 0; + case WM_MOUSELEAVE: ptrPGE->olc_UpdateMouseFocus(false); return 0; + case WM_SETFOCUS: ptrPGE->olc_UpdateKeyFocus(true); return 0; + case WM_KILLFOCUS: ptrPGE->olc_UpdateKeyFocus(false); return 0; + case WM_KEYDOWN: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], true); return 0; + case WM_KEYUP: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], false); return 0; + case WM_SYSKEYDOWN: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], true); return 0; + case WM_SYSKEYUP: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], false); return 0; + case WM_LBUTTONDOWN:ptrPGE->olc_UpdateMouseState(0, true); return 0; + case WM_LBUTTONUP: ptrPGE->olc_UpdateMouseState(0, false); return 0; + case WM_RBUTTONDOWN:ptrPGE->olc_UpdateMouseState(1, true); return 0; + case WM_RBUTTONUP: ptrPGE->olc_UpdateMouseState(1, false); return 0; + case WM_MBUTTONDOWN:ptrPGE->olc_UpdateMouseState(2, true); return 0; + case WM_MBUTTONUP: ptrPGE->olc_UpdateMouseState(2, false); return 0; + case WM_DROPFILES: + { + // This is all eww... + HDROP drop = (HDROP)wParam; + + uint32_t nFiles = DragQueryFile(drop, 0xFFFFFFFF, nullptr, 0); + std::vector vFiles; + for (uint32_t i = 0; i < nFiles; i++) + { + TCHAR dfbuffer[256]{}; + uint32_t len = DragQueryFile(drop, i, nullptr, 0); + DragQueryFile(drop, i, dfbuffer, 256); +#ifdef UNICODE + #ifdef __MINGW32__ + char* buffer = new char[len + 1]; + wcstombs(buffer, dfbuffer, len); + buffer[len] = '\0'; + #else + int count = WideCharToMultiByte(CP_UTF8, 0, dfbuffer, -1, NULL, 0, NULL, NULL); + char* buffer = new char[count]; + WideCharToMultiByte(CP_UTF8, 0, dfbuffer, -1, buffer, count, NULL, NULL); + #endif + vFiles.push_back(std::string(buffer)); + delete[] buffer; +#else + vFiles.push_back(std::string(dfbuffer)); +#endif + } + + // Even more eww... + POINT p; DragQueryPoint(drop, &p); + ptrPGE->olc_DropFiles(p.x, p.y, vFiles); + DragFinish(drop); + return 0; + } + break; + + + case WM_CLOSE: ptrPGE->olc_Terminate(); return 0; + case WM_DESTROY: PostQuitMessage(0); DestroyWindow(hWnd); return 0; + } + return DefWindowProc(hWnd, uMsg, wParam, lParam); + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END PLATFORM: MICROSOFT WINDOWS XP, VISTA, 7, 8, 10 | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region platform_linux +// O------------------------------------------------------------------------------O +// | START PLATFORM: LINUX | +// O------------------------------------------------------------------------------O +#if defined(OLC_PLATFORM_X11) +namespace olc +{ + class Platform_Linux : public olc::Platform + { + private: + X11::Display* olc_Display = nullptr; + X11::Window olc_WindowRoot; + X11::Window olc_Window; + X11::XVisualInfo* olc_VisualInfo; + X11::Colormap olc_ColourMap; + X11::XSetWindowAttributes olc_SetWindowAttribs; + + public: + virtual olc::rcode ApplicationStartUp() override + { + return olc::rcode::OK; + } + + virtual olc::rcode ApplicationCleanUp() override + { + XDestroyWindow(olc_Display, olc_Window); + return olc::rcode::OK; + } + + virtual olc::rcode ThreadStartUp() override + { + return olc::rcode::OK; + } + + virtual olc::rcode ThreadCleanUp() override + { + renderer->DestroyDevice(); + return olc::OK; + } + + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) override + { + if (renderer->CreateDevice({ olc_Display, &olc_Window, olc_VisualInfo }, bFullScreen, bEnableVSYNC) == olc::rcode::OK) + { + renderer->UpdateViewport(vViewPos, vViewSize); + return olc::rcode::OK; + } + else + return olc::rcode::FAIL; + } + + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) override + { + using namespace X11; + XInitThreads(); + + // Grab the deafult display and window + olc_Display = XOpenDisplay(NULL); + olc_WindowRoot = DefaultRootWindow(olc_Display); + + // Based on the display capabilities, configure the appearance of the window + GLint olc_GLAttribs[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None }; + olc_VisualInfo = glXChooseVisual(olc_Display, 0, olc_GLAttribs); + olc_ColourMap = XCreateColormap(olc_Display, olc_WindowRoot, olc_VisualInfo->visual, AllocNone); + olc_SetWindowAttribs.colormap = olc_ColourMap; + + // Register which events we are interested in receiving + olc_SetWindowAttribs.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | PointerMotionMask | FocusChangeMask | StructureNotifyMask; + + // Create the window + olc_Window = XCreateWindow(olc_Display, olc_WindowRoot, vWindowPos.x, vWindowPos.y, + vWindowSize.x, vWindowSize.y, + 0, olc_VisualInfo->depth, InputOutput, olc_VisualInfo->visual, + CWColormap | CWEventMask, &olc_SetWindowAttribs); + + Atom wmDelete = XInternAtom(olc_Display, "WM_DELETE_WINDOW", true); + XSetWMProtocols(olc_Display, olc_Window, &wmDelete, 1); + + XMapWindow(olc_Display, olc_Window); + XStoreName(olc_Display, olc_Window, "OneLoneCoder.com - Pixel Game Engine"); + + if (bFullScreen) // Thanks DragonEye, again :D + { + Atom wm_state; + Atom fullscreen; + wm_state = XInternAtom(olc_Display, "_NET_WM_STATE", False); + fullscreen = XInternAtom(olc_Display, "_NET_WM_STATE_FULLSCREEN", False); + XEvent xev{ 0 }; + xev.type = ClientMessage; + xev.xclient.window = olc_Window; + xev.xclient.message_type = wm_state; + xev.xclient.format = 32; + xev.xclient.data.l[0] = (bFullScreen ? 1 : 0); // the action (0: off, 1: on, 2: toggle) + xev.xclient.data.l[1] = fullscreen; // first property to alter + xev.xclient.data.l[2] = 0; // second property to alter + xev.xclient.data.l[3] = 0; // source indication + XMapWindow(olc_Display, olc_Window); + XSendEvent(olc_Display, DefaultRootWindow(olc_Display), False, + SubstructureRedirectMask | SubstructureNotifyMask, &xev); + XFlush(olc_Display); + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, olc_Window, &gwa); + vWindowSize.x = gwa.width; + vWindowSize.y = gwa.height; + } + + // Create Keyboard Mapping + mapKeys[0x00] = Key::NONE; + mapKeys[0x61] = Key::A; mapKeys[0x62] = Key::B; mapKeys[0x63] = Key::C; mapKeys[0x64] = Key::D; mapKeys[0x65] = Key::E; + mapKeys[0x66] = Key::F; mapKeys[0x67] = Key::G; mapKeys[0x68] = Key::H; mapKeys[0x69] = Key::I; mapKeys[0x6A] = Key::J; + mapKeys[0x6B] = Key::K; mapKeys[0x6C] = Key::L; mapKeys[0x6D] = Key::M; mapKeys[0x6E] = Key::N; mapKeys[0x6F] = Key::O; + mapKeys[0x70] = Key::P; mapKeys[0x71] = Key::Q; mapKeys[0x72] = Key::R; mapKeys[0x73] = Key::S; mapKeys[0x74] = Key::T; + mapKeys[0x75] = Key::U; mapKeys[0x76] = Key::V; mapKeys[0x77] = Key::W; mapKeys[0x78] = Key::X; mapKeys[0x79] = Key::Y; + mapKeys[0x7A] = Key::Z; + + mapKeys[XK_F1] = Key::F1; mapKeys[XK_F2] = Key::F2; mapKeys[XK_F3] = Key::F3; mapKeys[XK_F4] = Key::F4; + mapKeys[XK_F5] = Key::F5; mapKeys[XK_F6] = Key::F6; mapKeys[XK_F7] = Key::F7; mapKeys[XK_F8] = Key::F8; + mapKeys[XK_F9] = Key::F9; mapKeys[XK_F10] = Key::F10; mapKeys[XK_F11] = Key::F11; mapKeys[XK_F12] = Key::F12; + + mapKeys[XK_Down] = Key::DOWN; mapKeys[XK_Left] = Key::LEFT; mapKeys[XK_Right] = Key::RIGHT; mapKeys[XK_Up] = Key::UP; + mapKeys[XK_KP_Enter] = Key::ENTER; mapKeys[XK_Return] = Key::ENTER; + + mapKeys[XK_BackSpace] = Key::BACK; mapKeys[XK_Escape] = Key::ESCAPE; mapKeys[XK_Linefeed] = Key::ENTER; mapKeys[XK_Pause] = Key::PAUSE; + mapKeys[XK_Scroll_Lock] = Key::SCROLL; mapKeys[XK_Tab] = Key::TAB; mapKeys[XK_Delete] = Key::DEL; mapKeys[XK_Home] = Key::HOME; + mapKeys[XK_End] = Key::END; mapKeys[XK_Page_Up] = Key::PGUP; mapKeys[XK_Page_Down] = Key::PGDN; mapKeys[XK_Insert] = Key::INS; + mapKeys[XK_Shift_L] = Key::SHIFT; mapKeys[XK_Shift_R] = Key::SHIFT; mapKeys[XK_Control_L] = Key::CTRL; mapKeys[XK_Control_R] = Key::CTRL; + mapKeys[XK_space] = Key::SPACE; mapKeys[XK_period] = Key::PERIOD; + + mapKeys[XK_0] = Key::K0; mapKeys[XK_1] = Key::K1; mapKeys[XK_2] = Key::K2; mapKeys[XK_3] = Key::K3; mapKeys[XK_4] = Key::K4; + mapKeys[XK_5] = Key::K5; mapKeys[XK_6] = Key::K6; mapKeys[XK_7] = Key::K7; mapKeys[XK_8] = Key::K8; mapKeys[XK_9] = Key::K9; + + mapKeys[XK_KP_0] = Key::NP0; mapKeys[XK_KP_1] = Key::NP1; mapKeys[XK_KP_2] = Key::NP2; mapKeys[XK_KP_3] = Key::NP3; mapKeys[XK_KP_4] = Key::NP4; + mapKeys[XK_KP_5] = Key::NP5; mapKeys[XK_KP_6] = Key::NP6; mapKeys[XK_KP_7] = Key::NP7; mapKeys[XK_KP_8] = Key::NP8; mapKeys[XK_KP_9] = Key::NP9; + mapKeys[XK_KP_Multiply] = Key::NP_MUL; mapKeys[XK_KP_Add] = Key::NP_ADD; mapKeys[XK_KP_Divide] = Key::NP_DIV; mapKeys[XK_KP_Subtract] = Key::NP_SUB; mapKeys[XK_KP_Decimal] = Key::NP_DECIMAL; + + // These keys vary depending on the keyboard. I've included comments for US and UK keyboard layouts + mapKeys[XK_semicolon] = Key::OEM_1; // On US and UK keyboards this is the ';:' key + mapKeys[XK_slash] = Key::OEM_2; // On US and UK keyboards this is the '/?' key + mapKeys[XK_asciitilde] = Key::OEM_3; // On US keyboard this is the '~' key + mapKeys[XK_bracketleft] = Key::OEM_4; // On US and UK keyboards this is the '[{' key + mapKeys[XK_backslash] = Key::OEM_5; // On US keyboard this is '\|' key. + mapKeys[XK_bracketright] = Key::OEM_6; // On US and UK keyboards this is the ']}' key + mapKeys[XK_apostrophe] = Key::OEM_7; // On US keyboard this is the single/double quote key. On UK, this is the single quote/@ symbol key + mapKeys[XK_numbersign] = Key::OEM_8; // miscellaneous characters. Varies by keyboard. I believe this to be the '#~' key on UK keyboards + mapKeys[XK_equal] = Key::EQUALS; // the '+' key on any keyboard + mapKeys[XK_comma] = Key::COMMA; // the comma key on any keyboard + mapKeys[XK_minus] = Key::MINUS; // the minus key on any keyboard + + mapKeys[XK_Caps_Lock] = Key::CAPS_LOCK; + + return olc::OK; + } + + virtual olc::rcode SetWindowTitle(const std::string& s) override + { + X11::XStoreName(olc_Display, olc_Window, s.c_str()); + return olc::OK; + } + + virtual olc::rcode StartSystemEventLoop() override + { + return olc::OK; + } + + virtual olc::rcode HandleSystemEvent() override + { + using namespace X11; + // Handle Xlib Message Loop - we do this in the + // same thread that OpenGL was created so we dont + // need to worry too much about multithreading with X11 + XEvent xev; + while (XPending(olc_Display)) + { + XNextEvent(olc_Display, &xev); + if (xev.type == Expose) + { + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, olc_Window, &gwa); + ptrPGE->olc_UpdateWindowSize(gwa.width, gwa.height); + } + else if (xev.type == ConfigureNotify) + { + XConfigureEvent xce = xev.xconfigure; + ptrPGE->olc_UpdateWindowSize(xce.width, xce.height); + } + else if (xev.type == KeyPress) + { + KeySym sym = XLookupKeysym(&xev.xkey, 0); + ptrPGE->olc_UpdateKeyState(mapKeys[sym], true); + XKeyEvent* e = (XKeyEvent*)&xev; // Because DragonEye loves numpads + XLookupString(e, NULL, 0, &sym, NULL); + ptrPGE->olc_UpdateKeyState(mapKeys[sym], true); + } + else if (xev.type == KeyRelease) + { + KeySym sym = XLookupKeysym(&xev.xkey, 0); + ptrPGE->olc_UpdateKeyState(mapKeys[sym], false); + XKeyEvent* e = (XKeyEvent*)&xev; + XLookupString(e, NULL, 0, &sym, NULL); + ptrPGE->olc_UpdateKeyState(mapKeys[sym], false); + } + else if (xev.type == ButtonPress) + { + switch (xev.xbutton.button) + { + case 1: ptrPGE->olc_UpdateMouseState(0, true); break; + case 2: ptrPGE->olc_UpdateMouseState(2, true); break; + case 3: ptrPGE->olc_UpdateMouseState(1, true); break; + case 4: ptrPGE->olc_UpdateMouseWheel(120); break; + case 5: ptrPGE->olc_UpdateMouseWheel(-120); break; + default: break; + } + } + else if (xev.type == ButtonRelease) + { + switch (xev.xbutton.button) + { + case 1: ptrPGE->olc_UpdateMouseState(0, false); break; + case 2: ptrPGE->olc_UpdateMouseState(2, false); break; + case 3: ptrPGE->olc_UpdateMouseState(1, false); break; + default: break; + } + } + else if (xev.type == MotionNotify) + { + ptrPGE->olc_UpdateMouse(xev.xmotion.x, xev.xmotion.y); + } + else if (xev.type == FocusIn) + { + ptrPGE->olc_UpdateKeyFocus(true); + } + else if (xev.type == FocusOut) + { + ptrPGE->olc_UpdateKeyFocus(false); + } + else if (xev.type == ClientMessage) + { + ptrPGE->olc_Terminate(); + } + } + return olc::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END PLATFORM: LINUX | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region platform_glut +// O------------------------------------------------------------------------------O +// | START PLATFORM: GLUT (used to make it simple for Apple) | +// O------------------------------------------------------------------------------O +// +// VERY IMPORTANT!!! The Apple port was originally created by @Mumflr (discord) +// and the repo for the development of this project can be found here: +// https://github.com/MumflrFumperdink/olcPGEMac which contains maccy goodness +// and support on how to setup your build environment. +// +// "MASSIVE MASSIVE THANKS TO MUMFLR" - Javidx9 +#if defined(OLC_PLATFORM_GLUT) +namespace olc { + + class Platform_GLUT : public olc::Platform + { + public: + static std::atomic* bActiveRef; + + virtual olc::rcode ApplicationStartUp() override { + return olc::rcode::OK; + } + + virtual olc::rcode ApplicationCleanUp() override + { + return olc::rcode::OK; + } + + virtual olc::rcode ThreadStartUp() override + { + return olc::rcode::OK; + } + + virtual olc::rcode ThreadCleanUp() override + { + renderer->DestroyDevice(); + return olc::OK; + } + + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) override + { + if (renderer->CreateDevice({}, bFullScreen, bEnableVSYNC) == olc::rcode::OK) + { + renderer->UpdateViewport(vViewPos, vViewSize); + return olc::rcode::OK; + } + else + return olc::rcode::FAIL; + } + + static void ExitMainLoop() { + if (!ptrPGE->OnUserDestroy()) { + *bActiveRef = true; + return; + } + platform->ThreadCleanUp(); + platform->ApplicationCleanUp(); + exit(0); + } + +#if defined(__APPLE__) + static void scrollWheelUpdate(id selff, SEL _sel, id theEvent) { + static const SEL deltaYSel = sel_registerName("deltaY"); + +#if defined(__aarch64__) // Thanks ruarq! + double deltaY = ((double (*)(id, SEL))objc_msgSend)(theEvent, deltaYSel); +#else + double deltaY = ((double (*)(id, SEL))objc_msgSend_fpret)(theEvent, deltaYSel); +#endif + + for (int i = 0; i < abs(deltaY); i++) { + if (deltaY > 0) { + ptrPGE->olc_UpdateMouseWheel(-1); + } + else if (deltaY < 0) { + ptrPGE->olc_UpdateMouseWheel(1); + } + } + } +#endif + static void ThreadFunct() { +#if defined(__APPLE__) + static bool hasEnabledCocoa = false; + if (!hasEnabledCocoa) { + // Objective-C Wizardry + Class NSApplicationClass = objc_getClass("NSApplication"); + + // NSApp = [NSApplication sharedApplication] + SEL sharedApplicationSel = sel_registerName("sharedApplication"); + id NSApp = ((id(*)(Class, SEL))objc_msgSend)(NSApplicationClass, sharedApplicationSel); + // window = [NSApp mainWindow] + SEL mainWindowSel = sel_registerName("mainWindow"); + id window = ((id(*)(id, SEL))objc_msgSend)(NSApp, mainWindowSel); + + // [window setStyleMask: NSWindowStyleMaskClosable | ~NSWindowStyleMaskResizable] + SEL setStyleMaskSel = sel_registerName("setStyleMask:"); + ((void (*)(id, SEL, NSUInteger))objc_msgSend)(window, setStyleMaskSel, 7); + + hasEnabledCocoa = true; + } +#endif + if (!*bActiveRef) { + ExitMainLoop(); + return; + } + glutPostRedisplay(); + } + + static void DrawFunct() { + ptrPGE->olc_CoreUpdate(); + } + + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) override + { +#if defined(__APPLE__) + Class GLUTViewClass = objc_getClass("GLUTView"); + + SEL scrollWheelSel = sel_registerName("scrollWheel:"); + bool resultAddMethod = class_addMethod(GLUTViewClass, scrollWheelSel, (IMP)scrollWheelUpdate, "v@:@"); + assert(resultAddMethod); +#endif + + renderer->PrepareDevice(); + + if (bFullScreen) + { + vWindowSize.x = glutGet(GLUT_SCREEN_WIDTH); + vWindowSize.y = glutGet(GLUT_SCREEN_HEIGHT); + glutFullScreen(); + } + else + { + if (vWindowSize.x > glutGet(GLUT_SCREEN_WIDTH) || vWindowSize.y > glutGet(GLUT_SCREEN_HEIGHT)) + { + perror("ERROR: The specified window dimensions do not fit on your screen\n"); + return olc::FAIL; + } + glutReshapeWindow(vWindowSize.x, vWindowSize.y - 1); + } + + // Create Keyboard Mapping + mapKeys[0x00] = Key::NONE; + mapKeys['A'] = Key::A; mapKeys['B'] = Key::B; mapKeys['C'] = Key::C; mapKeys['D'] = Key::D; mapKeys['E'] = Key::E; + mapKeys['F'] = Key::F; mapKeys['G'] = Key::G; mapKeys['H'] = Key::H; mapKeys['I'] = Key::I; mapKeys['J'] = Key::J; + mapKeys['K'] = Key::K; mapKeys['L'] = Key::L; mapKeys['M'] = Key::M; mapKeys['N'] = Key::N; mapKeys['O'] = Key::O; + mapKeys['P'] = Key::P; mapKeys['Q'] = Key::Q; mapKeys['R'] = Key::R; mapKeys['S'] = Key::S; mapKeys['T'] = Key::T; + mapKeys['U'] = Key::U; mapKeys['V'] = Key::V; mapKeys['W'] = Key::W; mapKeys['X'] = Key::X; mapKeys['Y'] = Key::Y; + mapKeys['Z'] = Key::Z; + + mapKeys[GLUT_KEY_F1] = Key::F1; mapKeys[GLUT_KEY_F2] = Key::F2; mapKeys[GLUT_KEY_F3] = Key::F3; mapKeys[GLUT_KEY_F4] = Key::F4; + mapKeys[GLUT_KEY_F5] = Key::F5; mapKeys[GLUT_KEY_F6] = Key::F6; mapKeys[GLUT_KEY_F7] = Key::F7; mapKeys[GLUT_KEY_F8] = Key::F8; + mapKeys[GLUT_KEY_F9] = Key::F9; mapKeys[GLUT_KEY_F10] = Key::F10; mapKeys[GLUT_KEY_F11] = Key::F11; mapKeys[GLUT_KEY_F12] = Key::F12; + + mapKeys[GLUT_KEY_DOWN] = Key::DOWN; mapKeys[GLUT_KEY_LEFT] = Key::LEFT; mapKeys[GLUT_KEY_RIGHT] = Key::RIGHT; mapKeys[GLUT_KEY_UP] = Key::UP; + mapKeys[13] = Key::ENTER; + + mapKeys[127] = Key::BACK; mapKeys[27] = Key::ESCAPE; + mapKeys[9] = Key::TAB; mapKeys[GLUT_KEY_HOME] = Key::HOME; + mapKeys[GLUT_KEY_END] = Key::END; mapKeys[GLUT_KEY_PAGE_UP] = Key::PGUP; mapKeys[GLUT_KEY_PAGE_DOWN] = Key::PGDN; mapKeys[GLUT_KEY_INSERT] = Key::INS; + mapKeys[32] = Key::SPACE; mapKeys[46] = Key::PERIOD; + + mapKeys[48] = Key::K0; mapKeys[49] = Key::K1; mapKeys[50] = Key::K2; mapKeys[51] = Key::K3; mapKeys[52] = Key::K4; + mapKeys[53] = Key::K5; mapKeys[54] = Key::K6; mapKeys[55] = Key::K7; mapKeys[56] = Key::K8; mapKeys[57] = Key::K9; + + // NOTE: MISSING KEYS :O + + glutKeyboardFunc([](unsigned char key, int x, int y) -> void { + switch (glutGetModifiers()) { + case 0: //This is when there are no modifiers + if ('a' <= key && key <= 'z') key -= 32; + break; + case GLUT_ACTIVE_SHIFT: + ptrPGE->olc_UpdateKeyState(Key::SHIFT, true); + break; + case GLUT_ACTIVE_CTRL: + if ('a' <= key && key <= 'z') key -= 32; + ptrPGE->olc_UpdateKeyState(Key::CTRL, true); + break; + case GLUT_ACTIVE_ALT: + if ('a' <= key && key <= 'z') key -= 32; + break; + } + + if (mapKeys[key]) + ptrPGE->olc_UpdateKeyState(mapKeys[key], true); + }); + + glutKeyboardUpFunc([](unsigned char key, int x, int y) -> void { + switch (glutGetModifiers()) { + case 0: //This is when there are no modifiers + if ('a' <= key && key <= 'z') key -= 32; + break; + case GLUT_ACTIVE_SHIFT: + ptrPGE->olc_UpdateKeyState(Key::SHIFT, false); + break; + case GLUT_ACTIVE_CTRL: + if ('a' <= key && key <= 'z') key -= 32; + ptrPGE->olc_UpdateKeyState(Key::CTRL, false); + break; + case GLUT_ACTIVE_ALT: + if ('a' <= key && key <= 'z') key -= 32; + //No ALT in PGE + break; + } + + if (mapKeys[key]) + ptrPGE->olc_UpdateKeyState(mapKeys[key], false); + }); + + //Special keys + glutSpecialFunc([](int key, int x, int y) -> void { + if (mapKeys[key]) + ptrPGE->olc_UpdateKeyState(mapKeys[key], true); + }); + + glutSpecialUpFunc([](int key, int x, int y) -> void { + if (mapKeys[key]) + ptrPGE->olc_UpdateKeyState(mapKeys[key], false); + }); + + glutMouseFunc([](int button, int state, int x, int y) -> void { + switch (button) { + case GLUT_LEFT_BUTTON: + if (state == GLUT_UP) ptrPGE->olc_UpdateMouseState(0, false); + else if (state == GLUT_DOWN) ptrPGE->olc_UpdateMouseState(0, true); + break; + case GLUT_MIDDLE_BUTTON: + if (state == GLUT_UP) ptrPGE->olc_UpdateMouseState(2, false); + else if (state == GLUT_DOWN) ptrPGE->olc_UpdateMouseState(2, true); + break; + case GLUT_RIGHT_BUTTON: + if (state == GLUT_UP) ptrPGE->olc_UpdateMouseState(1, false); + else if (state == GLUT_DOWN) ptrPGE->olc_UpdateMouseState(1, true); + break; + } + }); + + auto mouseMoveCall = [](int x, int y) -> void { + ptrPGE->olc_UpdateMouse(x, y); + }; + + glutMotionFunc(mouseMoveCall); + glutPassiveMotionFunc(mouseMoveCall); + + glutEntryFunc([](int state) -> void { + if (state == GLUT_ENTERED) ptrPGE->olc_UpdateKeyFocus(true); + else if (state == GLUT_LEFT) ptrPGE->olc_UpdateKeyFocus(false); + }); + + glutDisplayFunc(DrawFunct); + glutIdleFunc(ThreadFunct); + + return olc::OK; + } + + virtual olc::rcode SetWindowTitle(const std::string& s) override + { + glutSetWindowTitle(s.c_str()); + return olc::OK; + } + + virtual olc::rcode StartSystemEventLoop() override { + glutMainLoop(); + return olc::OK; + } + + virtual olc::rcode HandleSystemEvent() override + { + return olc::OK; + } + }; + + std::atomic* Platform_GLUT::bActiveRef{ nullptr }; + + //Custom Start + olc::rcode PixelGameEngine::Start() + { + if (platform->ApplicationStartUp() != olc::OK) return olc::FAIL; + + // Construct the window + if (platform->CreateWindowPane({ 30,30 }, vWindowSize, bFullScreen) != olc::OK) return olc::FAIL; + olc_UpdateWindowSize(vWindowSize.x, vWindowSize.y); + + if (platform->ThreadStartUp() == olc::FAIL) return olc::FAIL; + olc_PrepareEngine(); + if (!OnUserCreate()) return olc::FAIL; + Platform_GLUT::bActiveRef = &bAtomActive; + glutWMCloseFunc(Platform_GLUT::ExitMainLoop); + bAtomActive = true; + platform->StartSystemEventLoop(); + + //This code will not even be run but why not + if (platform->ApplicationCleanUp() != olc::OK) return olc::FAIL; + + return olc::OK; + } +} + +#endif +// O------------------------------------------------------------------------------O +// | END PLATFORM: GLUT | +// O------------------------------------------------------------------------------O +#pragma endregion + + + + + +#pragma region platform_emscripten +// O------------------------------------------------------------------------------O +// | START PLATFORM: Emscripten - Totally Game Changing... | +// O------------------------------------------------------------------------------O + +// +// Firstly a big mega thank you to members of the OLC Community for sorting this +// out. Making a browser compatible version has been a priority for quite some +// time, but I lacked the expertise to do it. This awesome feature is possible +// because a group of former strangers got together and formed friendships over +// their shared passion for code. If anything demonstrates how powerful helping +// each other can be, it's this. - Javidx9 + +// Emscripten Platform: MaGetzUb, Moros1138, Slavka, Dandistine, Gorbit99, Bispoo +// also: Ishidex, Gusgo99, SlicEnDicE, Alexio + + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + +#include +#include + +extern "C" +{ + EMSCRIPTEN_KEEPALIVE inline int olc_OnPageUnload() + { olc::platform->ApplicationCleanUp(); return 0; } +} + +namespace olc +{ + class Platform_Emscripten : public olc::Platform + { + public: + + virtual olc::rcode ApplicationStartUp() override + { return olc::rcode::OK; } + + virtual olc::rcode ApplicationCleanUp() override + { ThreadCleanUp(); return olc::rcode::OK; } + + virtual olc::rcode ThreadStartUp() override + { return olc::rcode::OK; } + + virtual olc::rcode ThreadCleanUp() override + { renderer->DestroyDevice(); return olc::OK; } + + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) override + { + if (renderer->CreateDevice({}, bFullScreen, bEnableVSYNC) == olc::rcode::OK) + { + renderer->UpdateViewport(vViewPos, vViewSize); + return olc::rcode::OK; + } + else + return olc::rcode::FAIL; + } + + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) override + { + emscripten_set_canvas_element_size("#canvas", vWindowSize.x, vWindowSize.y); + + mapKeys[DOM_PK_UNKNOWN] = Key::NONE; + mapKeys[DOM_PK_A] = Key::A; mapKeys[DOM_PK_B] = Key::B; mapKeys[DOM_PK_C] = Key::C; mapKeys[DOM_PK_D] = Key::D; + mapKeys[DOM_PK_E] = Key::E; mapKeys[DOM_PK_F] = Key::F; mapKeys[DOM_PK_G] = Key::G; mapKeys[DOM_PK_H] = Key::H; + mapKeys[DOM_PK_I] = Key::I; mapKeys[DOM_PK_J] = Key::J; mapKeys[DOM_PK_K] = Key::K; mapKeys[DOM_PK_L] = Key::L; + mapKeys[DOM_PK_M] = Key::M; mapKeys[DOM_PK_N] = Key::N; mapKeys[DOM_PK_O] = Key::O; mapKeys[DOM_PK_P] = Key::P; + mapKeys[DOM_PK_Q] = Key::Q; mapKeys[DOM_PK_R] = Key::R; mapKeys[DOM_PK_S] = Key::S; mapKeys[DOM_PK_T] = Key::T; + mapKeys[DOM_PK_U] = Key::U; mapKeys[DOM_PK_V] = Key::V; mapKeys[DOM_PK_W] = Key::W; mapKeys[DOM_PK_X] = Key::X; + mapKeys[DOM_PK_Y] = Key::Y; mapKeys[DOM_PK_Z] = Key::Z; + mapKeys[DOM_PK_0] = Key::K0; mapKeys[DOM_PK_1] = Key::K1; mapKeys[DOM_PK_2] = Key::K2; + mapKeys[DOM_PK_3] = Key::K3; mapKeys[DOM_PK_4] = Key::K4; mapKeys[DOM_PK_5] = Key::K5; + mapKeys[DOM_PK_6] = Key::K6; mapKeys[DOM_PK_7] = Key::K7; mapKeys[DOM_PK_8] = Key::K8; + mapKeys[DOM_PK_9] = Key::K9; + mapKeys[DOM_PK_F1] = Key::F1; mapKeys[DOM_PK_F2] = Key::F2; mapKeys[DOM_PK_F3] = Key::F3; mapKeys[DOM_PK_F4] = Key::F4; + mapKeys[DOM_PK_F5] = Key::F5; mapKeys[DOM_PK_F6] = Key::F6; mapKeys[DOM_PK_F7] = Key::F7; mapKeys[DOM_PK_F8] = Key::F8; + mapKeys[DOM_PK_F9] = Key::F9; mapKeys[DOM_PK_F10] = Key::F10; mapKeys[DOM_PK_F11] = Key::F11; mapKeys[DOM_PK_F12] = Key::F12; + mapKeys[DOM_PK_ARROW_UP] = Key::UP; mapKeys[DOM_PK_ARROW_DOWN] = Key::DOWN; + mapKeys[DOM_PK_ARROW_LEFT] = Key::LEFT; mapKeys[DOM_PK_ARROW_RIGHT] = Key::RIGHT; + mapKeys[DOM_PK_SPACE] = Key::SPACE; mapKeys[DOM_PK_TAB] = Key::TAB; + mapKeys[DOM_PK_SHIFT_LEFT] = Key::SHIFT; mapKeys[DOM_PK_SHIFT_RIGHT] = Key::SHIFT; + mapKeys[DOM_PK_CONTROL_LEFT] = Key::CTRL; mapKeys[DOM_PK_CONTROL_RIGHT] = Key::CTRL; + mapKeys[DOM_PK_INSERT] = Key::INS; mapKeys[DOM_PK_DELETE] = Key::DEL; mapKeys[DOM_PK_HOME] = Key::HOME; + mapKeys[DOM_PK_END] = Key::END; mapKeys[DOM_PK_PAGE_UP] = Key::PGUP; mapKeys[DOM_PK_PAGE_DOWN] = Key::PGDN; + mapKeys[DOM_PK_BACKSPACE] = Key::BACK; mapKeys[DOM_PK_ESCAPE] = Key::ESCAPE; + mapKeys[DOM_PK_ENTER] = Key::ENTER; mapKeys[DOM_PK_NUMPAD_EQUAL] = Key::EQUALS; + mapKeys[DOM_PK_NUMPAD_ENTER] = Key::ENTER; mapKeys[DOM_PK_PAUSE] = Key::PAUSE; + mapKeys[DOM_PK_SCROLL_LOCK] = Key::SCROLL; + mapKeys[DOM_PK_NUMPAD_0] = Key::NP0; mapKeys[DOM_PK_NUMPAD_1] = Key::NP1; mapKeys[DOM_PK_NUMPAD_2] = Key::NP2; + mapKeys[DOM_PK_NUMPAD_3] = Key::NP3; mapKeys[DOM_PK_NUMPAD_4] = Key::NP4; mapKeys[DOM_PK_NUMPAD_5] = Key::NP5; + mapKeys[DOM_PK_NUMPAD_6] = Key::NP6; mapKeys[DOM_PK_NUMPAD_7] = Key::NP7; mapKeys[DOM_PK_NUMPAD_8] = Key::NP8; + mapKeys[DOM_PK_NUMPAD_9] = Key::NP9; + mapKeys[DOM_PK_NUMPAD_MULTIPLY] = Key::NP_MUL; mapKeys[DOM_PK_NUMPAD_DIVIDE] = Key::NP_DIV; + mapKeys[DOM_PK_NUMPAD_ADD] = Key::NP_ADD; mapKeys[DOM_PK_NUMPAD_SUBTRACT] = Key::NP_SUB; + mapKeys[DOM_PK_NUMPAD_DECIMAL] = Key::NP_DECIMAL; + mapKeys[DOM_PK_PERIOD] = Key::PERIOD; mapKeys[DOM_PK_EQUAL] = Key::EQUALS; + mapKeys[DOM_PK_COMMA] = Key::COMMA; mapKeys[DOM_PK_MINUS] = Key::MINUS; + mapKeys[DOM_PK_CAPS_LOCK] = Key::CAPS_LOCK; + mapKeys[DOM_PK_SEMICOLON] = Key::OEM_1; mapKeys[DOM_PK_SLASH] = Key::OEM_2; mapKeys[DOM_PK_BACKQUOTE] = Key::OEM_3; + mapKeys[DOM_PK_BRACKET_LEFT] = Key::OEM_4; mapKeys[DOM_PK_BACKSLASH] = Key::OEM_5; mapKeys[DOM_PK_BRACKET_RIGHT] = Key::OEM_6; + mapKeys[DOM_PK_QUOTE] = Key::OEM_7; mapKeys[DOM_PK_BACKSLASH] = Key::OEM_8; + + // Keyboard Callbacks + emscripten_set_keydown_callback("#canvas", 0, 1, keyboard_callback); + emscripten_set_keyup_callback("#canvas", 0, 1, keyboard_callback); + + // Mouse Callbacks + emscripten_set_wheel_callback("#canvas", 0, 1, wheel_callback); + emscripten_set_mousedown_callback("#canvas", 0, 1, mouse_callback); + emscripten_set_mouseup_callback("#canvas", 0, 1, mouse_callback); + emscripten_set_mousemove_callback("#canvas", 0, 1, mouse_callback); + + // Touch Callbacks + emscripten_set_touchstart_callback("#canvas", 0, 1, touch_callback); + emscripten_set_touchmove_callback("#canvas", 0, 1, touch_callback); + emscripten_set_touchend_callback("#canvas", 0, 1, touch_callback); + + // Canvas Focus Callbacks + emscripten_set_blur_callback("#canvas", 0, 1, focus_callback); + emscripten_set_focus_callback("#canvas", 0, 1, focus_callback); + +#pragma warning disable format + EM_ASM( window.onunload = Module._olc_OnPageUnload; ); + + // IMPORTANT! - Sorry About This... + // + // In order to handle certain browser based events, such as resizing and + // going to full screen, we have to effectively inject code into the container + // running the PGE. Yes, I vomited about 11 times too when the others were + // convincing me this is the future. Well, this isnt the future, and if it + // were to be, I want no part of what must be a miserable distopian free + // for all of anarchic code injection to get rudimentary events like "Resize()". + // + // Wake up people! Of course theres a spoon. There has to be to keep feeding + // the giant web baby. + + + EM_ASM({ + + // olc_ApsectRatio + // + // Used by olc_ResizeHandler to calculate the viewport from the + // dimensions of the canvas container's element. + Module.olc_AspectRatio = $0 / $1; + + // HACK ALERT! + // + // Here we assume any html shell that uses 3 or more instance of the class "emscripten" + // is using one of the default or minimal emscripten page layouts + Module.olc_AssumeDefaultShells = (document.querySelectorAll('.emscripten').length >= 3) ? true : false; + + // olc_ResizeHandler + // + // Used by olc_Init, and is called when a resize observer and fullscreenchange event is triggered. + var olc_ResizeHandler = function() + { + // are we in fullscreen mode? + let isFullscreen = (document.fullscreenElement != null); + + // get the width of the containing element + let width = (isFullscreen) ? window.innerWidth : Module.canvas.parentNode.clientWidth; + let height = (isFullscreen) ? window.innerHeight : Module.canvas.parentNode.clientHeight; + + // calculate the expected viewport size + let viewWidth = width; + let viewHeight = width / Module.olc_AspectRatio; + + // if we're taller than the containing element, recalculate based on height + if(viewHeight > height) + { + viewWidth = height * Module.olc_AspectRatio; + viewHeight = height; + } + + // ensure resulting viewport is in integer space + viewWidth = parseInt(viewWidth); + viewHeight = parseInt(viewHeight); + + setTimeout(function() + { + // if default shells, apply default styles + if(Module.olc_AssumeDefaultShells) + Module.canvas.parentNode.setAttribute('style', 'width: 100%; height: 70vh; margin-left: auto; margin-right: auto;'); + + // apply viewport dimensions to teh canvas + Module.canvas.setAttribute('width', viewWidth); + Module.canvas.setAttribute('height', viewHeight); + Module.canvas.setAttribute('style', `width: ${viewWidth}px; height: ${viewHeight}px;`); + + // update the PGE window size + Module._olc_PGE_UpdateWindowSize(viewWidth, viewHeight); + + // force focus on our PGE canvas + Module.canvas.focus(); + }, 200); + }; + + + // olc_Init + // + // set up resize observer and fullscreenchange event handler + var olc_Init = function() + { + if(Module.olc_AspectRatio === undefined) + { + setTimeout(function() { Module.olc_Init(); }, 50); + return; + } + + let resizeObserver = new ResizeObserver(function(entries) + { + Module.olc_ResizeHandler(); + }).observe(Module.canvas.parentNode); + + let mutationObserver = new MutationObserver(function(mutationsList, observer) + { + setTimeout(function() { Module.olc_ResizeHandler(); }, 200); + }).observe(Module.canvas.parentNode, { attributes: false, childList: true, subtree: false }); + + window.addEventListener('fullscreenchange', function(e) + { + setTimeout(function() { Module.olc_ResizeHandler();}, 200); + }); + }; + + // set up hooks + Module.olc_ResizeHandler = (Module.olc_ResizeHandler != undefined) ? Module.olc_ResizeHandler : olc_ResizeHandler; + Module.olc_Init = (Module.olc_Init != undefined) ? Module.olc_Init : olc_Init; + + // run everything! + Module.olc_Init(); + + }, vWindowSize.x, vWindowSize.y); // Fullscreen and Resize Observers +#pragma warning restore format + return olc::rcode::OK; + } + + // Interface PGE's UpdateWindowSize, for use in Javascript + void UpdateWindowSize(int width, int height) + { + ptrPGE->olc_UpdateWindowSize(width, height); + } + + //TY Gorbit + static EM_BOOL focus_callback(int eventType, const EmscriptenFocusEvent* focusEvent, void* userData) + { + if (eventType == EMSCRIPTEN_EVENT_BLUR) + { + ptrPGE->olc_UpdateKeyFocus(false); + ptrPGE->olc_UpdateMouseFocus(false); + } + else if (eventType == EMSCRIPTEN_EVENT_FOCUS) + { + ptrPGE->olc_UpdateKeyFocus(true); + ptrPGE->olc_UpdateMouseFocus(true); + } + + return 0; + } + + //TY Moros + static EM_BOOL keyboard_callback(int eventType, const EmscriptenKeyboardEvent* e, void* userData) + { + if (eventType == EMSCRIPTEN_EVENT_KEYDOWN) + ptrPGE->olc_UpdateKeyState(mapKeys[emscripten_compute_dom_pk_code(e->code)], true); + + // THANK GOD!! for this compute function. And thanks Dandistine for pointing it out! + if (eventType == EMSCRIPTEN_EVENT_KEYUP) + ptrPGE->olc_UpdateKeyState(mapKeys[emscripten_compute_dom_pk_code(e->code)], false); + + //Consume keyboard events so that keys like F1 and F5 don't do weird things + return EM_TRUE; + } + + //TY Moros + static EM_BOOL wheel_callback(int eventType, const EmscriptenWheelEvent* e, void* userData) + { + if (eventType == EMSCRIPTEN_EVENT_WHEEL) + ptrPGE->olc_UpdateMouseWheel(-1 * e->deltaY); + + return EM_TRUE; + } + + //TY Bispoo + static EM_BOOL touch_callback(int eventType, const EmscriptenTouchEvent* e, void* userData) + { + // Move + if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) + { + ptrPGE->olc_UpdateMouse(e->touches->targetX, e->touches->targetY); + } + + // Start + if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) + { + ptrPGE->olc_UpdateMouse(e->touches->targetX, e->touches->targetY); + ptrPGE->olc_UpdateMouseState(0, true); + } + + // End + if (eventType == EMSCRIPTEN_EVENT_TOUCHEND) + { + ptrPGE->olc_UpdateMouseState(0, false); + } + + return EM_TRUE; + } + + //TY Moros + static EM_BOOL mouse_callback(int eventType, const EmscriptenMouseEvent* e, void* userData) + { + //Mouse Movement + if (eventType == EMSCRIPTEN_EVENT_MOUSEMOVE) + ptrPGE->olc_UpdateMouse(e->targetX, e->targetY); + + + //Mouse button press + if (e->button == 0) // left click + { + if (eventType == EMSCRIPTEN_EVENT_MOUSEDOWN) + ptrPGE->olc_UpdateMouseState(0, true); + else if (eventType == EMSCRIPTEN_EVENT_MOUSEUP) + ptrPGE->olc_UpdateMouseState(0, false); + } + + if (e->button == 2) // right click + { + if (eventType == EMSCRIPTEN_EVENT_MOUSEDOWN) + ptrPGE->olc_UpdateMouseState(1, true); + else if (eventType == EMSCRIPTEN_EVENT_MOUSEUP) + ptrPGE->olc_UpdateMouseState(1, false); + + } + + if (e->button == 1) // middle click + { + if (eventType == EMSCRIPTEN_EVENT_MOUSEDOWN) + ptrPGE->olc_UpdateMouseState(2, true); + else if (eventType == EMSCRIPTEN_EVENT_MOUSEUP) + ptrPGE->olc_UpdateMouseState(2, false); + + //at the moment only middle mouse needs to consume events. + return EM_TRUE; + } + + return EM_FALSE; + } + + + virtual olc::rcode SetWindowTitle(const std::string& s) override + { emscripten_set_window_title(s.c_str()); return olc::OK; } + + virtual olc::rcode StartSystemEventLoop() override + { return olc::OK; } + + virtual olc::rcode HandleSystemEvent() override + { return olc::OK; } + + static void MainLoop() + { + olc::Platform::ptrPGE->olc_CoreUpdate(); + if (!ptrPGE->olc_IsRunning()) + { + if (ptrPGE->OnUserDestroy()) + { + emscripten_cancel_main_loop(); + platform->ApplicationCleanUp(); + } + else + { + ptrPGE->olc_Reanimate(); + } + } + } + }; + + //Emscripten needs a special Start function + //Much of this is usually done in EngineThread, but that isn't used here + olc::rcode PixelGameEngine::Start() + { + if (platform->ApplicationStartUp() != olc::OK) return olc::FAIL; + + // Construct the window + if (platform->CreateWindowPane({ 30,30 }, vWindowSize, bFullScreen) != olc::OK) return olc::FAIL; + olc_UpdateWindowSize(vWindowSize.x, vWindowSize.y); + + // Some implementations may form an event loop here + if (platform->ThreadStartUp() == olc::FAIL) return olc::FAIL; + + // Do engine context specific initialisation + olc_PrepareEngine(); + + // Consider the "thread" started + bAtomActive = true; + + // Create user resources as part of this thread + for (auto& ext : vExtensions) ext->OnBeforeUserCreate(); + if (!OnUserCreate()) bAtomActive = false; + for (auto& ext : vExtensions) ext->OnAfterUserCreate(); + + platform->StartSystemEventLoop(); + + //This causes a heap memory corruption in Emscripten for some reason + //Platform_Emscripten::bActiveRef = &bAtomActive; + emscripten_set_main_loop(&Platform_Emscripten::MainLoop, 0, 1); + + // Wait for thread to be exited + if (platform->ApplicationCleanUp() != olc::OK) return olc::FAIL; + return olc::OK; + } +} + +extern "C" +{ + EMSCRIPTEN_KEEPALIVE inline void olc_PGE_UpdateWindowSize(int width, int height) + { + emscripten_set_canvas_element_size("#canvas", width, height); + // Thanks slavka + ((olc::Platform_Emscripten*)olc::platform.get())->UpdateWindowSize(width, height); + } +} + +#endif +// O------------------------------------------------------------------------------O +// | END PLATFORM: Emscripten | +// O------------------------------------------------------------------------------O +#pragma endregion + + +#endif // Headless + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Auto-Configuration | +// O------------------------------------------------------------------------------O +#pragma region pge_config +namespace olc +{ + void PixelGameEngine::olc_ConfigureSystem() + { + +//#if !defined(OLC_PGE_HEADLESS) + + olc::Sprite::loader = nullptr; + +#if defined(OLC_IMAGE_GDI) + olc::Sprite::loader = std::make_unique(); +#endif + +#if defined(OLC_IMAGE_LIBPNG) + olc::Sprite::loader = std::make_unique(); +#endif + +#if defined(OLC_IMAGE_STB) + olc::Sprite::loader = std::make_unique(); +#endif + +#if defined(OLC_IMAGE_CUSTOM_EX) + olc::Sprite::loader = std::make_unique(); +#endif + + +#if defined(OLC_PLATFORM_HEADLESS) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_WINAPI) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_X11) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_GLUT) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_CUSTOM_EX) + platform = std::make_unique(); +#endif + +#if defined(OLC_GFX_HEADLESS) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_OPENGL10) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_OPENGL33) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_OPENGLES2) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_DIRECTX10) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_DIRECTX11) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_CUSTOM_EX) + renderer = std::make_unique(); +#endif + + // Associate components with PGE instance + platform->ptrPGE = this; + renderer->ptrPGE = this; +//#else +// olc::Sprite::loader = nullptr; +// platform = nullptr; +// renderer = nullptr; +//#endif + } +} + +#pragma endregion + +#endif // End OLC_PGE_APPLICATION + +// O------------------------------------------------------------------------------O +// | END OF OLC_PGE_APPLICATION | +// O------------------------------------------------------------------------------O diff --git a/ChallengeLeaguePointSolver/pixelGameEngine.o b/ChallengeLeaguePointSolver/pixelGameEngine.o new file mode 100644 index 0000000000000000000000000000000000000000..4f5be2dd5d3f67419ec770297b52956d2f350b23 GIT binary patch literal 1264488 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 z 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

V(c{9ol-@ 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 B*3$q0 literal 0 HcmV?d00001 diff --git a/ChallengeLeaguePointSolver/sig b/ChallengeLeaguePointSolver/sig new file mode 100755 index 0000000..e441034 --- /dev/null +++ b/ChallengeLeaguePointSolver/sig @@ -0,0 +1,10 @@ +export AUTO_UPDATE=true + +source utils/define.sh + +define PROJECT_NAME "ChampionsLeaguePointSolver" +define CUSTOM_PARAMS "-std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -I/usr/include/lua5.3" +define EMSCRIPTEN_CUSTOM_PARAMS "" +define LANGUAGE "C++" + +source utils/main.sh diff --git a/ChallengeLeaguePointSolver/utils/.coauthors b/ChallengeLeaguePointSolver/utils/.coauthors new file mode 100644 index 0000000..b904d0f --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/.coauthors @@ -0,0 +1 @@ +sigonasr2 diff --git a/ChallengeLeaguePointSolver/utils/.updateDirectories b/ChallengeLeaguePointSolver/utils/.updateDirectories new file mode 100644 index 0000000..56274ea --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/.updateDirectories @@ -0,0 +1,5 @@ +Java/ +C/ +C++/ +scripts/ +utils/ \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/utils/define.sh b/ChallengeLeaguePointSolver/utils/define.sh new file mode 100755 index 0000000..214fc50 --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/define.sh @@ -0,0 +1,26 @@ +export VARS=("") + +export LANGUAGE="" + +function define() { + VARS+=("$1") + value="${*:2}" + eval export "$1"='$value' +} + +if [[ $(pwd) != *"SigScript" && $AUTO_UPDATE = "true" && $1 != "update" ]]; then + source utils/search.sh + + find . -type f -name md5 -delete + find . -type f -name filelist -delete + + #Check for hashes + FILES=$(cat utils/.updateDirectories) + for f in $FILES + do + search $f + check $f + done +else + echo "Dev build, no checks required." +fi \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/utils/filelist b/ChallengeLeaguePointSolver/utils/filelist new file mode 100644 index 0000000..95ad5ff --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/filelist @@ -0,0 +1,5 @@ +.coauthors +define.sh +main.sh +search.sh +.updateDirectories diff --git a/ChallengeLeaguePointSolver/utils/main.sh b/ChallengeLeaguePointSolver/utils/main.sh new file mode 100644 index 0000000..0a4c92a --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/main.sh @@ -0,0 +1,28 @@ +if [ -z "$1" ] + then + echo "" + echo " Usage: ./sig {args}" + echo "" + printf "====\tCurrent Configuration" + printf "\t=====================" + for t in ${VARS[@]} + do + printf "\n\t%-15s%20s" $t ${!t} + done + printf "\n=====================================================" + echo "" + echo "" + echo " Command List:" + FILES=$(ls -1A ./$LANGUAGE/scripts 2>/dev/null | sed -e 's/\.sh$//' | sed -e 's/^/ /') + for f in $FILES + do + if [ -f "./$LANGUAGE/scripts/$f.sh" ]; then + DESC="$(head -n1 ./$LANGUAGE/scripts/$f.sh)" + printf "\n\t%-15s%-65s" $f "${DESC:1}" + fi + done + echo "" + exit +fi + +./$LANGUAGE/scripts/$1.sh "${@:2}" \ No newline at end of file diff --git a/ChallengeLeaguePointSolver/utils/md5 b/ChallengeLeaguePointSolver/utils/md5 new file mode 100644 index 0000000..349fa70 --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/md5 @@ -0,0 +1,4 @@ +define.sh:3ecab0dffe2adfb950f3eb7c7061b750 - +main.sh:4e6e9f0650ec790ce2c4364db94f0caa - +search.sh:30e1842e9a13452ea883bb6516d28e1c - +.updateDirectories:971afb892e8280cb4c9ad43fb72a46a0 - diff --git a/ChallengeLeaguePointSolver/utils/search.sh b/ChallengeLeaguePointSolver/utils/search.sh new file mode 100644 index 0000000..6707c16 --- /dev/null +++ b/ChallengeLeaguePointSolver/utils/search.sh @@ -0,0 +1,103 @@ +function search() { + FILES2=$(ls -A $1 2>/dev/null) + for g in $FILES2 + do + if [ -d $1$g ]; + then + echo "$1$g is a directory" + search $1$g/ + else + echo "$1$g is a file" + if [ $g != "md5" ] && [ $g != "filelist" ] && [ $g != ".package.files" ]; then + if [ $g != ".coauthors" ] && [ $g != "version_info" ]; then + SUM=$(md5sum < $1$g) + echo "$g:$SUM" >> $1md5 + fi + echo "$g" >> $1filelist + else + echo " ignoring $g..." + fi + fi + done +} + +function check() { + echo "Check $1" + FILES2=$(ls -A $1 2>/dev/null) + if [ -f "$1/md5" ]; + then + echo " md5: http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1md5" + curl -H 'Cache-Control: no-cache, no-store' -s "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1md5" --output /tmp/out + cmp -s $1/md5 /tmp/out + if [ "$?" -ne 0 ] + then + echo " Differences detected!" + cat /tmp/out + while IFS= read -r line + do + IFS=':' read -ra split <<< $line + g="${split[0]}" + echo "LINE -- $g" + if [ "$g" != "md5" ] && [ "$g" != "filelist" ] && [ "$g" != ".package.files" ]; then + if [ -f $1$g ]; + then + if [ "$g" != ".coauthors" ] && [ "$g" != "version_info" ]; then + echo "++Redownload $1$g..." + if [ -f "$1$g" ]; then + curl -H 'Cache-Control: no-cache, no-store' "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1$g" --output $1$g + else + echo "===Could not find directory, assuming regular scripts directory exists." + curl -H 'Cache-Control: no-cache, no-store' "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1$g" --output $LANGUAGE/scripts/$g + fi + fi + else + echo "++==Downloading $1$g..." + curl -H 'Cache-Control: no-cache, no-store' "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1$g" --output $1$g + fi + fi + done < /tmp/out + fi + fi + if [ -f "$1/filelist" ]; + then + echo " filelist: http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1filelist" + curl -H 'Cache-Control: no-cache, no-store' -s "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1filelist" --output /tmp/out + cmp -s $1/filelist /tmp/out + if [ "$?" -ne 0 ] + then + echo " Differences detected!" + cat /tmp/out + while IFS= read -r line + do + IFS=':' read -ra split <<< $line + g="${split[0]}" + echo "LINE -- $g" + if [ "$g" != "md5" ] && [ "$g" != "filelist" ] && [ "$g" != ".package.files" ]; then + if [ -f $1$g ]; + then + if [ "$g" != ".coauthors" ] && [ "$g" != "version_info" ]; then + echo "++Redownload $1$g..." + if [ -f "$1$g" ]; then + curl -H 'Cache-Control: no-cache, no-store' "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1$g" --output $1$g + else + echo "===Could not find directory, assuming regular scripts directory exists." + curl -H 'Cache-Control: no-cache, no-store' "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1$g" --output $LANGUAGE/scripts/$g + fi + fi + else + echo "++==Downloading $1$g..." + curl -H 'Cache-Control: no-cache, no-store' "http://sig.projectdivar.com/sigonasr2/SigScript/raw/branch/main/$1$g" --output $1$g + fi + fi + done < /tmp/out + fi + fi + for g in $FILES2 + do + if [ -d $1$g ]; + then + echo "$1$g is a directory" + check $1$g/ + fi + done +}

pB0iZ;W7x1uD&8HI1h zbZu7x&mdjx#Xgf=nk}Mw+!}Ss$gCbg71Z{UR+@Q+b~{d5Nk;~HHtr*2Cr8%|u#T`j zpQ$aZrp{r-MSIAJs+q9Ea^0DgHlz(V1JczG9x2JC=haLo4t~UL#&Mm>EmsyqMz>w# z7$Yk-`Q;jk=SgTT8-B8mbOxx1lHIJ5LYqMwV|;l{S`;W3v*;A-+jhJt<~J^b&}u!p z=F|^qKxy$?&jy~QLH)-Z2qO_^f7b$V_IF+VHlW>(ct%PbMs=e7&wWl1 z{3b8wpvd-}G$$|s$`gEmTqR+<^V?h+teg`VwCayYF()wKvMeQD`^2eKoWR0zoWL|` zY<*4uKv4ZqYP-|w4B0=pwm5l@l$92Tr{lFDbRPpwmWt9S@NI%p;Sp3tNHyX=->A6w zJ$S9$S#Z6BdZp^v4~0`Dj|i<~RPDk?l6T8JKN80$-{ zhjYJIJNZ31d0Jzy&~7h90KBcHe44I0XHv@s3tU_T*{O+r1g^qGluor7PL=vqy@73t zP-J(cw@JSo>*%5DlIZGP8?1v<8U{ zl^bLX)%hn~YRGV4s}b5nH^xe7F9T&}nEaYB>6!=`FOb%x*(Lt5W0cjy(fKnjlmhjv znWSIR67D|GWow(}j=EN6ll26- zv2)9=WGJH0Fevd3hsX0==o#jDeKK2DPnHPl;WSdC*?Mq9Vvk9rCo^{hQNytHhSg({ zFODNvz}q*j9xK$~C2J#N6p@U_pkadJNJVCrx^~5)Nf}uMidaKomXW+h zb8)LI>d@L1mHU-gIX*Wal>^S6o6wjQsc8^ZLR_Rn`OtX8W|6e}XoO^15H^=PI_w%2 zCe^&Gw%4m3UHJtfO1%WMDosK*qWeh{^2CDI-cI=|9$$uHfw6;v;9L9X zGskEy@@d6oC*X7$4Qj5%XtEsKhe%N}GA3J6ZW715KuAMsMYT~c<{T&_vR3+gvGJ!M zw`z85totwK8dJr!v-wjBKAN8c*_6!@%bc;N*jgRH@-AOhfew*di$#MtGu@~hB-eKB{GP7SGUxKNpX!M>Q7 zavH1o43!Md#|qz$1^?iT6yE`$T4O0Er{@B%nJyGj!n6ChpO6HFX3CLBFE&S@G#1Or zlhgHdzFNP~sCv#hmc*IxnT4pkP2H~<21fEfT&>9Sg5SZ!je1D_9=X(Xp^Zzr+jod( z(+Su9I(R<4bzX6uMZ=G!hUW#sob@?p)rm)1rTc?hLTwRt$Gz@r9gez8z34zs;hx`x zy2y8%2#mg^SIXNiw}wuKgoGzg8gcZ}mJV6eu>{%&AI@*qU2L|hmTOLlzO0T$XOtf9 zD0gbfkYF@vbslGzHVa4>8Qc_Eq?Jcxk&tP3jEV{`UR}wJeXPxM$+nWgO1X2YFT`6Y zPRL-n&ZSMB?(Na>vGrR`PZrL8smXHjO3wJf8z`m{m}5{Ble?+Y0y?$J!HZ1D;fL%xr4O{Hp8 za!PMQ4S{N5@2Gk*nJK31KvURB0un5EHDS)Z$RQv63bF4hK}}O4s>E<2F1y3m(@Fn~ zuM0OV+<8SSc3g!E5?YM-vJ;Wv)&`vZ#d!pR5|d^grEu$F$ReT-v}{OurpE0l)8xyeY1NzRB;VfN(#u( z5_9NvQdeY6Yxq0CuRCWmgkc2MvRy7_Zv8|~X zpftV79W4g1UH`!1Vezi?9r&$BuUDq2xk#5bDVt!IHub8Sft&o^I+EsYR7I*8L{r&a zB`SnzeVdtR`n!NjSjUh^U^jDn8+n$g_c7a_nPPx*eY|egs4y_pB?q0QsJ}8tsyHugzH%2e)3w= zLnDOcc1td+d3%7@`R`&ynx6EFWa(x*Txa(tSMl=bk^WS_^>v7Fz8Aj%O(3yHV7_QC zv7rR0QtP5o$p~o~{5)?gbv0vEl3CU=wM-I40%)rnUimq6+&d$^IidHK-9NV_{$d;V zA)$1spP>FAQQtv6-%?N2%mN7-6iFczJ}M1!jg|x4uCF>5P!sImhV09l(M($tcjEe=9U>`WweGlMnppX!vgk^4)8AKcEy!qbz$8K;;@G z1r&~>YV}x5%bt6hm)M(}DA`tweyQ|{US~y^?2Ur0Gaj2*s&ws1$Vnq0K;|}3P}EiH{f(e2%{(ynG2)o6Z9x|YBsR`=nFSXwkoH!K z=~lAChrVLuA#TFvjw$i(fQ|_**``W)5+aSlx{m(0GniCT>~n|+C#6S-$PIG$ccw@T zcX?AD9ro|c^kgq@6cbM`Xb(gZSyemvJUSLjVl+rW<@RUWyw2^P6v>)jfgMh?Kn9{Q zka2na^`nTB`qP3ptVNfTC`ON#!X#dY^nqX&lgz(c%Jt;a@A0r>LUWLGfXAj= zFW#Wdh`b~bK~`@UNHiklI07g;p~G)qD9P~p#axl66x%Fk`gA#3H2OAdxbKqcz(`1* zyCcH-LT!$(gl*WsO^F4$TX7=TLc zktr*Yz*WFZT?}c!g561l9KVuT4I`6DXFz};>3s)wlqv)1MyUTh@7|O7&T&wIc?Z9r ze16%?z-GRYt)NUL?>|Z@1%GlT&ZVf82_lBBR)=;-sT5gJ_Nc@V5y6U{^pqsmJf*it zf5s?LWa5ahOt0s0r92u~(lu!~d562ZO0Z<2bVkbMMGS4z9Bw!U@f^eRqerYsJs&7B zw&oQP3=W@ADoQb0SAEhZtBYAi8sojcrKP2j={{l|00v4bSGPKvN;q zyw&lxpb*_EKB=Vp?o8uhQ63Zju!p`9*kt3{O3qr zsY356y=AB;@jj>K3bnMU-UZ58`I)bo(WVxMujTxON1x{Yj z251;RpH-{XVCt;!C83@8G84yO@(R0Cjtn4R@slSrq&b;Z)1&hfKeewc>Il)-@OsW> zjZ`6-Y}TRI7@W5B7f9)AUAs0}Q;bj-5!qp7I|nZMsjHJ=i`bEtVT+Vj8CPH&VF<3b z$+~%bZWBN({MUpOw%-AWsV*(IMU5SXMdY9Tp~FF}4YD(AXOjV#D#KW~+GsY~XBT+Z z*mbc`GA*b8)M3J`*r!_Zk|+;7_4l}o2??X|RrHos($~daQFmM?8TO)8qP`xU0=}o( zw^Qfx1|vyu2$dZic}KRg6P=H9n6SI?Kw~nHcPLgs^pbH&ac{(lfWRq1uBZwJ6_d^B=FYjO$;>O9;Z2BGNtK0_j zuAa4tVT<;^>v-Ze)*ByYf=$p8Xa*v5n@ukTTDIXKw9DA+aE$CSJR&~SCcl%?PSaQE z1K;e6Uv}6X9OBLP9BD^!OV+O2B}_43DnS-kl2$`L)q%Exgrzy4g|rnwyA;|A#>ip3 z!J*F4mKiy_^o6u#;ndTX?RFVcgwExBaaO6jl2f;kdcG_XZ8{IFb2re|0jWt0H15ba zORop(2uJz>j1C?8`gA#e3SskDsl7~~M}RI4U^BK5&jx;~T!EtTe2rWd5{u2(ze(k$ zlc3r>RS7XlT?XcZ1VD98H^FA_PBk8#^^1|w{oCNOi4?wL-iEKuk1M0VoHs+UEQ1ZVg`<}4YSY5m4c0e+- z*(B_%cEm#xBw>tqSv^(Anl}t7MzyUSDpmbGiRWq3**pz z6yH*4423lRHUU?|MRliKYsSC*X!-TgJUutB4^rU z_GEx;6TRN}bhI34PsLujIDx%Pv!6x@=6)*>|k{wz`D-8(hMdh-YxK z150=m>6<+e`Zi05h-=4q!?YGcE^+=&gm{EnzGmWWrKC$lP|6#(S>7lq<;T|X`@;b; z{*rJ)b35?8PMZ^-?W7aafgPO8mrqB_W7Pfw2e6#NDZuLr9pa*MRiX`_$iSfo08~Ic zOepgX2c5k5ijJ>K$OjXU%l1~fWVoQhTyfqy9apH%IIU*u%(T^gR63d+3c`p|w8|G{ zjn(YZh}M7K=Vf7(Jn^2ko|94__n(G+^I(y>ON3Hk<$ZIsN!^t&BD>dWk^#V^AlXG@ zNtaXKk}6eZMBV!ZVi6f2s7k^rLY^+r~O z)J$;#umjIeRG_s8I`4!1P$3C^FSzQ=d>myr`v?+!ItU=^q|`q!|p=%0pe7;TY41uwm4JeAx_?+ z4Rm4tmRNXKPk|T!TNUVi>FoQFpi`H)MIpd>TLcKR`lKE#&eb9d3};k${HAFGQbz(N zH!gxxvv*()k8ni1b&V?-__m}7J^+O8I;GU>XwhJVLM{`9q1LdPsIR7U>{@V5C_y2J z8zmPhGE9N-Jye>8mLIx7*aNBuF!nX;UsLtt(}%3-Aaav+bHWKGF)sVUjX`=A$E11k z#!c$R$@y%&p3G;1yBF|8!p-|oOCiBW^g}v&*+I6^z=2$V%}HL!yhh@4|9(~h$e>Ut zQA+Bx2tXJxRD$uo<4}OO_zsKpJsf8O0*Swk@WkE`2T~WX@_NQb;qlEC5yV9t+*uJI z_skR;#F|S_QB{~aMLXVEO3W{|@6n7Vjxbe(u!P=b*q?(Oi~Z> z&V4UhejLnMH9)`>af1l`^a}Kks60Z_+xD>v z?ZRs|w?szk%nPH%O|m!7onwNP2@Hv*8LwPEo>QK4a^O%Ob**EK_^CA*Pr| zbQ|lRui3IOaPl&ug8of}LSgpU1mE(fuRw`-lA|CFEdY!nekWL8=G6QmeIzbKayDxr z9rdyqGQ@H#j+Bw_z>C0)etWk#S4xFsMC>$A z12uuV+gU~eHfXJf0OTK~QX_f?9MmS=H2Yn%A{~I2>}!{W)8YRv{}{`2kF3Eey+vRg zn=5(5lqh|JF%rPF&cvK;J5vSj01R}X6ogfc|zOD ze59r1I$KIO2+|YoKzVK66_SA^FS1UQZ0|m}Y0_q@n0XFz(>LH?c=!qnM3Tu}1_C0H zgp2C+^zf-sH=K2HP>_HxnvrsBo4Fd^##t@S%Bm)8Zyoikv58){H(>gmw>|g;kHDAp zBQQxeoiIt}gYX`Y9WKOsdo?eZq{f0EU>%(1 z4v(*WXvvE;cM(FuO@x#`LK&TWL~qx~BeoN-K^?D8vW2l_@Sb$HR;d&O{G3%nM&13t zr7=~72p&^a%)zztwk)L}Q&k}X0|z>atu3rcK%mQ*h2!8@ZfP~mKqk|H&uL9ErL7K^ zPIcg>s8mr~9a3p^kZZ+IOdAOiEM;4(O?5sFfP~Qz*<4~6B2a%Q+ome?VVHA~)+700 zsO(U$-u!8mKm>!%>NsS7t?H)RL|Q-eGp=S#lO4cDfBFg`5vHGa?5G7FnDSM)KE#ML z|KR9;snAreH?kABhe7@404ywtcS)5dkfto6`pXABQe^#_5+3jq-vOZ3TG< zLEOx5hV?hFzTQ306CPM?)!_hJX6{nO#aad}mwI@x%r$wfZc|3$|*fyH(WE-{uw14+=7V?I`X59E* zs4%;p3ruY&l@A(PT)resSXMYeYh_D+rsJm4U*!dEtV*qb;#{Z5N64sNy2A_J4@!~+ z5}y8$u4UtV66yq{7*}V|1l>h3;X5$*ikR@_a`b#StDX+es@aqEsdgyB^W8;&AvRa- zibe-?K`%+VkJZDBbC5l9_O;LlFHJnBYqE(J5 z!FPEK^Z{*)K>A$k@fmIBwKaw)=^65%K-clL2jeM18FXP2KXg|5Sm{1W)(lU=n7Qap z5eZCjz{tWyall8D_0!3!GG~W^g$Iv^7yZ2p4hiNLxe94gZczAt)(InSICz`~ry6t2 zaVTsXH2m#c3zQ(f^Qc8De2lW< z^5_GxgDk!7BiN4;DlDs$YFW+3)!^`D83ZZs{TlVnr6EdJhSLd3Yyy6Tc(zFNkQV2t zdvroT7oIE2sSuh2j(=Li@lT;)N^^XX@mXS)vX zh_Vsb%DlL6a5h?la*;~4mH6Rb@=ftm2wx&io6T?c8uc3_P(XW~!`&jnl&_-6|5G=5W?PRn>$+wUEs%y3$2?GMXw6)dCq>2LL z03lg+BQNG;z7G9HS_4SjJMx}NviCGDIIlWfPFo^5=*IcJNwFapWl?jnX2sfF@=Vg6&7G1B31LGlRe@`>a{dQZfJgDg$O1mSo#-EECTnWM_hAZ9-%#9b z2O_34CdLSGN0&JQoK11*f(k36lsN+ac{=Hd)9Z8rS(lp%9;;S*qv~>j5Rs55g>!WI z`@+ARB#7{p(d3Dj#wdPkU@9ruqt44&3mDeNtmfKqJ~E6?caLHA-YphRw>zwo)RYUT zU^Wq>Hts-MnX2^~cD|Eo5qoQMrK6qkv6YN_tK*Ry9&N2>z#)#3lvtGnsC-*x$N_+; z<4{A1-nU6fE09mU45QDh)63VHS(jAfbbu%sDex6lj{_=IlJ2$J*S z#6?|Xui)jW(Lnfjm{_$M(*nWttpMV?fVgmMbEXtVt;=dtXpiUiDc75?Vc!qYn6Q1{ z&y>bmsflZx5ch-=BC(`EjhxYgXT2+%^x@eLOZ4K|kAZjEQ2`9YIEjYmRdKYWJ1gTN zG~(7FVDrThP;IuM7EnF+3^HazozsvMx^4#}m&XQc25&(4QSr`&A8xQ~A*gNaSO_z* zyfsJBd0M{B$IuO&K)B_J4r|90o#ybPa(Xb{kBwfXji)$?gE$;rPH+e_vAlKkU?!I| zBwiw0cJ5YbgmJT3$!>o11|`nX_AKKFhewz;8IizxKo0DMUT{WrKu^b{X~($B9jCP= z#9wrmd%Q%R#C*7>R9gJ*FmRA5D;^34JDr#eih`>~89*KgrsRTkWpB_V;HG!#hvAV* zDrUweg(;%n;3f#qJd?*H@EJ>A)B(3Lay@2}zNFliroZG5bzKFj`4KsU)lc&Z%88PG zg$!dRLZ_4BM7_rA9k5I;jLRQLGmRS2pGYTDnh^`pTKQQreVBS<7ZUf_q{MIS2iEyG zO?JOfhC`^(R^XbKe`jEn0@EO={HQujw`84>H63{ekk0_hbkZ007L#gRu^Xecu?^R5 z;qNTKHTuY_H@JuYgy*6T$^o~GoX7_Ur=5Jx!($qG@iZJ$6D1_QI#W(OkB1F5HSjDk zMPK1!f||$9YiE}dS}ALl)gGuYWb!Em2gZe=oDuRI%sTa?IT*<)KJQC=+s57|?1G>7 zr^!gaF&s|antv-qA1EoOPB2M-(p@Nt;3e*Nx$(ifRh^o^uBcsBw0M;DYpF{opM+}! zh?HLoaRK}GNov3tr1anr>Ku@pay_Zx>(Tc~o|~3XL*5PF&**_VJQun z^I(CpWM>^GJm(18s{PAAYsvvbXoHf*w}guVXvdN&Rv%)hpWcovR4j%@c{1f0E**^= zBDBHcw#nnrbU?zSi{g-JLw5eD5PnNnK>E!9icH_3Y~gPmx5f8_5OpK}gL+C=w^({! z9Rx2D{xNN1t(8xun$_nyY-;RIv$Q-rjcjghO$&<8d&d@*yR9ZM>Bmx{<2vf5I7jCr+sT09lV;tabW1VpBAurD#t+8ZXT zE@I1H^3E{J$mxQd+dd2GAq7T#ypLUF5vx1Hu%zg~ckR?1d!CvD48aWa=sxlp;iNp& zkE|q`aVP(CLevD=Yc-EX^bzFgO;JspTy4tpjAOt&Z4wj@aPu+?uFSORA!~fp#kI5P zXfi5@JiG=~MD|0&{?l5FPO}n=W#3NW4VYMIW~IJyx->Yt2F=Jo*G>1s>leW)S@iIu z&I=v_$}diQO(|k`R=>pZv*|?IhFcT51D{8&m<}RC+9vyE%xcCSiiU(BgPZu?ZjceS$z!l$v{u%eTUZ!}}e?!i?0@(AUV*@i-4jo?i?!@=yhdNy32FOW9k-s>x6UFjdbif;5bio{gL z7O}ghr@`(Lmy@V}87R@snHO!RAv?hE|HET+{Dn*rg#3+=l9zVV0 z&ANQc-}6i~RE_$HAnUlPpnt?a#oR4DW(Vz#kJ26(JZUhA!S8zvo(|F$2X&cOSYfJ1 zYj||2or=_sK9vJcsOD;m#gVQOmlt_jVnlo(y}i?eklQwKC(j8*JeK&Y?s`Ug*N+a# zO27&Opk%G9Y?U}rk605s8T=SLaed}!jJU>m*?;58k(3>mN8;Jqhg;&A#n02sD->7Q z=C4ryu}JXhZ<^h*n}#kVdD9SCrz8b>`exp)d_!;kcJ(KyUc;9*MPEKI@N2 z4C5y0*cEyKj1y*a@!D%6zR{&7RI_rXAh8+p{EW`5ixmPk6Q=ZylMc2DMVLqRge5T4N21@KS+~zZnU@LcysZOLEBROtSYw@4(g z)~t{Xh$B%rDVuCT(xj50qt$BiWHz9;nF_pPq5uBjQ1L+ZfLGG7FHf4pEopfYI19l> zOM>+ryQAbLGbocZ+MfHeMos9U0HtPUpu=#q8_x0)#Wy)mwzjmND4S`;LJecyqX)ra(iKIO>{7rrrfabN)(z0<|W895gThQNiu@lKGPI5HD z&WvU-Pj;j!7IkzG`2zCQi99={CQtoJ-_|J68L`b29pXJ?+#?ci@GT95j9O=0K=v{( zRGN_*NGos>SNA49G2Vp@_XMq?Q@1q$+uK@=yNS3D^$+RB5X=Nue+1?0OA;g=vj2zE zdRE>OtX!#?qWhx(!j6EDSkVohY7q%at$OKO#N9k??}>n6(7D#@+>pJ}6D9S@Tpw$!oDn)%fE{-NT2OS$k{AdQO@3K2E$flyPs_l|q}I$_J1HjY zue7`HojD;bGl(mOBn2N#$;>RP^kl zm(=gOfgiX)gxBNo0N07muMOewa7|fCNxDY+@CN({F6M7mOHrTqRo>5@VzV!grd5CT z1i4iEcP}oWtlq`pp+D*XZ5{3%>n5;$&{s{?lC6WL`iIN&*`>jE;oTZ_L|xH7>UM0g zGP0O>(BXs0?ED$+k@+cANKgD6`f|CSRK_g#_n0okZ(fkP;jw#ocuvMhjEe-h)1&i~ z0W#$GdgIfPttth@_}&CRRb;kZ@1M<~Vyys{4HP9!P!l(z+UuhG+dl7tKr3Dxjr8eed_O=SD|b3 zy?aGF4ydZX^V0bV>V5FpQfJ=(;f`i<$={SS_2c)y1~(0=0yH|BT=XcaY&98<&!ER< zi{x-JJDJk}j}I^F=D-TrJ4v%LJz$oP9V!-=<74{g6d&`ai-%Wct~9jcb{b%G3#xUY zzH*yst+>tFt6e`q9~!9VQtvwUBKG+h*K!#L6i`y60@e3)v=~fJ!II9Z)d~fcNku0t z4E?^lWD5G)Yx>3nT#{6ay8~oUP~Hi{m^uH8WdC|VYQAm z8R3;)50xBq+0*eF`{WL*vuaw+)`Qo{=~8<0QWg|#|9Xi0r91=YF>#55z!6d}ZrvdF zxO9Zd#9}@`YOB@x*%}TkCXI`--#vtB7*)JfS}5M6P_tPuQjG~qW>HLl&sQU=SEpVR z%20qs9GhAf^(wlk!f|9D10KQ$f~uR@$6c&EXd1** zLfF@O00%^=gS4V+%KP3}Is*UgtNl7G!k23H<(@+!1OP15pU3~2`uA_bzdrt5SFZf4 zUsr#Iy8R>2{u%h^!yl#ktwjG%5dFVPv`aXDKLh8(qQ8XmNi-n-g!p{AZV&O<6a6Ke zg=qh60?$7s+JF3`-F$yuv`hSdMYq$xJ_G-lb@<4Cov>7R%5h&7?Gnx--5$a@5&b2c zZxZbi&Ua+s{GjMB;d}%wq{dUO!>5RLxem`nyBzmV==Ko*|6KH!i{ zzE8AEI6szw^RuGAg!3+aUTIn7e2+x?r-*a$WupC4Mf-P&cG>?YM7!+&(Ku7|hsKrt zKV7uT{traEq|dQvm-v5=XqWK+iD;MbX$|R5h|lMWcG>?_v`hGZOtj1Xe@(PY{68ex zCI0``$E5Mu6YUcITC_`i{$tTD`~SFTm;HZUw9EeQ`YjG0iRZCsmvH{DXqRxlN3_fS z|3tLQ{-5$&-MF&ch+ zt|a__Khu99`b+rVmg)b~qQ8Xy&ocdgMf8{O-}Bqk_#f)_5dSa9^k0hp68>Kl?UMe# zL$u5Nde_IM@p+GK5AnH~>Hn(eFY)=xO#kl`{pEUoZ>Il068$CoPx?2~`2V}QJ;eWR zrvJYu`b+pzW>FPDnF7f|z-5#FPznW?PdztnRXWIXTZl`sV_I?e7!q5}z*>?Gm50XqW5r z)uMf0!2cG}F5&;0X#afC|MNb{&Fc$9`*(`=FBI+nRJ2R_`NH4f;K=@GqFtVg|4_8c zbM!YwyX^m?qFwg?XQEw>`>Uc|uG^PUP?%yQ2MHivBN)_UpgP;WH5J?-lL4qW#N6`yJ8# zA7$GAylB5C`u}~=eqXfzsA!jb?AJuQ#Pj1n&EYTcd?ecC`X7sS$*;afv`c)xNwiCR zeonN%Ch-3)?^gKG`X8WOi_=$biuTXIZ{{3*QKtRAZl`%H0U(oF#o}c>Z3J$ePJl~yZ|6JW3;`!y7{(mFW{sS2}|Gnrh=lgS_ zznm{44crNT+5e+yGWbJy%Kl#{+U2=B*6ksjGtpnd`7@dR|4F9*kBk12PX0I1F7f}R z44j?c&C}v}eX-cz+oE04^H+-YBhmk_i1t4y+W)#}AB*%=i6Vd+Le~+7&+?NBqBr=tI{XqWi^CDHy&^#4ZP{t+1d zIob^$`ySE%LiGQzX#b#S|35|hmx=Z(pXuiHheZ1)i1t4$+CNLQ{}Iu?C))o5(LNCE zvj3N6+EpU7q)^7VSSE*5|uK`(F}p zzE8COkm&!jqWv$6{{OdV|0|;Xb3e!7|MjB%$3(lt=a)qL4~lXBKhZAnx%#;d{tt`( ze_6CkI{9wVF8BB6M7!iyznE$N_}}lwmH7NF(Jtv^SG3Fi1JN$=d7o&P_`H#6KNszC z+z*O&NmpMl+T}g+4@JAYr~Z*>m-PHEM7yNtJMVGp^IwX6KNRiXAlkoNw11;$|2onB zO``onqFwg?Uqt&ii~j$wX#W<`{)wOG@cdTM{yCzZY&YiqIuPx0+=*!aHqrl&iFVol z>oe`&pK1TFX#eX1{x6F5zaiRx(^WUGZx`*KF53Sq(f*2Pm+ST=qFt`rbI~r>?JGsQ zg#Rs~{cnnKe^Ru6hiLyFMf-P(_J1YXze}|Lj-H$Ee=XWSPqa&Z_y^uB_K(v3HX#YXcepR$f`acxyKP39kMf(qn_Ae9dKO)+{LbU&= zX#Zx>{tra^cZqhn?>~}h|Hqy>7DqoALHJwe_HgH`|_=#|7YMEqc8mt(f>6uub&C} z|I?3B^ZD7J{bzOiF9xs@O}7pb{<|~npPy+TX4;=;+P^l_{4Of@$#;@=8CndsypD{C7$Kky!{gJ23?B!nuj$KFZ+x^ zKa;#24}TB-I=oq>-Sd6s7w|>ke+0bg`bC^y;9mv*4!&l|XdSA!GJ<7`t?T%DcJ zFM-cqaOaJa;q#&I-nEFo3A}&edAV&bDK}NVxeQ2RHwx z!Oj1raPvP6Zhc>Xx1b&0hi^_h_UKmR$9ZXZ;`zAC=bu9Zeg;0yOVi={zXe~3I2Z3; zr}~qZo6m>s6K_!Y+m+F81aA#LA8vnp6>dD=C7zd?*SFEee~%~UEfde;vA(_FZHQ-E zcw6{Lcsuw-@Zq%Aboi?1AAz@rzX4wj{$AqsD)HB^e4SEL%{rfedA4P z{!sQ=Jn<|)`m_u5YXrc)o5v4&R6VJl|$TJnN!w3)g2IxIR0;)n5bG z|9QCjWqTI!bRnKy;QCB}JO5k`*Z)4ad7H0SQSJtmyCvLm_lH~VDR9fZ7H+xk!S!#@ zyNE}h9&q&|;OY;9Z$!PGhi?v_uTN2~^KDCbfAp)t2f#Om8|PqnU-X9ud;;A5e=6L3 zPTjJIe}e^!{{LRUoAfR8UC^(RcsBpEtbFC~bM-3md>yRnSNJr+XDzt#jDlP4N$@?$ z&xLS(ZikzPMf(@=?1|6SaOdH>0{$a>BtCl#DE#H$3@W(sY%sXsqwqNqJ_vppd@y|U zHigeV@Rr*aT%Rs*eeT_^&>Lr??F&8{|Dka6IXU331-!`)g}**)!;ODqxbY8$4iCyPi?(E&>%@5e4;P#&v;D?ikkKsqae}$`WI->Ab-x98VUAX#DaPxm$z|Vsp zNu1LHemDFm^v}cf`841^!Sz{a&ms>SGC#BkczgKK#4{Xj9u5uoX>jAeD&W)L#{URh zpSJ@3C0w7s;O1e;kwJdo=3#5NdDu7L$HI;O{D5BtH~u@}`n(wM_u%^c05=bf_L_Gd zmV}#!wcy7rRP4KY!i{ssfFA%q7M~N~#(7!59}W0>0iSQwyz5&P@J$0gEa0cX&Clg< z^K)mwpM#s958&qKkAPS0J@5LiAMjxTKP=#v2K?@T_ur?8XFTmbB;fbKk3;{$zJ-tc zl+guu-!eJi-@$FKru!8>w%5u5?*g~IwuakYqXT|cz;6opD*^u|;EV5H)XR7}1ian> zh2A`m8B=icb5Fqkf_ojk*n#u**(Tr@!S%TVZoU2pc(;R!a@8Lj@CV^u_q__&XNiO7 z?Y~vP&kFdfaLb(wcRgBUY*Fs?8)tN$9Ve$m5nytXFtOsKgT;Bej5B5xaHmnx7@ek>c5ApUuxXE>$MtOeLuMMIudTZPKH~r8{l2( zC$9#4ZopSQyompF^0pOxB78Xf4EVwDN$`pAGvRl`$HAY1p9P-@??8P&4)_mned-@k z)K}gT?l?LIZhtrnZu`!FtA7Hn{zJI>U*YPPJ+g@3{Xh~ z_1D847qj5@pHJcTpWoq@+vM1yzLvWxTzz-A`XO-j`@_|r47Xl4!>!l-aO?Fl+;QW_h&xAWn~a}(V9J|6IyaD6@w_#C+L*FV0^*Jx#SHg||cDV6B1XuqmT>Tet>s#-HBA>>&6x{lD2>6C@eYOnv zws7Mg4fnd^Irus3)1IDC#P9vPvre2h-|?h^PsV5WlMAj-r&H$5d!Jgv>s7wBtbFCy zWrqa(xDubeK+V6uIPnIR|MhzL!;(JtU+c7*e^)MdqY}^kw@tk4KNjwDN+*~=v4FoE@b?0~_~fEq_VXR#_VY1t`}whO`}uVNzZGsj zzYA_Z?|NQMoaH?19q>a+Jn!d|5-<1j_0BKyVE^m|x1T=?x1WCv*JrT{=I!4(;6np` z5!`-qed2k3UP$Zv?dXl?@sd8DKc6k}+~MY}s*mVrB7x(9p_={67e@o?{FT@AmV zdQDBd9RCuR7UkN$tHN#HE^ym-c)&-&ZQuRiw(pbhzqK#ibB_j>)v5ku{nqwfG2mU` zw)<9a+kG6|bF&K*FX!`~K>v22|GdQWep2u9qF(ls72x)hZgAt=39kNVxc%oUxc%qG z#OqbUYFYWp`~MGHfLjyhnZvWXEZvS}{ZvXiJZvUxsWf8yqXW4*v zg4=%v!0kU{;kL`<#LM}-BhbGQ=szy;y#LI_$Nsa-RYiU64;#RZa|gKkL*Sm%PKMjB z?tt5`9!R{Lhn21_;Xp^Ee&uUi&HvU}Ht`0P|9=>tRp4j9yTBiT_l7?T-xmHDd;hni9B%*l8gBm?asA)hCEx##Njz&8^Lc!rpA_h)!cSSKcs^t%-1}v-;of(f|Ar#} z@|JM@w}k6|Ap8O184ve-{!F;{3oe1Hp9)w1Ib40+8;g3WZvt1pGF*K}xb40U+;*Q1 zKaV^-4mZzl2Yk_~Mf~=Y_HfTt_JFHDF!6l6(8a?=8z zdjtMdz+Ve^qg#u7dM-B-?m6u-iRXFF^LZM2+hr=;`(n?*y}$4Y+l;5`X2_@{{p!FH^cRR9sVNg;9u~U z;GOR%;@4+nz^4TK&44d@XW?&s*MvI{_lFzLo{8uEAs?sv2K+F5Ece)wKL5EZx1hJ& zXW-_4HvDDs+4!!azP4jKxc&nJzEk3Pee>(J!$Ssz8T#8^X72Zg}30Y3&Zaz;&J}jGx0nRdA$w__^|<>81P3D&*l^7!?)nBQ(u*Q z^7-&r^!B%!Ua7;d?<;FjC$z9N48JHqwv z57&PLT>nXM{b#`Se+jPt7jXR-zQ2h7MaD}fxbxw@aD6Td_`3mLm$`=jS66uUGl&mX)u(AD$BM^8$W#z`snqLB-qox&EU?JkHOH zB%a5U&y&lew|!SD>GSy4D)HQBqrj(MNuT>{74YGK&jEq{$Ur|8Zoj%0?)$bEJyzt+ z@$z86--kP1>OEfgn9o%LzD2oq0uynXXLul8h3JY~K|z$Yi3^(*J4JK!@} zFJ6b6ht^LOdC+Ga_-pt)n|L|S@6kISHhjA9e;uFJ@cZFo5-cyU&f7f!e=^`R z1HRC6MLf=9E#b~%9TU&v$>*O9(AzFsl=S(y7+B)D&yIo5J|%tbGbZ3i1wNAk{l$U) zS-9is zpAL5(xDD<+Fb6)1d9ul?MVxQIdjxzeT%Rl8ui`T&;Oow;DK~GId^~QFc-9Zi^EU8j z7cA}r?g4)eJ`Vmo{JO;RavLlKw(`c7(6EEjsq1S8bo5lYk{>#H(f_H)2-;PZ@_s`q+bo93G6>!`4X1MM9 z1l;!hDe=7AyuDh#@%MJj+xO_iv--YIel9HObDt^bjsMO-{}Foq8@>7Wcyj-iiI@A& z+Hl*wFWh!N25!4w1vj2I;I{j0xb42+teW_c-O?s`R^O(_XzkAfzL#^?f4-475d>zf&ZuIZLi;Gz?pN(Gs zxp3RD!@EWNw&Os!-#1AW5&f_aP!db{W{g3Z2W$T{x0}u@Mi=5KHU6#3pYRWe^8Wbey)Y@ zLw;U{`#$WI9~M69pM$F(_)(!ZpS!`$=Mix8a3Pq=w&@^KNTd20zb zZ=>Okm($?(x9I_Y3~qkjfSaF2pA>PLhaKQw(tloqo6j!-UiVY{$>$<)^V1q`eqMsx zPnP(s@HcO*;r5>&;Of`@yztTgV7U4TaQ*9iQTV9u81VjZ+iMrN?KKW={?CBhj(@@B8Qr zf1+U#|Hp9kzroed_f-+U*N@A<&D+NCABpn-_|Nde6VLMSONBQ`c{mRJujsD{^fv|i zU*Nyt)AZ}2UcbX%g{%K1;Pt;LeEz^^Q@B1`!v92nF?<{Nn{fNj?8M9c=V$cxpM~cX zaoT^Dh1(z6!R-$R!Tos!li;3{UzT_tXMVrzni9{)(arb_VBUKfehc}j`)yILzUY?; zcz5_;_zZ{p^DQrc*J)IYqx;~N`x)H+-|V|0&bs)l19x0>h1Wwr8m@jUygvGq63_FW z{~U%%CEmC)M`WK1OFX|GzY6~rZrrZQ{t{gOci{Sb4!7Jt;qC)>`=utaSw3%Iy*L@}e(4qXg7lw$zZO1?;XA>bz{kLw z!pFlGhMx;}-}Onrm;J4Xrx`wN;fug~!WV^)hA##`7QQ(A61Z{x2=_X-`R_%X>i2}( zE=R(bp}j7L>$BV+h5r)7*&A*=qu~171vj2Q;QBZFvnW@ef$$}XXMgxo@H64f;nU$u z!ykh$1Ah)~{NKTsMc-s@5x@Pv1>AaV1GioW!{o&@};KcKFC%-N}2K|z(Yv;ht+b1QTeEs?s{R-rvPMx~d70b)*Q&Y{# zmcNE)^Vo{$mqwpmx8^^Ox&`_w^sB+0SJw;p8SobP+z7Y5o`ic{xm?{Me%JTa6VL0L z=XpK!uI~fjUOx_nTdz@Y*O#N=>dy)IWpLM>Tj2UU1Gn7Q;QGvlyM8TFzsQ@{i9G_o zJ$xnlL-PiOkJptQ;O%JNL2%4Wc#|aDqq=WP4pdzb9;Cv>NN(w zE_^(^GyEL*dhq+er5mPF!6G~+6=uuSHZiI zpXu;^^us6M>%cz@_%HC)(ARBT#J?fsE)wvCn$BClF1!am+rT%49|PYA{zT&CyuEd=&YA53YWJ#f$pN7lZ4wEPN3D?cn;XlX$saUC~>w?cn^rc;b0~7@yi@6#CuiZ-rJ`K-07YF(qO8Ox+ zVb{4m&_7zzUzzkT1p0SM`q@eUd7%Hfq+dHrROM4|=^~%zr&;28KF1~fvVp#BN&iUF zuN~+&F6kR*o9N1C%Rs+FNk2I0cMtSqO8N_v{>VUoYDxc5(oYWbSC{ndvx%khnI7ox zFX_i5{ZoPd^^*Rcr2jC`H(91=M}LoeANZ5Zdj|#l@_;`V@Ew*d%H4Y)} ztKNLM!pD6=72JKog3A~BJs8(3!biYI!#$Tc2EHfyI}^|Q|DP%U5105~i9e0cP<*~F z>Fdr{(@%aW@%o9^S)r(xKCKhal78u=?^WW< zCf+~rIjE#xKIxAt@f8!F5co_j>02cI9VOl>@dpB*PfGfglYUN#uafvLfzJw6f6sH< zq;FH=t0vwt@p7KGF6mcG`e7yBA@LD`&uJz78c9F7#Mesv(!l4jl75|}f1$+JP5kx1 zXKqQqUeY&g@%Ox~pLnyx%lYY4(sxbzZY91^;=KZ&eM zm-sG;cME)WFX?wn`q3r6N8)1xpNmWSJ(GS)iSL#8w7_R(Nxyf}zgOb>CjMFA({!c3 z=X1ZLZ(iaDBwm$xInSGw^amz={}Mkq@ofX2BTD*1l72#oAC~yUz~{D-{_v!Kpu~?% z{E5Kl>yrNHr2nPFk4?PJ$~E~c=cjez`TBlb(swNJ6B6$n`0QBHpP2L`O8n%+M+ZLV zl=OMOy)@uc0-xtf`n=!19`N@9pZQz=y&vZNwpqZNCtl9;h9!O8Z+iv2f8cXaNuT%I zqXIr5@R?fD=l%AMfIkrUd{WZq{dP{ke+hh6Smp0|&iieffOky1oae1e`n=x`3;2k@ z=d_YO@3)f!ere$ISV^CcuNMOTdf+p+q(3!{qlRt%p0}JgOT3()P9^>6$){Vudj&rG zl=NpLpRoZyD)70wq(3wHObhrOfzLZ7eXp9!!8)IncexyPI0zL zyqxF0CH=Wczio-1m-w*2=lGKTf~22V;(7ij2R`?e^cN+cCj$OL;PX>Se@XJG)9&wi zyDagBiI?-UdP#pp(swTLygzpfe0DGCuS!0nOZ=L|#|AzZm-N>r{ge{FKJjUR&&-nk z#-x9*#BWOcv%sh6s(;Vt^rUZI;x{K=m3TSNo0aspCVl@B&-Yi`20o|2M{*7`13m=) zFx+$Ly6tP~mBp!k1-SaQaL=()c=W%Zp9udI zenH76kMj!j-Y2>a{XzKL3eW1B$8#?}-luy6{lWOWf!_YMP=}&@`!^|`*J=wN0ACkA z5WWd~5PWO+VE9>yXZ<9r*GiSI>~kUdj}|TBxdQ#i@EhU!+@5&5isvWj@5ldB_^gso zo9bxl)cFv-=jwlz^zD;=fsRE!)wfDKuW!esUp3J8Ea}%y`hJ0auadrV(jO4$PcP{= zNcwXF{mmtPx1_&2(7#sF_elD81O4wMeZEhtzs9`txnkmZKDS8zs|5N@O8Wjuzj>hF zqog04^!o<-lS}$-lm5&=e^W_6Bn6!;*ehp#Qm~-!^Jp=tNCH?56-z(6cP|}Y{`qKmb^(Fn-q`x`PKVQ<1OZwLW{r4sP zQAz)MpkHdOzvpv&(yy3!IiIc3JHK^=JO6iqf5tqvG5*ePz0vDG2%h=p>(o&A=lJgy z_>V%L`CORlI|luN>?;mKZ#>7r^*J5>A@Q7xzxBNsz5Y|+?oVdGzrg>lz<_e*~(H&|x};1lW1+g9kEp9jJ9*(TuI!B->x z9pUC*zB&4x&<}wRgRctL$Ni_=aXlO#{VjJ7{C7sbGF<=s{45)fyP$U;rQUtiuIP8g z-~8_j_xi$po&NU!-S9U~ubZNFao_Iy+Cz!Q>!4!-p3jF_evE$-di!}F_@TrW5}!TM zXFks)pV0w737+{sll&*)e-!@bmGq0xUsJ$kfqqI!KRD^91^V038~=*|ua_mP^2z$c z(Zsn3{1|vUxc$U+-*)U??Ox+QULW}J@ci7P9MAgbC!pUn@hq%6D_{A~XUNA(neQI> z931co0Y5L`*9H9UfG1ohi}Q}k*AD2iKju6?7j2mSKIg}!|8HF4=coT~R^m6M|6jbs z^YNLlFS-8#N!KEM&)Vf=^4|k~3j9R)sqnKC&-`0fzM7>9<>xHn77IPt7r`VWBXKeXhN`|lF)QTXV8EnNRwOFnsi?k@4X+(+=y|4I1i z+^M>%x%ZZi02C8xg36Tz}JDh?^>8Ruc`Rt z>rlk=^(E{7*HLa;{5L26>aRwhw^vr*8!6ZQ^EC8cUrdLeOt~}QuGcriy}xh^{8xN# zg)c%sybYcn6R7UDx5EdczXQH6{7$&@)m`v>y~y%>H+&X8_rQOK-wR(UOK|0r`P>KJ z7_R<6`2FZ_g0D&YcF#7cl~3mHedPST(v16l;&k*6;Qva%zlT4FzF}ru`DEXmAH3e_ zM4Ts8t84aSEh~S%Fzv&=Zh9F1JCZ*0e+2$P;_WKmAA^5|{&9HvF`w0OJ^@d!g;nz# zi8H@$%F><1c}0qIZQA!qd|V%&f**|jCiwC2r{UMb?;#%dC(odNBk8j^uY`Yu&$ICF z;l|_j%X8?xet90gWmaJ2leLTOdk9>gGvNAM2=_YrGPwO}mFiM!%6*x57E3()XIWQ0 zCH?=h>3bHZ&vErjysYom-pcL{F&vUW##MYH16!5 z@1tKU6IMQ%&j;|q@DJhpC7yk2S^2sr`R6|mAoKYM{iP-S`$>O&;+fufo-FCVN%~g; z{dne8 z7U-V~^j`(~9|Qg3>D;JX-{lg|{+ab%KhSRy=ywkEBLjW@K2|xN{Jnv4JktXII|BdL z0{y#zer}+jKlRgcJS!(&j(@d4zeS+W&)drW2L$@V0{`;^{pErF!9f3Hp#Ln;&k6Jk zr|XPzewIqST;EQCe#1aNG|=xB=*I{8Qv&_nC(u6<=syhfUk3VxDtp50Q_jz#iI?-aMxb9W&~F>) zhXwlV9fx_vb3&lMI?zuI^v?$R?AeU$Q?76J>_PS^=O=rXAp4Z{%T~^&vQJsxD)F*D zyVpN2eRl6V`;_&22KxO1{lq{&Indu8=dO(4QITX9W7Y0{t6-{{28-r^&qY-!SoVepU(e9RhvdK)-dMKQPcA z9_TL&^j8M@hXei7f&Pm?|6QP8r0Kl#xpd;?e0C1>-2(kifqsube|(@nEzsW>=x+`5 zuLSzH0{!oSzJ5A*E$63Y;^pz%F3|T5^aBF@=s-U<(4QOVFA4Pb1^UMV{l|g+t3cm4 z-6$>RXYs_#`CKc|uOH~Q5A-_+`lAE=iGhAfpr01#pAYn}1^S-?{oFvm{37!nzbhwR z&S#H6zeS+mE6^Vh=qCmG^8@{zf&Rfj|6ZW~EYL5o=)Ci@aN_0stRCn)1^TT5{m?)^ zF3^t;^j8G>>jV8$f&QgH|81cEHPAOt2dU-pTa|b@pBn}Go`HV%K)+9*KMC&n#eVEPuYm=T$s6J0j_`JovtF{{B{$hmMs!bMDid^IP>halWel z1o&*?IXm#l&uPo;G8Lb%@Oc=%I{Y{I*YLWTaphC4@1k(e50^8FR2~+x%g}Z{|mk~JbUOO&)Z(`KhPfp_dZ%4XO_3R_#B_~Wu8A5 zQRYtv`n4$chRRu19_PjZ_xYuI#FNLF>*z6^X7{FjH@j#Y5mu?5_AYzem=TfvQU z<$$*i_$qMYZwEL2)!@dzI^6g>z>U8nycKy{GvI5$TcGa*Zx3Gw-WhKGEq6Wi^3HI} z&CV+G{@EV?4d9k*-quCG5qjHk6ZlH#d%zuE?=xQX$<9vmIOV9iu4`O(QAKH zZP43))OSWN9{}GLpONtG;A7$XTnRUxmbKv9<8M3e5bz;z$I(!@d6v7r_om$k5$D?Q zUEn+7e<doga=-Z;t?s4Sf*M71ad~@`2 z*HiPkANs-M^Jw_)_)mtL&nw_jKKH=Ke2##d&pqMhb0pk+s$YtDtgrpNJ@s7!z5T~_ z*%iIqe&V>^i#XM1_oVW6l`hf}5X<;pXQOcy01?8G7e|%i+eOzw_P|=+~xRSHYeCuZDY_<$UY) zyZz(<{GA7mgu9NM4S$SrbS3;z_^t43i1P!u<$eXXAJ(Z`^B38?VZY7a^UApTX6PM9 z?n9;!kNH%;Ch@5616RL1{963m2i$e`I`qbQJzW1A;T`aw3imuvz470KUjJ$E_V~*k zr`aD zTi*xZ>K}xA{rd>qcKJA{@8jsL?-OwA`!L*io`M_y({T0Az>WWTxbc4##Qzd{<9``$ z{LjISXC~bEUk%#pHT3$t0oUipApW-l{X1~|--X-HKY-iM>nv3CXMH|KZ{9wEo45Dj z`g{hrzMsR@e*w4Mzk=KD4TJdSpf~<+;l@83zA@v`-vhW)z`xl+!n-{D`I`Cq;D zjpqOF@o!H&a`XHHde0mf57*K+rFO9JI`2d6Uyy|k9^yJ9|E^r{hQ)%z2w$Q9@Wb@t(S2+Pi{k; za^q}9oL$kMOuy<4SMR(nKLWk^*%JOT{`tIDuk!aTD__f1`e^n!wB}p&b+r03;4|>? zzM#uEV%Qk^K(?M(kI5 zNxA0#YF;`^f46_=-yOaF8^iVA1RllTje7M!zcajdqhkE( zvnl%J&^w=dE+lu~z8OA410UC^p6D&N7u<5?mfIV><*K*bKIl6V=N53UkDPCZpx+X` z_mQ37#-Vq8@%o}KKCTP)Pp{+DJMPr$->(+_(f&5#J*n4S%zMroPcaWTuHA22uWg9a z{BH~Q`t*YZi~hVP@tB8f51f4(RKB*ur&l$t;l^V>tiyP*AIj~A+v9IPRBt~t9@}dN zd}`Al)JOecdFnd^|Mmg59fzWq?-=l%;A`MN4Bi`VdkqS>_sfRk6LIrtxlumdcNvfK zgU?~w|92)H@56c@YH#Yb3wp1Az3+1zdb!tYJ`a2i`d#tA5561xMfiN|4?lrh?zeE~ zu?BT({vsP+-tS%*uD%uAJgr12@i-;ob*%0B#ywLrKXI1q3!@Iz(Z*REu^}VM9 z@X6nM%HkOVACHgmUk1)0S~+KF8s&zD+Ikt%xW4nFD#d z>vII$b@@oR@f-!OP5Y{^P5T~=zwIk;NxhCiZ~UICw?My8pg*=2+`NrPZ+?!0tKW(K z;C{g8*)|}~9nlYf|3CSA2aIO|_1c_xPJ|DGp9CKZxBpkcPe$*3kW=9QbROu2|Ec)w z4DU>yjq^10_N$2jp9JrL|5cmcqyT@2(3| z8P{u|zZRdR;n&0M|2M!L*Eho5KTL(MivLaUu5jz+^{nMO|4+kb7ks9}_l3`Zp8&TX zE}VGQ&u^*dD_f@OPsE)!ZpXiE`ghsB)aMh_-;936q|eH|i*lp(?Tr83_;~$w58U>> z4{rP354U|EfZM(g!foG&;I{9>aNE~%ZQn=G+rE#&ZQsY>wQ1icD*Ab~uiW-}8voj~ z@8jrg-{&YdYTx0s@ALSKhQ9!}eP4pxzAwXV-&f$a@2hazcP8BSeGP8=TCVN;I(pmp z4Y=+5COm3i+v_d#^0(n@lFxVG(SF{2?0e`t;PXD*{p|`f%rS+x=^Nc0#4@XBP8Usq;rntif%TzA2O+fSl(;d}gz=Lfj) z{1kBCUsL}p`W339tcmkaxc#;__3}DsE_%AE)`x9exe{0_eYnH-x+2vs}+_E!W@2p?*vH`GWW#1NVLB z*Wr%GZ{X^GfIA+me*j6PZdreJJT}S_Q~6}v@wjd^t>MP+{O|kJKCiM6^*R}!M(_*Z zzP~&J-WdJ6aN}{m-30x1e)o%|s&fVdQ63^j@XWv>@zWS$iZ3247%VhW?oa6cXS!~D0&^x}~ zft!a$^=leF%fESB5w3o9xOwOaUyS!xIUBM`dkjzC;xd+S^SQdAJ98~H_U{U zPxj4r=?!2#X9TrRC42VzcB=#R`?jFKJMq`>X#u- z`Lb~9yL`Y`fLq_yh|~JYt*`qT>)R0@->)117O$-{xfX+LR4z1)Yd4tF1Z zG(PUbJD_(T-VtuOYXp2vxZ`>)xaSOO!|l)O!1Y-d-i7?E2lw2d3w&Gj>%;ekZva0W z-W7f(d_(v>@QvUv!p-ML@a$)L=ld~#U!?ue-yf=vzsJgcnE&3iYfqcEe{Ae9XV`IKTBk@BQda;r;R7kLzgfBb$fi z&^sPI2Xp>$ezqN5cZ~m^>W!x-^|D?1z-^b!;kL^y7F3u0Ib*I zwuDFRX3I4!6EL!}Zw(uFoEDeMZ3b*%PkM-f(^Pf$Os`yfb+i&i=d?e1G)bKRp2M zx-bTAxd+0H{}8zG9}3s!Ft|QP!u2@{uFo;>g;RaA`F4DTSGs!jM<3tA?UepLTQ7WX zw+H+L{9Tuig||!ktlX0**XM`zAB?~8>BayLYO4tzWKxp4c*WVrq9Lb(0pBDngC;m&WD z!1o~@_0DfTuQdt%rT93%T?RKlSHf-g=H%b?=xX$?3sd0E^Vh=lxdy%g@h?ZYec{)k zx4o{1ACF$2OW`-5x4mwJo1dHD=BFibTCeHo&Cktn^K%PapBZrTGnn1! zm1`dCKjz^ce9VJCA2rH@ao&fIaXtWd9(xe3{!zH&;xV}Eo&D21JdS=i?PY&E0B*na zzQYsvT!3DmJK&ykeg*fOb1lvjyq~o#{7K3k3EzfscPv~V?>jt&&rRs{_xH2w^D27l zI|uGK_4#neqwVE0^66hmY;0zwM=u?PYy!FV~%@yqB zu)g+(*YS_~Llt>=1HJ9|COmKV{JiL*1!@f3Kg>eE3;w+t75nN#;o0w=%g@=)fWHmD z7H*ug;62FyH}D1EbKytB7iZpkhjKly)2B0fefq-nIUe4CazBCp?OZWSaOIO-_q|Iz zt>MPA0lXppgW#6CE!^|TUE!Wj?hE%iXbjwS!TH2_Z0qV;)zs@f>NO(Z=fIu!rorFG z=b6N_uv%8W^7|b=*YN@Rukmr8KR@kaxjw&SxwgCdQTTjFxntq#ogZAko5#zD{IPckiJ|ds?AG!U?K_J?oa>i-wd1sT8X>-y_C`RCNj zbMi0X1Ie>LN9DhDPF{t-`(e+q7a^YI(SHSRAMnob=sfBhe6B(NzdnzeL%EJq-U)%q({J&2oXQ=img_kE4xieL)9=xLO+J5sJ5DXPCF8|%SBIN9Qw+U;BysTibmQ@zf-;9)51*INp9r_VIgS>h+*Q#xhOZxR*SjX@cSj$U>wCey(0jeGGu-P1<6oF^ZQo|_ zE$~?cz7Jfz_ZJpLKMDO}aPKcH4)+|x_jB9evjlqQtEJ!_&^L#7f-ebo94!qWj^3ZQ z>^a6V=sm|+7VbHQK6l{n&uw=7^5;VLt6TFAvg^m?@E-$T9`5z&3h+zN>oXm`BKoJ{ z`o9L($92v6Hs(5_3jeln`@i#E3-q>^`YQ67{m%M)-gACv1y{ck+LW6>`_JGQ0V<>2~w zy{ymQo&&^Z1U_F8kLP2yqx01n#OeLD)$!kudUb@mPOS!ap7FhP=b1IpJI|~Q??Ach z!1Y-R?tbHZ>eUyYPUyWKw=Vp6^!i*1?~LAcc|ExK>;gCc>%-042JmGmw=3Md&7!`J z>kZL+UAA7+qTjlo?1p|@%3UA*-tg||U8gpNpNW1G_&x9*@E75}KlKrOQ}nfY&QPEK z^>c={dr#u5P5yhKuTB1YqyIno|Ev1bf_~D6{B(eC4!6Cw40vC-MB0zMROeebHwOY^Gl zZOm8t?}SfOU)y&$`VQo0XSn{m1bkPx`Pn1jBjEav4ESDf^W*#P_J^l}{OpZSZSu1( z`VQo0G~D?23;6y49|JdU-B~YIrQ8G2yN(|WH=eNpKP2Ge0)BYFkAfTjF>v>*$HJ}G zc(^{t!L3(&+P8}Qcz)}?;&^<#uAh%Qdk*Y#3p?TObLo4*)gKyg_sJvTTB{UG!w!)-71tD!%&7JARUo6=s!DPI}?)A0Ab zF!`3~Pe<=OIT3FEk$Wz5273GXBzOnPJri#HXTgnM9>s6|&&Ef74%|F1P5-pLs^I!e z#z%f0T>sYi=pVgLcL6^7UkG>JxCpNPD$1=Q|Gu~4ym2u;w)@KTL+1_Ov#ZU#q275z zUYmJCz4L}~I&a8pGjALe`feZMzZQS{&voz~=*`29@JZz10QmLz909)pekR=C8+$Wc zAFm&8#OGV|Q{g_hV7bjXSFv25W4Q^R0qEt!0)8NT8a|WY)8QAvjdKRvI3I$qPP_a5 zrukVoyFjUYvi@K^9pL88pOaub+o3m}L*Ta8q<~L@8|Sm|sS6h87_Y;P=L@*;{028a zt?E~&p*jzi+XHTXhQrOzG4L6*>5AU*=sw5%?2NuE z{bV%Uyj={xm3SV7cf;pxxN-X4%I)}Uf&SBmMf>go*QXWS-^bbkzAy8S`ZmPrI(sMa z80TH^e-r0D_!!UK@D9X(A6)(YaPK!g0JmQ~2-oK!cn8XT7+wY6hP=5xK7!tO9)){u zY&+)VX2Y^&cr``fc{_0PlA zzW`VN5?uYu0e=<57F_*XaOat~;a)fS{-FD=chI}<@;$_Uw9C8b z-LJk6_xi>63XSta^zx73=HX+w`%n3<#3?@+9`&nF@b~_d-1jl%?mr{{PXm9s{_@)R ze~!QXU{ep`VL9||7rf5jeZyW{kieZpI@PO{`?y5{ArxC@b^8+Z{Yqu z@wsq+Z?E&@HBb4s(dVSJqIK zPqyE-+#TVTdm!9$4~6?2)bVhigE|B5b5Q5N9T%<_Z5Jx`W3Ct9QZLtwcIby?m92cT z`s#20{~n(X)#@6(zn^X`_z&nk$M_LG5WT;jacJUMwOdxc{=fY>9-dGBM7hTQGu-*_rqFNATSN5DGYi6fL|J-G4^+AJuyw!8o5L9{I;`_a|OA`QD=AQQi)p z#mR$tTLSKSwCkH>^#2skgo4wP`Q)wwH0*Uh=5D z92d>WgZCfhTar)LJM+IZKIY%~-~2Cw-u(NXo%#2Dz1rkoz4@2dCjaWqzj2y>d6a+q z|FS_ImVRde0N&Uhm5fz{h#Raz_T^w~BJ@KP})L z@%Q~N`;YID)u#WbxBtj%(|^?4e~i=qBd<;WX&L096?{4Jvl86=uMAh;8m@j7xbu7) zxcjdCS%0@7p0?6+Q*t9{zm5--NrqzYDiNyN_BOf7h>$ zaL@nOfOp4V-VeSe`r+`k;Fh~~z}JBrkKB0V#?uKO<5?GOemcV)*S;s!In^sae^{xq z_sTxbGwb2AcgmFvE|hED)`$1OXI}jzuh+cp<7|MB z+kjcrs!Q~H-itv=RNZOzqsD-Nx9b7_rJW} z_x-Qkh|~Ts4(@w!N5gH$Q{lFw>yho)3%zmf4EMdf7Vuuww`0IJh4)79`M^^26VC_w zpznas=5YJlD){t7za{!%@Ggyt`NaL9`cne^C2;k3!1Z^3rT(Kp?>uI`yl;-lXFuoC(AdcpIJj?}j=?c(_D2j2;ObS|OZ^+@h|v;gzKHTbJ{ zpKP4AqdeLtyYBm*V0+4ydtKI_JeaouaQ9b(;EtEUaQ6vY!JSvPhTAUNz@1m$WE}ms z=2i2sE#+FT?cnBNd${@E0dD?#(I1?zhM+fZo6^st{nc``?@)XkFTM|GJUgLxej5gN zo{XL&^*uq)OQYvVhvVOo_;-f)fSb=9;k%%BUfmUb1p3|JXTmSzI_qY*J}<(34$%GK z?)dv0spa|{spUG~?tzc{K)KJ6%4_o+=?MINj?_4Pj?_4Pj`UCR_HUjeHE%vgYCJwi zYCJwiYJ2${sk}DNk?u);e2&z3e2&z3e2&!o{F~=U&CkDij&vmTT95v`7ko>&`{Ax| z$KxQl`Eg&jG4t4H^yckic=Q~p^Wod*jnnygZ|e1L=C@wNUz_=DU&?h|7!CLQS?)Z) zHRTSWzWd>$|NijR(EEF;$;`D}VpH@k~H3KPlj+z|C`4^5*{PRP^qnPJ_FDQ@w7MG%bg5& z|19s0zq}v(JbZ@3&xhO3FMu28h49t!vA#YBYklp97vUqnIN+BA{L+A57VyjAw&NA> zj@0W)xZ~m+u6G<4SD|-YTn%?zsCQgkgT4##_}+@`>w7CB(Rbi}%{aL40i6%`eU=&U zs2z=eW%Sn)zw@)_7~Rl&{bjv;kI(BPufO)j$9A#4#yJuFb;RjD&GWn->M_|Nbgsc)0IHGh$v|NCB{KM%+E!q!A@z5MyQ`X7Ye_uYJ-(e|n$PTR$G zNAAx-x`}#4KFi@h9li7FjDX(^Z->uqaMy*~;m)6Tz}4RgZ-Kw>A4TV!_UA_zF3y>w z^~L$w_lfNP@}9(_zvrd4V`ud4Pga26O?_L#?}59X>SKN7`Y%EM*Z*Gp?GMjX?zQGW zzs`2K4}ERwbw7H`eE=TS%YOJEdi#U#0oh&;p|@VX2c-XF=;e&hNFI2SGhV&o#!SKIm-%H`oTvE0FM^W(Y@aof@BL9ZV_BA)KlSKbf)G5X-7zK>oo^%`+f^| zepnj58SU~td?4KCVE2Ikfc^lu?{^#t_x+2r;XmSYCHyD&t?-}WAHXg5E4bH9zDKYg z<0X2Jpjq7-qwKoCdCz^qFT_(txxd1l$9{u%ME^V7ealU(gYKXIKrjCjZn<;e9Vz!O zxb>>DNHJeIUh2XB>3A{D`uG@U1GsU{2X{T4A8!5|!riC&KD&CKJM}tiA$%NPjo{|3 zalo6vT^E|dZTF6}%LcU9!sy-SH-o#+bpP-5g8P5hqebx9l5!V?8~i?t7OeZ|-}SfxE8B?YGOKcU@i% zzB%z&FZ-wUvY#xE&p(|Hjb}xC%tIAieG9nzik5Kq6>|3#tWp zF7wPdxX)3X5BGV18F2fp?b4Aroe!huqt-yLkN4>ur)!~ioJR9%be`|?R6A0y=se&1 zkLJxdC*rdAAiA({p?4^(a2;kpH*f7t{Yex9^1Bb9g&0^_43?a|9^UJADzR?&u(1w zpXI3Uy4366j2EBJv3>tr<7GYK{C{h_IRA7Z9{C0V?;7w81HMtfy9a#ZfNv7;9s%Dp z;5`H0E8x8Y-Y4Lj2Ykzb_X~LcfDeGXjt_*pjt_!+UE{f#`_jSas~BHf!JSvPhWAB( z0`rFB$meIgp7q?!>qq&f_{+D4Z$mt;%RYbNe#Z6G`NZc;+@EZRzj@vs?*7v}yN-B1 z>A2egANi1g4-NQ^0pBU$!{GL-E#PaB=i%@{@SWkd?=EoLS8n^tZQot-G0xrKw#)8t z_n&*f)w_>!|LJoP_J7v}pHm%ye--%|2{#YkkG9?SLNE8ZHTfv?)^~5X?c({i`P>J+ z?Y=MEb{`FQ-0cVNNFL<2`~K*ySKoz-bzkoNR-gZ|Uh0Q5nzzpZl&N5SofN5frr zj)6z#A=dX;^tM;jPmV)xoX5i**Z*c+bN=_fnDf8)#njhky|6!=K>S|6$kk6kzXt8) zI%u5U2iM2-H1cs?J&|(dC&BGkC&SgB8t|D-i*fCF&S~hQer5kW9sT;`XCk~m{3_<9 z9pIjq+RrE96UAfv>K(tHOE@mh#NU0+S@3^)Zc|0Q&c^4Tj+YVmMEk&V@OOQbyI#oM zC!C9q`(DSR?J^m?>)?5C*TM7Q&XX6w&D(|Wf10=2?4P|)YTo4LO>W*UB2LGn`+xbx z=*_eDFU<2L=*`ci@c%`A*5P`@{K(CZ-27ZdoX#7U!&j!Cdtc1w)tzs9qF<2xiStQq zetw$s>!_dd1fev{C9AL?AV_o1$Udmm~l+lN4Zt_To1S3 z-T-$Uxe>1aRJcCV;O1v~z{AIkB{vboew;KzBcvpe7iRFdJuo-frkSAFx>0nN8tKA z7VyUd{zSl^gj?=YaLaur;Lis9xqv?(@E735^CH}MUJm#x0e>~%GvQv>JAPg7T#wwh zG+MBjSDgpEKHZS`xl7j{Gn7CvOpt z?f!Pa-+@Q%<-E}sz5AAX8y4-jG5L8Hz5G46aeB_?eER|V&iLEkjPpbE&Ockj`{Lt$ zgb{GBAH81t7$46uoVR=7^v<`@ z{O|cp6p!&gvtW@=^XB=3d6S#B`H0i{&JX{m<6;l;7R`r^>4)Z1?)ARsJkA5I3!6~x zzq#Ibp8tb>5^>{MfV};id8r{j|1|&6d8YkjLHr$$3&HIV@_!mnw6AbpYDBrtC$^)! zaV_*-7c@oh{kvxH!StU&jf(NL6WslS@hpmud~vw_xjEea6ZPk%(EpqBtEKU&&Aj9} zgYhqePe<}2cVDzDdi&LK@PFE`qIt&ruYiAT_N$&txL;inpMSGot-|Lb^7e1`tJb$A z{R?k)ynwGTL-*tz}p3U)qt-a@D2g*81OX$zIMRZ33w;C zFYb%Fq3?pvD)6pw^&7(N z57#y>;&D=flm=51?K>;CsS*!fSKhvh)AoyrmEE*j^Dg zKfQ?Gb~&4UU={wo(c5qP!0oqQ7uav#B@doUY>toR)~BCX?iT1R*L}6+Zi(Ld_Jy~j zzWw0N+x_9@c>r90?}Io_2cln-atFb?2fQDAF#6%}t>BK+Z3Dgo-1vtCe5Zg9hgT7g z^N;PgGkWK%UEp4i$nDR&qW8LNclc_=GhX++aG;x^5*-P zmU{p`)@uyhdL0CBL;pD#uKp0X`a|KiqvIvI9&!FT3?K704&IYE)q5`CI%1v=$H(y~ zH=jOlvnJ&pfsgZ>-1)6GKgYmwkHTMmWWbLL`1pXI6z~(_o=Y4HcRiBtOMWJxKM8&+ z+v`ZNz`ALYS#ZbC1g7VzothABUFE8k~Sc>bweLREhK~_aD}1rU z>s7v=RH<)eN~!+%T;=T*eg5<1a{mSuRaS1!+ope)aqq(#{~eTT{5vh2{&D47?w`d! z3|^Ha8Go@+`k%_Td>zmDOYnT(mGM{Lozp+f_^a@4@R{&@-pll};Qi5m2HzI`IeZxW z3%L2YGsw>%@?d@j!>jOr2!HeQ0^D-%3d-FZf6LtmZnQg}o7-9dZpkKXn= z0A7X970pMnEn3+^i}Bp&pcDJA9kK`KYU1K-pKdE?NZ*d{q4~ep6`1-Pdf&l=RebD?UL); z;^RI!;p+YQOO^J@+tqe|nRd+ozIuNPuZ_>E==E_vtc}miz{h@G8=uz#ALlE5Ua#o$ zxXsTS_|!)K=0DWW`iJ_r{-OTuf2e;a&`15}UG#bWvi|cP+`L6T@1u`=?Eig&bE+>Z zKKZy@wnobmb7pR;dAr9WqUf%NC>+okEx8K>Af55OzS*MC0mr9WkQE_dqW zKX*6dk6=`ls+V!LA$8iq^R+ay?gg(5i~oE^z&U29GXY*17XSH7fmd#u|L5}rywWWH z`FsY?*ZS-)8)ku5KH0a$tN&ESVdZkkxC|45Uwccs?g&f3*dCwOm~JJ__C!ehR!F{04Y`_%rYU@Y(Qz z@MdYyX7T6uO0vK12;UlgfA}`=(eQ2I6XB_ARR8U?67QV;%?l-dTHPwS1$h2!Vdg&vo<9SY@n)%h zS)4;MkUkyZ+25U${QH;q*NJZj&+oZpR%79r&)78i9SzU)`P_XeJkuYMCdCK-FY3+* z&dO|j;A4gOh0qd02q9~xrkV)t?#yme?e3`A6A7{`G~{6 z87fg*KN^SrTVs{zREN*8ywTy|Mp}o%*IMPe(cufNa^30h4VE8r`17r@Jn8UHSU%nk zilO|+ET8W1hg#)Y2d?EA>h2bBjq8{V|4eWVAL_DUa1H+ntE9I%{FLSU9R8iD@{#-; zbNFRed7pK7<0FFblWo5V^ZRMb9}cc^hUbytnwk!9jc4N%f?sTO`0bXz3S8saXXDuouJQb~KKR8EhhH;0 z;HSZRY#jO@^>wd58b`1Bzu=EraQ)q|jb|RX%JWNQjh&~c{4WBZ z3jSj71>pM4l?}l!o58jH-1kla?*iBGA9`xQ)wW81lYYx#7CPi_vvFLC%wE$;!}7z8zcZU%n|_-^o*f*%Hd z8TcviP2dyk{4SLL?N*)(!L?p4w)IjEuHS516hzkQ@DEvDaQKfb-|F!3i-UOfI((|- zM;-no%g;Fc?Uqln^UyF~|FXQ^;ggnF`5pc^%L@))VEI;uUt{@Rhxb^1)Zs6({EWl5 zTRzEdMuhTz)be_VAF{mF;kQ~|aQGR^w>tbDSJ?7*_!7&HIsD*NLHM%{e`rg+t*9Mc!n)&Isk7 zY!`X+9sU-}S2+Au%hx;n0=p>O?(iPV_dEQEopc{}_*u)(Is7s^8J}V|p+fmzw=&4@ ze21U4e1*f`-WG&k@9=S}0>0hhD=pve@aL`$!k=*XzI6e=4P5oiRiXZWaPa$3{+C*1 zR`2ldTfW@kCtn_XKkV@9UJ>x^4u8?+fbVzsdo4c>{<%pf?3I3w;Zv~$Z z{s!aN_Jb=L zez(Cjw}5N-NjCfma7C|pZxDXmLxcY+(|z27l}Ve;fEA@VA4X1b+wk_=g35(d6{sB{v6upW*OL z9}akn!#8{+;01@T`dGkk0@r-C+kEW=SG4LgLHL`&HT;kbe-vEN8^08U{|UH;f3Xce zZffv*{j2_a^lhKR( zzSrSrEkEY)#$z?+=bXbQ{W#!L9v=KxWzl~h`jg=A^Bw-7p9Xw|!|(C4fUkG>HI{F8 z_*+f{;rBcI{=W+Nafh$6eB2{~--mMU_-*j_X%63SdAN@ihX0P`9ZvXr{Vs@Sqr-vxVDFPUl7E93S7~&+X6n}k->kJ>A#CCpW*ONSl;6B<$nmie&Ve%6C4y4P8QYqmT5(U$Lb_){%E?(h#-e$L^yT0X_@w}tt--SYVkpZK>xo+faW z|Advl16+>8IqC3SmXCjQT>hh$Pj~q3mM?VphgATu|-55II@P(F-dz^eMKN^Sr zyWH|=4)3zO(cv2`?*O+`7LB%MBluoJfE^8u&2y*TJ`e z9|qqC{tfVB;NJxQ8Mw;1(aJggq9Bmw>stsv9sCIRLhx^ccY%Kgd^5PF@qJs5d%*3~ z*?e^b+)jB7KMnqU#6R(g!Cy4)AAmm)T=V6; z0RJAi#{U@`|7q}FBK*X<;4hl5UxC+x{~Ejn{3Lh*{5Rk?fvY^9xAJTQ|1HAr1OFZP zG4NC1XTfg+pE5J}i{|V1;Pb)%0KNkJH28Y(KZ0)u{}cFr@IQke2R{RT4*W0RQ)UH! zQTcBNpAY_5@D<>8>TiC#9^6j-4c`v_cf|7^aILQ|+4?#F{ttv70Y3*`Qy=_A<^L!6 zRPcX+F982H_)2hN>}h|u0o*Q8%x`vp+a-bF?+4d>eZ}VMAo!hwsf-E#4R8(rbsPR9 zxLqok@Z)Ej|CqVVT@cRwV(_yZBo&EOjT zb{qZ>_=6DsB>02D$2XYdO+8KlpAP;I@P*(H1@8iX82Bde&?Z?^d@Z=j|930@Zt#aA zp2Oge0RJAi#`7;5&l&JXBK+ientD*b)4(4NuJKGBXM)u%0Dlz1uLOTI_y+LDfbRgG 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