From 41d5fb85c54bef0870b2c77aa35f574c9b03ed6d Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Thu, 1 Jun 2023 11:29:48 -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 | 20 + 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 -> 657176 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 | 90 + pixelGameEngine.cpp | 3 + pixelGameEngine.h | 6245 ++++++++++++++++++++++++++++++++++++++ pixelGameEngine.o | Bin 0 -> 1103136 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, 6986 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..0088e5b --- /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 +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..2693b46 --- /dev/null +++ b/C++/scripts/commit.sh @@ -0,0 +1,20 @@ +#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 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..2854ad6 --- /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 +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..b69aebb --- /dev/null +++ b/C++/scripts/md5 @@ -0,0 +1,7 @@ +build.sh:f7da5b6f54c56658f5410e0df797b5a7 - +commit.sh:d03a46e721060c22ccb146e19d27e70a - +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..c1a95a6 --- /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 +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..893cf36 --- /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 +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..90e00740217258902d71305f319f86ecc2728b91 GIT binary patch literal 657176 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

D3Waju|ouA_0vQ=1rP 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

tkX80pt#ML>P)1GZMbv@s$!f-gON` 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

98Lc85yT;yUzkj8zh8P2xxH_>(C^Tn^(M+) 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 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..de543e5 --- /dev/null +++ b/main.cpp @@ -0,0 +1,90 @@ +#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"< testList; + std::cout<<"Test"< +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#pragma endregion + +#define PGE_VER 220 + +// 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 + +// Platform +#if !defined(OLC_PLATFORM_WINAPI) && !defined(OLC_PLATFORM_X11) && !defined(OLC_PLATFORM_GLUT) && !defined(OLC_PLATFORM_EMSCRIPTEN) + #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) + #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) + #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 +#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; + 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 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) }; } + 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 SampleBL(float u, float v) 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; + + 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); + // 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); + + // 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; + + // 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_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 + +#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::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::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::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::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& 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); + } + + + + 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_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; + + 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 + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Renderers - the draw-y bits | +// O------------------------------------------------------------------------------O + +#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); + + constexpr size_t OLC_MAX_VERTS = 128; + + 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 + glDrawArrays(GL_TRIANGLE_FAN, 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 + +#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 + +// 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); + + // 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_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. + + + // Fullscreen and Resize Observers + EM_ASM({ + + // cache for reuse + Module._olc_EmscriptenShellCss = "width: 100%; height: 70vh; margin-left: auto; margin-right: auto;"; + + // width / height = aspect ratio + 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 = ""; + } + + // trigger PGE update + Module._olc_PGE_UpdateWindowSize(viewWidth, viewHeight); + // this is really only needed when enter/exiting fullscreen + Module.canvas.focus(); + // prevent this event from ever affecting the document beyond this element + e.stopPropagation(); + }); + + // helper function to prevent repeating the same code everywhere + Module._olc_ResizeCanvas = function() + { + // yes, we still have to wait, sigh.. + setTimeout(function() + { + // if default template, stretch width as well + if (Module.canvas.parentNode.className == 'emscripten_border') + Module.canvas.parentNode.style.cssText = Module._olc_EmscriptenShellCss; + + // override it's styling so we can get it's stretched size + Module.canvas.style.cssText = "width: 100%; height: 100%; outline: none;"; + + // setup custom resize event + var resizeEvent = new CustomEvent('resize', + { + detail: { + width: Module.canvas.clientWidth, + height : Module.canvas.clientHeight + }, + bubbles : true, + cancelable : true + }); + + // trigger custom resize event on canvas element + Module.canvas.dispatchEvent(resizeEvent); + }, 50); + }; + + + // Disable Refresh Gesture on mobile + document.body.style.cssText += " overscroll-behavior-y: contain;"; + + if (Module.canvas.parentNode.className == 'emscripten_border') + { + // force body to have no margin in emscripten's minimal shell + document.body.style.margin = "0"; + Module.canvas.parentNode.style.cssText = Module._olc_EmscriptenShellCss; + } + + Module._olc_ResizeCanvas(); + + // observe and react to resizing of the container element + var resizeObserver = new ResizeObserver(function(entries) {Module._olc_ResizeCanvas();}).observe(Module.canvas.parentNode); + + // observe and react to changes that occur when entering/exiting fullscreen + var mutationObserver = new MutationObserver(function(mutationsList, observer) + { + // a change has occurred, let's check them out! + for (var i = 0; i < mutationsList.length; i++) + { + // cycle through all of the newly added elements + for (var j = 0; j < mutationsList[i].addedNodes.length; j++) + { + // if this element is a our canvas, trigger resize + if (mutationsList[i].addedNodes[j].id == 'canvas') + Module._olc_ResizeCanvas(); + } + } + }).observe(Module.canvas.parentNode, + { + attributes: false, + childList : true, + subtree : false + }); + + // add resize listener on window + window.addEventListener("resize", function(e) { Module._olc_ResizeCanvas(); }); + + }, 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) + +#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_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_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..038d93c34f06256ad319c0af68922d3681f877dc GIT binary patch literal 1103136 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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..5cc1e85 --- /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 -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 +}