From ecac78fd64e3d51fe4440f3a589648db9c9df26b Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Tue, 6 Jun 2023 11:57:21 -0500 Subject: [PATCH] Initial commit --- .vscode/launch.json | 31 + .vscode/settings.json | 64 + .vscode/tasks.json | 18 + C++/scripts/build.sh | 34 + C++/scripts/commit.sh | 21 + C++/scripts/debug.sh | 22 + C++/scripts/filelist | 7 + C++/scripts/lines.sh | 14 + C++/scripts/md5 | 7 + C++/scripts/release.sh | 20 + C++/scripts/temp | 0 C++/scripts/web.sh | 46 + C++ProjectTemplate | Bin 0 -> 576120 bytes C++ProjectTemplate.html | 75 + C++ProjectTemplate.js | 1 + C++ProjectTemplate.wasm | Bin 0 -> 304153 bytes README.md | 33 + buildtemplate.html | 75 + dirtblock.png | Bin 0 -> 35629 bytes main.cpp | 68 + pixelGameEngine.cpp | 2 + pixelGameEngine.h | 6711 ++++++++++++++++++++++++++++++++++++++ pixelGameEngine.o | Bin 0 -> 1264488 bytes pixelGameEngine_wasm.o | Bin 0 -> 173270 bytes sig | 9 + utils/.coauthors | 1 + utils/.updateDirectories | 5 + utils/define.sh | 26 + utils/filelist | 5 + utils/main.sh | 28 + utils/md5 | 4 + utils/search.sh | 103 + 32 files changed, 7430 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100755 C++/scripts/build.sh create mode 100755 C++/scripts/commit.sh create mode 100755 C++/scripts/debug.sh create mode 100644 C++/scripts/filelist create mode 100755 C++/scripts/lines.sh create mode 100644 C++/scripts/md5 create mode 100755 C++/scripts/release.sh create mode 100644 C++/scripts/temp create mode 100755 C++/scripts/web.sh create mode 100755 C++ProjectTemplate create mode 100644 C++ProjectTemplate.html create mode 100644 C++ProjectTemplate.js create mode 100755 C++ProjectTemplate.wasm create mode 100644 README.md create mode 100644 buildtemplate.html create mode 100644 dirtblock.png create mode 100644 main.cpp create mode 100644 pixelGameEngine.cpp create mode 100644 pixelGameEngine.h create mode 100644 pixelGameEngine.o create mode 100644 pixelGameEngine_wasm.o create mode 100755 sig create mode 100644 utils/.coauthors create mode 100644 utils/.updateDirectories create mode 100755 utils/define.sh create mode 100644 utils/filelist create mode 100644 utils/main.sh create mode 100644 utils/md5 create mode 100644 utils/search.sh diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e5add3a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,31 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [{ + "preLaunchTask": "Build", + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/C++ProjectTemplate", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + }] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2c4cf1d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,64 @@ +{ + "files.associations": { + "map1": "plaintext", + "iostream": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "ratio": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp", + "strstream": "cpp" + } +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..d389175 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,18 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build", + "command": "g++ *.cpp -std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -lpulse -lpulse-simple -o a.out", + "type": "shell", + "args": [], + "problemMatcher": [ + "$tsc" + ], + "presentation": { + "reveal": "always" + }, + "group": "build" + } + ] +} \ No newline at end of file diff --git a/C++/scripts/build.sh b/C++/scripts/build.sh new file mode 100755 index 0000000..e3c0374 --- /dev/null +++ b/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/C++/scripts/commit.sh b/C++/scripts/commit.sh new file mode 100755 index 0000000..543a623 --- /dev/null +++ b/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/C++/scripts/debug.sh b/C++/scripts/debug.sh new file mode 100755 index 0000000..9bf2513 --- /dev/null +++ b/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/C++/scripts/filelist b/C++/scripts/filelist new file mode 100644 index 0000000..03e1e9a --- /dev/null +++ b/C++/scripts/filelist @@ -0,0 +1,7 @@ +build.sh +commit.sh +debug.sh +lines.sh +release.sh +temp +web.sh diff --git a/C++/scripts/lines.sh b/C++/scripts/lines.sh new file mode 100755 index 0000000..90e6d10 --- /dev/null +++ b/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/C++/scripts/md5 b/C++/scripts/md5 new file mode 100644 index 0000000..5520048 --- /dev/null +++ b/C++/scripts/md5 @@ -0,0 +1,7 @@ +build.sh:c073187e65d0e23aa77aa94af4ec6382 - +commit.sh:1af81bf417dfb932284d8a14fdd10657 - +debug.sh:849488515cab075948653c15eec4177b - +lines.sh:3b907786f7fc9204025993016c9080de - +release.sh:0ab321c3fa2f1a1b2f03b1aec3bce816 - +temp:d41d8cd98f00b204e9800998ecf8427e - +web.sh:4bbe9c5710a0ae4289468c3f7f340ff1 - diff --git a/C++/scripts/release.sh b/C++/scripts/release.sh new file mode 100755 index 0000000..13aa1eb --- /dev/null +++ b/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/C++/scripts/temp b/C++/scripts/temp new file mode 100644 index 0000000..e69de29 diff --git a/C++/scripts/web.sh b/C++/scripts/web.sh new file mode 100755 index 0000000..f04e1de --- /dev/null +++ b/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++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -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++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -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++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -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/C++ProjectTemplate b/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/C++ProjectTemplate.html b/C++ProjectTemplate.html new file mode 100644 index 0000000..de51b65 --- /dev/null +++ b/C++ProjectTemplate.html @@ -0,0 +1,75 @@ + + + + + + + + Emscripten-Generated Code + + + + + + + + + + diff --git a/C++ProjectTemplate.js b/C++ProjectTemplate.js new file mode 100644 index 0000000..0b4c5fa --- /dev/null +++ b/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,setWindowTitle;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)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(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",function(ex){if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});var nodeMajor=process.versions.node.split(".")[0];if(nodeMajor<15){process.on("unhandledRejection",function(reason){throw reason})}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=function(){return"[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)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.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 UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){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}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){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++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len}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["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var wasmTable;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 getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(binaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(binaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(binaryFile)})}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(function(binary){return WebAssembly.instantiate(binary,imports)}).then(function(instance){return instance}).then(receiver,function(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(function(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)})})}else{return instantiateArrayBuffer(binaryFile,imports,callback)}}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateMemoryViews();wasmTable=Module["asm"]["__indirect_function_table"];addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return exports}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={38668:()=>{window.onunload=Module._olc_OnPageUnload},38712:($0,$1)=>{Module._olc_EmscriptenShellCss="width: 100%; height: 70vh; margin-left: auto; margin-right: auto;";Module._olc_WindowAspectRatio=$0/$1;Module.canvas.parentNode.addEventListener("resize",function(e){if(e.defaultPrevented){e.stopPropagation();return}var viewWidth=e.detail.width;var viewHeight=e.detail.width/Module._olc_WindowAspectRatio;if(viewHeight>e.detail.height){viewHeight=e.detail.height;viewWidth=e.detail.height*Module._olc_WindowAspectRatio}if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss+" width: "+viewWidth.toString()+"px; height: "+viewHeight.toString()+"px;";Module.canvas.setAttribute("width",viewWidth);Module.canvas.setAttribute("height",viewHeight);if(document.fullscreenElement!=null){var top=(e.detail.height-viewHeight)/2;var left=(e.detail.width-viewWidth)/2;Module.canvas.style.position="fixed";Module.canvas.style.top=top.toString()+"px";Module.canvas.style.left=left.toString()+"px";Module.canvas.style.width="";Module.canvas.style.height=""}Module._olc_PGE_UpdateWindowSize(viewWidth,viewHeight);Module.canvas.focus();e.stopPropagation()});Module._olc_ResizeCanvas=function(){setTimeout(function(){if(Module.canvas.parentNode.className=="emscripten_border")Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss;Module.canvas.style.cssText="width: 100%; height: 100%; outline: none;";var resizeEvent=new CustomEvent("resize",{detail:{width:Module.canvas.clientWidth,height:Module.canvas.clientHeight},bubbles:true,cancelable:true});Module.canvas.dispatchEvent(resizeEvent)},50)};document.body.style.cssText+=" overscroll-behavior-y: contain;";if(Module.canvas.parentNode.className=="emscripten_border"){document.body.style.margin="0";Module.canvas.parentNode.style.cssText=Module._olc_EmscriptenShellCss}Module._olc_ResizeCanvas();var resizeObserver=new ResizeObserver(function(entries){Module._olc_ResizeCanvas()}).observe(Module.canvas.parentNode);var mutationObserver=new MutationObserver(function(mutationsList,observer){for(var i=0;i0){callbacks.shift()(Module)}}function 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=[];function 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]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=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)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return()=>{crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return()=>crypto_module["randomBytes"](1)[0]}catch(e){}}return()=>abort("randomDevice")}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;i0?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 TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.fsync(stream.tty)},fsync:function(stream){stream.tty.ops.fsync(stream.tty)},read:function(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){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}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(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:function(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:function(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:function(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:function(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:function(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:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(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:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(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:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(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{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={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},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},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:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get:function(){return this.shared.position},set:function(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);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;i{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);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.getStream(fd);if(!stream)throw new FS.ErrnoError(8);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;i{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i{for(var i=0;i{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.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},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(Browser.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)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload=(()=>{}),onerror=(()=>{}))=>{var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=()=>{ok++;if(ok+fail==total)finish()};putRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:(paths,onload=(()=>{}),onerror=(()=>{}))=>{var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=()=>{fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(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:function(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]=stat.dev;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAPU32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];HEAPU32[buf+96>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+104>>2]=tempI64[0],HEAP32[buf+108>>2]=tempI64[1];return 0},doMsync:function(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:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}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.get();var offset=0;HEAP16[arg+offset>>1]=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){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{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){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;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function _abort(){abort("")}function _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;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=()=>{var t=process.hrtime();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=()=>performance.now();function 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}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");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"}}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function callUserCallback(func){if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}}function safeSetTimeout(func,timeout){return setTimeout(function(){callUserCallback(func)},timeout)}function 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:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){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:function(){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;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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)}function fail(){if(done)return;done=true;preloadedAudios[name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.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(function(){finish(audio)},1e4)}else{return fail()}};Module["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)}}},handledByPreloadPlugin:function(byteArray,fullname,finish,onerror){Browser.init();var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled},createContext:function(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(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(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:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(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:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){callUserCallback(func)})},getMimetype:function(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:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(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:function(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:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(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];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];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]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}function __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(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:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(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:function(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:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(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:function(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(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}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){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){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){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){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){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(){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){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){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=[];function readEmAsmArgs(sigPtr,buf){readEmAsmArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){buf+=ch!=105&buf;readEmAsmArgsArray.push(ch==105?HEAP32[buf]:HEAPF64[buf++>>1]);++buf}return readEmAsmArgsArray}function runEmAsmFunction(code,sigPtr,argbuf){var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_asm_const_int(code,sigPtr,argbuf){return runEmAsmFunction(code,sigPtr,argbuf)}function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(size){var b=wasmMemory.buffer;try{wasmMemory.grow(size-b.byteLength+65535>>>16);updateMemoryViews();return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}let 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=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(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(function(x,y){return x.precedence2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);return 0}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size(target,width,height){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){registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);return 0}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=function(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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);return 0}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);return 0}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);return 0}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=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};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(e=event){var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(typeof target.onwheel!="undefined"){registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread);return 0}else{return-1}}function _emscripten_set_window_title(title){setWindowTitle(UTF8ToString(title))}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function 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}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAPU32[penviron_buf_size>>2]=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}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function convertI32PairToI53Checked(lo,hi){return hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var offset=convertI32PairToI53Checked(offset_low,offset_high);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.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=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}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];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){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){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,data+size):size,usage)}}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _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}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _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}function _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){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){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]=numBytesWrittenExclNull}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function 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}function __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}function 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}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function 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){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){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){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)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __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];function __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}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],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":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(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":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(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":function(date){return date.tm_zone},"%%":function(){return"%"}};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){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.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return 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_big":_emscripten_memcpy_big,"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,"glBindVertexArray":_glBindVertexArray,"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,"glGenVertexArrays":_glGenVertexArrays,"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 asm=createWasm();var ___wasm_call_ctors=function(){return(___wasm_call_ctors=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["main"]).apply(null,arguments)};var _memcpy=function(){return(_memcpy=Module["asm"]["memcpy"]).apply(null,arguments)};var _olc_OnPageUnload=Module["_olc_OnPageUnload"]=function(){return(_olc_OnPageUnload=Module["_olc_OnPageUnload"]=Module["asm"]["olc_OnPageUnload"]).apply(null,arguments)};var _olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=function(){return(_olc_PGE_UpdateWindowSize=Module["_olc_PGE_UpdateWindowSize"]=Module["asm"]["olc_PGE_UpdateWindowSize"]).apply(null,arguments)};var _malloc=function(){return(_malloc=Module["asm"]["malloc"]).apply(null,arguments)};var _saveSetjmp=function(){return(_saveSetjmp=Module["asm"]["saveSetjmp"]).apply(null,arguments)};var _free=function(){return(_free=Module["asm"]["free"]).apply(null,arguments)};var ___errno_location=function(){return(___errno_location=Module["asm"]["__errno_location"]).apply(null,arguments)};var ___dl_seterr=function(){return(___dl_seterr=Module["asm"]["__dl_seterr"]).apply(null,arguments)};var _setThrew=function(){return(_setThrew=Module["asm"]["setThrew"]).apply(null,arguments)};var stackSave=function(){return(stackSave=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=function(){return(stackRestore=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=function(){return(stackAlloc=Module["asm"]["stackAlloc"]).apply(null,arguments)};var ___cxa_is_pointer_type=function(){return(___cxa_is_pointer_type=Module["asm"]["__cxa_is_pointer_type"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["dynCall_viijii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["dynCall_iiiiij"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["dynCall_iiiiijj"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["dynCall_iiiiiijj"]).apply(null,arguments)};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)}}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/C++ProjectTemplate.wasm b/C++ProjectTemplate.wasm new file mode 100755 index 0000000000000000000000000000000000000000..2fa1fe3ffed38a86730d83dc1bb4c3e9db159753 GIT binary patch literal 304153 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a3a1b9 --- /dev/null +++ b/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/buildtemplate.html b/buildtemplate.html new file mode 100644 index 0000000..7e6698d --- /dev/null +++ b/buildtemplate.html @@ -0,0 +1,75 @@ + + + + + + + + Emscripten-Generated Code + + + + + + + + + + diff --git a/dirtblock.png b/dirtblock.png new file mode 100644 index 0000000000000000000000000000000000000000..af8bd9194d19cb226b0ebc392c2a80044008ad90 GIT binary patch literal 35629 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 z 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 literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..dbb67ae --- /dev/null +++ b/main.cpp @@ -0,0 +1,68 @@ +#include "pixelGameEngine.h" + +using namespace olc; + +#define WIDTH 640 +#define HEIGHT 480 + +class Example : public olc::PixelGameEngine +{ + + +public: + Example() + { + sAppName = "Example"; + } + +public: + olc::Key last; + bool OnUserCreate() override + { + std::cout<<"Test"< +#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/pixelGameEngine.o b/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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 W`tIKE{O0fQhw%RP-mf0~>i+?YiZ3t# literal 0 HcmV?d00001 diff --git a/sig b/sig new file mode 100755 index 0000000..b29b259 --- /dev/null +++ b/sig @@ -0,0 +1,9 @@ +export AUTO_UPDATE=true + +source utils/define.sh + +define PROJECT_NAME "C++ProjectTemplate" +define CUSTOM_PARAMS "-std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -I/usr/include/lua5.3" +define LANGUAGE "C++" + +source utils/main.sh diff --git a/utils/.coauthors b/utils/.coauthors new file mode 100644 index 0000000..b904d0f --- /dev/null +++ b/utils/.coauthors @@ -0,0 +1 @@ +sigonasr2 diff --git a/utils/.updateDirectories b/utils/.updateDirectories new file mode 100644 index 0000000..56274ea --- /dev/null +++ b/utils/.updateDirectories @@ -0,0 +1,5 @@ +Java/ +C/ +C++/ +scripts/ +utils/ \ No newline at end of file diff --git a/utils/define.sh b/utils/define.sh new file mode 100755 index 0000000..214fc50 --- /dev/null +++ b/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/utils/filelist b/utils/filelist new file mode 100644 index 0000000..95ad5ff --- /dev/null +++ b/utils/filelist @@ -0,0 +1,5 @@ +.coauthors +define.sh +main.sh +search.sh +.updateDirectories diff --git a/utils/main.sh b/utils/main.sh new file mode 100644 index 0000000..0a4c92a --- /dev/null +++ b/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/utils/md5 b/utils/md5 new file mode 100644 index 0000000..349fa70 --- /dev/null +++ b/utils/md5 @@ -0,0 +1,4 @@ +define.sh:3ecab0dffe2adfb950f3eb7c7061b750 - +main.sh:4e6e9f0650ec790ce2c4364db94f0caa - +search.sh:30e1842e9a13452ea883bb6516d28e1c - +.updateDirectories:971afb892e8280cb4c9ad43fb72a46a0 - diff --git a/utils/search.sh b/utils/search.sh new file mode 100644 index 0000000..6707c16 --- /dev/null +++ b/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 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%0Dlz1uLOTI_y+LDfbRgG z4t@YUw9VF(N5CJ4@HI~ge;W9H@CD$vfNOcS z+VUI$4{Zcg^51}K_~kbIxTolEgZjDz@lON46uc3<5xfJu349~?W#F#@zgE&;VddEc zemTN_1YEfou3K8@?5M3Bnh^ zuK?c)ekJ%`@bC;)9a1B3f!;f1ae~};6!_P$cX$zDF{8`|Q z3k){lpAFstz5;wB__g3W!Jh+u5IhHd0(>R-xQlDdkILT$J`H>o_!Gdj9M;=%SOVUT z@IBxi;G4no;Jd*)!4HG420sPf1^yRsm2<0=bK)f?yQciR5&nVT8h)D%Uk`pA!ncB7 z4_*N80pAYZ3%(z`5BxZIKlnND0q`l8M)|q{d_MRf_zLhL@b%yY@a^Dh!1sf%1wRgc zBltP+Vel!9k^Jkx=Yu~Nd<1;I9DR0{%+yJ>Z+cKLxJx|JKTX6#P{P ze+K;3;FB)bTm|`h4fsRAHU8h*_#42tApFJP8vai<{0i{bBK!vM*MaW@e?53;$ExMO z75pT^zX5#wLJ2588vc#o)4|^az7TvH_|w5PU$@(Q4S>HH;kSUl1$+EtiFM#g?-wOVI@V($406z-;LGUx+yTK9|b=O{xR?~;CsPCdtq%q9|x~r66Na?;H}`F1TTQ^1K$e%De%4Ep9cRd zxc0BR-X)OZIQVA}{v7yz@F`bB@_!b5KKSRrSAc&Wd_DL9@SWga06z%+Meq~gUjiR@ zWhCc8@M++;fH#7F8N37hE8rW!4}tFl|0?)F@UMZN0RKApxT_-h4}(tw{|0y?_&32j zz`q5)5&Q`FPVjGo9|Zpn_zCduf{$y7|0Q?__^-e>g8v$PC-_P5L*TywKMDR@@bSwc z`F{sK9sCsdLh#$byTE@Bz8U-v;CsMNgC7C^Blv0XKY>qdjpY9`crExD@D}jDfEU1T z2j2$%SMYt{XTgtw{|)>s_}{@NUmeN+5AX)?bKuLt{|P<}{x9$sf@}MnZ``g@bTay z;CBbFc}67vJ;0}e{~!1Q@Co26!S4ya0sLOzJHYP^egJ$T_z3uYz-yLA^4}MHD){}t z7l4Ph`KJ8AFGTna;P(gL0sa8+1K^XvzY4DHu*0^)li&|T_&Z-OVQ)N=RZ5j*W!3?cf)I z?+1S(_;K)B@N?jG;8Rvaa?S*w4?YWg1$aGp9$eeuLECOOg3m_ySAlEzQ#SlA@Hq&7 z2z)O1N$~LQi{@y&Mk+rVbRNP_2Y(XyLhvVpcY)6b-vs^?@Lk|f1wRD-H1Lz)3&6)e z$B1v_zZm>J;QDFkuV)7MB?!L+{8I3%!8M*Uw)_j=jR?ODyb1iB;2O`Qy9RO}0KW|3 zN5C%!ugL}9DGKi-DVYl1jPMJ<7lE$?Uktthd&@{{OJha0=^V{0DKwv7VuW^J>XY^9|6Ax{51G8z$doV zm>)&U!E3>v3El$!Ebs#Ov%$B5uK?c*el7S>@aKS^0ndR?S{2E^61*O~4ZIb66?g%> z9egWz2l!s_Jor)YPVh6}tHCF=NAh=p*MoP1w}M{>UI4!yd@Fbl_+Ic{@T1^;;Ag=5 z!6$V@@(+O5gWmw&3O)#403QP13SI!;3%&;YDEM0NGvGIZPs&H~4};f(uLExde=c|d z{CVJ8!PkTD1-}XWDERZi&w#%Gd{Sp5{|4}S@E3x&g1-p70RCd|t>7EM_kzC!{IlSy z4{Prl$aft4r3hcMI+Fio;8Vdjfj<^p?c z8T<(NtH4i#zZ!gESCrq^fY*X=0dE0+E%*TV>%g~yzaD%q_*U?v;BNpw1O7(vN!^kB zZvw9e-v-_a{$}t3_*=lYg1;4fFZg!wW8iNCKMVeL@X6Oj^1lPT0elDea`1P84}-r8 zd>iUx4pI_zv**gKq@?0QgSu4}u>A z-wl2O{ATdmz*WwrR?Z1MQNBKe@H44|oswN5D6Oe-wN-_{YExgYN}D1^#jH z3B8g0p8%f${z>p9;QPRPz&{1P8T`}WyTLyLei(c|_$lzuf=}p+= z_(6o9*e`+PN6{_dwcuX{Zvp=b_yG7J@Gan91>XbyHSifDzxw{|)d5 zf@?X9*m7t9|0cpO2mcm$8@R^vdmGPs@FNKS5^xQF#)jVs{%wRm2>u=L6X4$kA9q8P z-=pBuz`qCH2>yNW4)7mm2fZqnb9Q^m-!{C1a-v)jf{GH%hU-NB!?FauO!XF3! z6ZkpsKZ8$M6Xoj+_yX|1fUg9<9ee}$U%_{Pp9Mbv{x|Ru@V|rCtc~RS2l!O*bKs5O z{{-&<{}=d1@PC8v1h2VsAcOvS5d2Qy-vHP8T43wzB=`jgKmNubPEGR8;M2j!fiDEV z3wRIsUBNel-wk{>c<6IpB{>X!cZ5F$eh=^o!;$>|2R;LQ0{9Z}dxH0X-wS**_`Sh* zgHHrM3?BM;Pzk>WuJzJr>*WmieG$(;!8Lq`4L^CE#um&6?uYOX2iNdjHv9tcNeI6Z z{6g>z;P(gL0sa8+1K^XvN5CHl9y&SI_Vys~sn6A11^Id~_yX`L;48r&0=@zKq2N2f z9|nE^d@A?|_`|_#o)^ja2=J-kj|5);J`H>&_@lr#fIk|12l!*a4}gbnG^m6l;EzT4 zn)Q+Vj{~0y{&?^O;4{Eifyym7z{+ZxY!DoRl0IvsM z2|gQq1Na>99pH1p4}dp-kATkuuX%nX|C7L{fIQ?&I%P5V0`Mi^E5WY--vE9k_zv)^zz=}8fRBJb9lYj+HReb4=Th)#;LE@p z!9(9R8bJs6)d;@{{2K6G;LiX*1il>nB=|GIC%njrZ_4>u;4{FV4c-F20(=1cTJSC4 z&jH^Ho&!G$z7qTlcpLbn7f1510&!MB2Ug6{=i4Sp273;YatH~6HD zk^I+zH-KLcz8t&FhJd>eQl_&)G{@MGWu;Ag>a0H6GlNd7_a`QSs~E5HljdGKo` z%1w5@v;lk#!tVfI3w{9nM(`2vVep!lM)I!%p9cP1@P**d1MdP~555`vCh*OTb?V-UGfFd^7l~!1sW^8vF?OYrs!~Zvmh9@<{&Ig4cq-4!i~Y_22{GTfw)0 zzX5y?_#45GfWHa+H25~~iLZ#{e=~S3_*=kRz~2h~OmOYLo9`CHTL9mV@LR#(2EG^k z?chhj-vNFGdK_qfS4Z;i1D^{1Dewj0p9b#${|xv>@crOB!9NRr z5d3rCC%``sKJGP<{0G3NfqwzK5&Vnb9pGOA-w1vXd?)xV;0M9K41NOqE8yd{MDia3 zp9cO_@J8^jfp>s^9egABVep;c-vB=d{!Q=`;NJqj4P4vjKC2HWyf(_$5rnS=|2B9F z_;8{e9G&hd>sRy5B@{&72rPt-vIt& z@Rx&YzRucw?E*iJ@Q1;F0)7hoR`3b0kL3R;_zdt7@Y&!h&*bsJ_pRVRL-=dKHT-NF zegpW=5q>B5FTf9hp8!7z{!8%jTcdpa3Vb^FufZ3Bp9Jp${|)$N@ZW;(0skHN5%5#s zr@?OnpY(=E{@;VwgZ}}%75p@K0sN2PTfzSXz8Cz@;77sFfS&>X3;3irM)KbdUJw3P z@K*4%;KSg51K$Szckq4S{{TM*eh&OB_&>oXzbTUcU*HYk{{~+UUNbKER{v}R*Y_p6_XM8~elPHa;P(da0-p%J3H(0buLaloYPI#X2mHPWe+2w~;HSYS zflqu(l&=fHYr*di-U9vr@B;W`@SDI@{`FS=?cfhY`2FAy0>1@Zk^)4(4B-U$9s@DA{Yfo}v4-`dp_cY;40;SYj80{jH{Bf-aSkK~^QJ{|l~;0wVY z4c-O*81PNtq3<_MaToYw5&jVP9 zcpdl=@R{JJ!DoR_e0wB+J@^B`uazL-d%gAGvk|@(d=B_9_+0Sq;0@sW!RLXGfIkVm z<{gpzPX?a~J|BDm_*1|;z@G}f5&UW3yTBKK9|FG^{3Q4#;Ny2h@?Q!*9lQ~IA$Svb z7x-o1o4_vz-vz!9{1A9E_$ly3;1k|iV}5kJTMRw}dXsu@(+PGfEU1*gRcP}244%l4g5y%cY^De?Itb@E3p|2HyaF z3jBrO6L&@VdJ%Xn_=~|?z&C;qfWHKM3;0XH_kh0){0R6a@YCQg2cP)%m*Vw}KCVzX5y;_#46Z zfWHa+2>3Se)8KCgpZLK@{k3M06z`>PVkAl zBl+J2UJL$i@D}i$-~-_A0p9}tUhqBO?*l&qz6<<^;HozcjSu8L1O9%5pLBDSuMdFN zgMSdb6?`{%0sLn0t>7O5-wXa>@T1^+z|Vkx1bp&`BKbcGJ|FyJ;48rQf^Pu-IQS0m zPk6yA!tGb%FmG;WvSw z0pA7w7w|*iw}YPo|10=}Pe%DV3qAw*{txgi;OD^ifd3Qx2>8FiPlNv( zeB!=H{+hc4|F3`6g5L?e1^fc=0q{G6Zv`I*z8Cy1;77qj-=8Ya8SuLy{G?CmZ-e#b zc<_4gyMwoa-vhh={(sx&_@qxq@=pY>2fq(^EBJlE3*h$y z-v&Mjd>{CQ;K#u44}KQ>0pNG~OeDYd$8)wnP6MBe@QvUP1n&TU5co#$2ZQefp8|de z{2|~c!9$;#D*5>Rk^B!s`03zN!54x*9J~ws5#XD^9|`_ia4omVcMs&)3qB3ukAgo6 z{0#V`!T$-a@z>kU9r-Rvr3O@CK z!Dc`0Y2XXM7l5w>zZiT2_$A;w!7l|r2;K;O0=x-)+!t!hkFM`71D^(dId~)ZLhugo zX7G*Ri@Q7?*p#|?+0%I9{?W!zX5zJ_#pUR@FDP{;05qA;A_AqeI=5AEqFcn zjo_`|!{7z*b>LgUp9{Vh{CVIBx$3*avY-wOT;@V(%#1V0MC8T<_RtH39H zEt3D$;Pv3I0dEE00$u=rE%;XO*MaW^e?9nT!F7JM;O>EZ$HBKE{5kM9fKT~)l&?2} z&j)`K_zLiC;OoKP489%wE#UjX-wHkgz8$>ga3ts3z^8)09ee@!JHS_h?*QKb{!Z|n z;O_!I2>x#H6W}|+$9*G`|2^Q-z~2kr2>w3sF7RF8o50@>z6<;V;2#0k_OrycpQGR( zMEIY8Yxw0h{5kO52tVbUQGRa*pAY^a@D<=6244@p2YfsDN5J=ke-!*U_{YG{f$s&s z%eNx=HNOR$-|65VNBD){p8)Ry|0MV(@O|LBz&{0k2>jFFC&51hKK@7~|9vxwwE$0okoKJ&)3E?MxJIdEV@LKR&z+1q-3_bw< z74WU#hrsuOe-->F_}9SCfPWo)(sv^H4};f(e*?S~{F~qf@Na={1wR757yR4c$H2b> zeir<@;FG@_$$u2Q0sMR5E5N@Gz8?Gs;M>8Ef$sEjye+s@Gd<1+y_|L$PgZ~`-9QZH5r+hDx{{;Aa@Lz(j0RI*EdhlO^ZwEgK zz90NI;K#v#3w{p#ci>aLAIX0Td;$1v;48s@58e%~dSjc_8=JuYfbhG(PlF!<|0DQG z@IQf%|3M`GpTVbtp8;P8{ul5r@Y}&Rf&UeJ7x-E5L*Rb{KMDSK@bSkY`Tqev9sC^l zLhyfrcY*&4d=vP;!FPez+%=Fv|NIEJ*5h7Vk4M4pgz#s;F94tP!ywKJec+S9kAXiB{4Dr` zz$YJ%#e*Yz_$7X=fLii=%q0e%Sw+DPS!fytj1HK!4 zF8E>a(3iQ!e+qma!cQ2{-v;@568MY}gU$KElfjpO&j;@Te+u|!@TY?B27em(Vekdu zr@$`;pYXF9^P~Fz67UPbwO+nu>!lw2QiN{>Zv-!ZH-X;-uJQlW#=iqR^u4VD9ss`_ z@r-~k1h4tIeihV9Gx${SMc|F#i@`gT9ycT>Z_&jh;_wP2{72wMdem!_A_;&EC!S{n-1AZL*8Q|x@mxE6^5#{Td z;Pb(s1-=6O+2HHJSAcH^zZQHy_;bLIgXh4{fv*Ig^2ap9rz0H>%rH9_keE)?*-ov-UoghydV4=_yG8n zUq|xa06rgl5PSvr5cqoV0{C|DHQ@Wf*Mc7hzY+W#_%QgClac)Ez~_TM7kmZy^T5}G zuLpk#xaxrk_XyJ434Rm89|V6s_zCbAfRFo4B>x8RY2YseZv=l4cnA24!8d|$1m6k% z67YlIF9kmV{xa}!zm4SI1U?P?<=~CruK@1=ejLHC&6C>KK^%+ z{9C}MgTEGhA^7XSyTD%$z6pFQ_%84_fFA;XBlt=1H-V2o70JI1d^-4>!54zR1-uLV zt>Bx$w}bBje;fEA@VA4X1b+wk_}e1+cYsd^e<%1t@OOdtfWI4jGx$#M-Qe#5KMej} z@KfOL1E28wNd8^mGr->uz6AUO-~-?v1m6O_8+;G=&EQACKLman{KMcA{}9Q)2fP;i zBj7FI9|a!({}}id@V(%Bz&{Rt1pE`=r@=o7KJj!U|32_q@K1rafPWf%0Q@uHTfp~& z?*acT_!02Wfu9EdJov;vM)Ds3uLb`CcnkO!!3V&<1il6QAow2eTfmQke;ND?_*cLu z{V9_F5O_WKSHWAszXo0a|2p_q@WbGH!M_216#SduXTZM&KIzYq{71m+!M_dO3jQ7N z0{C~qw}Kx9-v|CZ@MGZL2R{q`1MtabBKePjH-P^Td^z}!z=y$q489HgIQV|>pMZ~m z-wHnNFOi%-1)l~!0^SJzGw=@ZpM!4#{{{Fi@Dt#Nz<&vT68u--<8P1T|26n@@RQ&R z!G8nZ1^!#`P2j%+-vxdO{1EtU;3vU<4?g~{k^FxEpALQ+d?ENB!Mni!1ilIU&)~bj z&ww8S{|op@@Y})1pN-`IEBJKqv)~KC{|4R#{&(O`~vXJ;CBY!13nJ?DEM8#&w$?*eDdD|8C1r* zfj5AU2VV|;ckp5Gdw_2P|3C13;1j@)f!`DSEcm^^C;uao|K8vY;1j`@gWm^y7+lNZ z3$udys<~)rU2manmHf9b82q;@{J+6`PuoR>yga#cQAb;$t>&UtLqjze73oE}XDut# zx97WiI$b)uv!}m*FoElbZWt^m?brCs_jU6Iy7TS%8@q?{x%U1(NqSAYq^GF{zn`1S z4Rt>^pDXm|y88}^?F{98v)%i3kRL`0HU`|xmG-8@N6MCtBZ-PB!k(dzd0TzzbObYt2c-Vc^Bf3Uk`K2K)Q^8#>kuwiUYj z`Ytk*?AKUAK`M>l(z@oJ zwM|V+7q?1TCL*bu9p)ytwykGPeyF*pshFfAcvM<*b4$913c0@ij(n~w-`0^IymV$< z#!_MD=B|)-(rwBH0u{OjC90X-9YI`9;&XyuH=1-}ztfrte%Wwce|MkOK4e)|$lsua zUW~nIS#4Ah%L;9M(l%%I=6m}G*X8;LB`eDcGiT*;B)Q)Hj_%Ix{9v*!+Y0@?-R;e* zn%b5%Ne4{`R{VYY+Et#mP&Yfbbd_|9d|Ejs0yIeB4d#dPPU%SlzHCijyEe<*s;!r zd~et#>j&BjU9(L)^3-XGZ-UU27O~gWX-c9O+6rri>I>@zOjC%}N<8X0`C)0vLrqsM z%f-HJDw&D!tEG$OyI77&e^)m%kSuq7U;mALSrVO{%dP3_z9BbI7|f|cZoYC>e^2|I zWdnoVg?y7%RY$(FZB0)>6j@KckZ)dAmup(GO0<#u+ax{ds%7;_9a>kbk*>*Ww3%W| zkI66K?8bb1ThAEES31HJ@wBMwYM18wq*tq2FvX$0-)RsHown;VU$$0MrMEpcgdMfH zS4Px+Xk9@yW(OY3#OSQhpD=mxoad>{ewoI1g&ItOZRYIs#WqO&8#U3qS^B1 zCJLfj$s3DT=s9am+9f`4bz7oVMRks*?}$PlqrQ_GlV8BnO}*H+Q)5l^?a~qI$mP#y zyaBXJt+!WG=k~*r)m$n})bnH<50!1*OleQu?REy(+%EmlnP3LuYHtiW>$2H7qdV(n zF3k`1uNiF5x3sliUpH$g{Oe^hax^76^d(V;mKaRa7nJPMmu2eGcc2`2>%-`ZYJ|*C zw4nkDixCyGtU-!Ym3UGO{Z}Q*qSB(KdzC1~gcb@FS;=6YfyyljH%J!IOr^|Q(zY%? z*q9$`AFbZ@#N@5AFw1Gldq2V$Y`(KYO?UUw#Zs)xW=R9doaMT@wKF?%tMh&NL7AI( zOQ#M8;-X5cXuwL1&zqB2_AC3;9WATTcal}nQ`L;kqe!iEL5y|8#X+DpSce8v3z@-Z z9u&etvJs@VhA~UYTR>s#^*yo%Y1So3r5QL+(PrssviDI~GtiT7US#^~ti}0tvY@GA zfL7hF9duq*t@gZ#;Vss%U;pP)bksqMDd_r^%bS*uLZkU&DVg8QA2{L~Y3pX0m0+{% z8n*Sd%ZgPhdK62CwCGA^prjz4FLkJm#=5crvUHX}gxIjuImW{h;`4|sJ78Q<#fPPG zpE?!WDU~RnL^M@>MnQ~CnirQZw1Y68ysv~7pyN6rLm;9zNx8R z_gk>zCCW`U#&YJna39-WujcbPxn;V&(zNvA`rP7RcP!ki4>qSMft~GCmM%Yvr>65z z?2sjPoIBl(>r(sGb#n&uYx9G$`7c{evfbS;TSoJ8xz&AZ%tpKnVtxICy=^_wuLF${ zbsgN-4rEPhW8l(Bje~Xrs_1@QdODKnS1-!=H<|$Ge4M@Ie^&{4ff`XT1w`PVH81Pr9Kzs5q@5#6h_lp zCGUYKi&QOtMw?@M4;#n3I(p@9U#bRBl4yU|~kj`e4UAKbX7f@+Eb(b+cLq z^8;;z`NsU(ZkfV)cP89#W?m|Xd4=$kNdL=`uBd<6C2v~g9+&ykmW_+TVE?*`(r)Y? z8t7?TciCWDZ$@$J!z>QA-KZzZ+48t7Uof-VE94wh&cS2>H!u3Tt-azodN5T;lv9>C zO4m-K$ZYm_p1!87BM>7op^-x%k@<<7e^L{T>@XacQbCa`8O z-*nw|nQL4RvWlN&O6uwXnXE+dfONJ}B_}d zi-|<8y(e=%{$sKgN5~Szw5)AyeyoehNw>bGr>!6(bg$H7--OJsGV^UbVQV;NFWI`$hRk!<^xxRh)@O%^xNer{mdbGG@AytR)XP{A#Matfkh7}lIzZ`~ zomp#&d6}`*Xj+@^D=g{n&seu}7q<0v^yKkvu|K(^pp!HImtmv8V$(U}o0-2sN}*kr zlaA6&|0HI27HbogD-+q?xVWdMzdhI0EfxkIRatqII^)*Gac{evdzfs6c6e&f7Fkuv z{}t`kWc{i;Flw{5wxwOn)|xb2_i8b;bBZN%4Ds)l6(si5Bi3{++?tbRLaT1~T_q=c zvcVg*y~v!duC~zKE0!o?x@GpjXXUP$DRwfZ0g6iQZ@*p#$c#pJvMV*mL^sqeD~()! zpufGV*a*Y+B#RO;@Cq!mf<=F5zGXu!E6Aziuo!Tt(VX;7vwKtgU2&z-U22h1o4!bi z9ngy~uwN>k2t?LVvvbW-xl#tRaw4|=zcuw4441h@$?A2X)vT+oFrLf@3QbqZSDv++ zG^Sv!r8O9D6;&jot-DY+mq+)xwK9*9#wAMvYo!=A{P=EJr8x>alGvBp2#dueYvo*9 zM~7I^4fS`*u}c-D)gp^qvEqr^b1*65v16y6XLmaGwUSu43lVIRg|k#CmU@pRmmZ2Y z7fn8VEtxhXMhloRv|O~wd6-r|*vV5;oQmv;@nGt=dsdwE7Zl zvGUlw3OimsWlU$PterBkR#G{oqbjzXOGjTfrBl+9sGw@fL>AOcvBO%uR%wgTU51Q$ zElW}*WUe43XUgH(x67;;WK^A<)XDJ%T&_o{lJZ6qQw9|&7QZoBa+^2EXNgkPi9@P< z@oZKbOG+-wL}$uO*Vne$sP1&^uf2U3HZE#sDq%c&EHZZ+J3~{SG_nn+^PtfDTy6P< zM3$}L?80fVqY*FGt%J3mv$hgJyQ51Nb{^L0pNARy^VHwT{H?phck$mjd325~jih#m z#(#e8FJFG=Kat3gkav&@Pt%w}C|SiH$OgUM-f2qS*(sGw@hfAWl^BgneLA~cH@|c; z6ZRin4e)r{DeUfH6)p^%C9G4Sr6MmL^Txi>W5~qxq>j61YAIUpo3afg<V2HH6#j zWnwChO~r-B((6jCJVb5!jz>h?y56?y^TsB6jWxv%hlfQ=uhSX09v;riT_K^amiqzC zGWk~pDQl_Ka(vmp>N>H>Hs?4;=_=VVJr4y?W+?II-z#;P{YBLaSyi!mnzP84=o_JUX%#(JswLkxlsu2ACNe3t z#K`H*T$$4MH5nbui)Nz6Y{i=HMpUOmK9!&HVM&c_BhM11sB)pKVfhnjUs+q+6^ ztO{}qQzsTZsT$cPSX6tVT9xt()npjN3=7G1TQmibvZ{1lF3RpdYLM@%r;<~jYVs7! zWlCQxC_A63CgJl`m_cg{TZZ<~lnZ=%`AP2ti+zw>eoEQeNnFj4X?h3DFh8M926H<5kt^?Vi`+hWZuA`_!Z4;rX;!=+k73&vLy<`N||=Q=yw- zx}OmRE>jhW7_wJL;?pqk^3_t=r%`5t)=KU=9)5wVu33SPQQ zM;&pfxsu1Z-QM9lTKH6J7FP;!1aN^#ffWG zLi>ut-D-)>)s5b&{`NrnZA70K(khDw`lC!(uNC;K$LaTDmLjuSvS0n@QgpH!91)hf z@#wDE=zLeXVY7 z>m|M9ilew`kTx+$nW;xJ)wB;Y%-j>77NwElIxP4s(@fnk3H3~wX=b)GE1Okji_ok7!hSgf41Vk0;w)t2cnJgl^0mpurDVfdUP|qvmP{r*^MA3D@9q{oWK@xx z4Kaz7A-=R7p>Y%k<31^ap&P|TRkt~P%o_)Ox$e&9yUrHk|%%UwJ zp2{w4B5afAPvSZ0twnz2X)SX3`tn3)N>+P!Q?HtxcsgD(Y$w8otGW|@df zC-zVEyoS58u!RHvk`jJ4jWgNFuvw2lV5+=lja;((V1IvYLqhfPmR*bpZ0BM`jp8a9k)Vitw*)seIvJ#Z5r3?BVbW?)EJL6`Z; zyL>J!WLiSLfyk&LX9i$0-rJ)a1*6<^=xma+b8~M#tOBnLOGL%FGDxw|6;5IzlI9dA z?1e#Fj430%q$vwEJpu4kyhlsQ)J(N+WP0q4G|>EsbyKEgQ?TIm*y|UwF^bLW$f7pZ zQ@k0ChJ&!C*e*vQL~%M4lK~BQ6mggA;-V3XJJ^*v(DO8pNaFLd@0rqP&vU9?6!4Dc!}Y2^OD}N@tkBX zmDkM*_EyAXw^y!!H!qj{l_+zK19GibD${P3EKXRj6-81}00 zM1sl7fbKPyiXddD_u`N3n z^L^y)Q&H*ZR4VpaF?)JwBGLxFFU!w_8ne%Y%BNS^M5cUvUVUZ#jP`a*bIpy;kB2s0 z-GP=@9r}BFrPbF92*jN=cS2IcRd|59(6pfiU zzthoq%$%}H%hcVegwt1@16I%`6B&s50gn1*yms_~KG@Z~R&Kc&IdCAUekaYuGja9H zEACkNsFgd?%hcD7aZr;VY&H!{_KaK8RgKBI>oPB_`m#Ew1SAvRcdIF z$hJ4(%G6N>Ir8fz-YrfDXuD+E9!hL?M@<(zZsMfF*e$HCCB5_J$PuBxdndwqtJ6^e z@eMI-ZDH2oG5D5F5qB3_+hoeoti_DCVs+V}%E;?aHva7>+zLx7)}^aAp-@vs%gad0 zY9>8F_mnzS#h5zyh)jBUL{{dlRRIQ^oNk?yQRi3#;J{@ z%~v*G0@8rp(N2mad5^!&<3F=$6gS0HdALsmdee}AUMC3Na`(iU$)iHsGMP};=KKQ8 zlzE;p%aBGtFV%Wzo-rY+s}~a>dtKF72Fd)<&f(_T@x7@-;Kp(_J(UQ4^w~=QN!)#Ttap3X4X6o>R)$?>$8s|9y)4RmUG?G8unM zay}dLR^-M%$`({CM%5MGrWm%KM8f~GEhlswlB`lQb`~9rq_v#z`^L1E69xzzfG3kl zX*u!F#=hk^@uyX|C)*MIbj-mhxLUM;;W`w^5v>pNW*i&ZrWptCMq)qOVLzs#qM>=2rZ_WXwbc%Sv~{ z64N~2eqMW1dy`y>T$UR$Z^wrFa=v+uEI>NMFiW3L(yOm#S7dg0qb7WaMi%Gtly|rK z6W2Eu%yvnWZa5|Elq%n26U&$@qKDs&3{7jzPK%h_*4lR)im$)O`|GQn;co03kSuMk zVAaM(S4l3-+gv#>HQqU^ulef;TrRS#tvpLy85%RA$rqu- z(J{yM`E{Zod-ahNi6(sh+cxj;i|B};ZdPCZ#^8v@Jf~GIW$%P0^1@WPpU4K$p7NBJ zc;gbQkAxFQpUL28Q!DO=g{2|sdTdG^Q(GA!uL<5D*GWfCeGWg^PQUjK0VSiTmng)6 zl)MnvHzbatnm9KSTLsr&hbABy7AN?ncX@mn4mVW8W`^x5UvQZyNcl*!(&=ch8`>hJ zt)9JO>OrDOE+DdP;dp(_dE+a;Ao0c}qH%gY=8n6)^_?t@Qp1t%GV5-$@!jo@k68#- z7@W^Y9_zzq+#xgOg6LU|bhh{|6|awD8D%L)h1Ch^PF8K(l!U zUQ;V>Gth z>0q6_zEyHAFZB}IM`kuMGRipqYFOQ@q3~6*%ev(;Ci#g^P0KD2su9FZBz^uX?I+E- zdo>AXD*^93J6bwaldvqO2HLs@o7FBbix84;@kwen)#~&%qa4|UD>Ahc(}}U3;*?$i zNeE{!)d~92RkGWb7ekvWTF`mSMsaE7>JN`E)#w2!=>vJ$Eo?7z>)WhteXH~7FFff6 zx#!WI!1&2nXQ%Y2WwOKB5WE1DD9`_@ug$u;p8gx<#_Ov7HL{`!{I3@0DES+V1=N4V z!(`I$rVL5{)uL($H#gih>y;u|u+>pbhtSPLDQ2+_P3)XU`$nbOR_c3XMib-FBx!`v zm?By^Qj5k*L~-LYuJjot5#tYEznNCMR~UB{Ev!(-l%acgSHR?dskgQrHyR zx;tpmh8t4u;2de8_{%%zP50;$K-}EeW7lwwoj!pK{S{{k>7Dn59nm@_Hm99cb;K}& z;%Z9whrCHTJ-DpzWPf;X)J|?PboRswF3d;8i?J?w!%`MHT#SXaA{xb!EWV}L6|Ir* ziIeY8Rb~@R^uKESqTi4X(erwvq^#|v*KKo)tTffC-xy5J3znO*V-tm$ESU}T)VNUKq0O~q1=D@^M_1{Wd{%WbEC%!CZ#aU?RTGbKcs z$&pB^9PUPr^zTwzIjQkv>$UFr60)ItVx`ZRZ0RQ~(KFRS;w!BQJ@8H42n(ASI<0eJ z8qBs`pAXsVBVDFMt;{T6E9tRSS2xM{q`0((>QlGls=Og6nle&wNhMQF57yc>E~dRY z1gVv%-6}R%vekVR5f}55Xc@Chw~W!GRe8IqCN-%hZB??-A(`}@Et`$h(L0@vx3ctl zm*HsiiFs#l#r>(#dbrko!{YOW?hq9%a*ci(o!5hMx^>JFqZ{Z^sN^w|M=$PV>dj-8 zVypxb-F#ljZhn4*sJQ=+tr$`Tsu(UQp%{3ts9aNJ*fALV8C|A^!Vik+C+fNMK<|yC z;%bV;;u+LEGauigCovZ+E&^p@73NTDMRw%W062`c+@m$w;`L9_WhI(43Mqd(BQ$BT zBFZop8by?HYF)~90QL~cNP`MUdde;pA?z698b9>FE&gBi<;7r_bAp8LRF}$)njM4& zGBU?gYXx%_epT}Fpe*+TuivuFH;Lw~IexAo*W92^df7Lnxj&tMlpMi%#nKM6}X;mU-Xt9=dqA>!WoCx za_p208LqS(*NWPgF?CL?+k^Fx^N}h7ZCIli)V=X$(z)I*ixMT2Z-%vR+QsdqLMY=a{(O|w6mpSO5aqoyRB1Ha&p3@c5b1es$9j+VCGd+Yjhr8j6#=j;=RH6 zK_AT93nA(uJ+P>{${0*|qlm9N)fsVlZ|-`Hz(z*1&hqQ^$k%bzpL@HcZyP9)v2cv^ z43S!T(dMRgiX60<*nWe`pK=tTLt*APd}cMRzxjsR7OvkrB+L|T{@A6Y*Q>>V-35L zcTo3bCN$W#x*%v-u|4SYRuLvvd3y@K%-D*;;1#qTIiXKn6>{2+ll9aVqk~bf;gH^9 zV$&yV75IE&spd?yp(ZsQH-}Bht97`gqSgz(YD~lz>j&lR__bUsY3R~Q^l&+GNe{<5 z{@x!-mEK~q^=^N=ss4y3McSgSk-AHpGq4-*tAtIrBr`x zDdevyUsJBK(w(SmRl5g6(i5saPcwxbCKDAg-Hf$J+tLmZ6!E3SHNAAjXx#P}MS4$2 z+u4m(S*4LCri5la9*?q3JXHq@Idx#MPDw^F=dH*;yck*P1)J!GP-m$#oKU!mXRMu_ zMse~4I9@Wv+K;t~a9*lH2JR|yZEJ>g@UB=DJ1RfDaU|1{4r!#%GEwkPojNO>Z>IBKD#kx7RCG`)6H@ih$21?ag-H98Y zqJ5RF^VIrEYqe?ZQc-~|>MhN`e-NAXIgzSv)<~rLT#*|Lnzg;P)f^?jiN0@pN}^Dm zld_o*7F)_tArfeVF%pDVezM(MOK+1&GjmBJ(tj9jZC$1rM1``4RbG+Nd-zdO8rLPh z)7e55A61Umq|F^#WHJ)U>(vT+mSL~ug>S$VuiSJeb-ylLq$6+swS#;i*mNw&Ac4YWA+*|W}UF;3j9F|JwGsoJ=-s=-|Op@|z zmyBIA+66YHT>W9Bp2wkU!<~Q7wJ)J2Ez_p|144OEC(LBj+`{h4_YBA$xw^}b%4LzL zO6h{_!^3rTnJ)#I4Rhn*Pui;Eazq{GFOr=R@mQ+EY5ekoN0^!F)umzy#DKbF`g1a; zU!8x)MW#n&6(MZ5lKnApA}_5^J@`adS^~dAqDVXPIb*vQFLnt#dh-IExkpyCj%Euh za1@TjCHml!yqRvP!f9ITDKIVg_@1(FKck8!rNg#Sb7@NyTZ{HRfGW+7r0W!CUy?hy zaT)kKx8BK{buarQ4_w|FSlU@|<|xst>danyV#~; zIoATvwQysKNl926s?kF=ntdb||DQow$`*tB1VD)mwrUeo4Tr*~o`#T|L=?~&=*U|XTP-{bSX$E?aFxZ{yuJg7EwtTA8ph3@dL zl;vKtOnh2(A&+;0#L#fDI7Lo&^1vN`-K;R8Tzi|`-Hk=<^U&XPQn%fL+Z0$;=7?w|E1F9*2BVdm0{=grA2?s9sNR9M{oe7)M}pvH<sdDsaw?GnV}(F zrZq3-u&Bd=coCnIYj#5ENU+p1agY@BQGi@`XW7{-(?QwQd1~ppyS4 z{YSL#eI0sNk9;9x$#M&Fd1|DdQ^3; zE5zcn0ijMT88nLlQ1li+bTXgy0%`PZFsLN$_1xqB=!-zMFdL$xJtjetTmRz3tmc#2 zP{NnjBNC{B&Mz%A=|HDAu148OHR{lp8noZ49caa7Ku-MSPTIM6X_0RwZB2S+%A!Jw zq5P8#t}Bqlu|k$e!dkJ_t#dcCDOk#fNUz+@m6e3k&!wT1m${@*4$*_wQw`iHgsv?# z(T+T(2HMg>ho#0PN3RrTaY|C0IEdqLZB!-g3f=Q34Ig@kZX3#(CqQq7b0`Xyvy&c z9(877VQDU1EXj!RbJ6CyN!BuVq+(Eu=kr+*$qNYCd~{~^t`|8R^gl-8cT-uck4u|p zN~cITn3Ga5=j9pQ4_1=2HV27Yo~`mno{%M2A^4t?5y|Vr19|%3gzGz}U3#jcl87_< z;r13s26dHCy=EQb5zsTsNDXRU)Zn1+7Fl}vrn^^S3F2QBL52F)Queyz-E~*4KsjAe0`z%m0c`e~FR|naW ztyUdmjJ+~-kTKHq#^b01C%)>{K|G>Vb>IZcst)3xRiqBWPg95WO4UIaVeqC`YP6N9 zgD}$6=+bL6gE|Ofw<3?3Itb%6izPEds1K1%DpeiG>RdJ{jQP-_?C(ciDN}IS@@zJb zSQz*9gRqB z!-Y=S?bE}q8BMV;YPB%k`@X{Y;=P65;?FX52Y{QRn zhCMyox$r0nMmuhCca*x%mdNgCHqyjGBRAN+x=SDJDAW~Wimdh`RW!OCJN5h8lkY5% zj?)r~vNTt|Jt#*Dat&y(f57C!WX&y6vm+VSg>1TxCOI|E>rM6h?NvsmOIhphgjSRL zBGRQ2>M61m3VLMtx$e0qw#g++MQbwczM-YLoFnO`Uqf%(aBiskxn}Q~B`=Cv2Aa4- z$#9#gPrORTlJ3>GOzJW)Ms_!hFJ|!P5yVtg;D^-s0+uHglS;vJhttWAakE*}?oQE( zUMW=;>bpa3*8~=GW@ApyVB{Y?6;H@gGNL)TR`DX)KiD?7PR~2n7+??;SMBs`(`2wb~H%gptOOs37 zxisz)oYrPj*5<1QLFOix)RI^RMM|oiT^9SDKTlqh5>?4YBy|pYW7}YdQ#zte0+FQQ zxLr{WZS-1?^M&Lh=(nCX>7_vAes#PLnwvr14jAi$i={M7M>P749Z^Q~M5HE5-JPN( z^TX}=0eO?mkus=jZ;3N*b3U4~cOBaUlyY>p1dKXLTfT}Gi|zge-gQ)slz*KoEzZ;^ z!zodkkTT6k?j98uNHPvh2-1IhF=qv8}Qh4=R32D4Hx*lco#^=jRQbs;2UHpd5^1jc^CbMTW(P zd0fQ1__zb*qvWdQ4%q`-+aX+Q(izGfQsz|Kp=E`hLi!s}VnLqXRLu0-7|i?3``s-T znM0I{tn|Y^O~y{sHf7Pjp|?miw@P_?rqtmwd^;xNj5cDcmA6#V7bniOk)0@M*?%eF z6;5W|;o*2}etZXQd~)+s#(Xg+m78K_qe&O5Y4sMBfg0zE-B9t(Am6LisSg6(A$#G> z@P1`*+mr7o$!7bIoB@LA=8;taaDfoD&QoKGU_YUAK9 z{Ia-{rYmWYprVh}0fN;QLj~F8TAfe4UXJssIeLw_dv#yFBiEbnUA3n3Kk%Yk`kFs1 z!tm7}-SaD5gl)~{%_S)z&oa1Jj;3_ONQ<^7 zoO(hF|4r@Y`5(EaA?J%_JvUjALz{D_A37NmRg?7Oq;Cza#pbJTOSPrlY?PJWK(?aD z7H0ePJQ72%be7XbQ{hUaJzR1!;V-kqx9;g|#&ZlNAD(4|%DIf>aUWB9cTRMg>k&Yj zW%?ORG6pvna#ct6ClVdXJ&j35qCZQEVX%K) zvs?fYrLt7+F^dL^t7%r#Xmf4O-3HbaqJvgek>1QNs%|Pcr~OAu3!_s;=Nze$jxlBl zoBOP8kGWWSjCrmkwa1KY`l@i~{wcjH1*f?6EtfYfuSjLazH_r%UQxzA57i?Jr^G>0 zWHl;1rJ_S53GY~y$d*Uxw;1%qE4Zq$NK|-}*q_NMs=DO^)16(w`t3Qe{q(h5y}j&AgoKeiU0xiP1OMt#Dk= zRx*nEBXEa@jH?0HtB5s|C}spJz{CQi#DXw=XST%RfGZQ%zpq)2Rpi|lv8e@(jxpZl zppBU|CX4sJ{=we1o}$^T_^rzB*4LAAag7)oex-%QHyDDdjd>^$H_D*_P!u@Y@KD`K zwVu2-?~k*o=;XJk=hAGMQzB3e=k>ASH*m(wyYgY&z`4>CW_NUV+NWJ|g>?fm;LFHw zuHaW<^&IXM_){+yx*n5yUhZ}WH7$;cDznrvz6@sx8!cnJE*3+9=h^uBR~m_~n&lsB z7$ri_Nih+OuOZchCJ~oW0v^W*z6`pSfyFY2+9;FNYRb3^NWN=yN@)2i=v9ZqH5;a+l&ZOok=P9= zQ9ogutK|NQ$7(i9KlRrIho@1Mmd%O3c0^glU*)KzjFQ^Qo%$44#-5htY=wj`YB1la zT}b*%@NR}0qNr+A|Ap<HcM%Y^TPMUH~#C zn!!Z7b+(>9o}?8r>c4WGNK2 z{7%$tyi1jsxk>b~_@g@zqA)Q8JBrd5NxH{1 z*#!4)-z5}+lRMQ1W}&7xib`6?Mv@lqPPj|iNOkDcSYlR9Fh-Xs(q{W<`6)Hom$@DSDp;U5lro<$}EvF_NV`$-rPw2#zU1H=)=(@0otGA>MvhOZ`)hCypme*%9u=Yn1 z3MW&e(k-i^iyO%@2ANmUA*^| zv~R#^uxWu-3O?-89&;pI+)Zz}j330eORwtIm7czBWsCsJZ!2G#oZ{JS<;;ml#h;&@ z_@?wdRr!@?PgT5uUghK`riO5yJW~vGy4!Pd8r$8sI^B@h?4{`w52H|0RixUhN3+sJ z=Vnx4RV1MbPBT_k!6o~(5K%A{zW)*?mr)svG7V}F$)>DiUiXs6*^BQAXs8@R{)nUdO zq`ObFp582%eTXm()SiDQ4MJp2v^YuCop$N{YVl&nShq)%*w!p}%u?c>MY;iSG;&7ga^CJyjMU(hGFhOdhU#_r$AD$@mKJBqY^fA6t6^VCJU2{-P7Ijgc#TM4nXx~332w-+b; zQe^@&y5RRq9WLF=n0%N1*njjN2v<&lNFMY|r>V3xc6TZ2 z#@0eH`$_89rYl{&64QXVLXB@v|Az!iZgrb?L8{p59#es}>8rU>mW}iClCX3eul0lP z9jovdw&>s9^oZ)$U25bT7C`Ezz9}AK_bVgw<&iGrKEZh@nPT5^v}L%JdtMS1nyV$A=rKyon)2fgo17NvZEjk% z_mPm1?U~Qo-^ok#y?d`S@LF1W#wHIA6^8;FQi@9|D&gi;>?KOQPUP>5xX~uj#^*+* zVoOeFL?y^S6&R=Kg3XTUc&R95LQqjTmue{@VY=yK%i0#H6RqrEPe&SwEb^rO)%`}i zp>T&lUQ042jmaY;cnzq+?`2(2|BYhzzp8(YjKuo9OI!pgz{n{<<%kez7<5_#Up8ioK$^I*rC>{jAhBZu+Wp zG)3Xvz%B2HBmRz&&(ncuasMK5G}4aBTZTw9<_%LeHPfA1NP=V93rt;Q@jao}|B?;a zh!gf8`F$zh6ZTmxjiy*%=B8y%2fakDJSR=|4XWVfsZ#CU1T59?(`4?s^?aoMZuiTPa(%;sR7ys|&PqJO(T~$-byMKZGI-{0g?%g(HQ&jTFfRu%HGGP#L2nNwu4G}kH=ND!BE&yJVfKyh2`aS zi<50o8iK64)SpIIzDKSxn>SvvKg%IjDBd?-WR)g&rsESOedJ}4978q^7@vvGv?|)+ zaCctX`1K3m+y_Lwi3 zw86)`#FS4ly&IUO6x!6r?mt;aO=y`jbB%#RoLt+QVe=BN>>h*#5O;Pjhr)7V<4*Er z_a{(q#e>lf`Mk4jO^^7ziAT_@W)rjYWZzLC(qz+bK!zDlC8>??LLw$-KO=w4AsuE5LBl*TCG#FQ$-P+fXHP#?_)I7&$& z`DSlg(%~GS#Gt5cN^c$brfHaflu0l>Z{dJG)>$h*+-J;L_5n;>M+P0yZQvzGt#&h1 znSLMt4#Q07F;?_Kd}P6c4N^rV#ue62Y}z7!2`8f2O^m|>02!f8w=eT(gNP>QGO|6? zUZ_(uCgVS-Ugp6=fdeKPIMr{Ev0o@VACi!Xa*AeQccko;ooJb?MD6PinG3bdS5p#a zb#RAmL+VAH2XDUJXesxUZT!G@cvL0MYN|HS{S|kZ@R`GeeeE5#7`5%{g5Nmw{$Htk zAV7R$B70bua1P>P<>*{~dl z>(QB6`035Dx}4Y|{cj9y@+4lM9_-PpEHQ3alQ*w3xEi!rRARw@$C+uUdeawBQ(9ow zx|8*1P<>K!{v~p$6Xj|OB$H0)6|=}hL&}<`VunnUbfVFPfU6hJyNZjOn1tF*MTyNS z&$}G$J=#rO14yYw{}ziZ2cmn#@}cgagu-J(EqQ}d&c=f`$+)2YpN-rljVGRSUDxH%Z+9TE7hmwF_UdiLp>XbaRXe`oujb&e8LvsX|2 zRoJ=84K+IN<_S{9O!=>QRS{8dcT-Q)eX59{BcB)zq9Sw8(aiXQn`h3kns+l?x@5eq z%Vj%B!LH=(RwLu|Ztk-!J1s95^b)tpVtrSg#^I8)Q512hWPd#&Rq_&?k*(B?cUQJ5 zW;Jf1&heZulr7Y1(lwcLuY{B+cqv6*Sg&S0qW>Vhc&+B|&ZI(8@gB*HN$UU4-21@i zIo<#NL6K1t6hRRbK~$<$K@p^yRuEd2QJS<#rIohPrWIBMWtkOWon;gmMNov5m37ux zKbBc%8AXv>sd&Sy*jIClG9>u~?1<#XZcyw;$aiGe6z5SvOunKFsL-qub z=esd!n8sbZx{a}6XoM*@ZlRzXR|=vm$&>jUHlu|~o$zN~CuNXosV=H2=hi*k&$I^% z0W#f`NW~iw4CbfFyZNqGujZRIPud&f;cD=x*SxqNA^kK}8gGA>OXQiYDrB%%^@@ve zL9>HaS9KlmXOsst1hy}m&SWzS{K0IfI7s&RB{(#`Q>Rb+_XS{EPN?{Vhj79L`7JGY z__c!eBlXNl6uGY40;ldU)z&j>3?b=_j*m`$cx-S3<+Tp%&{d_EqYup#EWP-_dpd8d ze28>n&YMyhoX|I=IJ=DkW1Nd44{Fp=LVnoJgu4&>KWsWxj1WmBlS=KK;v^wbKm8Da z&CW*C1aGdQ<;ofqMoLzOD^9h#E_L2?@^U1FCYXfKkXQCXD_laS9;!uEBdj5gAmCge zbZE4{w#8dolM1D`eK@^2+$$P7`Rk-9^3G2t)$L*`5YkRs@rmGxV-{{GQ=OW5c4lhns-9sCBUNL)GtA}R%pgkl8qQ+4033l5{~=SK1EZkxEalO`m!+`(uw1kRI&#j_HnnWnyX$gJ=OFp4Km}-u` zQZgo5axl0wK6tSY98hE_Qcw=$TlNfyR{*@3G;hAcJZsb}K@sv;wS|Jtkch+Ru2rUlL+5SN=wFA? zbVeWc^(98$>8y_Dcd4NF%iCl#ECEuJH^Kc-^(0w)K33Jb{+KZK+5{