From d16686bdb8ad0a37eda8b0a10c6e75105e537171 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Tue, 14 Mar 2023 17:53:54 +0000 Subject: [PATCH] Example GameClock Co-authored-by: sigonasr2 --- 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 | 45 + C++ProjectTemplate | Bin 0 -> 642664 bytes C++ProjectTemplate.html | 75 + C++ProjectTemplate.js | 1 + C++ProjectTemplate.wasm | Bin 0 -> 302963 bytes README.md | 33 + buildtemplate.html | 75 + dirtblock.png | Bin 0 -> 35629 bytes main.cpp | 45 + 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 + 29 files changed, 6827 insertions(+) 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/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..03a9081 --- /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:ce7a991e69dd9745f057d06430e51a9e - 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..905b0c5 --- /dev/null +++ b/C++/scripts/web.sh @@ -0,0 +1,45 @@ +#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 +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..f75e635542d7f6e45e8faadbdf59f3ff4a9b59a8 GIT binary patch literal 642664 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

Or#>x~DS z4-fG}e!(>Qfs7KsF_FqVoZfq~( z`G4Z|#B;~Q^$kEYpE-!XN1SE}w1r`tT}}M!amsHdK4XaAk~HQIU8ZdyrTk9f>xo;9 zal<$`NPGwJVEsOP5&HzhgN=i6#7l@@W-Q-(&QQwiXE_uR|A5yfdBCi1yCU14{|ju# zos<*HJ-9QC<#>-5Wj<<&&n3?0E>K2sAb$(-mBfpU@zBlwcIYO4ka)2EGEDps@ym_* zz2^eWd?xKIajoA@G0cad-*%D4O&YDgeEvqDo`(LCWo0blUgFd3|I2)q6Cb6F(`{Fz zJ?n`_lK%(1_P3?~-o4PhGQ(0%JL&e0Go60o_YmJsT7NmAau!a%9$-r0IE(n{>LKOF z5bq~`>zMrdKq2u|;+Oq1cs!4ICh=8c@@uCcwE9;PuNo(RBk`BV$=^==3*y0+cR%q_ z;=z`;w6nyu@!{&%4Q-_Fe445E5z@pBdzbelLmI>KPG8LN4{3tc!$CZYc(8iJP)~_# z_4w%@Pg@TgY4-W*@f|}NZ#|^0-Aw0c((K~3e|gI~Sf;N-l4gW7lm8VwjV#ybC9Kb+ zIo)!XGLnfmouP~z(u94f@00rLVz^JDf_MS()14=fIy4Y}dz|mpfF4&mXN8CD2 zTuG(>66excpsft|6Pbz2cR+)cZzXOge!68Ud8C~s{%c;F-sP;caZLP)zC2_;t0-T#7?tZ;$oq68R zde*a^^>?qm&&-ic(G~U z=!f<2O>o;dXoPQp+xlTM{5yE1Y2SE9BaZ=m$aec4z6d@EZrhud!)J%^D)?e}p;^9h zzF!Mp2JdZh%Jbr)f{%h1oA!{pMes%N zeNF%5S*5D;2I9K}uJ-J)jE2M*QTs1>rX7b(#Lhmg;rp-o=-h(NVD#I@n(-dia`?mW zVv`$fu@?Ro{05WD-Ybr58@#Wx-TE9+^`|%o<(259tFPk4@QES30zTEkRlM@?p%z}v z=h&C8ChDo;W!xJt!p;WtPDHOQ7RK*DSP9?V-EO_t+5pdk+wM6tkJ0&U>qmj`1I+R- zNX)CH@FMJYG`YUT@$YfQ!Q*gSznu<07;c*v7r`%tTk8+MA8zaS8{qfBc`T5KA2C*s zCRICTvM@dex6LaB@NeP$&HTnadntS?+}2OV!80Ou|E9xZA$$=$0=L~uuY_-+{G_uL z>Zcyvs`_n!cMQp&N#K=zZWof`qi&g0{sMSkxUGJr@B`qs_>Y4Zh4AU{{%~9U7Qy52 z{Y?M#k%!;ER*HRF|JndQGQ@r+3;JNVwf^u5c!gPhB=P;JQg|KQHh#tlw~e3a@Mp>2 z(X?-jpGEKo;kNp%gfEBN;Al)^uPr}N)m z3n_mkd{~rzp8Zl%ABzs~UlDfVlwE+{7ao5%kZeNNd19|`Y<&9*t!_|9676PVxOwmv-=KE%S~nB0V)gW>z|Id-$* z=UF(2OzBi(V;DLY^SR9jHTN6$rVG)jLC3bYUICv0?`+zT=j>|iu7lrT;c@tU;&2(< z_w&nT2|o-!3r4Zdp%dn389HyEWAn2Tz5;%L>8G)V)WAQ0+xqxocr)Bq&sFd*;I=-# zQS#gRa1M)0MvlD?t2l4QewOOPuf33n6YUk<=D+&sx9LXo*5vBBBKBuP&zLVJQdZZF z_P#e4o&~qfC(DGV8*i%3*TA>pgN<*2e*?e3YzyP}IOLzCe*cQyzd`VQ;I@70X!!5o zw)@G6@Iz8Laa6aA%Ky3WVt7B(KjS=O8T=Ty>a%U*M*6E?fB0y4y1uC9kXq`0Dtx$0 zTkf|sVMEU$2fFwXM=yRd{XTDd>rH%aD@Tn_`OcrRwH8|+qjMggV^PDF(lhRXE3uW| ziN6hN+PYTH16@s(#y~e4GD0IQUlnr{i(*4~9>MFW_@q`6|w}i9TI{&Nhn; z z|0{&s{I7=h2=TuTo&&e}-vI9$;(rr7A8zyC8Kd*t{ErK_`Ckkl6ykpcydcE?YWT1a z|LfobLi}%#{5JoagxlsM=XCB{uz$VTKjcAC57qwgTDZ-Av2a^_D&P;2-&TG#{0_LS zee2+h;kN$S0AB#NwQrN;xB2g!q3zrJkHcRL@xK`UREYl-@RcF{SHoWl@xM;;+vcza z_&Xu?o8ZggyPNH6JXdng)aBda8;6I*zZkCKpKc!#r_2iYBKYxU`TG4<|KW|&nTpN_ z=rB~1=TT$rUW86=SN_g-ijI1Ut@`OocwczB{Zbsh0scEUTa`o^+K(gDY^`*1DtJ!| z9W|x4&F5Oj|MpoNaZv?-cMF}QeWRN5jd$-i67wc>?nXb>@yUcOrFTnWZJ30u@}2Bs zYrb$>-&_tqoBX!1wHAIn+%~qh!7Jgmw(oHk@14QZjjg!D`Uh9}7x1|)Ua9LJI_pEq zsD`fz;dStL;IhTp^WPZ@hTH7N;T?Kx_urFl ztDo`vP>SLEzz;OzW1I_Bz>DGO`ez^V zN@|q+Q;Bnc$J0s!E6tFJR9z>7qcEsF2`6e7Gvjq^eRkW{RY!zxSF5 z9}l;!J#*m|aNE9R8T^b8z6L%fgl~bL8p89(QBQbpGuFm)*gHZaF&J(Xqv7Eqq%D-v-|bx1Fc-V3RX^ z-|g0Cxr5;&;kNR}z)Rt_7)+AQRZEY5UvzOAUN#2wx1J3{Te|l>Jrk3Gn^Qddf4hII@jm|6-G?F(uC$lujOl z;XQ1G=?p+8{{Xv=@?|tSXQPvJzhOMDo(R7izK`jPaeg}&{vbSE%$5CR@Y~@BnE8!! zp*8S_;OXv%RQ@gSdbrKMd;;*5#lBhx8j0nvaDUA@;en(!H}7#Ouyfw;Sj$a6jqlo5 z!>7Y-`{z30-Oc>QcN7}nlgV$JgPP#g79LkN$Fp|Bk2mcb_opgWeb8AP;$w+$n~!7R zk63(A_NT%ZT6i435dPr5@Np$Njp*3M#s>Hs@TB!5GTmQHln+;06nS(Wg2;is53wk-jn0+m3@~+!-!rrcek!>7Y--Exln z+gnfIbDNG#lyO9B;H%)@m|U0hu`;4;Y(wXcA@;uC<4W!w;B0S=GW5%+D*s^k$8g)& z9s_TNpOlnecN&#{61?wW_VVY$`@n7GFNcqZ+uCw1d?NfnvwY)hY8!ke{3MghAFfjV z^|*@nRp1Ak+<10482)#7y0NYDkAZ&!xA`{-z6n0iv~N7WoeytcZ10Q9;lGhT-I!A4 zuZ8E6KWR+K^M195olX5q;h(7cmWSpf+L-w#`flRBrO!nA$}s!fPy+uJet=mIV=q1y zz8!9h!&G?Y;dc8A;lGC1Ujc7Vew+Pu@U9{DV=O*VxXu4Q@SQ^Jm%!s8_Q%5W;I=ts zDm-GbA19`R@jnN?AD?4;+?8l2xwlhoy%HPwAwFz?w}ad2n0XC<@6_UhvR?r26Joy< z-X+BTIQX6+_NT*(;OX`uamrr=KLF0LRigfCoixs*R-tnxI=1n&5q=xo)($z>vWJK7 zW|lE3G4~h3C&AP8vp9Lm;M3qq^NI3NeuszB$;5|cVk36ior$^__r9~S^C~*FJ)|W=XUxBBKlj=(o;BSZcHyi#U z+%~T*fqwu$(DdJ!*H^CQGTdIz!SL_k zwt9|%Z-J-tqX&LWg8w7L{(Sg9L+mey$41!qWNYDD$v@hRlks~)w!se||6V4ScYfo@ zdR)&t`S6=euKKg_?%Nt-eJ?tkdO5KdYLj9axl4~7WosO^b}CI-iuw(-3RJ{R82%x~;bH^OJaZSlxqQ}!0z7LP*syYR4hY#^rnkCb@4 zJu6WURaYY(6S4IedP!?@N<8MH^EY&C@mLP;HqsuCweUi?Egsw8z2UZa^r+^HA8w1s zVE9?^uy|}C=5L_m_m2-}TH`StTZbMM9*@Q7T!4-(9;@Jw!)^UzBm6aZx_ME}3k!+I zv+!;%efg+lU!$4ojZoG>^j4u)S0?A~#fDz+`^4maBaUvxjqCx@ZRT@ZpH}TG_jgKX zDmqJ#PC1KII{H^z_*26D`+v?c}e*~V?r&H>= z37wD8vDKsN6wVajwt5VJe-96<$7pn3D!12TBK$9KTRrB&vyKa|$8vOrpkrGH*TP4^ zdlA>RzGpmx+Xg=oo^Cv-w&*d{aYn$|IwtZPXP$%Mb#Pl8$G{(f+u}G0z62f?$2xSX zkGIFM0e&~!7RM%dBRs4>#F)ThC)l5L_JL=>cQ@l;yhB#1 zH&cgi_#9h%OQJ1Qzt(?F&7UJyVP_eB+Q#oj_#5y`%z7BVHzsEq&(BBMpW_w6+rf*? z{P+<3p0P4`K}h~e_-^oY_4L<&c*hXF81BLkHOn`iGo@?9aa#(QE>k`-}%#%+QEFzHwrs_PPVVR6X4z9Nqy4Tm(7MB4c+S^1`O8P?M==>d>v(Rtz#n{_ThwpxheeGTZ9{{(F!Ikg>;OWi=RXsPr zG_PzrB=hs|Y`=+vB+-iGp_23`-h zt?`TDZ^LbK-72^k@+u~dV9~{EV;fKI&Yep6P&JbP; z-)P}#45~N}Kb`Ms(vGqH7y(AVjt0$Fgm1x4y17gFu>t-Miyw+-*6_SLgcrcSgr}RkR|J+2L4-!4~yad4B@NbzlQj@5&q4;@G)-&^8`Mo>lZ3cMex1gUCeqKg`WiPXXZD)_f`)-2fm-ljkB9Z_+{|^CO5vP-VCpX+t$E5ZfEAe z%gp?d#Ph-;_#1HBJytn<4cvCmSp|O&Zd=1^;orjdG0Qj3#_Hj}z-|6D!h4;SKE82m zHp9EX$D8)`a}j^^t2XF5%W+P(*id``{8;z^(}wYUc@+E{xGhE#;1l8L<^*MbHvGyE zz63rYgs+BQ7Q#2dtKhai+_hHwZ|j2t;3~hZ4~>FPgWK9@0{mIHEk3j1E8&Nm@ntT# zf;;dyvNHVN2tS0+v02=V2W!BkiL=@@*od5+z8@+ZTi{!;@d}^Y@~ipk>4c3Q91Y%% zjr~j=W2_B^*THS=I0n7|zOR}8Y;C^)Syy~`9R4YvV}H6n;YZ?k9KNHpRi9Xdtug0p zxBd>nmGBz4ZQN~uPlnrk&Afwo0bWd5ZSjzEzBr-+cpdycbN{5)!dZzmw+x-`=h}U! zgy+Fa%`)Wo_NhA7zz4w#O>R89T?{XQ7n@vsRQXrI$HIG?+;~2)5q=)r7NZ=FkMp_kZvULh`SIUkkU5+l}z)@GfTg z#@dxLTj$^3BgnvW$=1vEcr4 zF}wwCYoAr{X1Hzb*a+VWx2^3tcX5Ato_)_)2;UuU%U=fH6K;!dB|JYQe+|56NcoH5 zgW-Fa@iG2($13`=ybyjbyxGjJ)=c9p zyBwYK#)Y3{Pe5lbItQ6{jI-?7@TcLn``jh)4e-%se&vTTm#smk#|8FSZGrcN+u9=k z9>?hixAo;g@OVi6(eS-O@=t_!hvz2MAu-p^g=fNTeQg;$18(aJYv6hCbYm$_nOooy zc-TI;$Gyzy=-Afd!SK=Wfo2_y_gBWiFNWLdI0=3l+*Zf=@KfNnd#UB{2jR9Dtc5Rz z+hVW{z5pH;gZMo98alQZ6vH>cZ84~Tx4+OHgKGG%$*TMUn+_9aZZNY;$Hx-gxkhpDSRp17XNYZ zMQ~gEr^BCz+v2|n{wCa3zm@Qh;I{g0fP0tN>z7%_dIY!mUjWYu;id2v%D3eo2X7AH z)8SvhZF}2A@b&OR9IjygFz)wP!X5lO%;f5Do}c~x5AO*-)a1sqqs#}`Tf=R8#{&2e zxXr&(_%L`<{AKT?${zfu`{!*(Xq2yah*+c<58A0JYF-b0)Lz-=)qf?p1|#h@I1E_}S{f6Dpd1azJb zDPuPLEx2tiS^{4i!dJt8g7-CjFuv=v3BCnx+xvE1$h#zP+gvmN-r+L)Tr>*42Rvyk z82xkt{8+fHezW0Y;kLc^68OpR-Oc(L&*N9aPYmIk;3vSlnfZ;U+U@N|7Z_0duA3Gkk#{gV=N(FFMAA$&IcGPupZCGc@@n}4g}b#PmJHo+H!@UD;W ztP^f)p8@b^;r-0|8P6z2!CwopKLP$q2%imK9#Z}i`1>K{uZDjXVt*6-@9-l{|0BhI z1F81w`Y3y?%lX}aCcjR%UmV#0cp?0Jlj|{lveHsEMx#@Oj;#$Q!pFmHF`f&b3O~Xu zgSlKCcPjhK;E%&?V`L5dz7YFc;LpNseJp&F6&xL;!!k586gpW${PyZ3=II=bH>!fL zqu{oCvq|tX;0Ks>FwTSL!>i!w=3!OG_=DM!aPR$@=^_Y2{+81;bzI3hPR|;PWxAn1c@Fj4Y zf79WQ!fpO7g5MLuSHf?D+v2wYUI(|WcbQM~-UHlLzXEt8+*ZF*_vxhui8m z9sXPhUj%;`ZmZu)_)BnG{Wies;kIXcnf2Pg@}&0FFQE59)q`icddoj!EN=dhd&Q5$B(vifJnm6any4?-1qYzXC`z~{M>?_ zK3CcO%zuXaK)B7%LGamdo1dfMkHKwz=28B~aNp0P?0(i^Cx4>d&jxro+~#K!d^+6b zr}HfPMEC_s@l1TjHx6G9xAog%_!@Y+dd9I?0nfZTd>=LyoicQ6V{0LNB-~bq74S3R zM<&%Fv7cWDpAH{xa@o(TxhwV@XSZgTcgnJYuYl_^DXdG;kG?j{`0&) z3h!^`H_rP9!7qW^+H*AgVtBf`DE}tH&x8*&?HkX|=E5hyyO`W~zPSv3en|Oi;OB+p z-vU1cZmVDZQf=Sn{~)-^Z{wrkN5Kc0{u}k12(N&5Gr63>sP(1@|4xGQ*use&&Z-=o z`Koz*R^tAm0Xu&}&o+NG!Mjef`{}&Ey*}JFF5>V)c-XioL8l5GTVEIp9}l<1Vk&$} zNdATJ8$GFcv-(Zi~-U zcro0zw_ON7JjDJA_`neR>)-=I?8jc@JOiF@#>cpa?E^0gDZd2X8(wJUH@*Wn7TzCz zrO8!4mUpXEe~;s1H9Dv|v5QVl?(a_|`g=VJovur<711xLsClIkem;C?N?GbP62+V0 z)8V$Z$a{%*R6=+Wd@9`5*5&XkLwFT@9Q+v5zliRv%D-CpoRIwWaOM9AN%{4}=+__q zGJJoN8}G0+!&kx6-7Bj6c`s{j>x)J3M)KR%jdJ)Jc)I8xUH=Q!`EBv z$1ynuz6L(tw4d@Uq#B*xH`x1Q9Xt-V)v*EI8NRPshP-3j16dP%w-EczD~_{k2#>>e z2`RrAo&(>_o=qeofYsNaGQVC@G`iqee2*u;7R9`%$?WBeAWOzFQoh? z_!)4U|ITat-YR%Mvwp_2j5z!$_^Bp0&OM6Z8{oZ6Zrl%7z`usu;#&=G2`Rr0o^zx9 zSz80VH{9l56MPKZ=AYBRcOBq1|Kjk=;I{Y_!>i#3n)Nr{nXG`%f!qA6hBv}({?)<% z0=N0s0ACN^-Qf!Mh{m(PCiptIZEbg6=UFN|UH^+?G7f(a9=3L`CC2f|vUY!RY{Cz< z#v5yQCAOYHFWo*tjinm+D{$L(=lha>mn z%iu|4PW5Nwd+5#REI`NBhw|R0zr%~oGO!VR2c-zU6n>n^&AZsbN9{w}Dms!5C-)Mwyg4^b;W_bIX?f&JhWQ>u&r)l4Kccn;pcas}u3FYw3 zij=){%46( z96N*HC%`9}aZr8D_#VR;be=#b-My%?F$uo>U)ZQar|We4m~Vg|3%8B=Ciob*ZOl9G za1IBzjrlnIB=|mNJ&pUDV##mg74Qo~@>jzrgz!4}^&z|gK0Smt!S8@`tD9)+$g^#8 zro)YPzgz707jgKBaCUV@{^5T9IHF?sRCw5&GZvkCbZqnXRQR`WTN^HfZ-Lv|a0PrD z+}4Kc;6K9Y?TI?jSA%<~*ec%ry*2%qQFBfocxSk6%$30NLh_G=XTojw08`<^;I?~= zh45qH>E@I;{;hxyg@?7l26QgA*id!Me3$e15MBU34t^-QZTm&z{ozvh_*71e)mBN_ z9|ylJ#Qt>nb#U9dvIzbZysuflJkN+DTM1tR4?Anwh)xSS>Dp1*$a#-`1W#%wHK!SS zfFg7bxXpf#QVy?xryDOS4ps14ct<|B#ZeC@|Gl|d_zm!MZLRXx!!Lywn)!|I2sgs7 zhug+VGkh}KHdgZf>^N7!ZDXYfem}g}ET0$!`-5_LLrD2m@D-Nw7R=C zD1Vvr$7KOJcc5d7Qz?8dJS*a@3hvyGiTcS-UxLEb3?TuLi!2{ONcc`-|b< z!^2|Sh|ZvpGMeH0z{|`S(AMfZzN!v+tJ&{`v_TR4s1W<*@FDO@)4p-uT?M~2B!4Y@ zQb_)K_{xy{jqsO3@;AdXX4(5t-rx8gL?QNz;NQV*eW)BB!M-iNRq+1sJA`q4*~F`Ec7f z?)o9;6mXmW1K_8@ZTH}#;A7zDB$c0dW-$S?i1-_SsDm5<8xabl@G>Q(_nNiLC4mPW8fFVZ9YzdpBa*WKK%5M{LA6T!Y?*`jOdP_>bMp@ zKg9kv_`M;#$0yvg?Xj(O7t?;ZZi75zgW(g&?vAj|S4+&hzwMOKAuPbC|g zn>Q^oG&g@rbVP3al-zuN9-6EBO&|PG_SC!;iyp{^A~$bJ1(S-Ay6bK|%$ zEH`ghU^{ay>+bF5cTrCA?H(t-6~O0PxT<$4d^xkdYDCAx1V>mHX|9=WScby&7D z7(Nc&%DcC>UYo2-A2=V?!^KEE^mvtZjuGl>GZ?^hRGBXX&o=90GNh?#)l-&Qd7F2_zCb_(y`-ufz^W6$kqhg{RV5@lzC z9*=DXO0yY51(zEphh{T1VP_LI=VEgqohx>^wmB;@QpE<}BsSQT*p%hgw~xF}Wf7%B z=kV-8?5WGWro8NU$DNqhZr*n8S9jf&>A2P<=ahESGHSdTv6<0Xgu>~{Kh+NkHf(Jj zLK^Er`CMwQ+SJ53(xdXb0{FRtf0>`NULZR~Wu~vpQZbY^9H!ck7>b`IxmD36ZrVmU zIy*8xUF$MFFdJ)PzI%+nwW<2#EJg$6NL$erq^MyvbU%yqqhs@9A{41m_DxSs`>q2a) zwq@4QZx6qYLscD*%58F^8zPoUDtr7>m(h1#uQ2NATIx9)zxE|xY#2UpDc@G&+rnr0 z{Q%0h1Co3juKIL}Z%4A?Mo&!dTd8W(G`{Uwk?^hF=Gz|l#_a9HUhU8S+PAU9vh?}w zt-C1So*xsBx**?>S#>ZM}muR;>M3eW=fu>^mt--CM>6>9Wi|RH6%vGyAvo zA+`3Y%V^uL&M?c2)kJ4R^n9RVT~E0Wk;a<*y9dAT&ZpeGpxnPBPwBhq%2oB4#J?!* z;M;pr+bcu15qm}0^T+uU+TN_l@V5EHAESx+L`}@Er=3oSsj@eC9rMSF+gpn=@cZV# zUSf?&%uoJ!Q1jDJ)vPpi$~<~Rw(7$**o(imz4bCSuCb>Bdx`nZ_iseod^a+;(T$!J zwRy<;hs`EzmaWk5{=`1fHqCX&UqAeHXgD(gE3b0RT!*Nu>KE!V+H#lE6Kz>FC1aXb z6Ppp8DeYN=ZeQB-9@5xFl*y&`T9scBFMO%ubLX z9;o(L{pqlveEmeiFMlKD7X{`2idJHt_t#`uOVgIG>`vuhbzt{pRf?`x$$G|jVE4KI z-0oWJydK!SDq(j%b}ItAm;C2;2e_PhF%JB8_+7&8ChSfO?C$%Y+pWRw;ep*B)J&}7 zQ1%a=lLU7Ef&4#=?>g*G4eUOl?W%FH5W9=8dw7g~^N_Y{t~-gf)t^6)R`cgPHMi5R zQwG|IZ0xByZ3{LRu9WZjJ*{n~o738E$LNEq53Iq5tMTzJKF6-rJ}P^q8#wRBUZs*> zzN0-gDbuYJw|8Q%fU*8+VDGSmy}8(17x;J3j`o7NFV(+^*o(3c@coM>>}|ka?2l64 z-+1C-nM+gct;AkwVDD}6ajE(a`kHkiu=m=(Z!e#@az%N9yV6E%WK=#OTWpZUGBl|BP##h+OBGsM(nN%;&_*~ z`|tGYdi?w$@bj#Mz4*7Rn}NMk{(XB+CjI1ViQ}FLdsW!Wc}Lo1w;k=-+NB(OR|odK zE}*8mA2wjG5PO&KbL?~Ee!n))SM<0u_a9ma7p_M+cNeJ@SetH54mVDEx|-(GQh#$8}j>H@t`%RZC z`v}UdQRi6Gyb-z8Zsau>4J=zl1!e*V%HxtCu+MYrm^oi2g2?c3XGkg?S`x`N9Hzp zk*_Uk|0yD9q( z^riCeWFHXK_DhkEZAOm$izru(8}oc5<$kFow>-LU`dgC2{k?1H51g<5%zH8_hEMOs zgP=Bh{+YsvwtIDdFFYc*E*iZfH*FC8`!Cfu=VNn!{GP|>*lpMxO0Jansn`|%$azb& zrF9ygRXy77gW{*PopKG!zOd~~>ga48^KIC#C*OI>{$ben=Z@sD&W+R#V|{H7`SHtN zBeKcIrTS4B@odE2NHvzC+Md~ucDNrXk6xZWrbDw;f1j`Hc`dD3s$cxv*YuAa`ZRTh zG)0~LL}u#!a@*R?sf5bEmi%=YEv?xq|A!&@=ceT6E>rctsXuXE*RG}YZa(Y&k+>Jx zp)SRdYtn7F%E>yG_F0LYV|(Jq<=T%~kE~EA&d0GQ=n%}Ce;_}XYR7fh zop@AB>vepNJ)ab-9nSlzBFE{oNb?Ys`BTptN%PuH$0p{rD)W#ppK^-$cRO`{T$OpG z_JxoB+0xog_=-OaBmc_d|7K)kkWK(8_*V<-1DnIx z{+DB+JbF(0`~2bAs;+CXHSw4h{Tz~?{rV%Djcgb{t4qmZn;HMe)OnJ+lq?_FHe@II z5-lr4R(foUex@jT#mL4Y>mYinAC5v+fvj4|sNWRT>3N2A4gU|%KH0D97|$ob(EgqeA;FM%XD$@-pHBYKIXO_3LHt;!iIG$O{@bBj+BXTo^?09T4LZ6YZ zQ1Qf`fA;t59_j5R&euwEYu)IO^bK?bOGCP|zrFE0IMc4Ro&A-upY+fEZpH_$V*XVS z%N{4tHZkgY74l%-7(Oeiri~+NGDa|Q?CFAa;T!4(8sF^P|txpC9>gP&VVgvj0D=rFFY1d#^B? z{<`j;NnM+MQRB%-+StB3G7;NGTWkkY|AFL>z0jNg^||VDd@Db_rS*m=@<)-U>qmaO z%lTWi8+|vuZ*AwQ%C@n0+u!i5+UDB_+&8KDC^ks@rsnd|Ti7F1w6ykCaVyZinfGD- z+Ra&BpJPA8eLrg={_{%qQd78psfygD_j+yT=4slY z7i&Q<4^&Nwsgv`>8Fmrp5Pm;chFKGeJtHG7d4MRV4KGaRQX&+pMQRMBG$#`wqM1k zh=0wTnW{B0b_r#3srWSFQ_aOKtv9Q_b0%_Yf0TY-9{D7#Pwb)9x*sP#tH!tZ-&2Vl zrtQ_Jz3a57-*41mfVAB3Y?eaxd8ArY)vbsA%?ciIeqEBND|Qk${6Sle3jAu9 z@M}JPl~=JRjN#X>yP0j7u7CM!&ui&ByT6{PJzjMN>lMkqbMtr+G0`$d?~keO2^t>5t3HvLj2GaivW68TX(JQ?793$>Q!5zqOQ^Aw+B&vGXa zv|BLVA51u==J!Re>-4y~rS&#G>%E=d#+*Kl)3xD6p_1%t+deaO`t8<4z6s=Gf8k%M zEjJ;nM;7e&Rm?IYuCo@|w@M3NAXdN5ri)*WUERo+DM6kglX`cYeXJRhx5b6wkcLviHnl=7G>RV+T*gAI1$f_1xjyB(bJZ_bIX|(T0O5KZf5cZ*1|u+Y|d}7r%U&|IGJ4s#4#uQ4_nG zzvj~&2RChPy*$l| zw^c*4ud}$R`oSmyKj`+B)^U7}{haUnY0e8H*lQhY_C0E+;#kFmI{UM&t&ggFZ<3Eo z#c?6_Mq{r`^^fJ+p2X1~`-$_T!_|8y<(%w9pH6>YW83E+IV7<@HQ3&-sl&H*_!BEl z_*P7Ne@A>4R3E!G+_aGbaO|84J_tcJ2&(CY| zt$1FGesAL?QeiO>J@(fXD;Zk#@K7xH|1Xm z|5mrdzq*#zbCtmFC%j|1!#j7S@;+kv7uNE~+9Q+s4Lek`?P_gxv(J3ky(Qw*Mv(Jk z+duUo^EB^l=LQY3Z*dQM$94YU>K}9SNe}SuaGk}0B#z_|?>X0bS0u_r$AL&Mc;2mx zIDeEPa#Ysg-qFsLq*CObNAP*H_jJS=>)jM_ZgJJeyIk+yi1R1^^GeCw>$np+7IwY) z8BVJ^;^z$K_L%olhVyBx^8F0w`HV5X#ge13Hs*@2Iyk>XuK9D0Gb85ld6VaTlH)v( z;mz#etj-v*na`QtyB(Z&+F!L8nx#HJn0?ms9h@6;wPzhilHL~a-iSD#Nco+XxgKw< z;M6}|=Q$DX-0XS3WI3<2^S*8GEN$;qXE`5dYZG~geL;VFDYEz6sPjxz%d*bv_pa-F zEm6w(F5}INzjScE>!4}Q-=nX2ue5hQYA-);jy@NAC(~JJm)vzJO9P?X2l%h`EAr`j(C5KI#0wT>n-l`4(oHB z$sOhA7Wb(R?{;*)4t{QOH+B4_lXH7#;qRmWbVuh;!t*ZoUX3`@UGK4o^Pz-h@4H>^ z&mEnoUGJri&Qsp%cKjmc4&Hrv&YK;)oAR8kxn6Te=i82F`o8bIDsm^Qe_r7xPiWzk4TRM47ot;NIc`G|R4V}E_Iytmuft%0iv``Z!?EaG?p@+!{j{gudcJi^?r1njV@H$8WI^bi8-Wi9rc zS5+^ZoYCtcHCXvb+p5d2!o2<6g6omp>aLDHo$1`{VdmD18u#5y_tkc@(0sW45#O|T zwyAMp=2MfFD)$Lh?)?#Ob>dAqq? zE0Ikq+3vdYBOVX6{ehj($vngx>YR!Sewv@v&+W^im*O%|)nneC?ykQ-m0t$#{>1ZX z_n*;&9p_80*VGJWj#1qpPHbcUcjELvh_UIf3cBxeVDIsW*BWzgj~?-==WbPPcAuB^ zsOP+>0=CWTbzg?_v{4D&W_!BbReh_YhkX`vH>$_P&w0I8d(L_z%6{D1k6Ix0V=xn6_oeB@U> z(LcU&3D}#_rIKc8KsBI^d{cEg`}ySN?q z^R9B|xZXV1c``x#=E!DkVj_7|i5Y{Ud%K&pgKiijPJ3WrhRjdk+|bDQa3t@`JYZ9fO`)@kmp*gMyI)OB9;-NiQjc1nA1ZYTH6_FhdV_qJSb zN++|OdCR8F_TFyKLB4^nU3Z-_uvP6_qAy0&68)}pkn5Bq_}`^5;(d_mv_@vRY&4#U zd0+5Ds~bB|RY|*(gOOG3oI4_3Lpz_zYMH|l@kEC6vg_T?j*LA0b)Ex`iYoV;W6m9} z$JTm->(zM9^AYbZ&)FRHrg+ZdF(p|aQ}lgruS7{byfd8ryephjdib)~LE2&`EuZE( zr+C*n6SdF|iPzq4ul-SD(qXT*)b*NO_gnvSO~m_S#95jcCav?XaK}C3ZXkSbM7>wC z+%_Y z%lXaqervDxXH&DBWl?W(d*_arcVBzwt(Z5vy*tD6Zfoy+?|I*}bDqlZwzYHDXLvui zbLO{Gxjty8EHt%K`d_tEI`61m<42j^Bki5#xSHj>o~2#TeNY;=hj*@Xpf|~>&>>e1 zne+c#Ht%%z#1o0dc<+mL&OF!Kl;JeH-nSXfD-rLbcFx05@7;FJ_Nce1owGFNJ(b}; zc+EMBM7g05;n*+>8Fv&zTwVKI`w)MY?_4-+4dkA^9xo z&DziTHR}D^-?=5`P1(d&;6XGyL%7!bL)C`_**|` z?!F#6%lGvtt7%^k%To(I{8?1!L0>CW_E!`tul`u5EWcN%Ec~@l`Lm`_)k0=g6_5Sh zzGu@Ut6h&9XC}7SBF>DccfRvP)T@s=Q(_z_d=m4f$BaC!ZkC#gesnz^iK}T+ZV$s+ zeBK3a#fmI%S=^bH?bXHIhMW$s$DR3IyuZes^G^u7C7YbYoAI>&KqTa@%^bo4ZqQCShiCwld6> zw?>>55pT38B*u<0Pt5D*_IW1aJsNkuk9dEGyDxR{>M6T}_hQ_g8&{w2i!0hzMkhD( zB5$B`4e<$NZS#-OtLGi+9-xi}?svVVQTLy&w=x=Ku6`}*-W~1E@7#?l0p0Arm@_x# zy&j7$SNE@2)U#^qyk2fM_FQkeZoS(@ZN;zCR?ozMJ>eA@0oX-qu6h_1(Si4vH?=)tmKucXrRt zwL{$Z;+@g|v^Oq2u)h+_RjcTy2dSK29;CGE5BBapG}?5CH|_V)$A0g9e`xgO!QP(- zN8cIjZ9O!4$D!UmL!3Vz>b*R~Su}*K@2LOUYNz_&)$YZwDOYdwyeB)kfA_riIz^fP zmUeQds@Z-`miI;{cS*K)OULNuY_GbbyHuTL{Ftlse#=$jhdX-T@9E^# zba7fbdsDhZ7k2S}>=J#Z3+kVC@owwt+}o9piNagwRlDw$!;t;K^?n+l&M-b6;LOVO z9vtX=p5whS!1*o5TROn0$@N+WI2&@k#|JpicJ$T{aDU2El9zYtFlV51({3LB-@lu8 z>p-V=5B2%Zz52d4zKQ^4`pH-j}sF*oWnv3A!)h{TOvtM7^(~zAr_{@Tt>Xkxw}toZ@*L zdacUn>Wf7xx3B4ED4y&_mm) zd!d$gPO~>T!Vk*(E3{YYbLzj2cPhWXS6hbJSy{gGfl7zHy^EZ|-elJ~kKhu|qupV% zBVJR!^K{f(wu{=*ewgom8SC)wF3z19-rKvV{l}}jxVPqeNZ!p?I`8Kz`A_-Yv%5Gq zclSQ;-qxjqQex`96303eaY$9--Re5ybyMcBai+g~*KXGrvXnyCUfw4zhpkIp&PyM1 zodwbY8P)B(G-LUXfaUs=)WEOpy(N47IB;{83#{UPG5%yK@AdegF<1u^gIEO&{2?)hexk|f6GQ1_tS zyoY1#vbIOr!O)vIH02NbxZdZkyVhm@#TJ4hw@17UQRnuk*AR7HX4@T%X63gz0rqrBd%siXYQ$g z_J#acA$qlJnABA#X}zQ?CG{cyRf&Ek-}O@0_mYmAsq;^gbhf06BwZ%yJCc4X>B#Nc z&f1i6s-+zDyGGTuNK*aNzyE)&*xB%*&NFi_NL?J0`PU%f>Yi0ynL2TPY4N}M?$k;122oxqhI!rD zzcO`k4mZR8^$Rams4H71{`cS1$DQQoAZhD0TeW2lF8pgvN1dwovDDR0Ck_u-{A7W2~xhK zaY>6LEta%g(h5ndB(0XTR?<32>m_ZFv{BL~Nt-2gu8{I2jZ0c2X|bf`l2%AsC26&! zwUX9JS}$pXq>Yj`N!l!_bET9oXdm$X9CDoLv)t(CM+(t1f7ByE(mNz!IX zovWmLN#l|hNm?vvxug}6R!LedX|1GnlGaPwAZeqdO_DZC>P(dKC5=m3Bx$jv<&suN zS|w?#3E6kW{}1iIMpw&%7!>e7 zOf#KerPYQ;9DevA@q!c2zGD1@E8++DAJD(3-~LzlKka}00Y&|b2K3*5Z!Q1V1xGoN z&2L+X6Z%mn;tWbFkMjF45_-X>s1tK0rImYa`-ebRrBUh>>>HBh?VMnLku1-2f^|1p z-rfn;>tuPB6YL9;<=IZKe@K?In+n!F14Nw;PCTtV*J()UM=D#?>F6}3mFGDXHyMWI zW7O&71p76UMxD<1vtvJsI$fM`Y5G@`x7SB6Pp7|=Gkry{gGrPSb-FphzAzzG{_pGr z`@v*+zEdpw#ANv{PP%Fiu%k@Jwn*Khir9son7+@sjgDm%poYq|P;z3Sq{ zXI~!l2fiQTUwfgZ^cP4!;SFa0x>4jGi=1Em;a|Lz?dxYw(?9Pk^1bK=%FgdZ{yULR z5czo`zeD7&iF}L59};mNkJD}Pp}$gdaq#Wh<0E}b~MAmr;uW+cmdau=ZN+?^sn zPvnI&ll7N~{Ph(1R*|1HD_Osk8xm#z+Z6dvBCoDZ)*rzQmD1nob}fHIC(a!re_7-~ zy*?0mxioAb@5zmrvh!7n{6djmb7yk7Pl~+b>}2_mB43yyAHvkB>^oP`A-UA=4^!6+ zksmCMsNVyot`9{1@!k4oa{AZrxPeu6z7cs)-y20|!`^v@?nUR|f{sNW~0u8!PqD*fB<)j!YEiF2jM3q=sb^KFs8F7maaAIF}u zbKiU|22X;*#x53Dj|0Q+4`;KIDZbI&|o>t5G5#7eWYDIrto&NbzojB`6 zUh{w!tP}YeJ8An>4{AYy$lntAT#*NU=6BQjMKW=!@06*lLgeEX>Yvs3xzx1|dAk1a zgXlK~1464iKZ@K592a?vhEs7!JqPcOoNp968X?aOyu_shjjaLz8~oiV=t zj{Apek*D*2s;}R}sYogJPG8>HiOD{P<;K6%*9ld7Wr{rTbB)N`r^q*pJS#=sJzv|& zPLUrX@|+a;2_o;1BCiyAp2!0~ZxVUe6#WN$c@Jl-)Hl$t7x}mp`3jL&rpP}Pc~y#h zqsS+u$kiXfRqZ=5MV`NlmQPBN?=AA`6nU}8r>4lqh zXQ#*)i+pa1yg}siQ{*3uye>ulwa6Ey$hV7pQHp$LwyMgX#VPW=MP8pGA1d-CDe^N! zzAQyPUgXPDwUo+1y%`=}Io zFy2R}$b<1dCPf~M_lgvGFy6JP;!`Jj)r-~^FhBJ#pdwct{beeaQ6$h&h(uk4KHJL~E?P2^`FSM$T9 zlzKfb^6C`%W|2=#kq_Hl+nJsspDFU16#2)XRirn_p1 z?rNsOQc~fB4_Dfl^_=i2VBY+D$?}JhtGEU4*RYNEuRr>7`N2qb?yK!*%lkX$2%9MK=l6*E5^hWVYmLZbujz7! zi2Ntys@$KpX#uxU{nezt?wKKhW8)K-*c&yUOZfTkcNM6Uicfok`$`)NDJi~JPi>HL`~`YTfU;VUAqeqI}3n)R>DeYO2j?`r$a zA}h1!1SuDU-QD)NIxet6&HeliDnx_bRp z^zS`h+YiR|;r+DzK75r!T|qmRi@ZLizVk$W&O~kJ0P!c z6M5x3T8>%&>cT)%?e%uEmUGPIUuTQ_8-72Ex`KZ4qsWiwrQ^`sr;c+f8vr#f`rfYV z#W3`*+mI{!2kxouREqp{(ckhnEx1@`b29eV`t_G-{R2gRkjT$prsY8#>XAP{$v?__ zM`Fg=j9mFsE9>uhVyA?R%AXfM({_Tkt3-W*+mg>aWBKqBA{08wEF;JH~{e4~T1!8A1 za%Ja{RxLP1zD@>I&w88$@1I zs^uL;f0@WPzNgC#;*fEWwo@Z<=q37(A`j{)B0u@3FQ@2K+J9WM6I6?wO9T0Tzkg`HEk(of|~|K9LVnUk&3rN#yH9zWj78587qF-)s9@ zHflReJN|Ww$an9R9Jgg6FD=mWK>s6=2k*a)5IePlwf%~Vw0;mzkBM5vt#gKsGvW2G z3y=poBJz_bM1P#Dzg-0WB=T!T9@MLHh_>JTEL|?!0ROsI4De|=$THf2Y#xJ5muEs_1zHi`XzvA@vNBHtQr|=Kjz-X~^DsmN{U7yo} zZX#bU^5T`c++ba35&8FEd$lJ;MOf&h{Ya;J28%c)0e|?5r z)yp|jx0m|+l-3^v&aW6i1?D-MP7Kg zE_cpWEePUpGICXJ5%)Lh3i{zh(eLrK*5}vz_}5(`pT@TY)%CXjKkX%UDt@mkw7cl< zQ=;uhq@M)-UnBA=^?M1p)Zb!MSBuDN_t*a1t;No+M`-`cq`)2`FF~&SpIoo?KNb1# z;aWaDTN@6_y;|hk_@17+f_A?LdAff4s_1tfr0sXniPMvTsmkpk^rYZm0oe5Cc>Dy8J8O%#VMLy>=U0^UD&PDF`pNNig2eI>!=%4X-tsk`e z&?B|}qDt-0X*zKhAXnu&OSOT%V&{92ul!Xj_7QncCfIcI{PD<@Ka=m&`a!vqL|!&Y z%P-2*h8{t#%020J?dO4F{|Avjc!riAFY-f<()wdA)N-aN|N2ejGh|!`<(|*RPuaix zM6F*T`d^Fu`_)<==pT8s)-RTENB8ruCq#bD9IYRWudc^v{WJI#Me4f5|DV5$Bl5WH z!}k#R)gnJe_AP;Yj>tFhRZ(@lDf$`5YWp>^f4D*9y^yOoPd!-ckI-&87mNPco3wn2 z=sz#=@*lKf(6={>JVWj`gZ_CP6OM}888Qz9^<9iS$SbD(WTP+VxpST__Yr}8j?;El zU9QUw=Diz5KJ0NV560b#$kW;1g1i&Y7vgfxrb}U+p<^gNd$f!CB?ftii~K!_bI?z| zLLTUt{_k{xw$r#?TMpuIqR3+@=OnX{r?d00MgEQ087^_&M+)ySN|$@mi^=VBqR79O z{&S`1-y!lA^^5Jff^qte$R9aJ%LjbY6o7;XQ?Osya6XD&gW&d&wD zJkP0mM%VW|vHy+OnUkmObQHPzL$#`1uKYsF1N{?4e%Ym39>n=(kx!O-1>^K>k*|{b zfx2y8o~|`PU1gKcHOO5883} z3auY}4{f;UAA?-g_k1}w2<*Qg^3?m9cSYX$6>Xp4>0gI3(3G92k7{|f$ft=s<5k_! z7!Lk*zsR@9x*7EIZ$w`Ilh$Y3;9uR(*7nO}{SEd@BapLu<_YT2@!hIoh9VQuam5kq0rFO+pEkpF~S_0I_hYJCZlbJ6*_ z+~E6yhf29Oi+s>8y4*cPUN}zMsW?a5IY?ut9=Y=WE}5@_nD@Lu%g2bFAZ{x}zA&Y| zz7zQ{IZy5(<#xPK+ZieMtw9{di9D`e$mF_NyY;`AdlNXD%lH5PC<#eYBne|n(wH-w z8I=Yzm<*FjOV$|>%Q*m-tYH)-p6&tpupvRop9slM3%4iGu_W%{}}C4UWFs# zo^x#?pK&n)a2@&O+0Z}a1rH)mB|rEIfc8J{lP@0zd-bPTPGJAjgd6|u@)|>4?{4VS zX1epwptF|tVOBp=OB#aFpY|MdT2rSh`9AiCbI8-kKOO*kEtk85YaO7e^RkNeH_Ag_ z%q7F0b6uW?bnW{ZEy-W}3HGYlm;C4+r0b^6Ea8{(Z{L@XXdlk`vzAv2nedqW{@4vV zsr=Av@|K?>-C*(qu70KzLVwL}fA!{#Vq|?{%;n zb~P#rT<&9qn>erH{TdxFrjQSdLB86bkF>TqIx;Wie(&RS;re3e*yBzg@*d-%GlBNz z`%os`EZ%3lk$k6cv(K#Gx2;27e+cZSa$cwXVY2W*ah^^4CcJN={r`IM86)6N1odkS zg??rOWK^2Jb9E$7wEDyT!ULr{-{Cb}nZM!l{i(C}4EBwOA>BR|kgl8dBZNEimgXpT zogcnQ`^a(de>Uwa42RC<`~CA3P2Q*?^fkYCk=y%?yU53JUsvOQ(Fo{|Xaap1wwx=3 zeD!|RTkSuSga?Yx3$(Az`9m}6{6${OeXy3Qe;3kSSQGxMKZD8b@_mN9GRKib>fAUI z@qA(fKzs7p!c9FK)&lv`{$v~Z>g~wawY2|>{F)xHPay9x3i|f_mjS|!{-#5)?@0SK zv>$j9pceTrv_CdMch)XIP4T|be>oV zeHosdtLok0HM#z6LOz9j2=B9NJv=Dfw4)lm(2hQ4huCEtbQW-*LG9O(-^g)6^L4{L zMyKp`yKv*@EZ!fiO_S5)edxc&t@?QQQ+Zeg$5N(A&J`ux=;VJ6-iv$)c{l5R!7AaG z8jq~=JX>g=$1k?2&sR#vYvRx_AMHrnZy(_%-N`EuXYC)RlQ-Q9uI=a-@=DdgRo{JY z;P}J|H~QnP`|^*Fe;WjyX3Xzp_rZQN*FoCut`V+j(bRbvNc)6Wq4OT!?0i4+oB0ud z_N&8$8-Egu{PXoV`4gP~1W{)n`CQ&_y^Q>d2cR>@nh&Irf6o3{<2H$0pR;fQbXS{Uc)tq?T9a~+2jp*Us&UIO1Me4vb7&&zSm^VZd-eWj0QRtjr1dv7kC3!gOp-c~)>;A`Jzt5`w$H)&|3w@1$ zo5x{4>QeAasPnLJldq9W05lFWg$J1y&*zqe(|!kaI&gngES#(Q6zIElL%$EXhrI9g z{^@Qc4?c`~tL^kp^6`ryp!M_4snEatGuUhV?;&6LGkABVJDXg;S6!9-Ao+piu-9^_ z@C4!z%yVlu)4sECQ$Ou>aW?to9N({_{mbMF8X>e^Bc~5qT4i%gWaaH}$RdatOrHpKoZd&$H3~dCYX^%WqmaA5fj;YF{!?@2zM^N=z8Xv)mMIqcgRiTKa!7_2YW5|jxQtKFUEsQb#kt!$-}u0)%@-t zx6e_Wa5z8g^K$tsf%oy+2{-k;3EQLQ_b%aDH+*DVAD@ALO`Sux!hij2lliQlrx1rt z6!Qu<=~lZ5_PovM`jUJ)@6X22zSaWRw-5K%_Xs!r^FltqtrzVV)BfhqVLyO;uW(cD zOSb_uA~!#9Yy7d-#ZSn9W%#7#{^_n2u6d+{^Rkon3l_s(>(w0#p%eWvxYm=G$nE=C zmrDIJ>HflVk3E@4ck)?`Ln!$;;U-_>YoLB+kZ+>Bec$b(*Py?d{X+}Y7ak~ILusEb z{+dhc$*eQjzd`$2T$eS&$6QrjN4jG^MI2g_KO)@m|3iQW$q&)~U8xu5nuhGT&Xakb ziBDa|NB!w2+~|b73H!!)aotHiq8$WgT!=T`qfW{m_@n*UVe((B`|s`F2ppfD!c9HY z=knEIx@(0SKVz-=z)|u^TrY&u{+cDQA9oS_(R>XcfBI!`?N64FFXlW-{jVtbH*x4C z``PAFf5L?ue+J(Vom8gVjr;)j18*gtK%K*Zo*BzcDxQ9?Vl&nKDb6| z*ZHtl|8IC3I;Z{wzn=bdx(ew&Amf#}YB3Je#a?~JJNWND>a3(cwfW}5??6B1cElm1 z65iM?Jdn->?;_nzH4*oFN{;BzWpS&99Z_Ku<+DhpBelK(;Q0E5nye#nEQ?yUOK*lqnu6sX~IpM$8$W={%|Mx zE1VyyKjvJru|L86_FmMvTe#^b?fLTt+Aovw+*}&xYOA4hn(1o3x{??Dj0`o#$6Ql{ z8~ugXq5W3Hi)%aW?eF7!LtbqgbRwwJ;v=LR6L-EtdNXc=$v?RZKLpEnvE?wTN3tIPxpqk#pT4+?3n)3 z`469$FNB*oEI*0(RONfuYyh{vhf*xu_@mGFu0#774)+n}pS#b%BR4{)@+la$qkXY( z9C&w$0G#%X3_}GTn#C=e9r` zv|cR~ZsH%}hCg@F{xt0$-U<6=OM1q&Y!i}E=!=SI_a^-fU+x8mhWbjjM$@?w>&~)z;?(F07 z`NXQz@H6OCc@jF>pA03B8wg&T`k_1E&+3x^%KJNFupf|a1bM{g&>24;T=Vse@{`~}wEva-fHkkX;S1AyA(>A-j<7G~VCW^35Y}(+Ym-I5L;~tMj4XkviXz zcjxzuHRjECLx1<1(7A^850U5d{7EADg?nIcpQp+o-^_h=)mcY=gy%+TQRg`Mz5Kqd z`hVeG=s$lu{0XIfo^aEC8*(3B+shNQ|7BMN$5Qo|kT=>49gXuo;ijH1YYh9}I3Mfy z4fw)`5Vu06`w00fe*m;3f8XK!htJE_Gw`5&$k#~g{$mRHgXEguY2>31!+)(0hsf>o zx})|ZKKgqVS`Vj@>+cFE-z40$m(^4J^;;bPzi1=4&i{v!FRklu|1S9xoXG3=dx-pW zW!R5ljOu+0{b;Vcv&r8U?$pWAKEaef>m7uB`>H4x9bY~WZpv}#xPYFZ$ zHo(VRqlG*94TC=#=QZS`YQs>=_Z0c&Q_zW_{*#BG^MrL?h3e#ezK8t?uFHCnKTF=(>i;kK0rpKELcXr2eP8muJO``oYdiTdp2y3jefW>i znS23sw7q-Dt6BRwQ_1IX+}D0}6ZvrK9BiAPP%bffh;s(h9Vy(D%e)J~2a<0mf13MI zs(;lH*f*aAKQ%ttoh;ksi5P#083*H`3GmjEcg zSmtNO|7Hal!9JL8eoLM{1N%QNhKgU{Ez9-!Hx%*BOU>0?%O8YnYwfo6C$j9%6@NKjo zLEg6|(rrM#mb`%LV$I7H$D#kIb)Rbtd5cG&(~LSZg&RMcOhCHf$%pSRwtmp z;5+CHp#7c78=^oG$TyPrXa=t7hW`#7dp?#(ew6*TraP59&wBpM8uG~I@JHkDr*M-m z{avWb=ucA_7ft*#K43gqj=hCnN*mvo$7x@4AMCXsSSno8^0i-2`_We1n*PbSb%T!9 z^T){#@*LV#6q`>T67Qd{{p9i7uT!1wC!t@5^CFGgIPxa@kkKa8-%Wmi^G3~!`xJDJ z^LwnyN03kFxfJEEk`Lki^hoM|NuIF+>1w^LavJ)vR(pvQZptgEChVJW-Iwcd-w5OH zWz_lNPQ)jPCRP7}{sw;ER{P;@+l?+9^KaOzLwt4Oyt)7?tm zITKvEapyWEJV@4wHMmaXGR1Xe1?W7+{;EFhi^*#ofsXS3kw0vmV>$0U=%m*|`|3lT z4}@zO5jigxo)7z!>!7dw+s))Re+}M%ADT&i>8Ieis}g2=PU8*x8P$M+A( zW8Q$D7a`oP#uper<+%;gUz%$cUR>RTn|3;n?c!$gbn>k{FQoN+5&0{Y|9_IV=l-Pn zRt$)Z-0c2_VeAzU$OQ@r;^*x`+7&X ziNo7f5SVUEw?bv;pI!_8EV+j~_iChj3He;%X5BH3=R-2dS310=OMi#08u@17Cfz9M zSIm`$7uQMZ|F{T1_1lVnf$G&%;U=DK`oNzY>U=>S%I^maCm$#0J_G5ze+GWBR2ZXg zKWFS3@`JBKxC8Yc6K?W#Bm?zr2>Bt}pWwV&^VL{3+yeFgJ%pQdx3a%g`>EvJxG$>f z$1lnM;{0FR#q}2l&hIGUM&HeOU}yTdTbQhoyE zqW$4w@?%_29in|JnV%VdjxL71wu{?@2P&@@&cN4DM}MF03hFnM`~61$P41_KlJ_IG z*Vp;v?Y~97G(OA7A7*>ke)2T=$s7IK#qIKZE0eD6&+Fu)xv$lm{D3pe^T-++LQQ*+73e}Fh> z`5q>(x(4ZLeB4(;XVPQfI=c~0Z2p;L)*&~n^D-iPM^H4e4w!+s9?N%eDxaO3CV<|xN; zs9vtMv`?bzXi81~!0K)$;2%~ryVKe=>7{qIP7`+K_&kiWPGaZ~%n~w%X+N3w9codhTT|%R=P(D5FZ~Po3Znf|a=YAj3J;Q$ z^>=Yq|2XZ3vEJ%<9o`J-Mswb%KIf3P=eqJqraOZ?^ECh+j}DV>;l8x?lQ&%h{k@0a zzw$xkNiu$#>j>mrFAF#2HO&iqPN!U9(tb?4ZoUwPH_-l3@_vh;)1AEOwXpxbDtHg_ zV&R%cBIo53hs*cfg3v%eHbOHhw}vOhg-LV&LN(Q(7fD5{?b0gtv_{MA>V!v;?Rq{;`Pw^r3Se6d!ghL zIew}BQ1ZDeps)FwOm3f_e22XLRnXUY{%Lai`ABVp;ZMe5IH>V_hEODpI{aeUPMrRT`!vVLm4T1~!{_Zd~ERtR*KpMXE=XDsQyTJe@X4Re;7%Ap&R;x-$2|#$=i@eo<_Rbu0JHt=nH%GCpZ*3Pq1H7{T%Z3 z6JW3YOee4S0ra(ezZ9-{p)1Zy1Gx`j+G%xJCz)%U^Iv)Vpm5Vp8&-n8jtkF_$FBpA zp#4?huurNBuI1Q)ydKvh>ce>Q!`!z_q0UC~O5E2{`->x>KW{Mfd(ytGaO3}w9RPPA z8?MJ`zq<{}>n_^wAb*+bQ;lwScGm`p;$@^Rdu5qXr1)XE*(7BcN9mw0<0-jDjn>=JO zbgD8w=S4%uem>!7@}m7PY)YM-!qo>N=jCUI%X0}HhP{qQb=yGSUPt#KpBDr_b=+~? z0Q;{v&n#vl!^!LMyqwnmrQ~xzgpN#;oNF)n48}q2Z@v-w)wz$Y>%NJ?P5tS%1On}u z?lZI>zY1L2(YNHADJ z+&))%kbL~h(APLOy*aRc<{9|Q!cDsNzR(Zk?H`7IYsRfr4D35>1=qL@CBKm8h_o)f zAYA{Z1j>>2&!2>j#;s2~=s&Rm<iFKQ19T?efOfZxe&&+DeZ9Z_*W@*hf@@l}VgsieBHWZqMXP>J zAfLF;zurEl_MC{-p+D<|oBH2Y?hlx&7G7K@X#eJV=&T`+jYGQg*q`e*W;nI ze~sM!KJpRr(7TaeozJxG2!HJJmUjp@`TdObS<{_PzK`?97^b^}IwSkTf32TkouFes zhw2XD8goiGFWYE8^Ah;kfp0eK9N50I!{vU{XD}Q``~Jd>|LOJp`}2k5mvNt2>-k~o zjlB78|N3*@El4+* z-~ZD6&o;tM{jq;%q#NyP@|=&(=ieufJqCT92OcFq!2JPTUv%z*bnWNg4kEYD$KFG3 zpF>_tZl9a_oxJ16@F$z`%t*j`cKL6(F{SP08R4cJPqII6L;Ksif_G#6)N*{CeB1Yk zv-T&)$Zz=zd;|10J;8PS8Z2DPj;7AbgJQD?LZIve?+Zr!0jjQz8=yUFBD zc|J|k+AZ9a?;VARPg_ipF#WQ*ju49vlH4y5|VMv zCci5dI%Ab7RJm+vj-SB(L@< z0;c2a33B^6+kJXM|CSK=srR#{0rRHn5aN}pu27f<)cepxT`s%q2`Yt}tMBDEh zhyyB$gS{S;~z{uekJ_WxOE|akoz9WN0CqCIHhs;klfy%uh<*u9yx$?b^g|y ze7|)c{9f`Q&Eb#Eqh2S!ee+f6`o_Hf1nNt}b7C_4zpwS@3YkBdxV8Vxzn=6XpF0u!h^9-v{YS)2{ohJHlivraM*Az%jQ?e?OyMTo zRGtUccDl;3m;Jo~DBpa3^x|~b7wmyQx(4e!E0?WX+GoOk??(T4 zzCdoDJN<+Fr+)BL=L1(~!Jp-P{$v8CS+2)~8-FIVymbDvfV|B25XozP2Y>WFQRqPE zTz&xQ-o`xKDcr=t{$2IwXkUr@QQFV1r~QwQ`Rkt|52=7ShiRM#A>Hx(y#Uoo`w8jJ zoD0KNwC_jzrJJCy=kZ37$MU|Xj;9NS8~@u#`sT_-_FNsZk*@uGx!1{mXB>2W`ZIad zLI~(M6`ungd;jVI^6}gcjHdsy$&<%ICzSjL^2*$=({yX)LVpgwUvLxcCzAK(c&Gk+ zMLzaQ#96=JH$M+L(<&fc_2+_o#Ak9l*z3MZyu+E8&&$KYO?}&X5p;B(xt~0}hJU`A z4u*aHO2l95b35UI`jc$hPq`TFTKD&UC2z@n0F7HwL13Nxgd0EYa~iLb2i*@pHNWc| zof@u~Xr!Bfw_WuMp);5JtJ-gP$s>8rVE|+Ff^bvc?Dgylhx-JQe{QEv<=u#n&d0u? z&g3HalScdNir`P>`2cD^nB4BqpCV7O`qit7p_Bd#GWr(vM+rCn&)N!53vRjg(taP; z_5EmHVF+|iE`yHN!+i3&pZoJi$PaN{uk($s$QS+$d#xMi4~0MdLJ)`5O!rNP^B+Dh z>xG+g-_Cs%T|ZVF25x`vbu0PmwaBQ>_uRu_-*OcE;WE!Pll*#)YdT)9BM-h1erkQ_ zI08C5T0=+IzoW>rKk_g4C&=ydbvw!J->-?d3;KQEhmQ7>S>)Y$&QRldn0y26wf;np zgpOS<_mU^_T(qu(mXXio{hbe42EURox9(^47zO>EzrxRZX#coy_06XkT{|3J!!>gW z?6sfygF5!_K-C=${c1e_tnDSAeCHa(U;TfUd>Q*^t+#KJr|)68;KlVBc{cAabf&YH zjzPLh*3h2ZD?CuXW}SgAr_S?};it}%e>#JG*Re?V<=2s*`u{q)Jx*P8H|$$l^(~rw zHP`Pt?&OkxwHNu)eUFK1zrsJi?Z!dhURORqZlB+tEj&mfv}rWP9bJ#SFWmG$F`;Nj zH#45q?ty-A2I8ahoJ8`TGr+6UemD8*7T}@eEyhFVGizV*Y2hZ_#J=#y#d80e_V&4& z5LtJb`&rGc`&sRUoBpTiTS!;u)g#F(Ukk2vV}Wq}n=U#pt7!k!TG(qp*7RQJdtU(8 za!)3=pHne~+@Thf17Ke@v%>gqwV=$wInXAH3wfjw4`AXg`&F$+!OX zWIuTV_mN^$|9nPqy1F@x&7STcggMZhgBv)r^##3c^1jL zJ`ir|=j4k3G;Y7q-hR$c%ZH$|?*rItKmQ1MuO-kAV!qas@8$g_%~$Zl(6N6vq%Zl2 zdeG6>J}O-QrnK|2m-dmI$L8|Q>W@Ib{vYsD|~Vv_JM51hl;BJPMs~KDSfH3om&r=eHWqQRI`pLAp90sQ4Ik?B8>|lf3pJ ze?Lc(53$CPO~OsN=kxi!1DW53k2AktB5t}4YD@kI_vK<}|BUcJaoA1!earpJvE~%$ z*VztzPB&fc$v5o+52F4D!p%NFXKVle>Z#Ca_5}HI57;59N5I-`Chk-kFXR zG2H{?_Wir_of1BQzlHxgpWG!}Z7AWq{3-lWU% zF&F8^Vpw$z6K?vkPTUXC@pL}5z?mKkk=i(EbkLCZ6{C^lS2Oc&0aSR z|Hq#o+=}|MXp5Pi&j-ju*CSs+^yjA8NY_5EI9Ird|9K~1IFI(5X>Xq!kDdb^`}f}`klW8ud5wJD zPw+?E^$+CBd0$EQ!J0k~{ka@>bl)b8e8c6?NvEIBkf+}Zt~$%eJ+FZ4_*sN-rYa`Vruo zuW0hj_rP0IznFYqIJlPA9O3#|nmR9k(!QfL4hFr1bf0PloeBIl4tzSX9LpYz;^~Gc4J>Q4D*4uUD_V3%)o)4Wi>{qp1+6gytn3;u+JfG>_L;Hz$ zL;o7`MdTk;1J`!ZdI9uD^8U5zKPlYIe|B*GGnP7^&^~XQzfPT3p%Zlg^;7o~I+NS; zmbv7A`~Z6`-;aa`s#l-WzU4@ytL1X(!oc<|gd6`W^ZN)gvO3qD!p(SLKac%)@*~zf ze8eKy+s}D;pZu03&{dz0liT0VUHTfzYf}x>^Ha#S>!fhw&w&Eut0(=u{&jHs_XKYj zZpuBfA_RE6!1W02?ep#Lk=x&|KW{N~7Fy4{=px+svxxOa+v$DeA0LCCn%|H&V87rS z_@nEEB=TV12T}V;g8aI9u-AHf#}cIb)n0JDzw;>h8t$8Q zp#ERvqhAA1ok4Fxr_#s%^>7_|=Plssf5_6n^(|JoGY{DUf3!cpn>^_>xX%CIC$HoI zf0TY^yoG(F-9u4Nt{}f#xX};ex<>u~L%69AOCR?4v*p{cw|^J%5%N1&Z?)aML!R^z z{E1|`LGJ|4Z?VH=9d|AKTtWM#!i}FpwnL{Q`Oma(mv(-H`2wEzQ2V9S$>)8{9`y6HaI+s6V(kZBA>+EyU(I%*_s7G@ zW2z!u^}mpO^wr>;PPv{X|M3*K#`7royjS4J&Ge`CN~XIG_KnGl$cs3iX+!=Tc>}Jy zwGQkhAHw}ojeo=k&|kyn_GrDjSGZ|kN8W+(AcWgB&EZVU=j9l6R`R}2OTHJh3i|t| zz<>2;qHv?1&@(IAwR)$ zAhGnb>uTs6I0}EXzse=I@5A2w5$x^f1l}&(;B+jhtoNq zmkZY*-4oxzPc6shK`PN@yuYO*+ z4*HR&{Npp8{QMvM?GFpryf8`U<*HAhv+p|CYkzV#`3QF8Iv;zUd^^t()uPxoa{K$m zwbnzw=cCZqai_0v)BnWqIVv@f4OcPkPg>tcGw0L;`G3I%>fZ|eV*1mO{1E#S?KfT{ zKksGOYrU$tk#V>MoX6u_Y2=l8phkUog?u5;J5^=6C&&kOh7NBlx;&c#`#)cJpmoY# z;ii7Za{o&Ef!jU>@3#v9)B3QR{CoMFxpdrbx*7HtJ^+8z|2*=|4}eT5{@hJ|A_=?|UR+mhg}(jV!US^r zcgj8?ugd-8Joz(rf+Wwuk&VK95Vs{q{RxpUd@N59&NhZa;r) zkMJPzXeRG(YX5op=g`UH{4JO|?S-52UG+HPz->p@Acxb)=jCqd^pSa=xzx{R$nEET ze@^b=_xnDlRs-qxO?_*?dAN={LxmfE#{LdNjoWnEKh1We>*cy%Lg&O`_@nKpH~E$x zh_jwwnn(V{U$EDH;~04e?*nRl625{zu8I{MhxFXhH>mP8 z%4Htc3l}pEb%h(91u}m$m)5I1;U*5tj>9k(FRoX~AKM7*Q5C8J|lr zu4(%nL>|TUh1$PK9?O1M`Nh&t8GjbK5C`qYx(he{*JVF*JNEubT7k;>w-NjN8ZoMrp`;kjsNvH z57+VWYx0!mAfWM&-wXRso&;C>7syXn0@wPySGe(i_qB+BDAR5G4Ro6G{;%3UNIs_` zbQ;nA2)TXUBX%GC=e~rlr?Sb1hCrtWb&iv#eFCoSV)TCK%qj%ea(RN>{ypN2!cD$z zWWS+)o_07B^La^>{U)cL_k+I1Z4CKVj@Qcn6s~p8N5*y2x6p~=K73EUIi9>8pVw52 zd>eV*OGvjB`C;M4fBU@mDcWZqM0@N{`$6(=$A7MKwV(N1xY4QqCk(Ho{a>^n&HhC5 zmGK>QxDL|#`JV7V`K@vY_BXOzqNyK6Ug=BZOFw%Ld4cpp=DLCQZKQuR{*MUtkADIA zWGi2X$nE=~?Y@W3s$l2@QU5XWde%PDCUW~+(+}kK_jaRyKs+Z7gZ~=O0p!aw(T;Q< z^)=xpUmK*~GMCneZ^%=mKAKDW)fztrj&rJTqho(R@mcaHu8Vcv`yu&g#$U&&pUL0n zyjRPm*-yyVjt!1GuD9{xYA4*JJAlvURQo%H*9h=?*#l|6l?Ma09)3(d<{jiWjr!Zj zt9|4jhYOA%UHd%k9pu%9qkOf!tQW4nQQCPqPW$Wwu-Ex#!=Ir)Y#+Gp`?Vzxz6)H- zYdU%7&EPt|uO|PJ<4Zdxew4h%K-7m07?xb)e?hwTb4&J;|G@Q>=H-@OVc%KC4Rej5 zekS>Ru6NY_1M*GGm*#gDxqbh-Sk~vJd{6&|e66E?--a%s^;}1|Z$s?r`5WwGWq-n4 zT5rdaS6boE-ysh_3jJ;r`hwg(XHxH2;Bw3mZv31s^G9=Oy?UP9e$LykfC0;U+w=A zZu;l#Q{mw6)W80B=$L&Mb7`ChlTUvQh8l-u-XL*b{+iyFA(IfOob=%0Or8-Kb; zI_A=R?IpLr|8jK&*mvZ7QtN+ra{GBi50cyaIj@p8IUj!N{O5P!f&9GUJfz#is#jie z`}ezFByY|Iy=opMFWli@j{U?B6NlZ45Km6;TpyC#&m}k{+_cjgr(w@!zw26=2OFIV zuRvedSy|+xCV*?)rjyr@`MbGvUB6Vg(Lds*KhC=@*Tok=e+SRcYkA!vT=Pg%=VcD< zGg=^BwK?e6%R2gJSabU2x=hvsCf%<#gX_G-E!^a*8s{f^ANF?P=6>k?{2fyD{~6jh zU5<3Ct5b3x!sztd=-)rYkf+P|Y%c9*Qpx||K9Blet1@(!1wsE>>c2$3O6E1@Qv1Wg z^>3OwFV|Ip&i{`1`*|1n)~CU1^FxQoXK-B5_@`8b&h|A(SLY!w2@jO+N3^%+?GYD2 zr$5iVbY!}@GvcyUc5|8Wa|oAwLHS6lM|Z*}O@kB7d->IL%q8-n+v&L;9Pnb*FX)kj7drVK02j2_( z2&Q{jxM@d~e*)M~URgG*jQ%Pa56zWCel2-3D?UBR)2;72-zQvSMG5C+A?;VMhCdpI zZ_i*KToe8*v)WyE;l_Xa`9=L`-{WWKYyF=``}#-V&GW1eTWJ6D3fSv<|4(xJx!HNL zz%=oh+8_44nYsDo3D&w`z3@PB_?Gsw)Dvm|MN8M z8&F5bmxbijGN2Pg``^!?6J0;Bes_nW0z6~#~!NN^^M$3H)AzcaFo z+&+hYMRTMZdjO7%VY;J*Ukc>+-zCD0KRaaK!dyDv+eU8x{^=Fh!ajukUN@>mlF!|R zxas|xEb_@;`SYj9+cVA@+i!%M`rorI{E^|?xtg>_In)Mu@S&kEPi($sl*jrI?} zk94(O)sk_=#DCKpa8TnGOWwX4xN2?|u7CULAE*6c#vz4owhu-eLbBjzKKTQ}O}dNO zul6Ue-U{6Qenhfx6VHAH(8-|vW3-R01V443VZUQfBcGSHA<(z?{j$mL+z*{Zer758 z>A~RIKgY^E()fQj&;K-{{cQ55S0c_jZ+VBj?F-P+dBtIJ`y6SPQ0UK;eMfVt{TT99 z)_&}(qovj|V?vsB@Tn z0oVIakl)w_`gZ(_$luxmKegQ7B)?%KcqnyTH$Z3QLI5q7&gAJEVXuDvk9<7sb==%f zZu~M=8_2mXyb=1ba(~8LT7Rw~-(4SZTg3Xaf&3Q!PKuVxH8(-We!g)Ad8W0`Go8HQ z&+w-){n@&WT;ujO)S4D=_;{d05aK3G0^jYSaFdD{QT7s`D(bLlv~k-U<% zZ&S4$^p6ikx>|oy$XC4&uIr$u$lu)#J^;zPwvz974M5``)E@eCWS(U%o!7M^fA9`) z-N#r(o-X5_xssg!x?EK|K*!DgO8cLhB z*z+GgFKuFx?x5RYul06 zM5LR|bRQ+Jz;>thUywh{`#V~n+jK^{CwYED=QI6;8-4qn!y@vzR{dN{p7JUj$)Z1% zW&AKYjc$dXLF9dfYix;}mzlI*$#d`O&o=V9+=uVa4_$N%{EuP%(Ky^H+@zcN9n$Sc z`!VDTd0+2N@;Auee-!q^$wzd7&X>!;b-wx{`H_#oHNTY-U|($txc2{J$Y(SM*ZTjR za1)1q_b@@eT+jrVuUM#3$R@|4bsU-Uxo` zdTkH+2&UVJV%K(uj{UrsLh?<#U!Xp$B!8a2N2BxJ8d8sqKlV9$?Pq*f)PpH1kH_a7_kGXb{w>${0?WLyFSL08{e1ATceCjZ8?Pu1JKkq_6 zrt8E*(jRe}L#9U(azTp1gSv==bIRp3Xyh2sitLYxsNg zV`-l+JW#rmsI%)8_!&<7Kgsu5_j9v)BHi>Au-EZ%sqjGhn`vM11AqH!w?Suq9(Xd- z{fOLtUU8*fu#e@qtZ4-ccjo^*NZXm?!b9ZwEl__#slQkFbMlE^V=<1@Aiuab^zHKr z9mreug`e6Fj1#UtP{MhcP5Y7TS9Kn;nf&9|VXf_=Z6Bm-KM!i0@E}QHGSByF{h2}g z53K#kFUfZ|fuFH-s)~%?rrmY4#+O#)_V1P!leZcO9i4BuWxnFHUzTG7#@Q>}#NXcc z9#8ua8OO|Z3H^DG{PGdtI(}8UlkvCavGES)hkafK(Z1(<{{8c#H;=g`0e}a6x|=s*&qQ;ii2}vwrXFJ`ePZzV+Ann7j{vS5f=h z%lpCpVQ%bAq(3*4Pf3T4*0D+CYp(^@dN_~V+)pr<+J8rGpBGI`MY?^~`rE%n{ww=i zo!?#~{hbpxu6MLP#|YQ7=(_Xr2<>SLET} zpj={@_%#wQ(e&>0xjk*J=-d{_uyvdqd9Em%O&L zV{>UeUr8R>6kO+ZC&+Jo7F_Fp|4islmu@4o)6S{-RtDJe<02p&u_@bpG3Mr%+c8m!M6p9jf*I^yroO5y4oU3Xr#(SE$la9bMmz$%p zMdbGPgN~EWnhza~=N*F)H~W0xVByC9y_|0kVZOGLujV-`ZNDeT>s!xbNhp9$!@rQO zj^mTazvKRxjK8;Tm=Y((R69Tn`F2 z`fEN1k0JkzJVwq=I^<&Gspl_eA&L_Y6SLkRv-A#UDJxttksei>t=(rZZ zUhA7z`K{nVv>!`;jQ4r9ZmcDLjo-`Db^R5ipx^!?=&1b|@+Q_gdLjASuOUG#_j;qD z^CJf?jb{pZHv9j3>1Tm(Q!eA*1{lP08BhDI*TEm{=f9-=L2jh!{$%4Z(6OHrI7@g# zrseyxOt>lcRR^H2{nZU)!Ecm#mbtWkjwQFB+qsN<68l^2C$GNS_*3>O5N^`_q#N`b z(PTCG1)OhayS{cD@>PS+#~VxgJmE%XKfi~o@qfj!FPrWv>TGI?d1eR3x#B(0vF{@< z6duU`wX~nh_~^XrPx5`NKYIT$bv*R#{qrZu8y!U)G_4Kf9r=7S%~#6_f$!sY6>jR! z?uBSCTCe5_H}QF!^Ry)l$p!af9n{Y{k5o&zv7b~A{)E!LGkF@Hhwmm|MqXFukLJ>T z=@_|vo;>zG=>KvJ>~)=6K)z-ZxbDv!CcmHMTbJq9zaKjG{jy%<%Mzi}g!a#q_kGOY z&zcWFCw(UP5!!baZsO^RLp*OLf0gzlmcd@<&&S9|KjN>`U?TKKdchN@6HjiRI~_r8 z_w%m`*SbLo=jHqdvClAbBF5Sl) zMsD9vpDbKI>wJL!nM3OrXHPY79p9G<50vgY+JCW{@3YPiKTmFdFMc=q z12s?}x^B8+8gv$N-Q9)hMv|N7e3+{zc@g7Y z$bDDMZ_+c+8N~Ib`uQCByy5Ui+ubJeYVv(Sb8$N2x_UZv9_M_u9pl+mxGDFJI{;dd z51{>@><=~FS84y^Dj42F`^~hk$pxRrq2aSg*Z%(01oEvL;J=QWACWf?1=n@%LE*;F zmDT;@S!V|H=k_mdh^k-O>-4 zOLcCV4L_&t9pY=5PktL{C-I+j>7oZco27anoZ0d$URNB!6G3MD_*+&^D~$-h7D-(DUkxA%MZ z3)h&?73U@N)xdm$a8tewrQbD|=J!+b;GIZ!jPtI`^^>Dh!!_-9fK%jGEQHQ>o)ggh zjn>LJj%a=JlH1>(eS~}^pC72}(?jGNI3LjY&lQW1?w3FK$89Y6NXAX${1mzUJ%vre z8!|7xFS}^pWGnQw+^>8M=`Q&cT>FQ|$d~hb69XyM`gIe3`F=FxmPdZKa1;OC{2jdk z7vqh!4Eb!~rhJFJ z2`~Z8#01qs zq~l|*TZB8$d$gW6n@amhUqEFhx?NZ8hGx&9hHK;!a9yvxP5aYJ!8O0@$s?~vx@@kl z>ttLs<+VfVwYhX1ltq5rdfk-4QdUqC@h@^WLL9*JWDI|3_}0Ge1V&vnTYA3_3;o;h@%^56EZLg`ti| zf06$vujbNr-ACG|iQBzXz%@Q^lH0$JxrKb^9)JC#PyzpC^BbUwQsT*r$f^4!Vby3QIU-1rm2-+wtwe>OPWCqw)*Xcg>T+<*RvJWIGK z7yDfL1LW&v9$_xc*Fr~!ANG0qfcA5&b6=Ny2>pXYp`-Jt&g854J;(0Unnqrc=YH#u zZy~q)jcZp!zsX0?*Ll|<@|(W`Po&OU1uoF{4w+&+UCz+ARiy>@8`GVv%>uO zRcoQspZ$r}!(8%Z^hf6j=6CqC4lt|E%Xbc!c^Aj!QG7Fa9qL=Z-ROW9a3gY@a1)<4 zt>BNQ`<7$xtBk)-(!Tj_#995R@=0KS`U*Gto4HQc_&@E~mp!Mtn0%A<{jw9(Nx2Aq zYQ5^V9{TGzKi6}NFOb{6H?d22ptxPT0Xlu8KQNcZA)36W)t@{j+_d*2;fQAsgvWK5 z_V)AT>THC5twiW+{aH$0za_Z()^HQ-b2(pC?jf&y9qjeK(hI_kKQ8P1z#iIvdldF= z`WYqjOJhH_75v{qK3TXauNT?AbiZ^DxqbgJYBTItTlZCq$@^Z9bhRDr7jDu`?2hqq zJ=1Nw#qhFM+8Ovv;l|H7+{e~(Zz%IW!&A>kzI1-*A%9Kg5$4kJb>-z32IsjveYzzV zxkJ6f^1TIFIo{l&)NFT1Mpm}BaCl*nHz#z6+Z~x!;7u*^dNNZB(mmN(xr5@8x^zo+ zds=%uX~TxO-QoGEMVWEQ5uPMb3h@>c7k%o^eKn1lnW z=bW>4WPvv~H7Bs@zw$XWt++t6i#$&D1BK+AeRhX4+3A0mx@jMw(mc{VXDcc@ccsc2YIkV=)WWPZPhnAkI2NBK{=3tp!Fh@bQnQK* zg)0WT+^=ATPgs4J}&QbiPNbfj6xvuVA=SciTre z&A3eImU?;i{=u&y{HJ08tBPc~oaN%%K-I4y<^K5DLRD^+=+c@QsE3da$n>P{P~Z9) zS8f;av9r}YNua!Hq1x$`){g&3x%?wYd3`N!2U%{t5bxmPtRbn{(w_&cbpIfZe>32e z+a(=#ONt|)WB;+-Kgega8LT~K*#38pMU>1dq#G|jL;TB|&8RHt-gEMchW|^SvQrC- zJVOhzWZF|C)1v<$)MUttOv^0D%gu9#m?S;~b%$a?=1G&GaZsGW zQR&46sb)lr&rU9iaQ=)>$acrc|3mbObFT76&+Rtjd{$wh872ef+4NSN43t~+@5jgT zN=ef)vxtD6l~=?4cT^~FJ4oeUr2e}U{_~8KS1>v)H8(Fe zOV(3os!Dc9%2||uBm94(S~5W~tL}2`Uz9AdB1^Y5JkBnK+wJM<8Q{(J49!d}iYxb= zUIm?f4|ljHS>`RdL%an=9%*o9WhOq#;;bmrX@B1GmXp71q_~!vp6)5g%PaCY8yGp~ zCKN70h56Z8MV>U77ZsjsHd_~X^Rs1;lErh8H`h!Mq&8szTCUZYf9@iDb7wXs&M|YU zV@ei5Dix9vIBQ?+?~z;jfs)Of(yH)}M50Rz>l_u_;f_SZ!c;EA&_b&d+|umW$k z%r0fm##cr>L!&EiVBAq9neoVMT4t$v1?gU`g&mS_OX<)#*c}~Nj*S*Au+S*ky(lgy zG`^J;56jQXSNXr++*Hj#ZgvQDI?PZHHaMLDw{>ZP+)av0w01qq*?VfrXU|P^R<4X| zW?%MPw`am z7w6;*myh`T%OjRWex^C8S-HV!`T0`klZz6fJf19B>SYy~CJ^oM49G1u`|1gyZgJ0> zky@PX3@n3WL71JDHayOlMS48>g+M+a!@Su(Z$##%r1npi zy@dGOWV06XQ48;s6xX}dG&;6jQWuXubBFhgOX}?j@J?7#Tx{uQqZ|uA2{=Z z7yuZVH6S;yz$^biQ*wtUc?B}aMUx^?N1 zotTyrCtYA%aq9hx8| z6qhAew`30t;s!cl8R7)R$5s2|?vRdI+1VYk3ew~*rJsQFc_EI1yq0FSj7DUK?5up_ zLrPw<4DDW-M~fqF_mI$ZvlfxNuxasGadGA@PegKDCr|u;sFm;^Y9;-LTJ8Tst(5;p z%d`_&;Dmb6QX)KOkqtG~BBdZJHFp3i#<|vwupas8a;Lq6^b~obG{mV^X^sbJXGuR? zMq^J0={N9kelAg}RaEEOFgnL2_Lmwpus?DW>XCmq|F*j`4&kV^GWC+y;OUsuu4|n1 z9I+k=f~Qlr9-g?)gq>rh8pQVQ)~;)O2YJtLrX%-GeS!3_1v16qUFq%}J0{1acv9N6 zPlz+2^_lqOdgBwjI1>rBPFYD0akg~gr8wj^s3{b=`kNbS9=G&@(q-nz3{IC9@uC|d zCdsjmvKay*lk?49zGTR0n`W<_l4-cF8qr^7hq+EaC2vM$6z4iUetbt?N3yb{Mz~Gj z;^Jc6G)|4ri0h#LIQxq8pYDB`xX3!|pZ4=nX{j=W%948^Lt?9mvJa8KZht&KWRZHzrj;N0%`oYVncGrf{|Gdh4_RVcib)KR9z#aHmRyf%_$RiRQKHWUYW*vdlY&L*wrUx zpfdc^J|Z>wY;lx);7E4t90 zlAH~7)*tMMd^-tkTL15L5oRkpH_vQ6J8Kp;3{PlqXmErCJGm$<)FZ2uL0)t{Ss5~1 zdWWTX^NUJ~5AC!}hcBfjBdrXjQi6_BYOYlA&>Xo3D<_A{HlFm4p<$x#LnM{-tc)yg zfmJU&xI{YEKHUhuK7Sg+jNiI>%7YOdTx z*5Oy{yeYH4?dMC4%jc6bzPn8>r89OW5OLj8Jl&pAaaU@9-^fv>CFp1&*qHV%&jGXFlVw-(j;V#gAQEgPtL#~clgRzTbv1dcjGfpaCi#58L~$s)z!?L zFzM+o0|e@Uj3nt^)1}Ki%jq?8Wp?Ov9Zu2Z2-Ws zniHjeIgj*PE12oO4%L#svg4Y-z*RC)H>ISPC{ra(s7ksvJp?M%@LZ-7adCdVVUmoJ ziE@k5Z2gq2Mx{miAB4)Zn`r3=ORK7>ex>0mU#s(pw~RM3^_F?B?$deA1|9aubEOWS z!`dK6mZ4Iu(Q`@IrB!N;_sEdy9Uy~Ud}5jz_}vjD@9>;OWqRc%fY~f7TMxM|57cp)k(a)0mM?1P8UW`K zqVt_Twm@1)p;s18W}~@e|2x1++;0yHTPtPuB;~9_xEwsvZBwU)OWXEHYm~0m*$D98 zx-o4FW2~tW5za(~Qw<50d{S1VX8I;y3^=#eYt|Lg$(R|Uv|ve178y~Vq!hO^l$4IJ zW>d*;eOof(`%Tx%xu*o*k?WxaB|8cJ^M(xR*Hg?v5GQI9tCXHjg+&ycqA)sVDbT+; zVQZ?n&)02Gm&@0sO0v=so8uh)<#vK>Za5?Kkl1{g#QE#69fq4JL&;2*)6WbEz2vgA zKiAoSsXqUFmqsS}?)V{?OqQ+`&lVub{@)(kE*m9rO;*uE<=ag0XPbDN39W3+2b!}; zk#f?4V3pm9VIj+>?ZMyK8q<&k>?cd_Qk=0FmbSsbT^LKoXRaJ@HsRYMq!;&}XeLR^ zNJMoA=%(huL@3}?#cA@m(Hj?6I``GV(RYOvXen2=HAx?=Ybjj-N#bX#Abwq9gr|d? zfGSy0mM(c@4V%y;itipZI3 zw=Qu(rxWqX?LF)zG#lkzHAklA=gX$1Ig6GPXs67S40kl5lDPvbJL9Fb%D)frttO_o zHJydblagg8LG~u|hL-f=X6vlAoLct|D3JYlXAd-0&an4)+O%kmj|_El&NE-D0Wxra#1xUpkW5 z+YY7Ee-qWx9RaOg*mAOl(wr<)>dqkLzZvbn6Z!w%Zj+hPdSt`H+&ti#(Z3kv)}?cw z0Hc0siJ&o@VXGoKzql~d8H!56Qg%joRt5hRhBPX!ZH)|841>)+IW}e;CEd{zgMeMM zRF$r>wlKTr1!cM&|DrD0a>*JN$5mBmNJ)Dhr~=wqjx)N^!`6t z6Jf!iJ9h3ctVc4W*Y97P5pX#YC7bO98QHQwmgUzenjZ1Y{STUj)xY=-=4SiQXV)m; zSX~-#NABELgL1+|F2BLPoin4f_t^B_t_&w;FR}C!7~ut%>@EFEm&^iHZ`aEHL3ByO z%#!17a%kHe@+t7j5kRv{?{7|X$^wGZfs&0U*=|Zo_TO=G2CC8y?mzR_gwV7ovvCsc ze7(*IiP=7I&Kt&OCgem%#>Iu15#D*r^hRY@bkW^&Q{=FAoH?D?!S}l^|9oa{vMMg6 zIaB>Ib<<}yQ99u)iD7(B$s{UAo)Tb|$jQ>HrWLu(#+*zgv`@@&a&6`oa`RL6S2K!a zmoH#pIDN(0H-emy_%#X{+MTVQaBlUSrAcMRMU~t;kUd_`IZKBaXQ9g}wro(ymM|WW zP$)}mxs9k}fP8=>C2zBbShv~FX^muV!egT}P#)3iVD`+9i8nXW2(9yKm*3QIRHlmb;E@gk_v@`V8I8PRI1mr^IDS zAdkOrM|$GT#)T{*Q?m;_L*yn(7vH(AGdY*N1t*cfjVw&=9GXLADRP9*i(5T@!*fPP zfZ;iylrC-pzUdCjAK)G4N#YUaICHiK_g9T?(lew>9-JMga*gfbX7F~Jn=E8ych+w+ zAl|HQvftp<~GjIr!U1`%T=~72lP_iFsRyJ}(CBTVPPf_XUWzL?+0MykJe~Z)t zGj%X+UGoSflZ0>G2=R0_kHB#H#e|#?Q$6ivUP6EA{d9P6>bPI;oW+GOmqfBn-8t1P z35FMW3#A9nk!7r$Vrthu-s27qb8c*#By<;`te*7tCKS#}HB3U0>YTW7`eEGGcA90B zoT&*7;bu_Ds^6SuK+#%Verb^Y<&?yCh%ZgU+#4xvAi9@^4(ab!D`x9Vaw|<2`)7g2 zEZ@$}FFa*#mOH&lscXI?p0l{J_gC#zv6N1^TDY@U&5fCo-a)Eq`9JIq%}gzHp5)?u z0nB9Fd|bXqA#06HZ?=4+T~6YdI%#T2RLNa8InWh&;U`N_8N^Im@xNKpOK$euB5f=- zUv`&E51f~sc)4XvFf%Xnbp{bTm)^=$zcWwy#WTA>>OPfBv83_)AAaDiKFLt|8Vpyl zDLrLeo;-oZ#KZrQH2!-x#%HG?mO15Ts3*QKsW?||+zmL}oYg)68?YH76~FGo zx4DTmXFO_NIUZBu>+97^Z6=Tg4^SG~SDpO7vO19G})XZmbc z6znO=sUT?{IHAUdQF03M%M$I7lo`DFQd+!e6s2*MreO}=mYiaA=BZMPruQ z?IoYCNbfI|E_5ZQ<=)blCVEcI&+LgvH}A~soj%KdV^T-qGjwPAEfVK;rqjb)-`_CZ zk#(a~+$>-3EAcjEU3$Vn&#=f`#&n0KCX{q>&baK?W^~dMEj@u50aNlzkI3oVJ50X( zbWU+Y&wJJhsy!Lifk_5V^Yx?BIiORc%jD8YLDy|Q2R}^LQ=VJ;5%SGWv)dnVlcMZU z9qO#z&h*U{+QZyE8B^+B(=@+ ziHoKvi-|}oBqiJT*FSp$2j_i;!x5dhEBCgsC35B*ylem)z~X20Jz&C)x0-QjKNhr5 z*=M}#@@2h*>O1+uP@V*H{AMeO%ZKCzKJE$B!g#j+psfTYdaO z61R*qm3<8jSE)IUX&vK1N-ZRyf{o$WS_6Rp|j0VuZM+@oIxg)A`5Y301hV7S9cDJXD>bGzE2 z@1hc^KoT%KvstgDV@$$2lB|&-(4=25;wp_PN(h<^86Kk%KGeZo_?>wCiU~Ld1y*zT zang_)KYqi6o=-{8B(+MarQ&o{#U-Af6i;MtpkYR<4F*SGL-T1g9-zFjuMSA9?qWZj#XJE7XMcj}+p7CBnEo#Q!s#lnI#FwzWG@<&+ zHIR`~>BQWs$pq)k!T1?~Lnaf;w#a%I@Daf#4usE|f^PhY>0DPDBqfYefcg%reN3p}Q z_uFPHD@^q!7Zl(uo>$$My?(oGu)`F8lh^bp5DwF5HBWrjjLdN7BCFgYB*T(|#3fwn z#jWtwvCb%KxReO(1vJ(g=1R2h zHP{Vls1+CF0)gTRQfZyL64@@+MR5lyj*%%T(>`b2WpawlWPyd7+&sDFwOGX#qo+$T zF(OO_A2^GWB?h$$-0|%LYKdtY?%~7e-Wd?@f>j0fx3K|Z`;T&EKyjUQpLWVD@Wtx> z+vn9%bNb}hI8z5Z?R`g)wQzMuhQwme&mAiaF*iR!n;-aY^2J%FnnAB-y9PP_%e5?O z19^kjGUjOgl2~25`k-|V^!^@ zk4U&TrGpdg?=&PQ&c@=Re5lrg1{~Qw+VFEg4=E;hvYXFOm$HZlFi49XP4wwRc2xjVHp^fNrc=2#2 zP0S%TrXw%r9o&avHBt-BvdK(Q)GwUX!@RZJ>Rr6Qy#Sg>6TH_<{Mq6ci5HUh|7j2g zy1DTlhMV>`kg$n_F(C?ZX)5O$yit{b8U#Z7PVgao*G!HuQTb(~r^@y5F%oj=zGKcv zg*+M~&VI9OH{Gf!8EWw6JT_i10(Jo1-`fHrypVoVdwheV=)~;Rr3F|Dz;qaICsDFk zTSecj5f2xeb|XLt;nl3?SAVYv{%}RmSsVK2&)~V!oGhCynYNJn-tmYi;qhq{&op~v z9OPe*nnNln!u1xtn7Fz`=mxNH)oOMDIIH^JN5`BnUw3%3N+lXzfY$hA9L zfZle_gHG$lNct-iG%5GZD8)%i%%|i#zXeW921=0%rBkIOlJu@PRoc9TDD}Fus8A3o z4oa_eCpS>0xs?9nr$Pm{F1Z8hSHone9s+|@ws8Lz)4GV{-=&7i01{;1rAByTSsOwd zk-=p!bxxa~dJ(*zIMUGL<=iXnRhXV-e%|idrYv19ri>958|;0f@WE%o};hl1;( z2~;6F#re}RRFl_vX4oxtMGd>-DGFKD^R{TX&FkAn5F1EoGZZRC43k1AJN_*s+aD$o z6}C^Sz-i-_7SV{I1mnE9p5CWFFulLo-ad?#)Qnnm&0NVXGKU(A(2lWp$ykc)Kr7CQ z=Tgwrc33l?=>0*#XWDb@EX`oZ!MShOtHoQ+H0hV@qvcAs9jK<|+2zO=QK1zNrn3*) ztOM92v&mWumH|N`;lXxLU@(!g#(q%gJ*aez3VF?qETV!aBrxO`z9+A8^>CMvsStO& z-sFa8KmsPHcjtzP zy9Qh=ue$0ghUr*!6`2DaMcQ#&Dn8{Np`$eii1CSIYl8$nM~yH*S9Kfp_R?^3#T+ zTs07Qy&t_TU5$9c($(i5F@or3z9jn^`$mAwtwbnqlc)A}SN=k_tVLnkmyF9}bPo{V z5NZKJWRYOT#O23hfJ<*p$HGtxDCPsipVKbh&r3)uJ_KWxHlLmyS@H<5MK8+x=BtzpXyG(C-wYgh;SxlDSQ06Gi!4GN;;30p(=7298-ilFS7#LVF z;^0v7kG(k)G$M&dj*8#`iA#3EbcW`4r9ChX$eKJ566t{&I&@KH2rGF12dU@S-2F(8 zGRKfaergAerDD+YxOcI`0b$6k%Ra>4R;Thme`H%S)}=kw8-RKzXdro*!3j2zk}yW@ zwjZ`Y^{Ddx;x{fRfJ4xAk%@8YRsDTr`y(pf^d0^kyd#naqs9+@yNBXd{Icuo8aXtO zhWs5eFw{YppD^V_Y;jG+_x)NJz)HYUb;B|e_7WyNTU_VPFFk>fx)DTK{lIt@w{AX> zX%)5|t5qmE42}}35UE~E3)gqE=ou5C6qDAMw98CLB(6s41%nNCK`?A-7{!} z?P=i6bet8LB=N!B0m1SMMf!e1s!OnO_h zcLkHxxedJoi1LkiS?U*SqV!OU26aC3P+4qEH41Al;gq9zjL%ezYhB{_rx+$SS`-Cqn8V!O{f#eNsBeZBR98JMM&RSM0b05$~Pg$HIqy7YQ^8D88*Q zNDxuhis1H(vR}Qvo0Xt?&Bl)4l6%tYD?BO~<)Mf#0H+<;IYf|`LS3ChNxG68V*T80 zK{D9eSn5O7x#TNF4~zgI6!|bzO~ZmVRXbolEh;{l1#7xdA7_XRq!YsG4X(75fq=PR zcWd%AnTXh==*o2P+tKlKhA9q~4%}A)V8!SOWJI@pNH){QjB(vN#9JNfLEIdXoqHk5 zTk}PO9P2eEO%uq$`eAIik7|wpA-IybVw2eiG5Q3;Vbf`-9}9(AR%zT}@;$4`oW$90 z)*_Cfmi#~jjzn1~2S|fcm<^CjV}!L&xRY1%v#B;^^{_o5zAD5Z5w=P2lCnTQ3SFPPWuhXcMW9` z9-jradQJ;wpMaN5Rj!L?BCjGI58cGW4#G_g{f1HKDkH{Vz?Hs6|bAarm=Z ze`J_1nK@Y}IS_W`5z7f1z7W4|K;8%QJgzQbg|ahgP}L@*pGpE1g#yn%srI@M4r0$u z0L~>Or1dzcY|H&;RQ2bohtm$E%$w)HLKWiaerR32-7(*f?QMX;8{`2d>vN8k!E>T> z5ma^ruYSNErV`1VQAy3aCGZ|y9`C|WE1du?*vQ_kD7^Na1kSq;s$(0Vtu)JK+huwUyX2)Ap=mM(N za$O9gaHudT%SX%@eZZ6e^a63B)hFb_DVPG}ql6ZGuuZP1Mi>ij%eGo>D$@E{8O9@M zl#sZ2&IPPXHI0uy|LXx?)WrH4kvz%r zl_A?w$8sh+%;67l5JymeoRLW=lP_Zy6Y`vB%e)Byw|{Dp4F{RWNH8y1v2`@Pw|Xi~ zVZD>@MAHD350p#ZkvJDwOBkRrUiQL7^b!Ss{?D~Y)BYhcyk1hWunfsgjUUpqwrAv; zX3!keD^fw3WrMDzX<+=RRoU7K31+j~v7X&0tF(2|GD<-g+45Le!C!#R9a8B!|12n+ zV{qRwMJNxg}0#?ga~uxIdJpB-^PM@Y>8XzAiO!b)u-ytrRB);q?QH(z`~*s^J0l zcO(DYL7yBNZ9~eyntW)j)X1WN5GZ7xF3=0?FBDcZx{am@nsrPOt8Bs&fd6_YK8!9O z9D|H0&|8GEip7DhC(?zQ%~)`oB6hvxP`$G9V<2dE*&_)E3wXa%5^qipv>#Mc7O8dwOA={I z29FP!-kZI7rH<@+-mAcDAo+%C+e%O`!NC*ZpAef;+KUH>v#NwI(gMA0-d;wpN6vCnNQNJU;->e7Z!iq%-6YCUu~B&2-$&HqSglrQxHa-9W*dQ z9rsegdt^v=>@lP;xTpdmdB`@pUtclR@%kPcd0ztPUC$Su^kap16_p*r4ir&t850|; z!Nu%P8UTewb6YQ71+DRf=h(}-r|^?rTjl5^EQ z!urTB{?SoUxquQuJ-_C%2bEV3Bf+4t(Sx!PLjd@hTat!U?0Ge#l&dDNNmt4MsAk_rv5Hw!_~!sxIzmzCLeg zmY_IG7%82ux}_0uq(zbSuaWtR|C_8IW;bdrBfE%;w~f%u2jro(q_T3O8A0Bfj3juW zik6}_#j5qK$UGzh%c@_-ElEq1VU}Re>YNxG*BeVS!Z);=Rd;zHg9r40G%}{huMqsr zCW~`Tpkq!^f;ZGM{*cmz=nS1V*m1qUD;U|ss}=QSPisrF!jW2FOhGV6z>_#%;z@2h znth#Of;f)2R@3bIT~b5bJltba4I&PdQGL-&iXelRAD2JhqBQj%tn>KK1JbB7Z5XTz z_ZeBp`eXl{&%R(kPuZnj>3y4yrcF(567;ds=Z5B-=OKU}XS(Br2N<@uc);T7HF_>q z*c!yfw||~YzkVGsgA7JMGQHU+8xjiJH`Gs8TlBtuSoi5^mNiDM`ble0!(an8s$L@HOqH^=mk5kVYX<%T~%{J1tB? zY|tYJcr^a+aB%v01{(|`3aZ2GGlaZ|)?~V1^>B|_5l1gl5r3wvsAf*BRZm84J!Ffp znIp!jl{Ke4<|G9@2ZD-!2XS4r*>^?I8EDa_(2SMyE6#Z^ zV0$6zzLPDgQT*i{phZq6_Dk`rye$FAOu4Quu;_D#&~Js4shKR;u%?tu!j` zdg`f&l;vyTK(t>&9wDlP!m@v#ZVe<=Ar#ea4e3}Zx;4O&`?o|)Rf8}%@d1+}W43Sg zaZ5R7Ti|E}R=-DL2v3}3G;yi;>-*VebG`_Hl?yv}h>gz4bqR$a{ghi5p}Crg#EDoi z1}Kt_3R5S1i$bJ=D~=75`-^Od`#6TO>S|Hw3hNH>K5c4Y>G2&!c^{UgCW-eHBne+t zwTsRkWe6r}dDx>+lIl~l@plH!*?yVUDm69Uy=1>T_OxGo~eV!fsIDZjmDB@70ivCCJdCukyq57J?R z@{k6~2LZwxL*Z|XC5pEQT+{Sy2U{ECiAZOn;<%ORRF7Rk7;$ggEXH>-0HdX@y3e6! zy9GhFDl9Z_(R8b8`4QBuW2_y&{`N2%v3|I_BnM5WB{dU|?=*LvoT4)}I5*8N>A(Qq zZU*w>-{N{{XHaycAjD((~mW0euKM zZa`N_j77|l*)6hO@S>Cj{yf314TD z&e6LgTAO>jGWpjw78c+2{BFQd&Ll#>TyK%UVa&zQp8v4ITYjW}s*SisOx9qZeaLR_ zxEP7D&nQ)kC_Uk!I?9alW=SQ3SPQP$l6P%42ZjhGyz{jMKqlW?(Zu-VA(oq2v=&JD za(vk`E5+9^pw%vwB>oK`;*6}>@BjSDaeJ@`aon?8uVS+-Xf}JrDPl<4+`IK2Np~D9 zaKW*~8$%&SGFjTsNpHK^!O8t(vmJj~V<6mkOZGwyi1JApJ|-bn2m3&^X~{pHpn26Q z6ZrHLe~RQ}=V6`>Kirh!+Z~rjm1?7pM+uE=+)aWmRa?e4o7MPkf*RV4=OT)w&lz>S zyl|6;K0a=(xZxEo(O?I&@zGp#?2&bG(!1ZQM6ZV-One`)Z;N3HGZl|3L*B^4U-Z0Cl0UE+5b(o z8?*Q=l^d=?$17xp;kWBC7%WNcCernq1+6XlqD%ED1{@C$l2+Dby@k%4)JA(GL45s` z?~sEnwS~%4i2Km0GBZ443F!is6}z!|5yF5(@sB`mXMic8;oxLLYUPR>&q-6(Ee(1j zHzc%_H{sW7{-#mhaAJ8%N1rZFhVbsZ`~h(@zcP_Fa=zff>Zy{P^0{Lv37%|ZpZAW6 zAYP=+Sr2U{olhH$H~USe!=`i8RIn`#|9@MwC?FLNhkY)sSi7PNz*r)*eNe1+V3Z)% zDn8!-OQy-6-;W2}0QJx;6;G`Qx{(v!698fOMZ`ScS?g#4amJ|)jKm0%@*Mfq&6ad%ga{5 z$3QoJEBI)mp#xwZjbM3>JRWlRijQ=~hRYcfGeCqfsp+{e(si24+ECrPeUf!H<~TZpb( zPx)KJv8#|_N=;rAvNT@iUzy00t*`q|{o~z7*Hu=5`n&{Y75y@P;A|EZEz`TY<1r0{ z&yA@-I0je%{KG()pF>+!WDW+M7<3_3(-ta@6BWCky& z*E-?_tY-8l0m4F*UXRZ)=t#Ja`gC22|KMED{#ap+-95f~I6hx(##i_g;Bx%?k^K9| zhuISQ&JAS$_S^XACmB`kX*Yf3M&%>PP#07AB%0^JpaQ^RM12oP@cnNd5G6ALJAa4& z`2zo&2T?bf$C&0K)clXPw@BKK?(}T46hX@esDD`9fBU>zR*Cl}P7s1>Vw+TK+!n+M z=ZqhUQiNRh54-C{13QMr%0^zsN4O$T~keGo(1fVmd2-JDjr|Y5&pzF;;NU z*lk3sARCT4gxBw#>gA|?IC|Gd3}fPrPiXa+xEwVDGw2J8=zU$n!J7RC8%lzPRYxtF zoxfvP`(c6I%%GU4)-G>mU&mX{AUS{c+eWm&$I(o6_Ex0B@*qV*o*^6(}n zw#>!W*gzBqCpU8vk!JWov56z*KEzAJQNG&jZXQD2^(M_mf|(K zMmU`&zY_5T!VgDB*_G~^peao`GX^8D5wZY4pPR&h6RT>2dhkRjn8S#|IPszG$l4Cw z;vT`=&;hO?mmw0^a5Tjr2`(bXXKhdMuMA98 zO*vF+429H1^s1$l`4a&yr*Zd76d-i90Z>aEnqp!cUgK<-Q;c?K;SnX#rCz4pS66Nh zc>>ADxDk=^u9DGOoby?=$R@@~twtz#p1nntx_OOG&!D6%Y34>Rw_aswYtT^IlID6> zSUS6!FoW>V52ITf-Iy}2pRp>ECeCdG2v(%U!rA4ivPBbHbmVj&Lk5fSX8ez*&GKOl zp7L!?F`F%jJK;3=!$c){t+PoV8xEP52eKs;cf7&v7hX4LG5+%sGTV`wRZdRgZ9+7D z2Y^9#7;!nGX4x99RXvtq@Q@#s>quusycp>Rgtmx7)Oe#Ka^-@oTB6g7awC?`CQ#~W z&fYkfUBHFHq>4$z3AAN=5tjUWHDBJ z!@#J z8!+rNKh+gvfEtTsH<8riGk_&OAes#eH~M@oKa(~!OrbuBrce{7ThMqse*3tbvQ=Mb zH~2jZZrBXJUQfPR1RY04GVTFMV@cOu{(L+pQAWI9V1=p?+a;0DDVbLtGzi4Lkrw|O zv8wEFZ&-1J|3qGT(U+`nhfzuwDzw87w z&d?aJzQwBR(LBc-F(*=QqOj|9NLHnmm80!kqPoOQVmPnwzZ=3yVi?Q-F2(8NXm7G!7z*5hc zoPt61e)bLVpl;UY4Y!GMRPRlPKZn`0_=NqH8K3*h7<>fckk8w@(IRn0e&bP@MA+R{ zbF!Y1=-`qFKuOU!851=;@eejj23POv@(5nQ_ofMM7@(LO7OxNnci)J@Exk-WDx7;3 zc?an1AF>a5pwrF@01UM|tpE?(r60br)vjJwB&e?)ZX|Pu%Btn%^&w|X3dgm zbZTp6wMXpwWMZum7S&j|x~^kAYaZdLoQamZw8xRSux-u4uexU;7`}SVKE^~DonM+A z5iTj~Qi$eKK+aHAA91(ai=HkMDZnikz!hL2nfz>vE)t;CGy$a7GWWw@iOT{L_bu*O za-rZSbqLZUvD8oUWny4LveK*B{sc9xdA8*!LGFullqGtxkOI0@4NzbqNkIR{3S3lY zDaXT~Tz`F}bP(fw1tQU=?Lfp!cADto^Xbp0&+Rd#-R7w>+i>{_PGTm*#7s52S_&q> zbQ~U?y+i>A$)V9p5rCw}U3BitH(E&I&pXbRYv^Vg*6L#H-P=pli1phi@SH#;+!$e5 zV}`M$9p0qF_&+Nn!0^Ccb$XRJ^X3!g_}ywRp1oCNa0)WKzwStiJ0z zHShG}!7{bZoqqpvHYi#u{Df(jaFx2sntGeoUq!^@%CuRgW=01-0|`zW^?5@cz&UR? z4QToRZycvhF5l@|Y-A(?;hXXOe94ZgGJFJfQ9or60DeU%7Ou>-e@N$pf@*^~OY;ul zB-NhS1H+8gYCKGTM7<0L)eI6;y7on&`3wJa;SyG{M#W|_&C@`$E>*6N+(@h)>Yt8A zrcaWinpZ5RXs4ARnl!Y*qo!@R@-q&Hic|Hm4o)-=GUOYBZD`?WAlM0^%np~~zCE%u z2NPxk<51s*dsCEcor-mMiIZq@xqWU^pQJt5fIuNd>9#_gqiK=zdUm(=v3UjV=sk+N zlu0s#WL6;#ji&TKEM5Te3Zo9Gl-ZXYWS8 z>(EUcV%$w5%`~78TwsF{)C2^`WBWcHcs8?Fo;0%K$;PD)8Jn^pIbebei`NTyy0_L! zG9>2xrBSb1d2_*aVWyKJ$U;^wTM$WP>pO>Wy7e*V;h*(~dmm;vYvduHa$!W_{Z3L;(PzsTCo+4gFVi$bOJA!2_~OnY&vdDoc<+Z%}Ncx%|RvRWmZt>sefR^J0X53<= z#CXes;*RF#T~w{T#%tZoEHiC4V{+p#sDx#Qppg1+YW54ETgTN#2Z_ZNP1)ht3fD{M z1UoL&UPL`cfppd07I%tBF1XW97M$kU#vR6)vi-L}oIxr>!vVPAyQA&|4VJcCjFb<- z;X>`Yb0be(Vj3ZCcz_HfKVBTNw}SQ9P<&Yqng)WJv;%;{r`zxo5!2q~QYM+5pVjNf zXN2_S{+AK~60$RVBeek@f`x!t1W5$ewaG#Q1S32i;&S2_Oh5~3**vc6 z80Twv?_m(Y0w4{-K;tXz{ds&WX<8g(rP?I(T%mm3R?f5UlmsOLMJ$E5xsggTn;=IE zHzgwrL#>a%yTyn*2rCPf!X!5IjopJnDFfMD`6Wp=wY17Wn~27eaHBE|@w?x=d3czK z#pHq6UOTVOd3nV)tpbMENVuy}CSL$>2vO6ZbGlEQD9ON1apK;f#l_fo4H+bUS>d4V zvGOhxwI(C#zcijGPzRFx91}VvTvJmZajNi|y@Lg((!w0UG(%A7I-^$?dy>fc9`A0h zAXLgV*(K?kU;u06BVWDRA9SW1A(_S3L(q*H0wqZmR|Ycb8HPSN{7@c_i*Jm^8~bFC zor-JuK@Y`-9rR+Fc3_q`#Hx(HBR+(^!v}6ww};D$U7*{;wS~q0y~m-_`;&kWia;U| zN@q)|yz|lYi5;jc0SoSwYlz;ikMSDGn^@!Ti8L8Cq#mTt=ve&_gC>Go?;a$5=dKTR z^Iyb0Tt8S=((O>D8|)WWph;Z#wFLRwZ&oMgSob`Pwju zO_3v-KwR8c&6#18R5qgw^_M#l$6W!$!D2I}kppy$$LY9WAntl}225cf-ny=N{U@R( zcaS33I3TR9uYgj7#o2ZH-C>({r00gRgY-qQ(b@6-`%jh64w&?1E$YmLfrj)`fW6%je?;Cn|cNd>O4XiklfKEFgP6S(G86tJq#Kt)&mbt zKQ3P*{#o76USr-JmJmo4sMm=gjlrAgl`9qN&TH~`aS#v8E2X}%OA$qTeBa#(@}u4unf`@kE$d8TlM-a zhfqMSaD)j2su*C_$OHzs@mt66(D!a{nW=xk#2jR=^6KqG48UoDj8}{;X zXsmwz^SXP;^vt_^Zr9jXt+29C`hz*{xWFC^i}a*~(zH&POlCf^M}ga!d(WEGC=%Oh zrVrl&n{FUO9jk_U;C64l7DBA$G7GbgqssAwNRiVPTjpuMAJRn7-@T)0AMryBR90If zYo>friP_mHnkEJDU?#lZ=h~TO$)wtbs0EP_3$G`cEx_>ZNTfz`uvYQ2=dS&pW^0Xs z=YO)#Ex4!z>RDe%*4uU8E?}V|*G<8cE*==yPpbDOGyQ4aKC38VpG8qOPw+`X6vV-} zJ$dK(W;`Yza#*+@G(#7_V2o0spe#frE}Z~Fs&Dy2s>xu0M%meV{0SfguGM{*I-;o3;|4slY8~R zw$oeA87z8~V}y_$A3xj}#oEo_jibg2OtAMchH2dK#Xfn=8x$zhLZ&h$GbUfb_7*D%_ z6~libhsv3@Q|I?jZXVazUX4L7LKWSd-;a*}Z?;~U53MqHYsO~|=LBe%_hcg>+QHWUbbkuEe16^^7(z$v-?CuTA`g+?}P`b4!_NCwQO zA+8ytkbw`@!2~qYvE|xqZ{{m0n>5v?;dJJrlAN~v(M{K8&L~!&!;M=On2972Q`P^B zQ`Iy&>7`c*A|W2?pP4Q_OLiEi-%5dahI> zl`!#faD?7pX$$z@-E5{CB(An7JvR31;Vl~k_nL_Y8Q9K#d=~)24k$p)4Vc0(>j=va zP9RD4D>Nyr8`p-01|weTKvTknoJTe0+K>$ijF^nEE8M4YBDz9B;VY;I#;ewLi&vAX z$=60SYrZ&mU)TbnRBLl$4b8wjD0ZCVzjc@oG}rcM>U|WFa6*dV|0e5)*^LJH5v5QD zW)&S(Fl-so5W?XBwY+}{*&)-`s{&o=LNYrRE>e4O9=UAkB;7%531+fiTEmSY2>VDy z-`z$qX(KIM>`wz(6C%Q#1ZW<5N5-?+(^`7LpDmO24u>S;w}z})Mgts}qTuv~Sf~~h z4T~+%AE6pp9}F-!JKu1h_-MIZe;X|)pYCU2jL_gTeAOCUW=iHAT1H^D!t#Vy#eD-|`iRp(hCl(W0k1%*rriBv926n1k&wpi`yk1Wj zTKEytC|(ugGDS*tR)zO)kf@v4pO4ZD*eS~?1P(#zLYynx_Oi2Y`c}74K%S}pxFQbY zfs=WMw^TY9@ULcqJf{zfZXzRav>QSF*pV?{BB0R{59`S!;;2A7X0g*O4_M{XQ4%B8FqUW_=iVeiT&w zJa;o3v4ok`u4as+lO5mrbzZE|zS`bznjskr!Y+VbIl{JJG1jo!TqhnE$0vv_$>OM| zd_D}sBrX{#FT}0{UF}cV5ux$i%8zXWY}=Z#K_Up0OYzGE4mu_d3Zy|;@3u2+#K}^>_0<^4^=%hDpp(aC?`OmDHBSSF>+>q zo?j$Jz+(#9GTf-R%nrS}82|1BspSBVSuzt`p0Cw_V}h0sH7Qt^o=ji@+tDbNu?r6$r@v6*m92~s%vnhEdesy( zod7JC8>^vY_xsEQr5{ky$C$L)%+`(M^Pu@J+91+f)6`N6X4xfFwHd`&VP}x0!f|Z2 zn}Z?tSqbBkL}l3?HUzpvB8&g7Nzvh{{D7OYI7VE%*$Xs2H6>OaXnQkSoJh8=fl3exawvK zY{CV$=t{<~F%}WGcs!lW?`>OGs*u+F!RcpKCNeA72YZ@NPtu(M9#;)W2FKy+rMzRC zngt-+$Z5H$=cNicEWwK#(V5;m{?t+k-ALPCH|RTC)=1ls;abHXf1Jar_&n%R9EcQF zw0hbg>Xy%Fwim-E7-P;!9SmwX%YcF4`$E`@b;YvZ?dJZXMkVng63$PMxhQ9`SdLT{ zkPBSgi8qR)t0ZbCG82r^{Rl-OoPA*4GREN@6N7I&Kt ziQ{W=<#tQuWQF4|cN4cg1s~#nu4B`uHT!0P0PAC{{L?AiV`ml;gHbjdZU9RtQFY>K zy5BZy3}}`aho8P}XW0IYCMh>W>;8k76di;uxQm>k4jpoRdt@Iz&_`De9}|py1`lpmLb)+r7el+=<1nR0 zK~c-C$~3B1{u{T#N_SCR9a-jW8+I3W79J@>62rBCH@ zpp8?v5MW;1a^jY@vf-8e`&6u@8wQTAK$Af%{vB&nbz^?0)$tHdXIk|PdgpvJ{~DF` zY2BI_uP3;Z`4XH@m=uY|P>8No_@DkqqRdd7tB8-y{INN~4(E3^`LtQxKW?>Is*=hV@uCsb ztkRb?8uRr*4RN6RmR`^~!n!t|0c5)2u-E{hiM+YcFli6FT(H2o!4W2Uj@PS|W&k1+ z9X}m--h3p9$MxvCv$^%aL=a4uKOQQm~I-r;9~+`|DhOv8JXpN2e8CgeHy;RuC z#3$^T6R>B94_JjgWjZ@y&?MNz%@XKr-P*J0V<3XS=pdx&G zfW1TS%jhZAoEkP{AWn8oR8sK|+I#Uq6fZ$1G!Ng^4%Qsqje%9LH(*Y){TDK6FXL@Y znTSFaIm7C-mN5cLO-Y{{+)-q6KE$kSOC~j7$V$Ryb+Vbw{&*POi%%ux`wIUKSD!>8 z>JAUz5o#~tHJd^M|1C-echCRU(wHrFD}DdL%yiQ5*w~A({E{v`YQK2w)sTddq{jd@ zrCSztC(gwSWokX%R%bqVfz?7-0Z9KOCO-!pm9V2l9!tkgreI=w8K(PtuS5nm%YuTO(m~H^q_g zKI)1)&JzJKJf_7nO$6QHr6g|TR->`k$7Ck-gd=3KXM_Gexn83TSJ)#qHeSOx<6=L zJQar@Wq|{r2RjYyJ6o{9-~`*Qw&O2roWpoK$D}lJ<#OYJld_hs7yKbDR{|%T)_b{6 z$7k00bq>#QB28fDAMOVu{ND@v4=f7)QyM1bg<(X))~%mj;Z4erw!p?PE5$@BKDup9 zp$}_03lBe713ekP#&Rg1@~PpZUTXSlz)3WzePB{l%a*PR{vE>7!(&rw!G^+X^mPAEx zn=SskhosX^b@8Z)mbkJH@@;--D&Y2k3TgygZB$?|@dFk3Flrv3!80wjzbCj2oLSn} zW8}3ZDkezi3eN~2iqj%7iw}0pneM0)$6QZx{I)NlUu7V za5^2lEci#r&mlGG3X82PcrgvEaz-ezfBB zW`;ph`>Z&N-igPj2hGQD~Mm90xr*#3{VBbRmGL8MO6jsV z+$b`6VojkY1lq3432p2QLwE({+xMQJm&jht*XK;?sK6)jV!=Vi>vox!6Ez1&>Co}{-f0V;hI&eL39;YqPI`aw5lZLn4bL(#UA&nnNYc=beUi#5Pr zItE(2dJ1HpBa4wG~Ynm*FSXoRxihbcc@2moO~Qio8amXq{b z`+^odd%2J!RZ`c*uO2;oo|(HIj@?j{@#OKVjw=N6yqUrMtiGjp6loAxID2^+I@1~**q4ZqQfR89H*cZEv#-FVtt`2eZTEYw2*K?ds9xzSiX0)iWe40$}0SWLDZtZD?Lql6)h7GNGsg=mp6o7)n z%d3bxoe)ufqzmd5SBFWUSP8#n`oTMOItpQN;A;)<61Lfvl6h#o#tE&Q^J}@1J&r(2mf;g(!aitZqV8qLWWl9`p zEjI~7IR?Kg1c)&6gqg>Z4u|ONTCkO!KqdCU6Gann(w{fpL2IkYzPjayhNbq>2c>Y} zK8-P+3Vj=8%^8`$Zk8}f&A~nj0%y^#GZuf|eqnlcK zAumvO0H9D0b6jROAk2zSF0zHwhCrp*QUn!09=$=$w(lMX4V{Li(a@0%`~06;Fqa91 zNfwoG^FSGCmRMunMPBR^B6(Aw(2w5y;S<*X1*qGa5Eu-wrf4z8&_5&x8wz=Y@dr(~hOtRjKP5=0)+%czXB8m@}0_ z;*68s-{(VT`q?h0f5Y~K4(O*=YPDzew@PER(5k?(Bkd=D%x^YJ`4mqhr}Xx zJ{d|>xxkC=WM!Sw2 zWtZock6<9UUC(vIQv4j1C{S|Nxy^X!7ie$RAHM?(KxH$9B;fW8w5CzB7$J^!-Tgi8nrla<> zD-WakW`o$FusAtR^RdW19cmt5W`3SQgkwZ&>j8hrRAEXE=`?zoMy9|3u$0-UJtK_jsU?Ne37RO!sR($0^UZf;Q!3}c^sjevtmeT8v6}62=0awIhjEk({I7k(93``-jO~J> zVVUQ;6*)p7=ELOMY<)GIpk8^GHx(ZAIC%hU!;AfL;@qk?&EFz4hqsM5G`5+dv3eUz zn0aYYsCGW0s`zSJx_Kob}PB~G^bw83bJFx1x zX?^Xr0QHLvQCfMeKkaSwU~oSPJD9WhzD(9PKFOVYAr1xSfMY>?gmV%_jkg5)EXuAv z;!)38l=3uD(8)T1PzGo)Y&yo>fv01ryu@Sa?v!KbEMhf|#xFHxiNBYsL*kO=p-XJ- zySRFzA|(2s8qpo5ff4H^h7+~*07DK!GjC=lv$VPDNcse33$1?GK%Ux>&aya#>f&=o zrZBEtWW0z|fh)~E!Nv6=) z0J#adb?syOIv0FAs20Y5t@9=D6n4ysnQ#_6*m?V@0OPNaQkh`^DW?^W?`O-=0@%=# ze>#P0EI*kD!@{e4|NC6j=P2CaHP&A-|FokVs*g(yxH6Psey*z8=nWe=4FZZdh3 z&U2S6gdJG!QnEWK;&VPb1=!m#^7Z}=hNg~y=l-xhM`EeFyozELGWWm&if>^7LvDNc z(+O`VKEJG$zJewqTt6o!EW={4akwaqYx(NlG5(HXCACV)kH=#OdE)0k8=8K?Oza-? ziPXk47)vK;0WrkZJ-X$Vf(@5IQo?<01)}+#BUf&OxkSEb^p4H$Xr4m*6dPI1M59{@ z+H(njd(J(3v@3#&&ap%D>)36k`EBE-lwSRUALGAKUv*`w z?QL!h8GtHml(UMvBUx$s>w_;ie~D`0ujPiML2^G9l2^B_82?+IQdvU=hYleqvu3II%t$saRy z4fCk|&)RQ$_RSPAg?JNWTP}=3Spdo)_?j>PU5KKh`E!_lJZk882vs5Ne25JM-!v-< z=^3d330+^q7aXUsx}UwCJh0{KYJ2nXackS`Yc4z#dO|8Z&u@nkS?v=tQXDeU%rk3n zwVw%nDWh9w_mk}$1K=1Fs-#ey{Ahwxn5>I`snr)bOH#gbMs~X87Mfb<@^0LS>inCf zdKB|p)(yi@z>?G%6{#8!#5ag}IxjcaV>8{3S4-ynx0Cr2JA#!#Yb5~C-I=Y{vm=!7 zyYKFhvzo2hnhAf;#82k*p4;>ZG_MU@vMyCVy(MTdzvagwB$1)Mx0bXh>`f8dv7uJJ z%QLM3H3XDH=we`5%K=I&TIS}uS#+p#wtI-;rmueUU&q)+5WGgT%~4`v@5Lp-!5TK` zibm3rA-*T77?0vk9%-87UE}j_Ne?$CdE4#@G`29FNK{UrBAA^)+s1a(1ajsSf=c02 zxwpan!x|Q)3f&p*DaG!Gxiy?-6xE?488pPj;Zh=k2vCy5UFi=m=|Zh|9ZhyhG_$LO z(w-bDcO0?`j;s~Le=&FID)+t-^oiS3c%~KDrQ3GP!GAag04Js6R{5|CE|J5zs$DVD zN2u5t0{;b*=6X)#E&YT{u@p1MzjJ8n3{0Ji`PZ2a9xZ_v&OAu$uYjS69EDPB>ye%A zn%_A;mi2}gWt)(ScAB4=j~3F!7RV@t)ALxd0lH#3pmQg-Yw=+HIi4I^q>G+I)}!{o zf8xD8)vl~E#Kp#HcQ$YU{ zr8WisG{}OrFu|CBacAKr;{M>rGkJhfz#rzRPq|MsVnBJZp*6l@$VsN=F-l*DV{)l1 z_&dk1!?@~48_)dPZ{wq%*m*?Xmk2!dW=BflMA3O5EbWT}u^kDIb==TKmkMAOAoC6x zUcwYMP!;h)NTwR~@kVx*^0x?Vo;$=w7`MniUuf@Jw?JG@R6Q;pB9|R`n>fJsum2ng zZ;9e^c!y`I%Aykj9fuS_Ii(vz4V3SR8G=ukI`j$ir6!2`L`1(}m?IJt_%oI*x1(Y6 z3Lh0g|IY1Jn?)3*kc8dz=NOy9u!y6qFw7cVCT_NAkz~dr?<=Us+ z$*1|#fYZ4*b4(OMB3_12gO7H*Lc9~kBJ)j~4a`BrGgLL$`W~tplE>~7uZdA==Y?Bx zoQWb)Ggr)~FOV5UK77UlSjAl-hgrLd1d3LW6@|Nnp-@s3@mm@LinwGJqAkdagYmA@ zwDb&;{0r@E8*hw8HP>_b7zeCJVJKW8`4$X08>g9HPif6R5wprcom1c=2cf?n1*}I% zM!rQB#wA+y{Brc?rrD;77_Lg5`!F~IrF3u~Fz?_q*pC=a2hC;Lo0|K!RdbuwMxHLp z?$JOi%omIQ*Vpd-_uB||S_Yf0jv0)bZI}mOe|&z6<4%UI!~c`HQJKMhOI46WD~gBw zI81COZw*SqWW!*LQQ7b&4He~%2=p0MWnW1XM_@@s|EIzj@g0Htnq%AKm%u|;$MQfu zs!=puKTCJ?B~O!k2Pm(qQ;Bs7%>|UDXk) z-^p&{sl&WPQJLNAA^SW^w184tE9T3m70TOfJ;U#aEZvMzl*Q#2m=S)w-$J@c(V~DG z7l0chKl)h&`-&8-VZ=_y>_oLkZnVLHV57tGGCg*0+G2hE6`nKHQ#nytC^&UDFdQvG zxSd_!Ny_Ev9~hOlS51;%*bR2aF^9wd=x?jmk0GzIte^<4Hf;M$JRB3p$vqq%Ta#RToHSdTLb> zrR`4pgq&Ahh>}A}cB93mN5=CPY01H~?6~*pFOLf222Bnyvybj7DYDFl5CU_5fIn#( zRA5{4O#WL=k$<0UzHPR%h1ND)jc7Uc>z6x4d2rzcQkALNakQo<FIDv2Xp7fW5V$tN4#PaZb2 zn``b)64Vo2-qB`fZwH=lj^{cWbGP0{3;zCuntQbZ0tqS!OnBjNWPV!3`JNW`z3y0Pz?mX5l-nTY&~DUcKup zMG9!?mW4{CamKm>yk%%IJ{zA)V3KSW1{Ophii=O)Jp76@n7|SZSb*`+YL4|l z2wMDX#VWG~cW{7=bxbHb6+#&rVPJ?ZnZ}M#U4p|vNrItLM-W|l7PQvI-?yRFjc~dF z`|WD_xH0C|E94A7DV(o1wdTOlF_XS%lSY1De-Hu6Y$D^}rgULRR-l8GGRF}rEncsC zKnwa&X&~%rQ@Zr*o`MvG>30}(Wb@;aI*!k>NbaQ$JIrnSpOrEZryuyderYgz9LMNJ z{VTvTln>Nt?7HL{0%r&*8+!gY{okuV;b3u9T3Tpj}FR@~xa zs-ag;>5S`w$%iX7zo5KUghN{ z3~rmvdNOE3`9l?Oco{9qEr#mI&0Yy*a)4Yerk1fHF5L#SCcG8=5yzvsr_$`PEk3eP zZkLVDOC(MW@a=i$RlinYU8LT+&X#F9X{~h1o)yJAcSm!qD~w2e;w;+8mX9pT?Tb&M z7z_p}4ngYiYMMyTV%E?@XAZ^X!8N+E_{#L9e-g#6zk$1cdcJW)>8rcd7v}P`G}0be z4vww4Nmns9LC~tvt|t6(q8~i~jursN_GdoFp#!RMu9dyk{%!}~WEsN*4S2hv+Syjk`mcrg7Q}E|uN-#7v?ba>8l(xkvyQ>?l3Iym%YS8;o7lx%zPq zK~|GYF3IkeT#aS%8TQRiM1%O^?f;h9{B#QVZV&84Z^c0J!keKJekZ`Lzp5r1hwE=7 zTt^S^!+bWK$xdwa)Tm;Ow?T9+g+_7p9zDgPwn@_jB-(C7ZadD;xM0vsuZU+n@F5lt zGe-fLOD$gu-}nygV?Y6QF;%C-Tr#^BdLObh*ggvjG&Z~zwX|JSB%MQ}2Erd_597mA zqz|!ROmZYCIv2y{`OIEw&wE&-!cpb&?3zh%@pYJM$07jN8!-?`>zT#d5iL9}9){?c zSWXWt`|xLMRtYr3F#mU72Otwzf*uJG$yfbF1u&rh9(m90w+H7E{8v1;0c~gvXuoo~ zo8ze3fcAR6>?Ppd82#@LST(D4{D9)ql3+!a1hdfTW?JhRIHbyQjak+^w!4E6cUtKi z3&sV);smNdqM4ZemZXLbdK@UDd9_2u^z9g4umhCV4?)IUWEwvWYX#s-KL+8~J>7nxG zxXzw9%W!4YQv%9;m)xz4W)rF*aMi_dlX^XS5TiH^XVa7s~2NE6T zni8etAvTH-pJ&^1PJcVZkRwKrhz)dD4|2DQ*>ZdS8%ln`4mggYOWWXLeW}ljl}KJK zmJY%xwHdE;ro?qGLS#t}NfK}EjdRTq#)c-%!k`n%p@%rr1#4RHUXpk7K?p9Bk1F%) zZ?s0l5Cv<(FgKoGpI;vT_DROg^vlRQ#BEQFn@g`ijxzw40GTRd;`Pm=yq&&dQQDF5 z7fllZ;(~)b%^1QtzMI`c*+oX(hb9wQYAs`GS6j30aas-siRv^q*76*?XVTx zR>0F^b7q{Woy?U}L8ZtE`zsMl6_6n%c|k=|JSJq(H0*O371tW%BAm9D84SQ(#!P5V zl~;aT-qN}#=^VVG%r&<34W{J?812Y8x>tVnh>+%XGKC$4{4(8zzOD1TQ%lOUIA>GH ziZXUppJrrM4|GU8j0R}ycoXsIGGt>g)FpyZFH3A0_=6QCcJ>V2S{)^>Of)i^i(iIC zv{EtpF1EAJtM#`!q=y92Th~XVy(~V2TH#i*Ky^Akrl8h5$6X(J5H-%n$xVEdLE!Eg zaO+6`;!-bkkm_b@R4fF7hhC zngyuJp?8GhzqM@_drrKy6AIU@U;~Em#_SHc>0SyI+1d`4T55IU{!|&$7sv$| zpOf`^@(nbf$$YzMSorZ_af}tysPVH!@bc&5aTr-<@rb2U%2@<5eYrV^ip8n1@8%+6 zXG%G_4P=@x7hu3S*&B?O!@h@YG+{0Zq(ZL5$2$?Ag*W&i@AmAE**D};7Y~*Kw~L5P zT{RHSd;szQ?fD7j%*C2XY6-kI)NRW=FQ<0ZlDaO2$ij%7J!dAO6&yDo-8_ZxsW7gw zJn{YI@qOYTvt><|IB;~5;hs2#2AUqj1dGfC)2D?jFIiciDW1MU;6=E@9owdpsK^|H z?fMy9S7r>3N;g|MrQ6X%gm(Ez;{EUjpPXaP6H=2qiDfn+4+?$Lx>!v6RA-ZyjrxGZ@J{a_0(q@KENw!mbL<9pI0eLXW&^)h zt%AHnKi+J@S={^pF<~zBIYV=r4hiyuT{B~KnB;ZH480GfMtC=kMwy~QXmf^+SQa0a zm2S5(B{Vq?g9h>9`8-!>jte+C#k{B-bZjXdEWxNKB+5cbZ?elIVm6T*D&U=_xr92A6rW#h3(}X%TrK({ zJ*9!}pM#?b0@&v>O!|Bn7LCmW=trC_Ej+q%RAYRSSSpF@g+rh zz2{{bST40m(j%J(+V!o2w8cCX61)p9WE`)x~he&|jChm*AUoYwMoBH6uQcG&kiM!S&e!k%%+-~Z;=uJpw( z9;QJ}->-V6)%>*vCXqACnwSm-L?j=PrG}!ft@+So?`{wn=g`Q0abbFE3O@0{QC#5S z6y`oX9qBe|gr~d9gE~3aXhKY~$2-d)SbDD|%)o>R;$wB}8hhYN^DrYuAtUIxj2VI) z1@fpAlFcG^&n$Rs$2A3#yBT9-FiMne>gw%c3&s1t#EJYgd|@cEpur4>(YBxeP1X;y z8wF;Bna=o2W*z^U(qeHfva$?DjEfaq<)!h921jq__xJnmn7`UCXXHBkJ#8s|R>=>U zY7fHNE`CrNCFO8az`<+-TaG->OzdJpG&tK#*BJaDY?@#OoDJVMt46Z{!Mgr0H7#U8 zFlV7!l23%60$I&N!xe>Y+kKNnM4Lxr^m&?)b*=VC zW;V0#(~+Mc%$^98p!kY7nTk6}H8x78HHWnFM1`3cRF;Cx=W!^?jJmD=`XSXt@X4CX z!4|8H-!y?@+#Gv(aeV%vL-QE}3f%N1|2pr>8K0A4y0-z><4shhm^c8tYVFO4W^Bp4 z=vV5^jXMI8V0pu2J88Vi#a&65*Jq#gR0WC>mXkx<8>_RtkbV>ctkjtLZ62Q`}_rl z*#?sIE>iBnOf=zJu)WOO!2Zj^!f1#cuoR~GNU!DbIi~jzU=#)vcnFf7CNq4UV$2!_ zVNtb)ai`@9S&?Lhs^#?2?EB~A98-T$7l$?ExMb5Yshcxj>pmulI1fb}XR1#p!eRR> z3V~pkil?(>z{v0;s8xSdku8zjCiEICbVRI?4{13Nw`8|^7UJ6?Pl1yvDBfytQe}#z zLNiSQ%x`9vY_TKnic688;6k{EdyrR03(%LQi$sR}aEC0DVOa*tXKE%#Dco_}FX?{JGw8$OYb}Hhb^l{VgYOr0uXg!Ba_YydB-*KUA|w%d*pp3TsX(i#PG}))>ju z)3MG+;_q`83M*6!P&M-ohrP#gN2?w?ilJQ#p1?b~K#FtG9j}Cs6Mn>}o;02p;mgns zk{<~DW^Re~zSv*pP!avdS5Px_wYr5OY9qrzo+V(Hm8??LqThmVYgv6gf>V>-n2Xfn zjDWjQ^3gn=aKraX_}h6l=lRFu`}wEoc)EGSc=b6)!c;{bZ)nBn(~xMX904} z>CS=|_8)|9$Nx85ugu`KarC}l`jZKiK5u^#Iy$K7?hkyUul)IJ&?5O;X_1Gv_g(q)w9`( z$xFp`@pgMqm^d@mkjFr;-Pf6dda;?Up8z2m(8KrJ8Wkl|ItK?ZqJc)8G|DuykmV|EQc3eyntG0rg8mns`MQX}-JsU0gF9G5|CB zy#9k9;zU(?w++Ua-Ot=K>rt`>xAW1e;dZTLXE&Gv>5A+v%@Zd#^V{1Q2(?ok48g3I z%ckIEsvc8KY6gzs-d^0ye2GEW8Sr|J@!jCRLn#U0wcCa7iUF&(K8Ed4DLM`2YzkqI zVI-ylL@8yb$!*%Vnt}uujN2zfI1QiG`PPeQ8|6NR6w=Lj{;m&3{uP$*WPFV|AtTw@ z%9M3zggg{ugCU}NM&tYigw!2G!LfSdUp-!gIBxb2VV4Yy!?#9dzpiy+i?^)jU7LNi zbS^yhA|JY2zTGAZz#vxRLholpcd*7fN9WJ<4w90WQ3PxPodZVDr?T$jhHUl_Z`c&a zC9ohOu)Fd_h1I!u`SUt3EG|#8wv0=A2)vIE@Vgm&0sUEPNkvLl)9)X>g)87+ZDkcE zJlrB{O{R)~vS=);m>e${E#4&A+X5g!CiQO;R{LvYmZSpy!M+Uj91hl z%#hMSJthrB)5r+qoI6?(KH5*JZs;3o zL*}6S1Y|DB5LLm@gwmzpj*g|KYCFa=X4UoxYw-&s=?b@;;wVwwQ8W)?@1YapH}iEE zI>9jLVfEl=PMDj`eHn7+>dVZ_G?^7Cx`U0;$*6{8W~uK_Z`i@n;;{yg86t19%-=QU{%U^-;>%4qaSxDVx;4@6p5Z=5m9 zPr0RG%FZ3oAxax-Y5-z%=-IT)dSkq4ks0_l6q$qE_weRo+J(8Aw?gih z>E0hlkSj+)9gi> zA!VI4&U$7?0}KRIV^o0r#(+L2MGmuEG0sBflmK?=t}8GIycSTP#68 za2XMwd&z;1qHw*&S-f4iB^0oQejYd;J{4dq@%cZ^NG#QCNT_JYl{~L$Fx{v8yuG^& z34EN=1#|&7wi|G`O088>h?3=#Ne~*SFyF73#b?-9hEH?xTBqjY?Uq!VM zv|`Cf6{H<=J%WBDUtH$M;9dPwlJzT#*@7K&?)b*TpN2o3WSFt$>gAK;FxVS1`YLB| zqYa0ciE5z zW>h$@@SY=1hahD=G}aL3NvFLcSslt9m^k+bk(s)SSDgN6CDbX@Pq7smJ!h#lz3qT@t=OQuy=rM-yU?PkdB3nwP+c7XMm>MJ>^=~j{ zh4+cn2-}LQi4|0cApeTj5eIUclxwZXg_j2PHXK63)Vb`I@;*~Y(ScIc=> zH0sMwIl^qo*f;>LwH_$O`19AVV;sn4wZ!y;?YHsMi_9$GZVi&@jW$%RobmC=F&{v5 zNsdu~_Q{QfmhpO}!4gyW*u2^!&Iu09m3Z9Z^|Bf!Sj??4h^=9V*vEv`&dnhmnR#g} zXL7J~;Dn8Sv!9N?j8=@!)LAheQx*qyyKAXBn7ZLpLfI4l0!z*Hd4sOGdEn6RVrbC7 zI+lJ4+)cH8LM=^lPK6COUnua(nGG5u6?~jy++(8S4&o$GI`~=zK8dk_O#E%oAlBt? zx6CIDUVc!KJWL1t;wP$-tW|Q*1hFg!wRE&SWGQ+g-G)nG0{(Z}$At z9iFXca73H=(=1G|@`H-u(osuci}dslOS`pSLGF2KDv;UyXbOjo7LAd44MZm%J-C$k zDsOzdK%(M?LY*l@@q&}J)oSkg*2I=ps^Y0|nuBSp-Ni%SV`oi#~i9|*W!~5>*zHH`0J&F#VasTC8twXJOGkNZ+ zYUgZ?Hl2OSzk0?NEtvP_z>DA1R(i1$77|6ysjE=Pihi3V#~Ibe0HGe)YQIN*x#9Ee zCV1VU$lPucA=^5j=?2je5~V!5?JF(^gD<>YDGn(;_HM6l?hbwcsWDwTtv*}#9f0GZ z>E%AKEC3VSXC0TA*}@N0(F9Nvqh*y#HN1goFc@;)0RBZZ4- zEgf)+i^E}R4kRk^7|HiJ&Ih-E5r=EgX8exgyu};|)h5%m%P?R}y0u|IC+|1DljQ+9x zMu(_g;s3h>Ofi;GLE=$EY5#UUe~wSzm9}U*KST-Lth~v&U&@4!!V#MlaBUK>ZFPGp zRRzf@aMHsCD>PaQFX2YDnKqJI*cjRQU5PXucNno;ThG`%43_Rq8DPTqVzrbsF?spp z&~zq43;9#WWAYfU`77u)qcf&kCVvfCWn7C2MA8w~S3lbu#85JOz>~-b5u93WWF+MD zo{~Z_lpOuw?BnvEGcW;X{{gS@HDdLxMmu=w97uyifRFt?Ksr*!!sJCnoGi&S#16In zfi|v5_0_Gq@$nZ$ZC~l9%af2~m~an!g-fkH9N~ljp;iwYc*Jwo$}vU&D`HvGIDfA( zpqq|4m4)jl0++UpfsB7^{tI3LYuMKhER&X?-bn2L=jo7QQjSj24VAc(sKoj8cG{n*PrdN#$#B z7EBq%ZMzzO#oj5<*n1gG;8x&;w{t=UB>hMS;M}^W3Hr)6Tb8g!3q+~xpVlP4LyHDO> zj~6Jn%SkS#kJ2$&G8{`5MoeB=y-ZlQ7Kr(y5rU1-gBwT%RW&hB5yHHfr~^g*Tj_Su zFpnzc9}KZ$@WbTWY<)e)1fV-fIJuOv-lEpB8cI&|kuc!N04*^I_+2PI)G9U@2X&ol ze6V@ft?pReZ$|S%3hOT&Pw~j3k)??MOA zfC?uqR$nIT8=1J)VR{W+e)QW4^W2*P;+8XP7~O_nm<;8MF5&=+=i_*ONM1H@C-5=Z z$m=Oi1^-;?{`A&?*YHsh^x|fp>C-1K&Z&wu50SAHS$(v(=taU|nvULFPw(j>7M^T9 zy}#MsK8&^K$YFXpbVMUo{i=7Ul!r?Mfq99hv5H4SS`n#Omz**YlNl#FSfRbUq%Mmt7v^|F)}>b7|1*Yh>%8InBC zh9DzGntM+$x-(g5F{XC&?X&=gISoCMxi)x-z6x2g{tbB!ZoS$F@g^a~onLcr&U*G4 z7#|Som)G~J?qfZhrz$mI7mYOHGxo6m8pHX?8C^}tLg)o z>(CDpBXjAJo;#dnrDiE7sR3c)nevFUPcR#hhzK$iz;1VNrooB^aLwz3Vf_)Povd#V z(d2R0(BiIV(+y})kO+$=5I(1J(TVr9%NW=}Npys`?-w{@5S?dVx3eYrpx)fqfg_bQ zGJ6>)r2qZT@(Vu@oa)B~DdewTkB@$mIq3U6+Mu$db9V?b_(6sSi+s@;*1F*v`u2o5b(iBR%|-yn7QNiy7cmd??lTi~SWbn|%COh%=o>`QKq zd)&~~O4O<(0KuX=+v(poG^@p~Nc|sVvV~nRUAWbO5dFw?;cyJ0^brjre3n8&G;E*d z(q21=#+lk3G-<(SW7`GvAls@!=`3{$C!x$$OW3=Z)|=}JJZC+6tMh4q=??pr4Jfk%g!Rfi#QA7xsy-8rNOhOq7pth z8gT~C)i~X(X5uCF7bRErH{^s$YIZR%t~Q49`bt_v+5(-#@#zqwFUb%i)Rw+LlF&-> zA51uMCbSB4poBRq#K`=8q*zlHLu)jEGh~bQOh$LlM9)|-Bki%mm z;wj0}m7`tKjTWK{Zaa}a1!tz+SRS;*vl5i5-tbht8Jw0S?m@2ozG@^JFF_$XYXd`1=fSckGAq_@WTdZf!Rw=t4llcbF5{ z>V6Xg4xiG;)G`wSqhYL(zqRPr>Uev-9HfAd)^cY*XouR+GO0S9ZhVK5BJn@w8Kb9( z`-4GKH(IwWXZC$L=g3~6=hW1}B%&)XmtVYi6iQ3;I*b;By+3e40BVzfP!t0L7|DGB z!|}w3D(IsRAYT{@W})4%1eVgSA`*4Q32-D)B>HyZFYL6&gi90t?#c#S35N7!`FVz( z^_!M>`vRKP7OBJW(x%Z={X=#@xad1f5r{yozEeYCCRD5)vgmU+I>;?E$OIl*EIzO# zxa@!2#8hrQ>7)0Oqp#X?_ztT zoKaMA*>r+)bk zMyEzh$LGa0--^zr)o?3@<4FpFT@IpaEW65rz4>Ty5C7-TOv?A`04xD|EH_ZYmTffU zQ3Ns}r5XMWkwasunSMv;$9@b1}oxHMHC*oA{w;%9N$Jd#cjK9v>h3Fn$eu*s1ejm^$DQIS{OHRmY@N0UADo2kRpLG|g78X#20Xu%uqr zj!k}+@rmu0^~v(Bo}{K&BY?&>0`snFd>~?nHsj$chM0XPQ3F9qSO_74lZ4xTVx!lt zs%vh`K;VIbW{LVpMdQP4{U9;CHF)F6^C9m&WX42t{?*1poZNtUPJVQIG28&9V+TUA zVG>5t&h_xPx%0Dh&v|tGt7Km9Zu=fB!>Z+Wjqsac9-pJG>-4LU%n_0Uy#`9#VBN-u zBX;?=MP#KrFi^=C^He0i80JP z2Peaf9gX+`B~;EYeA8c_pkr|Hl$3L|Ala*Mr3#j4VUZHV)_`|3h9flEFlZV)%xBY? zG>A*ow0@j|Q5*^r=(mByB6WDqWr+wV1VZ7gB3e&;wDA_DW~vVpzJ(dgDtiE1P8_== zXiKiIGe9k7RL?7ke_$u0l&MWvsHza>9sj)i_8#+@jGmVzM8MRMujoH2PnVG}P4n*Z z=iwNQ+^-Sf2^V@S}k5NsYntnPd{Ri>(zQK}+w29b~v*dxvyfrLj&LhhR&VVz)7Tw3K=Bg5|# zhmF?WWpC@x_0~0As@qJfc>I=Q6rs$U^2sF#P-D566BVcsMRB$>>j{1{lP|C0OfAn) zl8mQ7kc)@ada}l(D^8~i38zea+fO3=FhQHUZBLH#qp!M!t-T3yxV}1A<@v`bKe8s| z3R^QXbV`Mgg+cI!co ziHf>l=h9H26U5u*o`<|hNO5Vx$>Uexx8w1d?JFYs!XsjH6tP{DBV@|#7;`oO&|u2m z_-bj8H?<$4V7brW9WYncvWp$M)4b{81*T9xE;o1cTWm^(vRzE!{g`gZWde_0YlMoO z9L!$X>D|Dp&{{!d1aKT-*vrMK=RM+F6u_5Y%>h^NjNZvPNlMdsu<2@3B=ia)3Meuv zDcja8xL>WyfseZ0qP20p%sz2^kN&I4Hv3b-x>+L6WdJfAi$;w8z0S>9d7MwCsh$7jD^&w`n%pvQVa~f42I{^@Hx`X5rHncN>Nr^og;NM|GK>YzBfnWYWn- zIu1Pwsa#G+r*3{f1Wc|Dn9sF@U>w8Zu4RbsX3eCb49fb3W@v^uPzOOMLWA}rbP*;> zPpX9_HeO#&^LY?IU{?E3eR=D9z~NL&_5hU9fdr?OFSP>r6id}Us>hj=2-nqQ!!jbf zx`AqQrYb|;3LTEILuuA_6ABR1!c|r`4AJZEIb-vPsfiSfdBgTfan*dasnxTL{LO~O z3IYQRPRu2NcC#N%#6R|-cvF}tVb!ELxR3y}p(t?xSPcvY1D%HubK}5&}R;DQ2?}0-b9j?%INm7R25<#_#A5UqVVFCweByNrs}rV{eaKN zNfj5&wz%TtzsFbql5?%<(eTV#onJq0wyTBijd=UGoU*xRbXQ~osQbL<7S6cYEosAl z=?18S_J&_e`h?ny$aEB0j_ErNz)EZeK8wE3(TX^me)f5_{)Ul(GEs7H;{R&9p3Ju! z*$e&B|DpXnF_XDP6YAK0Sp?y-7~Nl;Ep=_I%U_jtX{kPZPwc;#ZwY9wD%CiEA^_Om zWgvrsOkEaCMW!8BS%zftq=hdGMjR)~a}z@kE}7Dy1JACKK*h_{VM5Z z2P6F73;Pd@Hu;C_^??DF!*~9pf-jOrf&$l|=iJTypBB`%tB~buJZP{>_$lu*2sFOA@tW*@`P7^*{FThRzpVm7D);@s`NxrKp6}7`1yFShdqiMn9zl4o-?{_k)w)CA!eiw4n@ zfj0bKtLLhuUwD&Bu<0e2L$`+VcFI7 zp5hofQNw&3yFiQbNw2dhX}(sgW7Ig7RS>ZKz!BMrlRswTf{^Kzq#~Zkvm&&D5Wx4~ z1kL#f$@5R$Qy~N@u|R5Pac)&C3hgxJe(4`x@zKEMh7R*%@`8M zcCRIHb}fNBAt%{CGsvBm#7xrEi9KxN>D>$)Jh;Aw>q`HBZC4XoR}qCrYc(obT_{lt zKJaH#dPz(g6WpZ5fWd`Q7j_q4lV@KbO`h+)R3jp81UEu5- z2~1!rUuG?42FlqOK~iv!rjo7g{mD;uRA8q_gh-e@$OYdt^K8dQ=vskb1!q`Y94o;Y zskhTCkF;cWj|QT!D}1Gw9r4sEYmqz3-hZ%X5%pNejrX{lA@aqj{%rM}u@rZXCZCW^ z`ZT)IN2>9buBNeN>|qamShECqQ#os?#4V;Dk(c2MeK1;MUW49$*bK~yCq!9UM&Alz zWO=(6vmlGM>xs6d4zF~*7U6>NWo-F_S0X-Ijiv0ln#4lO#A^xm>!Voi;nZNveMWYO zXuG5*r5S|>x||=zKjh92;Qw(st6g5jEUk5Si zR~-uH)xIO|ywT8GO=vs#%bTBqd zIP~QUdL+qx2gc42;$a_w-b;F^DkStZ^*PZNmqSadIV*q9pA6UoFRa!#w>H-iKGidw zX zg?g(FvC7U;w$b~~A^BxPr&Q%-dN&54ssmY)=_z9HUB=q#oPNS;JF~V8`+ucKY(+}vpkrwX|GDeUru)sZp4I2W{P^Pi%l#R^Dtwpn@pFeN0!fM4I1;dU}od#`sJZ z#Gyulr6Dewdi;DwJ^Ax1YK;=(D`qwEehW>*OE;bRiJ+ADa z&f@%@lYcLOEyi+!kVW}`)$`B-@-eq(mm!gn6{<3MD&w2e1L{4Yk)3c3IVZvVjZbt&OfLMEvFoTo&iH?4r|HbwwBc zE?wch0u}8okvhAg(Oh}G4ePa)<{EP29g10nAHla)8!ZXmAP!x9t}8yYm*&B1$w#Vz zEPa*h=hsn|=6<%*afL*00*Sg?^m`2X+=jo~Ex*Y_dO>*9o)bvg`1b^E?!q7O=MA5* z7AMB_L~=ie`xyU>;S)ZYq`xD%UrzAfF?_;Wl0Lp1O zu>LHE@LeRo5#jHiQv4DczSRFP{#bua<=lt3kWXfQwdeH>;pg}3JEj|BWjahc+Of@e}i=I>gXo>1sJ{-yo@F_HNz*obWe=!+yiz?_-TTF7YY7r?`uhfhkr7HwhFLZyLDeD_|1m45aE4HXfSQRZw#OP z?^>3^U^6MOmgM(cg5P}4$~XAOb5(@2{2vqiGhb>7!l?-(V9SQ|!(4w!@ISaJRPG$% z#fSZE`7bU1I^GD0vz2RqDt_%}g`{(4!14(Xp?X5%#Gg0(dBbPAe)va#FJDOfMZ;e- z{N1F&HD+Y+D3E3B5P$Ew)_d<)g;UnCGXCYq`mkF+!?U=2_pjo)-xdC2w;nmdXFg9Q z^)E;AHAU>#e$4L}@Fg$Sf6-=wNyEQf5~gA-64Bt4l|Pj{C;qYIxqPeqVwe=+-@jnx yPgu&w@l + + + + + + Emscripten-Generated Code + + + + + + + + + + diff --git a/C++ProjectTemplate.js b/C++ProjectTemplate.js new file mode 100644 index 0000000..bea0d91 --- /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={38652:()=>{window.onunload=Module._olc_OnPageUnload},38696:($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..3d9975b35b3abefaab4e2d3e8d845c87971016ce GIT binary patch literal 302963 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 U>0{TIb;JWyu87J>`|EE0FIw3W`Tzg` 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..59fb4cd --- /dev/null +++ b/main.cpp @@ -0,0 +1,45 @@ +#include "pixelGameEngine.h" + +struct time_data{ + int seconds=0; + int minutes=0; + int hours=0; + int days=0; + int seasons=0; +}; + +class GameClock{ + long time=0; + float accumulated_time=0; + public: + void Update(float delta){ + accumulated_time+=delta; + while(accumulated_time>1){ + time++; + accumulated_time--; + } + }; + void AfterUpdate(float delta){}; + time_data GetTime(){ + return { + (int)(time%60), + (int)(time/60)%60, + (int)(time/3600)%24, + (int)(time/86400)%30, + (int)(time/2592000), + }; + } +}; + +int main(){ + GameClock master_clock; + while(true){ + master_clock.Update(1/60.f); //Simulate 60 FPS. + time_data current_time = master_clock.GetTime(); + std::cout<< + current_time.seasons<<" Seasons "<< + current_time.days<<" Days "<< + current_time.hours<<"h,"< +#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 +}