From bf2ed34855a6bef0643fb0f48080a0cde041ffc7 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Thu, 14 Sep 2023 23:38:28 -0500 Subject: [PATCH] Add project files. --- ReflectionPrototype.sln | 31 + ReflectionPrototype/ReflectionPrototype.cpp | 82 + .../ReflectionPrototype.vcxproj | 143 + .../ReflectionPrototype.vcxproj.filters | 30 + ReflectionPrototype/assets/avatar.png | Bin 0 -> 732377 bytes ReflectionPrototype/olcPixelGameEngine.h | 6783 +++++++++++++++++ ReflectionPrototype/olcUTIL_Geometry2D.h | 1097 +++ 7 files changed, 8166 insertions(+) create mode 100644 ReflectionPrototype.sln create mode 100644 ReflectionPrototype/ReflectionPrototype.cpp create mode 100644 ReflectionPrototype/ReflectionPrototype.vcxproj create mode 100644 ReflectionPrototype/ReflectionPrototype.vcxproj.filters create mode 100644 ReflectionPrototype/assets/avatar.png create mode 100644 ReflectionPrototype/olcPixelGameEngine.h create mode 100644 ReflectionPrototype/olcUTIL_Geometry2D.h diff --git a/ReflectionPrototype.sln b/ReflectionPrototype.sln new file mode 100644 index 0000000..bfb62fa --- /dev/null +++ b/ReflectionPrototype.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33516.290 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReflectionPrototype", "ReflectionPrototype\ReflectionPrototype.vcxproj", "{88AD8DB5-1417-429E-ACF4-1D0551E43BDF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Debug|x64.ActiveCfg = Debug|x64 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Debug|x64.Build.0 = Debug|x64 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Debug|x86.ActiveCfg = Debug|Win32 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Debug|x86.Build.0 = Debug|Win32 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Release|x64.ActiveCfg = Release|x64 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Release|x64.Build.0 = Release|x64 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Release|x86.ActiveCfg = Release|Win32 + {88AD8DB5-1417-429E-ACF4-1D0551E43BDF}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2D830A9E-677A-4D1E-B4C3-65E385C4272E} + EndGlobalSection +EndGlobal diff --git a/ReflectionPrototype/ReflectionPrototype.cpp b/ReflectionPrototype/ReflectionPrototype.cpp new file mode 100644 index 0000000..356327c --- /dev/null +++ b/ReflectionPrototype/ReflectionPrototype.cpp @@ -0,0 +1,82 @@ +#define OLC_PGE_APPLICATION +#include "olcPixelGameEngine.h" + +#include "olcUTIL_Geometry2D.h" + +#define PI 3.14159 +using namespace olc; + +// Override base class with your custom functionality +class Example : public olc::PixelGameEngine +{ + Decal*image; + vf2d pos; + float time; + float updateTimer; + float rot=0; +public: + Example() + { + // Name your application + sAppName = "Example"; + } +public: + bool OnUserCreate() override + { + pos=GetScreenSize()/2; + image=new Decal(new Sprite("assets/avatar.png")); + return true; + } + + bool OnUserUpdate(float fElapsedTime) override + { + updateTimer-=fElapsedTime; + if(updateTimer<=0){ + updateTimer=0.5; + time+=0.6; + } + rot+=fElapsedTime; + pos=GetMousePos(); + //DrawRotatedDecal(pos,image,0,image->sprite->Size()/2); + vf2d multiplier={0.5,0.5}; + float rotation=rot; + float scaleFactor=0.05; //How much to oscillate between the total scale. + + multiplier.x*=(1-abs(sin(time))*scaleFactor); + multiplier.x*=(1-abs(cos(1.5*time))*scaleFactor); + geom2d::rectimgSquare={pos-vf2d(image->sprite->Size()/2)*multiplier.x+vf2d{abs(sin(time))*scaleFactor*image->sprite->width*multiplier.x,0},vf2d(image->sprite->Size())*multiplier}; + for(int y=0;ysquare={{float(x),float(y)},{24,24}}; + if(geom2d::overlaps(square,imgSquare)){ + vf2d pos=square.pos; + pos.x+=std::max(0.f,imgSquare.pos.x-square.pos.x); + pos.y+=std::max(0.f,imgSquare.pos.y-square.pos.y); + vf2d offset={square.pos.x-imgSquare.pos.x+std::max(0.f,imgSquare.pos.x-square.pos.x),square.pos.y-imgSquare.pos.y+std::max(0.f,imgSquare.pos.y-square.pos.y)}; + vf2d size={std::min(24.f,imgSquare.right().start.x-square.pos.x),std::min(24.f,imgSquare.bottom().start.y-square.pos.y)}; + vf2d finalOffset=offset/multiplier; + vf2d finalSize=size/multiplier; + finalOffset.y=image->sprite->height-finalOffset.y; + finalSize.y*=-1; + geom2d::linelineTo{imgSquare.middle(),square.middle()}; + float angleTo=lineTo.vector().polar().y; + vf2d initialPos=vf2d{cos(rotation)*lineTo.length(),sin(rotation)*lineTo.length()}; + vf2d newPos={initialPos.x*cos(angleTo)-initialPos.y*sin(angleTo),initialPos.x*sin(angleTo)+initialPos.y*cos(angleTo)}; + DrawPartialRotatedDecal(imgSquare.middle()+newPos,image,rotation,{12,12},finalOffset,finalSize,vf2d{multiplier.x,multiplier.y*-1}); + DrawRectDecal(square.pos,square.size,RED); + }else{ + DrawRectDecal(square.pos,square.size); + } + } + } + return true; + } +}; + +int main() +{ + Example demo; + if (demo.Construct(1280, 720, 1, 1)) + demo.Start(); + return 0; +} \ No newline at end of file diff --git a/ReflectionPrototype/ReflectionPrototype.vcxproj b/ReflectionPrototype/ReflectionPrototype.vcxproj new file mode 100644 index 0000000..2432733 --- /dev/null +++ b/ReflectionPrototype/ReflectionPrototype.vcxproj @@ -0,0 +1,143 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {88ad8db5-1417-429e-acf4-1d0551e43bdf} + ReflectionPrototype + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Console + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/ReflectionPrototype/ReflectionPrototype.vcxproj.filters b/ReflectionPrototype/ReflectionPrototype.vcxproj.filters new file mode 100644 index 0000000..bec727a --- /dev/null +++ b/ReflectionPrototype/ReflectionPrototype.vcxproj.filters @@ -0,0 +1,30 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/ReflectionPrototype/assets/avatar.png b/ReflectionPrototype/assets/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..f51b966500c8256d3231a140e9c2a80eb2e3d3f0 GIT binary patch literal 732377 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

XOle4(amp~fBQ9oc17~Go36ivNegHEr@@!kPZ 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¬PHt*@Y|PNFK?;M#dPu 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

}C*$?pRzy4v~{?4~Czc>#tA?0y z?w)k#OzwYa1!QFAXUDuATi?XKIlNWBvJj2&YUX__i%hvctls_IJki73q3hdhr5Z{PgG1ChcHY4!_I0e&Q!-EwAwVpZP3A5n_z_Shh}y z9E{mMM%8Fp82fP%ODW!X|2_QbkG_Zd4=>;iyQpx8MCW^WqJT>n!Re$#8_nMC2AgY_ z>FjOUE@RR>v&Dnl(U+;tWZ~~|YMi*zmvn}5o!QKykq2{_F>tZSNNn2%IS z;5gtpf~pVgmcVl(Tq$gK$PqXa97p0g0zrr%vRtINizH>PahRyt?Yol~=XTk=h&eGt9d zv(Cg!vER$Uptt+zE)1?{h8x=u_0Vk4>7FBy9ok1$s5Dj(qMD91p)3+0w!}p!g!FK0 zZECG)>Qhy`T0|6HCFsAxd|Pwp(K?5x8dOA_oJJZGg%+nbnrkNQu$AukH=tOE(v3MY z;*3ronAl)m#pfYPKJNgij!7sblg71QlXhp#gcC5iZr3=c%VY}6uCj5$U>H#GBvL>W zgyl_*Y%CG~y%+fyBk)xpA)*XAEJcfzG?-I_8RMx!4wRN$`;4H<*m0yCAzgSF%~%Yi zvmGn*9VA3&Up#{jLX>dR4a3BXN%F{Ccq57c_w@PMi(vAypr#nqV=Ms?X}b?7gt1?9 zpB=YGO=9mfo>YlgVXES{f&O^Vkm2tLVJ1fn!jMWsjqnF?{;3>%*Qf5o@?xE4%|Ym) zCBi4ILHnBiu*>%DbsJQRGC8PxU}Lo1zG~G5jpiI`WHcs3K6y-JTn$kefmR%!TV}a+ z2uCSg<8)v^Io6kantWkk1xXacA9Q)mwvC4 zQ{qX?4TZ463bOoO2f@%nMY1@ZgMu)PNs_oI3N25mWVzt^5ZOZ#OVsbn% zX?B{j`FW7bFLKqDbZaP?dj=4WM|J5i)k8-xqb`}02qk0lTEmgU3;gN_-bK42xN`X% zgJB0fx@$44&GjmL_2Zx6%nL7OPEsRv#KP1A z&zbQZt6Yu7)d)hGFu;uA<`YNxwV(U|@3`wW8p0r>A;Ls<{S+DCp~x1YGO9^Z5d=dv zH?Fb1c9s61YrD-7WKm>9j6ceR?sPazU~^-4c?=?#sZyJXSiD#PHBO48NT6_zBXHt` z$BW@|RaZ0JtW&Q@Tvy{d5xxtqW4lMb3(5>2>fGO z$}cAgwoJ;0gkmu0F&OmF#t>;ks14eIsi|qCBoU<$g%~FfxiXo+*NV4f+i zb9f;XLMjX)T8C&8V2E&>8m>Q$-gtVr#B~@4xcc4vaW_;uOoLw`k z^#-*@oe~`OSdr8q2!}l`JohYv$OE?)A7lKUQZRR9j+wScwJPZE?GOe78i$q;zHg7& znAnFXn;ezXI83HPnuOgVTdphMouoq5Y7DW4;GPt?6(7*Hvn5hBH=RawWQi|BU1cyZ zRDFm{3K`ZVFgHz}?UIG>8TR>VGCOj7J#;Qn%J*d~bd~gZNg`w)d05>66QVEtPZ!Pg zs~bG|507*G>g6~HG%0D`8 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

xO8SIw3tdPQ1FC$un=0A8@crn#Ed!s$0X? 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

g#K2D8`NqG` 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 literal 0 HcmV?d00001 diff --git a/ReflectionPrototype/olcPixelGameEngine.h b/ReflectionPrototype/olcPixelGameEngine.h new file mode 100644 index 0000000..d0300ac --- /dev/null +++ b/ReflectionPrototype/olcPixelGameEngine.h @@ -0,0 +1,6783 @@ +#pragma region license_and_help +/* +olcPixelGameEngine.h + ++-------------------------------------------------------------+ +| OneLoneCoder Pixel Game Engine v2.23 | +| "What do you need? Pixels... Lots of Pixels..." - javidx9 | ++-------------------------------------------------------------+ + +What is this? +~~~~~~~~~~~~~ +olc::PixelGameEngine is a single file, cross platform graphics and userinput +framework used for games, visualisations, algorithm exploration and learning. +It was developed by YouTuber "javidx9" as an assistive tool for many of his +videos. The goal of this project is to provide high speed graphics with +minimal project setup complexity, to encourage new programmers, younger people, +and anyone else that wants to make fun things. + +However, olc::PixelGameEngine is not a toy! It is a powerful and fast utility +capable of delivering high resolution, high speed, high quality applications +which behave the same way regardless of the operating system or platform. + +This file provides the core utility set of the olc::PixelGameEngine, including +window creation, keyboard/mouse input, main game thread, timing, pixel drawing +routines, image/sprite loading and drawing routines, and a bunch of utility +types to make rapid development of games/visualisations possible. + + +License (OLC-3) +~~~~~~~~~~~~~~~ + +Copyright 2018 - 2022 OneLoneCoder.com + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions or derivations of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions or derivative works in binary form must reproduce the above +copyright notice. This list of conditions and the following disclaimer must be +reproduced in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may +be used to endorse or promote products derived from this software without specific +prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +Links +~~~~~ +YouTube: https://www.youtube.com/javidx9 +https://www.youtube.com/javidx9extra +Discord: https://discord.gg/WhwHUMV +Twitter: https://www.twitter.com/javidx9 +Twitch: https://www.twitch.tv/javidx9 +GitHub: https://www.github.com/onelonecoder +Homepage: https://www.onelonecoder.com +Patreon: https://www.patreon.com/javidx9 +Community: https://community.onelonecoder.com + + + +Compiling in Linux +~~~~~~~~~~~~~~~~~~ +You will need a modern C++ compiler, so update yours! +To compile use the command: + +g++ -o YourProgName YourSource.cpp -lX11 -lGL -lpthread -lpng -lstdc++fs -std=c++17 + +On some Linux configurations, the frame rate is locked to the refresh +rate of the monitor. This engine tries to unlock it but may not be +able to, in which case try launching your program like this: + +vblank_mode=0 ./YourProgName + + + +Compiling in Code::Blocks on Windows +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Well I wont judge you, but make sure your Code::Blocks installation +is really up to date - you may even consider updating your C++ toolchain +to use MinGW32-W64. + +Guide for installing recent GCC for Windows: +https://www.msys2.org/ +Guide for configuring code::blocks: +https://solarianprogrammer.com/2019/11/05/install-gcc-windows/ +https://solarianprogrammer.com/2019/11/16/install-codeblocks-gcc-windows-build-c-cpp-fortran-programs/ + +Add these libraries to "Linker Options": +user32 gdi32 opengl32 gdiplus Shlwapi dwmapi stdc++fs + +Set these compiler options: -std=c++17 + + + +Compiling on Mac - EXPERIMENTAL! PROBABLY HAS BUGS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Yes yes, people use Macs for C++ programming! Who knew? Anyway, enough +arguing, thanks to Mumflr the PGE is now supported on Mac. Now I know nothing +about Mac, so if you need support, I suggest checking out the instructions +here: https://github.com/MumflrFumperdink/olcPGEMac + +clang++ -arch x86_64 -std=c++17 -mmacosx-version-min=10.15 -Wall -framework OpenGL +-framework GLUT -framework Carbon -lpng YourSource.cpp -o YourProgName + + + +Compiling with Emscripten (New & Experimental) +~~~~~~~~~~~~~~~~~~~~~~~~~ +Emscripten compiler will turn your awesome C++ PixelGameEngine project into WASM! +This means you can run your application in teh browser, great for distributing +and submission in to jams and things! It's a bit new at the moment. + +em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 ./YourSource.cpp -o pge.html +em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 $(Get-ChildItem *.cpp) -o pge.html --preload-file assets + + +Using stb_image.h +~~~~~~~~~~~~~~~~~ +The PGE will load png images by default (with help from libpng on non-windows systems). +However, the excellent "stb_image.h" can be used instead, supporting a variety of +image formats, and has no library dependence - something we like at OLC studios ;) +To use stb_image.h, make sure it's in your code base, and simply: + +#define OLC_IMAGE_STB + +Before including the olcPixelGameEngine.h header file. stb_image.h works on many systems +and can be downloaded here: https://github.com/nothings/stb/blob/master/stb_image.h + + + +Multiple cpp file projects? +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +As a single header solution, the OLC_PGE_APPLICATION definition is used to +insert the engine implementation at a project location of your choosing. +The simplest way to setup multifile projects is to create a file called +"olcPixelGameEngine.cpp" which includes the following: + +#define OLC_PGE_APPLICATION +#include "olcPixelGameEngine.h" + +That's all it should include. You can also include PGEX includes and +defines in here too. With this in place, you dont need to +#define OLC_PGE_APPLICATION anywhere, and can simply include this +header file as an when you need to. + + + +Ports +~~~~~ +olc::PixelGameEngine has been ported and tested with varying degrees of +success to: WinXP, Win7, Win8, Win10, Various Linux, Raspberry Pi, +Chromebook, Playstation Portable (PSP) and Nintendo Switch. If you are +interested in the details of these ports, come and visit the Discord! + + + +Thanks +~~~~~~ +I'd like to extend thanks to Ian McKay, Bispoo, Eremiell, slavka, Kwizatz77, gurkanctn, Phantim, +IProgramInCPP, JackOJC, KrossX, Huhlig, Dragoneye, Appa, JustinRichardsMusic, SliceNDice, +dandistine, Ralakus, Gorbit99, raoul, joshinils, benedani, Moros1138, Alexio, SaladinAkara +& MagetzUb for advice, ideas and testing, and I'd like to extend my appreciation to the +250K YouTube followers, 80+ Patreons, 4.8K Twitch followers and 10K Discord server members +who give me the motivation to keep going with all this :D + +Significant Contributors: @Moros1138, @SaladinAkara, @MaGetzUb, @slavka, +@Dragoneye, @Gorbit99, @dandistine & @Mumflr + +Special thanks to those who bring gifts! +GnarGnarHead.......Domina +Gorbit99...........Bastion, Ori & The Blind Forest, Terraria, Spelunky 2, Skully +Marti Morta........Gris +Danicron...........Terraria +SaladinAkara.......Aseprite, Inside, Quern: Undying Thoughts, Outer Wilds +AlterEgo...........Final Fantasy XII - The Zodiac Age +SlicEnDicE.........Noita, Inside +TGD................Voucher Gift +Dragoneye..........Lucas Arts Adventure Game Pack +Anonymous Pirate...Return To Monkey Island + +Special thanks to my Patreons too - I wont name you on here, but I've +certainly enjoyed my tea and flapjacks :D + + + +Author +~~~~~~ +David Barr, aka javidx9, (c) OneLoneCoder 2018, 2019, 2020, 2021, 2022 +*/ +#pragma endregion + +#pragma region version_history +/* +2.01: Made renderer and platform static for multifile projects +2.02: Added Decal destructor, optimised Pixel constructor +2.03: Added FreeBSD flags, Added DrawStringDecal() +2.04: Windows Full-Screen bug fixed +2.05: +DrawPartialWarpedDecal() - draws a warped decal from a subset image ++DrawPartialRotatedDecal() - draws a rotated decal from a subset image +2.06: +GetTextSize() - returns area occupied by multiline string ++GetWindowSize() - returns actual window size ++GetElapsedTime() - returns last calculated fElapsedTime ++GetWindowMouse() - returns actual mouse location in window ++DrawExplicitDecal() - bow-chikka-bow-bow ++DrawPartialDecal(pos, size) - draws a partial decal to specified area ++FillRectDecal() - draws a flat shaded rectangle as a decal ++GradientFillRectDecal() - draws a rectangle, with unique colour corners ++Modified DrawCircle() & FillCircle() - Thanks IanM-Matrix1 (#PR121) ++Gone someway to appeasing pedants +2.07: +GetPixelSize() - returns user specified pixel size ++GetScreenPixelSize() - returns actual size in monitor pixels ++Pixel Cohesion Mode (flag in Construct()) - disallows arbitrary window scaling ++Working VSYNC in Windows windowed application - now much smoother ++Added string conversion for olc::vectors ++Added comparator operators for olc::vectors ++Added DestroyWindow() on windows platforms for serial PGE launches ++Added GetMousePos() to stop TarriestPython whinging +2.08: Fix SetScreenSize() aspect ratio pre-calculation +Fix DrawExplicitDecal() - stupid oversight with multiple decals +Disabled olc::Sprite copy constructor ++olc::Sprite Duplicate() - produces a new clone of the sprite ++olc::Sprite Duplicate(pos, size) - produces a new sprite from the region defined ++Unary operators for vectors ++More pedant mollification - Thanks TheLandfill ++ImageLoader modules - user selectable image handling core, gdi+, libpng, stb_image ++Mac Support via GLUT - thanks Mumflr! +2.09: Fix olc::Renderable Image load error - Thanks MaGetzUb & Zij-IT for finding and moaning about it +Fix file rejection in image loaders when using resource packs +Tidied Compiler defines per platform - Thanks slavka ++Pedant fixes, const correctness in parts ++DecalModes - Normal, Additive, Multiplicative blend modes ++Pixel Operators & Lerping ++Filtered Decals - If you hate pixels, then erase this file ++DrawStringProp(), GetTextSizeProp(), DrawStringPropDecal() - Draws non-monospaced font +2.10: Fix PixelLerp() - oops my bad, lerped the wrong way :P +Fix "Shader" support for strings - thanks Megarev for crying about it +Fix GetTextSizeProp() - Height was just plain wrong... ++vec2d operator overloads (element wise *=, /=) ++vec2d comparison operators... :| yup... hmmmm... ++vec2d ceil(), floor(), min(), max() functions - surprising how often I do it manually ++DrawExplicitDecal(... uint32_t elements) - complete control over convex polygons and lines ++DrawPolygonDecal() - to keep Bispoo happy, required significant rewrite of EVERYTHING, but hey ho ++Complete rewrite of decal renderer ++OpenGL 3.3 Renderer (also supports Raspberry Pi) ++PGEX Break-In Hooks - with a push from Dandistine ++Wireframe Decal Mode - For debug overlays +2.11: Made PGEX hooks optional - (provide true to super constructor) +2.12: Fix for MinGW compiler non-compliance :( - why is its sdk structure different?? why??? +2.13: +GetFontSprite() - allows access to font data +2.14: Fix WIN32 Definition reshuffle +Fix DrawPartialDecal() - messed up dimension during renderer experiment, didnt remove junk code, thanks Alexio +Fix? Strange error regarding GDI+ Image Loader not knowing about COM, SDK change? +2.15: Big Reformat ++WASM Platform (via Emscripten) - Big Thanks to OLC Community - See Platform for details ++Sample Mode for Decals ++Made olc_ConfigureSystem() accessible ++Added OLC_----_CUSTOM_EX for externalised platforms, renderers and image loaders +=Refactored olc::Sprite pixel data store +-Deprecating LoadFromPGESprFile() +-Deprecating SaveToPGESprFile() +Fix Pixel -= operator (thanks Au Lit) +2.16: FIX Emscripten JS formatting in VS IDE (thanks Moros) ++"Headless" Mode ++DrawLineDecal() ++Mouse Button Constants ++Move Constructor for olc::Renderable ++Polar/Cartesian conversion for v2d_generic ++DrawRotatedStringDecal()/DrawRotatedStringPropDecal() (thanks Oso-Grande/Sopadeoso (PR #209)) +=Using olc::Renderable for layer surface ++Major Mac and GLUT Update (thanks Mumflr) +2.17: +Clipping for DrawLine() functions ++Reintroduced sub-pixel decals ++Modified DrawPartialDecal() to quantise and correctly sample from tile atlasses ++olc::Sprite::GetPixel() - Clamp Mode +2.18: +Option to not "dirty" layers with SetDrawTarget() - Thanks TerasKasi! +=Detection for Mac M1, fix for scroll wheel interrogation - Thanks ruarq! +2.19: Textual Input(of)course Edition! +=Built in font is now olc::Renderable ++EnablePixelTransfer() - Gate if layer content transfers occur (speedup in decal only apps) ++TextEntryEnable() - Enables/Disables text entry mode ++TextEntryGetString() - Gets the current accumulated string in text entry mode ++TextEntryGetCursor() - Gets the current cursor position in text entry mode ++IsTextEntryEnabled() - Returns true if text entry mode is activated ++OnTextEntryComplete() - Override is called when user presses "ENTER" in text entry mode ++Potential for regional keyboard mappings - needs volunteers to do this ++ConsoleShow() - Opens built in command console ++ConsoleClear() - Clears built in command console output ++ConsoleOut() - Stream strings to command console output ++ConsoleCaptureStdOut() - Capture std::cout by redirecting to built-in console ++OnConsoleCommand() - Override is called when command is entered into built in console +2.20: +DrawRectDecal() - Keeps OneSketchyGuy quiet ++GetScreenSize() ++olc::Sprite::Size() - returns size of sprite in vector format +2.21: Emscripten Overhaul - Thanks Moros! ++DrawPolygonDecal() tint overload, can now tint a polygon accounting for vertex colours ++Multiplicative Pixel overload ++v2d_generic clamp() ++v2d_generic lerp() ++GetDroppedFiles() - returns files dropped onto engine window for that frame (MSW only) ++GetDroppedFilesPoint() - returns location of dropped files (MSW only) ++Exposed OpenGL33 Loader interface so the typedefs can be shared with PGEX & user ++Fix OGL33 DecalStructure types - wow, how did that one get missed?? lol ++FillTexturedTriangle() - Software rasterizes a textured, coloured, triangle ++FillTexturedPolygon() - Hijacks DecalStructure for configuration ++olc::vf2d arguments for Sprite::Sample() functions +2.22: = Fix typo on dragged file buffers for unicode builds +2.23: Fixed Emscripten host sizing errors - Thanks Moros +Fixed v2d_generic.clamp() function + +!! Apple Platforms will not see these updates immediately - Sorry, I dont have a mac to test... !! +!! Volunteers willing to help appreciated, though PRs are manually integrated with credit !! +*/ +#pragma endregion + +#pragma region hello_world_example +// O------------------------------------------------------------------------------O +// | Example "Hello World" Program (main.cpp) | +// O------------------------------------------------------------------------------O +/* + +#define OLC_PGE_APPLICATION +#include "olcPixelGameEngine.h" + +// Override base class with your custom functionality +class Example : public olc::PixelGameEngine +{ +public: +Example() +{ +// Name your application +sAppName = "Example"; +} + +public: +bool OnUserCreate() override +{ +// Called once at the start, so create things here +return true; +} + +bool OnUserUpdate(float fElapsedTime) override +{ +// Called once per frame, draws random coloured pixels +for (int x = 0; x < ScreenWidth(); x++) +for (int y = 0; y < ScreenHeight(); y++) +Draw(x, y, olc::Pixel(rand() % 256, rand() % 256, rand() % 256)); +return true; +} +}; + +int main() +{ +Example demo; +if (demo.Construct(256, 240, 4, 4)) +demo.Start(); +return 0; +} + +*/ +#pragma endregion + +#ifndef OLC_PGE_DEF +#define OLC_PGE_DEF + +#pragma region std_includes +// O------------------------------------------------------------------------------O +// | STANDARD INCLUDES | +// O------------------------------------------------------------------------------O +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#pragma endregion + +#define PGE_VER 223 + +// O------------------------------------------------------------------------------O +// | COMPILER CONFIGURATION ODDITIES | +// O------------------------------------------------------------------------------O +#pragma region compiler_config +#define USE_EXPERIMENTAL_FS +#if defined(_WIN32) +#if _MSC_VER >= 1920 && _MSVC_LANG >= 201703L +#undef USE_EXPERIMENTAL_FS +#endif +#endif +#if defined(__linux__) || defined(__MINGW32__) || defined(__EMSCRIPTEN__) || defined(__FreeBSD__) || defined(__APPLE__) +#if __cplusplus >= 201703L +#undef USE_EXPERIMENTAL_FS +#endif +#endif + +#if !defined(OLC_KEYBOARD_UK) +#define OLC_KEYBOARD_UK +#endif + + +#if defined(USE_EXPERIMENTAL_FS) || defined(FORCE_EXPERIMENTAL_FS) +// C++14 +#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING +#include +namespace _gfs = std::experimental::filesystem::v1; +#else +// C++17 +#include +namespace _gfs = std::filesystem; +#endif + +#if defined(UNICODE) || defined(_UNICODE) +#define olcT(s) L##s +#else +#define olcT(s) s +#endif + +#define UNUSED(x) (void)(x) + +// O------------------------------------------------------------------------------O +// | PLATFORM SELECTION CODE, Thanks slavka! | +// O------------------------------------------------------------------------------O + +#if defined(OLC_PGE_HEADLESS) +#define OLC_PLATFORM_HEADLESS +#define OLC_GFX_HEADLESS +#if !defined(OLC_IMAGE_STB) && !defined(OLC_IMAGE_GDI) && !defined(OLC_IMAGE_LIBPNG) +#define OLC_IMAGE_HEADLESS +#endif +#endif + +// Platform +#if !defined(OLC_PLATFORM_WINAPI) && !defined(OLC_PLATFORM_X11) && !defined(OLC_PLATFORM_GLUT) && !defined(OLC_PLATFORM_EMSCRIPTEN) && !defined(OLC_PLATFORM_HEADLESS) +#if !defined(OLC_PLATFORM_CUSTOM_EX) +#if defined(_WIN32) +#define OLC_PLATFORM_WINAPI +#endif +#if defined(__linux__) || defined(__FreeBSD__) +#define OLC_PLATFORM_X11 +#endif +#if defined(__APPLE__) +#define GL_SILENCE_DEPRECATION +#define OLC_PLATFORM_GLUT +#endif +#if defined(__EMSCRIPTEN__) +#define OLC_PLATFORM_EMSCRIPTEN +#endif +#endif +#endif + +// Start Situation +#if defined(OLC_PLATFORM_GLUT) || defined(OLC_PLATFORM_EMSCRIPTEN) +#define PGE_USE_CUSTOM_START +#endif + + + +// Renderer +#if !defined(OLC_GFX_OPENGL10) && !defined(OLC_GFX_OPENGL33) && !defined(OLC_GFX_DIRECTX10) && !defined(OLC_GFX_HEADLESS) +#if !defined(OLC_GFX_CUSTOM_EX) +#if defined(OLC_PLATFORM_EMSCRIPTEN) +#define OLC_GFX_OPENGL33 +#else +#define OLC_GFX_OPENGL10 +#endif +#endif +#endif + +// Image loader +#if !defined(OLC_IMAGE_STB) && !defined(OLC_IMAGE_GDI) && !defined(OLC_IMAGE_LIBPNG) && !defined(OLC_IMAGE_HEADLESS) +#if !defined(OLC_IMAGE_CUSTOM_EX) +#if defined(_WIN32) +#define OLC_IMAGE_GDI +#endif +#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__) +#define OLC_IMAGE_LIBPNG +#endif +#endif +#endif + + +// O------------------------------------------------------------------------------O +// | PLATFORM-SPECIFIC DEPENDENCIES | +// O------------------------------------------------------------------------------O +#if !defined(OLC_PGE_HEADLESS) +#if defined(OLC_PLATFORM_WINAPI) +#define _WINSOCKAPI_ // Thanks Cornchipss +#if !defined(VC_EXTRALEAN) +#define VC_EXTRALEAN +#endif +#if !defined(NOMINMAX) +#define NOMINMAX +#endif + +// In Code::Blocks +#if !defined(_WIN32_WINNT) +#ifdef HAVE_MSMF +#define _WIN32_WINNT 0x0600 // Windows Vista +#else +#define _WIN32_WINNT 0x0500 // Windows 2000 +#endif +#endif + +#include +#undef _WINSOCKAPI_ +#endif + +#if defined(OLC_PLATFORM_X11) +namespace X11 +{ +#include +#include +} +#endif + +#if defined(OLC_PLATFORM_GLUT) +#if defined(__linux__) +#include +#include +#endif +#if defined(__APPLE__) +#include +#include +#include +#endif +#endif +#endif + +#if defined(OLC_PGE_HEADLESS) +#if defined max +#undef max +#endif +#if defined min +#undef min +#endif +#endif +#pragma endregion + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine INTERFACE DECLARATION | +// O------------------------------------------------------------------------------O +#pragma region pge_declaration +namespace olc +{ + class PixelGameEngine; + class Sprite; + + // Pixel Game Engine Advanced Configuration + constexpr uint8_t nMouseButtons = 5; + constexpr uint8_t nDefaultAlpha = 0xFF; + constexpr uint32_t nDefaultPixel = (nDefaultAlpha << 24); + constexpr uint8_t nTabSizeInSpaces = 4; + constexpr size_t OLC_MAX_VERTS = 128; + enum rcode { FAIL = 0, OK = 1, NO_FILE = -1 }; + + // O------------------------------------------------------------------------------O + // | olc::Pixel - Represents a 32-Bit RGBA colour | + // O------------------------------------------------------------------------------O + struct Pixel + { + union + { + uint32_t n = nDefaultPixel; + struct { uint8_t r; uint8_t g; uint8_t b; uint8_t a; }; + }; + + enum Mode { NORMAL, MASK, ALPHA, CUSTOM }; + + Pixel(); + Pixel(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha = nDefaultAlpha); + Pixel(uint32_t p); + Pixel& operator = (const Pixel& v) = default; + bool operator ==(const Pixel& p) const; + bool operator !=(const Pixel& p) const; + Pixel operator * (const float i) const; + Pixel operator / (const float i) const; + Pixel& operator *=(const float i); + Pixel& operator /=(const float i); + Pixel operator + (const Pixel& p) const; + Pixel operator - (const Pixel& p) const; + Pixel& operator +=(const Pixel& p); + Pixel& operator -=(const Pixel& p); + Pixel operator * (const Pixel& p) const; + Pixel& operator *=(const Pixel& p); + Pixel inv() const; + }; + + Pixel PixelF(float red, float green, float blue, float alpha = 1.0f); + Pixel PixelLerp(const olc::Pixel& p1, const olc::Pixel& p2, float t); + + + // O------------------------------------------------------------------------------O + // | USEFUL CONSTANTS | + // O------------------------------------------------------------------------------O + static const Pixel + GREY(192, 192, 192), DARK_GREY(128, 128, 128), VERY_DARK_GREY(64, 64, 64), + RED(255, 0, 0), DARK_RED(128, 0, 0), VERY_DARK_RED(64, 0, 0), + YELLOW(255, 255, 0), DARK_YELLOW(128, 128, 0), VERY_DARK_YELLOW(64, 64, 0), + GREEN(0, 255, 0), DARK_GREEN(0, 128, 0), VERY_DARK_GREEN(0, 64, 0), + CYAN(0, 255, 255), DARK_CYAN(0, 128, 128), VERY_DARK_CYAN(0, 64, 64), + BLUE(0, 0, 255), DARK_BLUE(0, 0, 128), VERY_DARK_BLUE(0, 0, 64), + MAGENTA(255, 0, 255), DARK_MAGENTA(128, 0, 128), VERY_DARK_MAGENTA(64, 0, 64), + WHITE(255, 255, 255), BLACK(0, 0, 0), BLANK(0, 0, 0, 0); + + // Thanks to scripticuk and others for updating the key maps + // NOTE: The GLUT platform will need updating, open to contributions ;) + enum Key + { + NONE, + A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + K0, K1, K2, K3, K4, K5, K6, K7, K8, K9, + F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, + UP, DOWN, LEFT, RIGHT, + SPACE, TAB, SHIFT, CTRL, INS, DEL, HOME, END, PGUP, PGDN, + BACK, ESCAPE, RETURN, ENTER, PAUSE, SCROLL, + NP0, NP1, NP2, NP3, NP4, NP5, NP6, NP7, NP8, NP9, + NP_MUL, NP_DIV, NP_ADD, NP_SUB, NP_DECIMAL, PERIOD, + EQUALS, COMMA, MINUS, + OEM_1, OEM_2, OEM_3, OEM_4, OEM_5, OEM_6, OEM_7, OEM_8, + CAPS_LOCK, ENUM_END + }; + + namespace Mouse + { + static constexpr int32_t LEFT = 0; + static constexpr int32_t RIGHT = 1; + static constexpr int32_t MIDDLE = 2; + }; + + // O------------------------------------------------------------------------------O + // | olc::HWButton - Represents the state of a hardware button (mouse/key/joy) | + // O------------------------------------------------------------------------------O + struct HWButton + { + bool bPressed = false; // Set once during the frame the event occurs + bool bReleased = false; // Set once during the frame the event occurs + bool bHeld = false; // Set true for all frames between pressed and released events + }; + + + + + // O------------------------------------------------------------------------------O + // | olc::vX2d - A generic 2D vector type | + // O------------------------------------------------------------------------------O +#if !defined(OLC_IGNORE_VEC2D) + template + struct v2d_generic + { + T x = 0; + T y = 0; + v2d_generic() : x(0), y(0) {} + v2d_generic(T _x, T _y) : x(_x), y(_y) {} + v2d_generic(const v2d_generic& v) : x(v.x), y(v.y) {} + v2d_generic& operator=(const v2d_generic& v) = default; + T mag() const { return T(std::sqrt(x * x + y * y)); } + T mag2() const { return x * x + y * y; } + v2d_generic norm() const { T r = 1 / mag(); return v2d_generic(x * r, y * r); } + v2d_generic perp() const { return v2d_generic(-y, x); } + v2d_generic floor() const { return v2d_generic(std::floor(x), std::floor(y)); } + v2d_generic ceil() const { return v2d_generic(std::ceil(x), std::ceil(y)); } + v2d_generic max(const v2d_generic& v) const { return v2d_generic(std::max(x, v.x), std::max(y, v.y)); } + v2d_generic min(const v2d_generic& v) const { return v2d_generic(std::min(x, v.x), std::min(y, v.y)); } + v2d_generic cart() { return { std::cos(y) * x, std::sin(y) * x }; } + v2d_generic polar() { return { mag(), std::atan2(y, x) }; } + v2d_generic clamp(const v2d_generic& v1, const v2d_generic& v2) const { return this->max(v1).min(v2); } + v2d_generic lerp(const v2d_generic& v1, const double t) { return this->operator*(T(1.0 - t)) + (v1 * T(t)); } + T dot(const v2d_generic& rhs) const { return this->x * rhs.x + this->y * rhs.y; } + T cross(const v2d_generic& rhs) const { return this->x * rhs.y - this->y * rhs.x; } + v2d_generic operator + (const v2d_generic& rhs) const { return v2d_generic(this->x + rhs.x, this->y + rhs.y); } + v2d_generic operator - (const v2d_generic& rhs) const { return v2d_generic(this->x - rhs.x, this->y - rhs.y); } + v2d_generic operator * (const T& rhs) const { return v2d_generic(this->x * rhs, this->y * rhs); } + v2d_generic operator * (const v2d_generic& rhs) const { return v2d_generic(this->x * rhs.x, this->y * rhs.y); } + v2d_generic operator / (const T& rhs) const { return v2d_generic(this->x / rhs, this->y / rhs); } + v2d_generic operator / (const v2d_generic& rhs) const { return v2d_generic(this->x / rhs.x, this->y / rhs.y); } + v2d_generic& operator += (const v2d_generic& rhs) { this->x += rhs.x; this->y += rhs.y; return *this; } + v2d_generic& operator -= (const v2d_generic& rhs) { this->x -= rhs.x; this->y -= rhs.y; return *this; } + v2d_generic& operator *= (const T& rhs) { this->x *= rhs; this->y *= rhs; return *this; } + v2d_generic& operator /= (const T& rhs) { this->x /= rhs; this->y /= rhs; return *this; } + v2d_generic& operator *= (const v2d_generic& rhs) { this->x *= rhs.x; this->y *= rhs.y; return *this; } + v2d_generic& operator /= (const v2d_generic& rhs) { this->x /= rhs.x; this->y /= rhs.y; return *this; } + v2d_generic operator + () const { return { +x, +y }; } + v2d_generic operator - () const { return { -x, -y }; } + bool operator == (const v2d_generic& rhs) const { return (this->x == rhs.x && this->y == rhs.y); } + bool operator != (const v2d_generic& rhs) const { return (this->x != rhs.x || this->y != rhs.y); } + const std::string str() const { return std::string("(") + std::to_string(this->x) + "," + std::to_string(this->y) + ")"; } + friend std::ostream& operator << (std::ostream& os, const v2d_generic& rhs) { os << rhs.str(); return os; } + operator v2d_generic() const { return { static_cast(this->x), static_cast(this->y) }; } + operator v2d_generic() const { return { static_cast(this->x), static_cast(this->y) }; } + operator v2d_generic() const { return { static_cast(this->x), static_cast(this->y) }; } + }; + + // Note: joshinils has some good suggestions here, but they are complicated to implement at this moment, + // however they will appear in a future version of PGE + template inline v2d_generic operator * (const float& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs * (float)rhs.x), (T)(lhs * (float)rhs.y)); } + template inline v2d_generic operator * (const double& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs * (double)rhs.x), (T)(lhs * (double)rhs.y)); } + template inline v2d_generic operator * (const int& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs * (int)rhs.x), (T)(lhs * (int)rhs.y)); } + template inline v2d_generic operator / (const float& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs / (float)rhs.x), (T)(lhs / (float)rhs.y)); } + template inline v2d_generic operator / (const double& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs / (double)rhs.x), (T)(lhs / (double)rhs.y)); } + template inline v2d_generic operator / (const int& lhs, const v2d_generic& rhs) + { return v2d_generic((T)(lhs / (int)rhs.x), (T)(lhs / (int)rhs.y)); } + + // To stop dandistine crying... + template inline bool operator < (const v2d_generic& lhs, const v2d_generic& rhs) + { return lhs.y < rhs.y || (lhs.y == rhs.y && lhs.x < rhs.x); } + template inline bool operator > (const v2d_generic& lhs, const v2d_generic& rhs) + { return lhs.y > rhs.y || (lhs.y == rhs.y && lhs.x > rhs.x); } + + typedef v2d_generic vi2d; + typedef v2d_generic vu2d; + typedef v2d_generic vf2d; + typedef v2d_generic vd2d; +#endif + + + + + + + // O------------------------------------------------------------------------------O + // | olc::ResourcePack - A virtual scrambled filesystem to pack your assets into | + // O------------------------------------------------------------------------------O + struct ResourceBuffer : public std::streambuf + { + ResourceBuffer(std::ifstream& ifs, uint32_t offset, uint32_t size); + std::vector vMemory; + }; + + class ResourcePack : public std::streambuf + { + public: + ResourcePack(); + ~ResourcePack(); + bool AddFile(const std::string& sFile); + bool LoadPack(const std::string& sFile, const std::string& sKey); + bool SavePack(const std::string& sFile, const std::string& sKey); + ResourceBuffer GetFileBuffer(const std::string& sFile); + bool Loaded(); + private: + struct sResourceFile { uint32_t nSize; uint32_t nOffset; }; + std::map mapFiles; + std::ifstream baseFile; + std::vector scramble(const std::vector& data, const std::string& key); + std::string makeposix(const std::string& path); + }; + + + class ImageLoader + { + public: + ImageLoader() = default; + virtual ~ImageLoader() = default; + virtual olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) = 0; + virtual olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) = 0; + }; + + + // O------------------------------------------------------------------------------O + // | olc::Sprite - An image represented by a 2D array of olc::Pixel | + // O------------------------------------------------------------------------------O + class Sprite + { + public: + Sprite(); + Sprite(const std::string& sImageFile, olc::ResourcePack* pack = nullptr); + Sprite(int32_t w, int32_t h); + Sprite(const olc::Sprite&) = delete; + ~Sprite(); + + public: + olc::rcode LoadFromFile(const std::string& sImageFile, olc::ResourcePack* pack = nullptr); + + public: + int32_t width = 0; + int32_t height = 0; + enum Mode { NORMAL, PERIODIC, CLAMP }; + enum Flip { NONE = 0, HORIZ = 1, VERT = 2 }; + + public: + void SetSampleMode(olc::Sprite::Mode mode = olc::Sprite::Mode::NORMAL); + Pixel GetPixel(int32_t x, int32_t y) const; + bool SetPixel(int32_t x, int32_t y, Pixel p); + Pixel GetPixel(const olc::vi2d& a) const; + bool SetPixel(const olc::vi2d& a, Pixel p); + Pixel Sample(float x, float y) const; + Pixel Sample(const olc::vf2d& uv) const; + Pixel SampleBL(float u, float v) const; + Pixel SampleBL(const olc::vf2d& uv) const; + Pixel* GetData(); + olc::Sprite* Duplicate(); + olc::Sprite* Duplicate(const olc::vi2d& vPos, const olc::vi2d& vSize); + olc::vi2d Size() const; + std::vector pColData; + Mode modeSample = Mode::NORMAL; + + static std::unique_ptr loader; + }; + + // O------------------------------------------------------------------------------O + // | olc::Decal - A GPU resident storage of an olc::Sprite | + // O------------------------------------------------------------------------------O + class Decal + { + public: + Decal(olc::Sprite* spr, bool filter = false, bool clamp = true); + Decal(const uint32_t nExistingTextureResource, olc::Sprite* spr); + virtual ~Decal(); + void Update(); + void UpdateSprite(); + + public: // But dont touch + int32_t id = -1; + olc::Sprite* sprite = nullptr; + olc::vf2d vUVScale = { 1.0f, 1.0f }; + }; + + enum class DecalMode + { + NORMAL, + ADDITIVE, + MULTIPLICATIVE, + STENCIL, + ILLUMINATE, + WIREFRAME, + MODEL3D, + }; + + enum class DecalStructure + { + LINE, + FAN, + STRIP, + LIST + }; + + // O------------------------------------------------------------------------------O + // | olc::Renderable - Convenience class to keep a sprite and decal together | + // O------------------------------------------------------------------------------O + class Renderable + { + public: + Renderable() = default; + Renderable(Renderable&& r) : pSprite(std::move(r.pSprite)), pDecal(std::move(r.pDecal)) {} + Renderable(const Renderable&) = delete; + olc::rcode Load(const std::string& sFile, ResourcePack* pack = nullptr, bool filter = false, bool clamp = true); + void Create(uint32_t width, uint32_t height, bool filter = false, bool clamp = true); + olc::Decal* Decal() const; + olc::Sprite* Sprite() const; + + private: + std::unique_ptr pSprite = nullptr; + std::unique_ptr pDecal = nullptr; + }; + + + // O------------------------------------------------------------------------------O + // | Auxilliary components internal to engine | + // O------------------------------------------------------------------------------O + + struct DecalInstance + { + olc::Decal* decal = nullptr; + std::vector pos; + std::vector uv; + std::vector w; + std::vector tint; + olc::DecalMode mode = olc::DecalMode::NORMAL; + olc::DecalStructure structure = olc::DecalStructure::FAN; + uint32_t points = 0; + }; + + struct LayerDesc + { + olc::vf2d vOffset = { 0, 0 }; + olc::vf2d vScale = { 1, 1 }; + bool bShow = false; + bool bUpdate = false; + olc::Renderable pDrawTarget; + uint32_t nResID = 0; + std::vector vecDecalInstance; + olc::Pixel tint = olc::WHITE; + std::function funcHook = nullptr; + }; + + class Renderer + { + public: + virtual ~Renderer() = default; + virtual void PrepareDevice() = 0; + virtual olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) = 0; + virtual olc::rcode DestroyDevice() = 0; + virtual void DisplayFrame() = 0; + virtual void PrepareDrawing() = 0; + virtual void SetDecalMode(const olc::DecalMode& mode) = 0; + virtual void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) = 0; + virtual void DrawDecal(const olc::DecalInstance& decal) = 0; + virtual uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered = false, const bool clamp = true) = 0; + virtual void UpdateTexture(uint32_t id, olc::Sprite* spr) = 0; + virtual void ReadTexture(uint32_t id, olc::Sprite* spr) = 0; + virtual uint32_t DeleteTexture(const uint32_t id) = 0; + virtual void ApplyTexture(uint32_t id) = 0; + virtual void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) = 0; + virtual void ClearBuffer(olc::Pixel p, bool bDepth) = 0; + static olc::PixelGameEngine* ptrPGE; + }; + + class Platform + { + public: + virtual ~Platform() = default; + virtual olc::rcode ApplicationStartUp() = 0; + virtual olc::rcode ApplicationCleanUp() = 0; + virtual olc::rcode ThreadStartUp() = 0; + virtual olc::rcode ThreadCleanUp() = 0; + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) = 0; + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) = 0; + virtual olc::rcode SetWindowTitle(const std::string& s) = 0; + virtual olc::rcode StartSystemEventLoop() = 0; + virtual olc::rcode HandleSystemEvent() = 0; + static olc::PixelGameEngine* ptrPGE; + }; + + class PGEX; + + // The Static Twins (plus one) + static std::unique_ptr renderer; + static std::unique_ptr platform; + static std::map mapKeys; + + // O------------------------------------------------------------------------------O + // | olc::PixelGameEngine - The main BASE class for your application | + // O------------------------------------------------------------------------------O + class PixelGameEngine + { + public: + PixelGameEngine(); + virtual ~PixelGameEngine(); + public: + olc::rcode Construct(int32_t screen_w, int32_t screen_h, int32_t pixel_w, int32_t pixel_h, + bool full_screen = false, bool vsync = false, bool cohesion = false); + olc::rcode Start(); + + public: // User Override Interfaces + // Called once on application startup, use to load your resources + virtual bool OnUserCreate(); + // Called every frame, and provides you with a time per frame value + virtual bool OnUserUpdate(float fElapsedTime); + // Called once on application termination, so you can be one clean coder + virtual bool OnUserDestroy(); + + // 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; + // Returns whether the mouse cursor exists inside the window or outside of it. + const bool IsMouseInsideWindow() const; + // Gets Actual Window pos + const olc::vi2d& GetWindowPos() const; + // Gets Actual Window size + const olc::vi2d& GetWindowSize() const; + // Gets pixel scale + const olc::vi2d& GetPixelSize() const; + // Gets actual pixel scale + const olc::vi2d& GetScreenPixelSize() const; + // Gets "screen" size + const olc::vi2d& GetScreenSize() const; + // Gets any files dropped this frame + const std::vector& GetDroppedFiles() const; + const olc::vi2d& GetDroppedFilesPoint() const; + + public: // CONFIGURATION ROUTINES + // Layer targeting functions + void SetDrawTarget(uint8_t layer, bool bDirty = true); + void EnableLayer(uint8_t layer, bool b); + void SetLayerOffset(uint8_t layer, const olc::vf2d& offset); + void SetLayerOffset(uint8_t layer, float x, float y); + void SetLayerScale(uint8_t layer, const olc::vf2d& scale); + void SetLayerScale(uint8_t layer, float x, float y); + void SetLayerTint(uint8_t layer, const olc::Pixel& tint); + void SetLayerCustomRenderFunction(uint8_t layer, std::function f); + + std::vector& GetLayers(); + uint32_t CreateLayer(); + + // Change the pixel mode for different optimisations + // olc::Pixel::NORMAL = No transparency + // olc::Pixel::MASK = Transparent if alpha is < 255 + // olc::Pixel::ALPHA = Full transparency + void SetPixelMode(Pixel::Mode m); + Pixel::Mode GetPixelMode(); + // Use a custom blend function + void SetPixelMode(std::function pixelMode); + // Change the blend factor from between 0.0f to 1.0f; + void SetPixelBlend(float fBlend); + + + + public: // DRAWING ROUTINES + // Draws a single Pixel + virtual bool Draw(int32_t x, int32_t y, Pixel p = olc::WHITE); + bool Draw(const olc::vi2d& pos, Pixel p = olc::WHITE); + // Draws a line from (x1,y1) to (x2,y2) + void DrawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, Pixel p = olc::WHITE, uint32_t pattern = 0xFFFFFFFF); + void DrawLine(const olc::vi2d& pos1, const olc::vi2d& pos2, Pixel p = olc::WHITE, uint32_t pattern = 0xFFFFFFFF); + // Draws a circle located at (x,y) with radius + void DrawCircle(int32_t x, int32_t y, int32_t radius, Pixel p = olc::WHITE, uint8_t mask = 0xFF); + void DrawCircle(const olc::vi2d& pos, int32_t radius, Pixel p = olc::WHITE, uint8_t mask = 0xFF); + // Fills a circle located at (x,y) with radius + void FillCircle(int32_t x, int32_t y, int32_t radius, Pixel p = olc::WHITE); + void FillCircle(const olc::vi2d& pos, int32_t radius, Pixel p = olc::WHITE); + // Draws a rectangle at (x,y) to (x+w,y+h) + void DrawRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p = olc::WHITE); + void DrawRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p = olc::WHITE); + // Fills a rectangle at (x,y) to (x+w,y+h) + void FillRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p = olc::WHITE); + void FillRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p = olc::WHITE); + // Draws a triangle between points (x1,y1), (x2,y2) and (x3,y3) + void DrawTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p = olc::WHITE); + void DrawTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p = olc::WHITE); + // Flat fills a triangle between points (x1,y1), (x2,y2) and (x3,y3) + void FillTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p = olc::WHITE); + void FillTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p = olc::WHITE); + // Fill a textured and coloured triangle + void FillTexturedTriangle(const std::vector& vPoints, std::vector vTex, std::vector vColour, olc::Sprite* sprTex); + void FillTexturedPolygon(const std::vector& vPoints, const std::vector& vTex, const std::vector& vColour, olc::Sprite* sprTex, olc::DecalStructure structure = olc::DecalStructure::LIST); + // Draws an entire sprite at location (x,y) + void DrawSprite(int32_t x, int32_t y, Sprite* sprite, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + void DrawSprite(const olc::vi2d& pos, Sprite* sprite, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + // Draws an area of a sprite at location (x,y), where the + // selected area is (ox,oy) to (ox+w,oy+h) + void DrawPartialSprite(int32_t x, int32_t y, Sprite* sprite, int32_t ox, int32_t oy, int32_t w, int32_t h, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + void DrawPartialSprite(const olc::vi2d& pos, Sprite* sprite, const olc::vi2d& sourcepos, const olc::vi2d& size, uint32_t scale = 1, uint8_t flip = olc::Sprite::NONE); + // Draws a single line of text - traditional monospaced + void DrawString(int32_t x, int32_t y, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + void DrawString(const olc::vi2d& pos, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + olc::vi2d GetTextSize(const std::string& s); + // Draws a single line of text - non-monospaced + void DrawStringProp(int32_t x, int32_t y, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + void DrawStringProp(const olc::vi2d& pos, const std::string& sText, Pixel col = olc::WHITE, uint32_t scale = 1); + olc::vi2d GetTextSizeProp(const std::string& s); + + // Decal Quad functions + void SetDecalMode(const olc::DecalMode& mode); + void SetDecalStructure(const olc::DecalStructure& structure); + // Draws a whole decal, with optional scale and tinting + void DrawDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& scale = { 1.0f,1.0f }, const olc::Pixel& tint = olc::WHITE); + // Draws a region of a decal, with optional scale and tinting + void DrawPartialDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale = { 1.0f,1.0f }, const olc::Pixel& tint = olc::WHITE); + void DrawPartialDecal(const olc::vf2d& pos, const olc::vf2d& size, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + // Draws fully user controlled 4 vertices, pos(pixels), uv(pixels), colours + void DrawExplicitDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d* uv, const olc::Pixel* col, uint32_t elements = 4); + // Draws a decal with 4 arbitrary points, warping the texture to look "correct" + void DrawWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::Pixel& tint = olc::WHITE); + void DrawWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::Pixel& tint = olc::WHITE); + void DrawWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::Pixel& tint = olc::WHITE); + // As above, but you can specify a region of a decal source sprite + void DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + void DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + void DrawPartialWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint = olc::WHITE); + // Draws a decal rotated to specified angle, wit point of rotation offset + void DrawRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::vf2d& scale = { 1.0f,1.0f }, const olc::Pixel& tint = olc::WHITE); + void DrawPartialRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale = { 1.0f, 1.0f }, const olc::Pixel& tint = olc::WHITE); + // Draws a multiline string as a decal, with tiniting and scaling + void DrawStringDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + void DrawStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + void DrawShadowStringDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col = olc::WHITE, const Pixel shadowCol = olc::BLACK, const olc::vf2d& scale = { 1.0f, 1.0f },const float shadowSizeFactor=1); + void DrawShadowStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col = olc::WHITE, const Pixel shadowCol = olc::BLACK, const olc::vf2d& scale = { 1.0f, 1.0f },const float shadowSizeFactor=1); + // Draws a single shaded filled rectangle as a decal + void DrawRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col = olc::WHITE); + void FillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col = olc::WHITE); + // Draws a corner shaded rectangle as a decal + void GradientFillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel colTL, const olc::Pixel colBL, const olc::Pixel colBR, const olc::Pixel colTR); + // Draws an arbitrary convex textured polygon using GPU + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const olc::Pixel tint = olc::WHITE); + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const olc::Pixel tint = olc::WHITE); + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& tint); + void DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& colours, const olc::Pixel tint); + // Draws a line in Decal Space + void DrawLineDecal(const olc::vf2d& pos1, const olc::vf2d& pos2, Pixel p = olc::WHITE); + void DrawRotatedStringDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + void DrawRotatedStringPropDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const olc::Pixel col = olc::WHITE, const olc::vf2d& scale = { 1.0f, 1.0f }); + void DrawRotatedShadowStringDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const Pixel col = olc::WHITE, const Pixel shadowCol = olc::BLACK, const olc::vf2d& scale = { 1.0f, 1.0f },const float shadowSizeFactor=1); + void DrawRotatedShadowStringPropDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center = { 0.0f, 0.0f }, const Pixel col = olc::WHITE, const Pixel shadowCol = olc::BLACK, const olc::vf2d& scale = { 1.0f, 1.0f },const float shadowSizeFactor=1); + // 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 vWindowPos = { 0, 0 }; + olc::vi2d vWindowSize = { 0, 0 }; + olc::vi2d vViewPos = { 0, 0 }; + olc::vi2d vViewSize = { 0,0 }; + bool bFullScreen = false; + olc::vf2d vPixel = { 1.0f, 1.0f }; + bool bHasInputFocus = false; + bool bHasMouseFocus = false; + bool bEnableVSYNC = false; + float fFrameTimer = 1.0f; + float fLastElapsed = 0.0f; + int nFrameCount = 0; + bool bSuspendTextureTransfer = false; + Renderable fontRenderable; + std::vector vLayers; + uint8_t nTargetLayer = 0; + uint32_t nLastFPS = 0; + bool bPixelCohesion = false; + DecalMode nDecalMode = DecalMode::NORMAL; + DecalStructure nDecalStructure = DecalStructure::FAN; + std::function funcPixelMode; + std::chrono::time_point m_tp1, m_tp2; + std::vector vFontSpacing; + std::vector vDroppedFiles; + std::vector vDroppedFilesCache; + olc::vi2d vDroppedFilesPoint; + olc::vi2d vDroppedFilesPointCache; + + // Command Console Specific + bool bConsoleShow = false; + bool bConsoleSuspendTime = false; + olc::Key keyConsoleExit = olc::Key::F1; + std::stringstream ssConsoleOutput; + std::streambuf* sbufOldCout = nullptr; + olc::vi2d vConsoleSize; + olc::vi2d vConsoleCursor = { 0,0 }; + olc::vf2d vConsoleCharacterScale = { 1.0f, 2.0f }; + std::vector sConsoleLines; + std::list sCommandHistory; + std::list::iterator sCommandHistoryIt; + + // Text Entry Specific + bool bTextEntryEnable = false; + std::string sTextEntryString = ""; + int32_t nTextEntryCursor = 0; + std::vector> vKeyboardMap; + + + + // State of keyboard + bool pKeyNewState[256] = { 0 }; + bool pKeyOldState[256] = { 0 }; + HWButton pKeyboardState[256] = { 0 }; + + // State of mouse + bool pMouseNewState[nMouseButtons] = { 0 }; + bool pMouseOldState[nMouseButtons] = { 0 }; + HWButton pMouseState[nMouseButtons] = { 0 }; + + // The main engine thread + void EngineThread(); + + + // If anything sets this flag to false, the engine + // "should" shut down gracefully + static std::atomic bAtomActive; + + public: + // "Break In" Functions + void olc_UpdateMouse(int32_t x, int32_t y); + void olc_UpdateMouseWheel(int32_t delta); + void olc_UpdateWindowPos(int32_t x, int32_t y); + void olc_UpdateWindowSize(int32_t x, int32_t y); + void olc_UpdateViewport(); + void olc_ConstructFontSheet(); + void olc_CoreUpdate(); + void olc_PrepareEngine(); + void olc_UpdateMouseState(int32_t button, bool state); + void olc_UpdateKeyState(int32_t key, bool state); + void olc_UpdateMouseFocus(bool state); + void olc_UpdateKeyFocus(bool state); + void olc_Terminate(); + void olc_DropFiles(int32_t x, int32_t y, const std::vector& vFiles); + void olc_Reanimate(); + bool olc_IsRunning(); + + // At the very end of this file, chooses which + // components to compile + virtual void olc_ConfigureSystem(); + + // NOTE: Items Here are to be deprecated, I have left them in for now + // in case you are using them, but they will be removed. + // olc::vf2d vSubPixelOffset = { 0.0f, 0.0f }; + + public: // PGEX Stuff + friend class PGEX; + void pgex_Register(olc::PGEX* pgex); + + private: + std::vector vExtensions; + }; + + + + // O------------------------------------------------------------------------------O + // | PGE EXTENSION BASE CLASS - Permits access to PGE functions from extension | + // O------------------------------------------------------------------------------O + class PGEX + { + friend class olc::PixelGameEngine; + public: + PGEX(bool bHook = false); + + protected: + virtual void OnBeforeUserCreate(); + virtual void OnAfterUserCreate(); + virtual bool OnBeforeUserUpdate(float &fElapsedTime); + virtual void OnAfterUserUpdate(float fElapsedTime); + + protected: + static PixelGameEngine* pge; + }; +} + +#pragma endregion + + +#pragma region opengl33_iface +// In order to facilitate more advanced graphics features, some PGEX +// will rely on shaders. Instead of having each PGEX responsible for +// managing this, for convenience, this interface exists. + +#if defined(OLC_GFX_OPENGL33) + +#if defined(OLC_PLATFORM_WINAPI) +#include +#define CALLSTYLE __stdcall +#endif + +#if defined(__linux__) || defined(__FreeBSD__) +#include +#endif + +#if defined(OLC_PLATFORM_X11) +namespace X11 { +#include +} +#define CALLSTYLE +#endif + +#if defined(__APPLE__) +#define GL_SILENCE_DEPRECATION +#include +#include +#include +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) +#include +#include +#define GL_GLEXT_PROTOTYPES +#include +#include +#define CALLSTYLE +#define GL_CLAMP GL_CLAMP_TO_EDGE +#endif + +namespace olc +{ + typedef char GLchar; + typedef ptrdiff_t GLsizeiptr; + + typedef GLuint CALLSTYLE locCreateShader_t(GLenum type); + typedef GLuint CALLSTYLE locCreateProgram_t(void); + typedef void CALLSTYLE locDeleteShader_t(GLuint shader); + typedef void CALLSTYLE locCompileShader_t(GLuint shader); + typedef void CALLSTYLE locLinkProgram_t(GLuint program); + typedef void CALLSTYLE locDeleteProgram_t(GLuint program); + typedef void CALLSTYLE locAttachShader_t(GLuint program, GLuint shader); + typedef void CALLSTYLE locBindBuffer_t(GLenum target, GLuint buffer); + typedef void CALLSTYLE locBufferData_t(GLenum target, GLsizeiptr size, const void* data, GLenum usage); + typedef void CALLSTYLE locGenBuffers_t(GLsizei n, GLuint* buffers); + typedef void CALLSTYLE locVertexAttribPointer_t(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); + typedef void CALLSTYLE locEnableVertexAttribArray_t(GLuint index); + typedef void CALLSTYLE locUseProgram_t(GLuint program); + typedef void CALLSTYLE locBindVertexArray_t(GLuint array); + typedef void CALLSTYLE locGenVertexArrays_t(GLsizei n, GLuint* arrays); + typedef void CALLSTYLE locGetShaderInfoLog_t(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); + typedef GLint CALLSTYLE locGetUniformLocation_t(GLuint program, const GLchar* name); + typedef void CALLSTYLE locUniform1f_t(GLint location, GLfloat v0); + typedef void CALLSTYLE locUniform1i_t(GLint location, GLint v0); + typedef void CALLSTYLE locUniform2fv_t(GLint location, GLsizei count, const GLfloat* value); + typedef void CALLSTYLE locActiveTexture_t(GLenum texture); + typedef void CALLSTYLE locGenFrameBuffers_t(GLsizei n, GLuint* ids); + typedef void CALLSTYLE locBindFrameBuffer_t(GLenum target, GLuint fb); + typedef GLenum CALLSTYLE locCheckFrameBufferStatus_t(GLenum target); + typedef void CALLSTYLE locDeleteFrameBuffers_t(GLsizei n, const GLuint* fbs); + typedef void CALLSTYLE locFrameBufferTexture2D_t(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + typedef void CALLSTYLE locDrawBuffers_t(GLsizei n, const GLenum* bufs); + typedef void CALLSTYLE locBlendFuncSeparate_t(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +#if defined(OLC_PLATFORM_WINAPI) + typedef void __stdcall locSwapInterval_t(GLsizei n); +#endif + +#if defined(OLC_PLATFORM_X11) + typedef int(locSwapInterval_t)(X11::Display* dpy, X11::GLXDrawable drawable, int interval); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); + typedef EGLBoolean(locSwapInterval_t)(EGLDisplay display, EGLint interval); +#else + typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar** string, const GLint* length); +#endif + +} // olc namespace +#endif // OpenGL33 Definitions +#pragma endregion + + +#endif // OLC_PGE_DEF + + + // O------------------------------------------------------------------------------O + // | START OF OLC_PGE_APPLICATION | + // O------------------------------------------------------------------------------O +#ifdef OLC_PGE_APPLICATION +#undef OLC_PGE_APPLICATION + + // O------------------------------------------------------------------------------O + // | olcPixelGameEngine INTERFACE IMPLEMENTATION (CORE) | + // | Note: The core implementation is platform independent | + // O------------------------------------------------------------------------------O +#pragma region pge_implementation +namespace olc +{ + // O------------------------------------------------------------------------------O + // | olc::Pixel IMPLEMENTATION | + // O------------------------------------------------------------------------------O + Pixel::Pixel() + { r = 0; g = 0; b = 0; a = nDefaultAlpha; } + + Pixel::Pixel(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) + { n = red | (green << 8) | (blue << 16) | (alpha << 24); } // Thanks jarekpelczar + + Pixel::Pixel(uint32_t p) + { n = p; } + + bool Pixel::operator==(const Pixel& p) const + { return n == p.n; } + + bool Pixel::operator!=(const Pixel& p) const + { return n != p.n; } + + Pixel Pixel::operator * (const float i) const + { + float fR = std::min(255.0f, std::max(0.0f, float(r) * i)); + float fG = std::min(255.0f, std::max(0.0f, float(g) * i)); + float fB = std::min(255.0f, std::max(0.0f, float(b) * i)); + return Pixel(uint8_t(fR), uint8_t(fG), uint8_t(fB), a); + } + + Pixel Pixel::operator / (const float i) const + { + float fR = std::min(255.0f, std::max(0.0f, float(r) / i)); + float fG = std::min(255.0f, std::max(0.0f, float(g) / i)); + float fB = std::min(255.0f, std::max(0.0f, float(b) / i)); + return Pixel(uint8_t(fR), uint8_t(fG), uint8_t(fB), a); + } + + Pixel& Pixel::operator *=(const float i) + { + this->r = uint8_t(std::min(255.0f, std::max(0.0f, float(r) * i))); + this->g = uint8_t(std::min(255.0f, std::max(0.0f, float(g) * i))); + this->b = uint8_t(std::min(255.0f, std::max(0.0f, float(b) * i))); + return *this; + } + + Pixel& Pixel::operator /=(const float i) + { + this->r = uint8_t(std::min(255.0f, std::max(0.0f, float(r) / i))); + this->g = uint8_t(std::min(255.0f, std::max(0.0f, float(g) / i))); + this->b = uint8_t(std::min(255.0f, std::max(0.0f, float(b) / i))); + return *this; + } + + Pixel Pixel::operator + (const Pixel& p) const + { + uint8_t nR = uint8_t(std::min(255, std::max(0, int(r) + int(p.r)))); + uint8_t nG = uint8_t(std::min(255, std::max(0, int(g) + int(p.g)))); + uint8_t nB = uint8_t(std::min(255, std::max(0, int(b) + int(p.b)))); + return Pixel(nR, nG, nB, a); + } + + Pixel Pixel::operator - (const Pixel& p) const + { + uint8_t nR = uint8_t(std::min(255, std::max(0, int(r) - int(p.r)))); + uint8_t nG = uint8_t(std::min(255, std::max(0, int(g) - int(p.g)))); + uint8_t nB = uint8_t(std::min(255, std::max(0, int(b) - int(p.b)))); + return Pixel(nR, nG, nB, a); + } + + Pixel& Pixel::operator += (const Pixel& p) + { + this->r = uint8_t(std::min(255, std::max(0, int(r) + int(p.r)))); + this->g = uint8_t(std::min(255, std::max(0, int(g) + int(p.g)))); + this->b = uint8_t(std::min(255, std::max(0, int(b) + int(p.b)))); + return *this; + } + + Pixel& Pixel::operator -= (const Pixel& p) // Thanks Au Lit + { + this->r = uint8_t(std::min(255, std::max(0, int(r) - int(p.r)))); + this->g = uint8_t(std::min(255, std::max(0, int(g) - int(p.g)))); + this->b = uint8_t(std::min(255, std::max(0, int(b) - int(p.b)))); + return *this; + } + + Pixel Pixel::operator * (const Pixel& p) const + { + uint8_t nR = uint8_t(std::min(255.0f, std::max(0.0f, float(r) * float(p.r) / 255.0f))); + uint8_t nG = uint8_t(std::min(255.0f, std::max(0.0f, float(g) * float(p.g) / 255.0f))); + uint8_t nB = uint8_t(std::min(255.0f, std::max(0.0f, float(b) * float(p.b) / 255.0f))); + uint8_t nA = uint8_t(std::min(255.0f, std::max(0.0f, float(a) * float(p.a) / 255.0f))); + return Pixel(nR, nG, nB, nA); + } + + Pixel& Pixel::operator *=(const Pixel& p) + { + this->r = uint8_t(std::min(255.0f, std::max(0.0f, float(r) * float(p.r) / 255.0f))); + this->g = uint8_t(std::min(255.0f, std::max(0.0f, float(g) * float(p.g) / 255.0f))); + this->b = uint8_t(std::min(255.0f, std::max(0.0f, float(b) * float(p.b) / 255.0f))); + this->a = uint8_t(std::min(255.0f, std::max(0.0f, float(a) * float(p.a) / 255.0f))); + return *this; + } + + Pixel Pixel::inv() const + { + uint8_t nR = uint8_t(std::min(255, std::max(0, 255 - int(r)))); + uint8_t nG = uint8_t(std::min(255, std::max(0, 255 - int(g)))); + uint8_t nB = uint8_t(std::min(255, std::max(0, 255 - int(b)))); + return Pixel(nR, nG, nB, a); + } + + Pixel PixelF(float red, float green, float blue, float alpha) + { return Pixel(uint8_t(red * 255.0f), uint8_t(green * 255.0f), uint8_t(blue * 255.0f), uint8_t(alpha * 255.0f)); } + + Pixel PixelLerp(const olc::Pixel& p1, const olc::Pixel& p2, float t) + { return (p2 * t) + p1 * (1.0f - t); } + + // O------------------------------------------------------------------------------O + // | olc::Sprite IMPLEMENTATION | + // O------------------------------------------------------------------------------O + Sprite::Sprite() + { width = 0; height = 0; } + + Sprite::Sprite(const std::string& sImageFile, olc::ResourcePack* pack) + { LoadFromFile(sImageFile, pack); } + + Sprite::Sprite(int32_t w, int32_t h) + { + width = w; height = h; + pColData.resize(width * height); + pColData.resize(width * height, nDefaultPixel); + } + + Sprite::~Sprite() + { pColData.clear(); } + + void Sprite::SetSampleMode(olc::Sprite::Mode mode) + { modeSample = mode; } + + Pixel Sprite::GetPixel(const olc::vi2d& a) const + { return GetPixel(a.x, a.y); } + + bool Sprite::SetPixel(const olc::vi2d& a, Pixel p) + { return SetPixel(a.x, a.y, p); } + + Pixel Sprite::GetPixel(int32_t x, int32_t y) const + { + if (modeSample == olc::Sprite::Mode::NORMAL) + { + if (x >= 0 && x < width && y >= 0 && y < height) + return pColData[y * width + x]; + else + return Pixel(0, 0, 0, 0); + } + else + { + if (modeSample == olc::Sprite::Mode::PERIODIC) + return pColData[abs(y % height) * width + abs(x % width)]; + else + return pColData[std::max(0, std::min(y, height-1)) * width + std::max(0, std::min(x, width-1))]; + } + } + + bool Sprite::SetPixel(int32_t x, int32_t y, Pixel p) + { + if (x >= 0 && x < width && y >= 0 && y < height) + { + pColData[y * width + x] = p; + return true; + } + else + return false; + } + + Pixel Sprite::Sample(float x, float y) const + { + int32_t sx = std::min((int32_t)((x * (float)width)), width - 1); + int32_t sy = std::min((int32_t)((y * (float)height)), height - 1); + return GetPixel(sx, sy); + } + + Pixel Sprite::Sample(const olc::vf2d& uv) const + { + return Sample(uv.x, uv.y); + } + + Pixel Sprite::SampleBL(float u, float v) const + { + u = u * width - 0.5f; + v = v * height - 0.5f; + int x = (int)floor(u); // cast to int rounds toward zero, not downward + int y = (int)floor(v); // Thanks @joshinils + float u_ratio = u - x; + float v_ratio = v - y; + float u_opposite = 1 - u_ratio; + float v_opposite = 1 - v_ratio; + + olc::Pixel p1 = GetPixel(std::max(x, 0), std::max(y, 0)); + olc::Pixel p2 = GetPixel(std::min(x + 1, (int)width - 1), std::max(y, 0)); + olc::Pixel p3 = GetPixel(std::max(x, 0), std::min(y + 1, (int)height - 1)); + olc::Pixel p4 = GetPixel(std::min(x + 1, (int)width - 1), std::min(y + 1, (int)height - 1)); + + return olc::Pixel( + (uint8_t)((p1.r * u_opposite + p2.r * u_ratio) * v_opposite + (p3.r * u_opposite + p4.r * u_ratio) * v_ratio), + (uint8_t)((p1.g * u_opposite + p2.g * u_ratio) * v_opposite + (p3.g * u_opposite + p4.g * u_ratio) * v_ratio), + (uint8_t)((p1.b * u_opposite + p2.b * u_ratio) * v_opposite + (p3.b * u_opposite + p4.b * u_ratio) * v_ratio)); + } + + Pixel Sprite::SampleBL(const olc::vf2d& uv) const + { + return SampleBL(uv.x, uv.y); + } + + Pixel* Sprite::GetData() + { return pColData.data(); } + + + olc::rcode Sprite::LoadFromFile(const std::string& sImageFile, olc::ResourcePack* pack) + { + UNUSED(pack); + return loader->LoadImageResource(this, sImageFile, pack); + } + + olc::Sprite* Sprite::Duplicate() + { + olc::Sprite* spr = new olc::Sprite(width, height); + std::memcpy(spr->GetData(), GetData(), width * height * sizeof(olc::Pixel)); + spr->modeSample = modeSample; + return spr; + } + + olc::Sprite* Sprite::Duplicate(const olc::vi2d& vPos, const olc::vi2d& vSize) + { + olc::Sprite* spr = new olc::Sprite(vSize.x, vSize.y); + for (int y = 0; y < vSize.y; y++) + for (int x = 0; x < vSize.x; x++) + spr->SetPixel(x, y, GetPixel(vPos.x + x, vPos.y + y)); + return spr; + } + + olc::vi2d olc::Sprite::Size() const + { + return { width, height }; + } + + // O------------------------------------------------------------------------------O + // | olc::Decal IMPLEMENTATION | + // O------------------------------------------------------------------------------O + Decal::Decal(olc::Sprite* spr, bool filter, bool clamp) + { + id = -1; + if (spr == nullptr) return; + sprite = spr; + id = renderer->CreateTexture(sprite->width, sprite->height, filter, clamp); + Update(); + } + + Decal::Decal(const uint32_t nExistingTextureResource, olc::Sprite* spr) + { + if (spr == nullptr) return; + id = nExistingTextureResource; + } + + void Decal::Update() + { + if (sprite == nullptr) return; + vUVScale = { 1.0f / float(sprite->width), 1.0f / float(sprite->height) }; + renderer->ApplyTexture(id); + renderer->UpdateTexture(id, sprite); + } + + void Decal::UpdateSprite() + { + if (sprite == nullptr) return; + renderer->ApplyTexture(id); + renderer->ReadTexture(id, sprite); + } + + Decal::~Decal() + { + if (id != -1) + { + renderer->DeleteTexture(id); + id = -1; + } + } + + void Renderable::Create(uint32_t width, uint32_t height, bool filter, bool clamp) + { + pSprite = std::make_unique(width, height); + pDecal = std::make_unique(pSprite.get(), filter, clamp); + } + + olc::rcode Renderable::Load(const std::string& sFile, ResourcePack* pack, bool filter, bool clamp) + { + pSprite = std::make_unique(); + if (pSprite->LoadFromFile(sFile, pack) == olc::rcode::OK) + { + pDecal = std::make_unique(pSprite.get(), filter, clamp); + return olc::rcode::OK; + } + else + { + pSprite.release(); + pSprite = nullptr; + return olc::rcode::NO_FILE; + } + } + + olc::Decal* Renderable::Decal() const + { return pDecal.get(); } + + olc::Sprite* Renderable::Sprite() const + { return pSprite.get(); } + + // O------------------------------------------------------------------------------O + // | olc::ResourcePack IMPLEMENTATION | + // O------------------------------------------------------------------------------O + + + //============================================================= + // Resource Packs - Allows you to store files in one large + // scrambled file - Thanks MaGetzUb for debugging a null char in std::stringstream bug + ResourceBuffer::ResourceBuffer(std::ifstream& ifs, uint32_t offset, uint32_t size) + { + vMemory.resize(size); + ifs.seekg(offset); ifs.read(vMemory.data(), vMemory.size()); + setg(vMemory.data(), vMemory.data(), vMemory.data() + size); + } + + ResourcePack::ResourcePack() { } + ResourcePack::~ResourcePack() { baseFile.close(); } + + bool ResourcePack::AddFile(const std::string& sFile) + { + const std::string file = makeposix(sFile); + + if (_gfs::exists(file)) + { + sResourceFile e; + e.nSize = (uint32_t)_gfs::file_size(file); + e.nOffset = 0; // Unknown at this stage + mapFiles[file] = e; + return true; + } + return false; + } + + bool ResourcePack::LoadPack(const std::string& sFile, const std::string& sKey) + { + // Open the resource file + baseFile.open(sFile, std::ifstream::binary); + if (!baseFile.is_open()) return false; + + // 1) Read Scrambled index + uint32_t nIndexSize = 0; + baseFile.read((char*)&nIndexSize, sizeof(uint32_t)); + + std::vector buffer(nIndexSize); + for (uint32_t j = 0; j < nIndexSize; j++) + buffer[j] = baseFile.get(); + + std::vector decoded = scramble(buffer, sKey); + size_t pos = 0; + auto read = [&decoded, &pos](char* dst, size_t size) { + memcpy((void*)dst, (const void*)(decoded.data() + pos), size); + pos += size; + }; + + auto get = [&read]() -> int { char c; read(&c, 1); return c; }; + + // 2) Read Map + uint32_t nMapEntries = 0; + read((char*)&nMapEntries, sizeof(uint32_t)); + for (uint32_t i = 0; i < nMapEntries; i++) + { + uint32_t nFilePathSize = 0; + read((char*)&nFilePathSize, sizeof(uint32_t)); + + std::string sFileName(nFilePathSize, ' '); + for (uint32_t j = 0; j < nFilePathSize; j++) + sFileName[j] = get(); + + sResourceFile e; + read((char*)&e.nSize, sizeof(uint32_t)); + read((char*)&e.nOffset, sizeof(uint32_t)); + mapFiles[sFileName] = e; + } + + // Don't close base file! we will provide a stream + // pointer when the file is requested + return true; + } + + bool ResourcePack::SavePack(const std::string& sFile, const std::string& sKey) + { + // Create/Overwrite the resource file + std::ofstream ofs(sFile, std::ofstream::binary); + if (!ofs.is_open()) return false; + + // Iterate through map + uint32_t nIndexSize = 0; // Unknown for now + ofs.write((char*)&nIndexSize, sizeof(uint32_t)); + uint32_t nMapSize = uint32_t(mapFiles.size()); + ofs.write((char*)&nMapSize, sizeof(uint32_t)); + for (auto& e : mapFiles) + { + // Write the path of the file + size_t nPathSize = e.first.size(); + ofs.write((char*)&nPathSize, sizeof(uint32_t)); + ofs.write(e.first.c_str(), nPathSize); + + // Write the file entry properties + ofs.write((char*)&e.second.nSize, sizeof(uint32_t)); + ofs.write((char*)&e.second.nOffset, sizeof(uint32_t)); + } + + // 2) Write the individual Data + std::streampos offset = ofs.tellp(); + nIndexSize = (uint32_t)offset; + for (auto& e : mapFiles) + { + // Store beginning of file offset within resource pack file + e.second.nOffset = (uint32_t)offset; + + // Load the file to be added + std::vector vBuffer(e.second.nSize); + std::ifstream i(e.first, std::ifstream::binary); + i.read((char*)vBuffer.data(), e.second.nSize); + i.close(); + + // Write the loaded file into resource pack file + ofs.write((char*)vBuffer.data(), e.second.nSize); + offset += e.second.nSize; + } + + // 3) Scramble Index + std::vector stream; + auto write = [&stream](const char* data, size_t size) { + size_t sizeNow = stream.size(); + stream.resize(sizeNow + size); + memcpy(stream.data() + sizeNow, data, size); + }; + + // Iterate through map + write((char*)&nMapSize, sizeof(uint32_t)); + for (auto& e : mapFiles) + { + // Write the path of the file + size_t nPathSize = e.first.size(); + write((char*)&nPathSize, sizeof(uint32_t)); + write(e.first.c_str(), nPathSize); + + // Write the file entry properties + write((char*)&e.second.nSize, sizeof(uint32_t)); + write((char*)&e.second.nOffset, sizeof(uint32_t)); + } + std::vector sIndexString = scramble(stream, sKey); + uint32_t nIndexStringLen = uint32_t(sIndexString.size()); + // 4) Rewrite Map (it has been updated with offsets now) + // at start of file + ofs.seekp(0, std::ios::beg); + ofs.write((char*)&nIndexStringLen, sizeof(uint32_t)); + ofs.write(sIndexString.data(), nIndexStringLen); + ofs.close(); + return true; + } + + ResourceBuffer ResourcePack::GetFileBuffer(const std::string& sFile) + { return ResourceBuffer(baseFile, mapFiles[sFile].nOffset, mapFiles[sFile].nSize); } + + bool ResourcePack::Loaded() + { return baseFile.is_open(); } + + std::vector ResourcePack::scramble(const std::vector& data, const std::string& key) + { + if (key.empty()) return data; + std::vector o; + size_t c = 0; + for (auto s : data) o.push_back(s ^ key[(c++) % key.size()]); + return o; + }; + + std::string ResourcePack::makeposix(const std::string& path) + { + std::string o; + for (auto s : path) o += std::string(1, s == '\\' ? '/' : s); + return o; + }; + + // O------------------------------------------------------------------------------O + // | olc::PixelGameEngine IMPLEMENTATION | + // O------------------------------------------------------------------------------O + PixelGameEngine::PixelGameEngine() + { + sAppName = "Undefined"; + olc::PGEX::pge = this; + + // Bring in relevant Platform & Rendering systems depending + // on compiler parameters + olc_ConfigureSystem(); + } + + PixelGameEngine::~PixelGameEngine() + {} + + + olc::rcode PixelGameEngine::Construct(int32_t screen_w, int32_t screen_h, int32_t pixel_w, int32_t pixel_h, bool full_screen, bool vsync, bool cohesion) + { + bPixelCohesion = cohesion; + vScreenSize = { screen_w, screen_h }; + vInvScreenSize = { 1.0f / float(screen_w), 1.0f / float(screen_h) }; + vPixelSize = { pixel_w, pixel_h }; + vWindowSize = vScreenSize * vPixelSize; + bFullScreen = full_screen; + bEnableVSYNC = vsync; + vPixel = 2.0f / vScreenSize; + + if (vPixelSize.x <= 0 || vPixelSize.y <= 0 || vScreenSize.x <= 0 || vScreenSize.y <= 0) + return olc::FAIL; + return olc::OK; + } + + + void PixelGameEngine::SetScreenSize(int w, int h) + { + vScreenSize = { w, h }; + vInvScreenSize = { 1.0f / float(w), 1.0f / float(h) }; + for (auto& layer : vLayers) + { + layer.pDrawTarget.Create(vScreenSize.x, vScreenSize.y); + layer.bUpdate = true; + } + SetDrawTarget(nullptr); + renderer->ClearBuffer(olc::BLACK, true); + renderer->DisplayFrame(); + renderer->ClearBuffer(olc::BLACK, true); + renderer->UpdateViewport(vViewPos, vViewSize); + } + +#if !defined(PGE_USE_CUSTOM_START) + olc::rcode PixelGameEngine::Start() + { + if (platform->ApplicationStartUp() != olc::OK) return olc::FAIL; + + // Construct the window + if (platform->CreateWindowPane({ 30,30 }, vWindowSize, bFullScreen) != olc::OK) return olc::FAIL; + olc_UpdateWindowPos(30,30); + 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 bool PixelGameEngine::IsMouseInsideWindow() const + { return GetMouseX()>=0&&GetMouseY()>=0&&GetMouseX()SetPixel(x, y, p); + } + + if (nPixelMode == Pixel::MASK) + { + if (p.a == 255) + return pDrawTarget->SetPixel(x, y, p); + } + + if (nPixelMode == Pixel::ALPHA) + { + Pixel d = pDrawTarget->GetPixel(x, y); + float a = (float)(p.a / 255.0f) * fBlendFactor; + float c = 1.0f - a; + float r = a * (float)p.r + c * (float)d.r; + float g = a * (float)p.g + c * (float)d.g; + float b = a * (float)p.b + c * (float)d.b; + return pDrawTarget->SetPixel(x, y, Pixel((uint8_t)r, (uint8_t)g, (uint8_t)b/*, (uint8_t)(p.a * fBlendFactor)*/)); + } + + if (nPixelMode == Pixel::CUSTOM) + { + return pDrawTarget->SetPixel(x, y, funcPixelMode(x, y, p, pDrawTarget->GetPixel(x, y))); + } + + return false; + } + + + void PixelGameEngine::DrawLine(const olc::vi2d& pos1, const olc::vi2d& pos2, Pixel p, uint32_t pattern) + { DrawLine(pos1.x, pos1.y, pos2.x, pos2.y, p, pattern); } + + void PixelGameEngine::DrawLine(int32_t x1, int32_t y1, int32_t x2, int32_t y2, Pixel p, uint32_t pattern) + { + int x, y, dx, dy, dx1, dy1, px, py, xe, ye, i; + dx = x2 - x1; dy = y2 - y1; + + auto rol = [&](void) { pattern = (pattern << 1) | (pattern >> 31); return pattern & 1; }; + + olc::vi2d p1(x1, y1), p2(x2, y2); + //if (!ClipLineToScreen(p1, p2)) + // return; + x1 = p1.x; y1 = p1.y; + x2 = p2.x; y2 = p2.y; + + // straight lines idea by gurkanctn + if (dx == 0) // Line is vertical + { + if (y2 < y1) std::swap(y1, y2); + for (y = y1; y <= y2; y++) if (rol()) Draw(x1, y, p); + return; + } + + if (dy == 0) // Line is horizontal + { + if (x2 < x1) std::swap(x1, x2); + for (x = x1; x <= x2; x++) if (rol()) Draw(x, y1, p); + return; + } + + // Line is Funk-aye + dx1 = abs(dx); dy1 = abs(dy); + px = 2 * dy1 - dx1; py = 2 * dx1 - dy1; + if (dy1 <= dx1) + { + if (dx >= 0) + { + x = x1; y = y1; xe = x2; + } + else + { + x = x2; y = y2; xe = x1; + } + + if (rol()) Draw(x, y, p); + + for (i = 0; x < xe; i++) + { + x = x + 1; + if (px < 0) + px = px + 2 * dy1; + else + { + if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0)) y = y + 1; else y = y - 1; + px = px + 2 * (dy1 - dx1); + } + if (rol()) Draw(x, y, p); + } + } + else + { + if (dy >= 0) + { + x = x1; y = y1; ye = y2; + } + else + { + x = x2; y = y2; ye = y1; + } + + if (rol()) Draw(x, y, p); + + for (i = 0; y < ye; i++) + { + y = y + 1; + if (py <= 0) + py = py + 2 * dx1; + else + { + if ((dx < 0 && dy < 0) || (dx > 0 && dy > 0)) x = x + 1; else x = x - 1; + py = py + 2 * (dx1 - dy1); + } + if (rol()) Draw(x, y, p); + } + } + } + + void PixelGameEngine::DrawCircle(const olc::vi2d& pos, int32_t radius, Pixel p, uint8_t mask) + { DrawCircle(pos.x, pos.y, radius, p, mask); } + + void PixelGameEngine::DrawCircle(int32_t x, int32_t y, int32_t radius, Pixel p, uint8_t mask) + { // Thanks to IanM-Matrix1 #PR121 + if (radius < 0 || x < -radius || y < -radius || x - GetDrawTargetWidth() > radius || y - GetDrawTargetHeight() > radius) + return; + + if (radius > 0) + { + int x0 = 0; + int y0 = radius; + int d = 3 - 2 * radius; + + while (y0 >= x0) // only formulate 1/8 of circle + { + // Draw even octants + if (mask & 0x01) Draw(x + x0, y - y0, p);// Q6 - upper right right + if (mask & 0x04) Draw(x + y0, y + x0, p);// Q4 - lower lower right + if (mask & 0x10) Draw(x - x0, y + y0, p);// Q2 - lower left left + if (mask & 0x40) Draw(x - y0, y - x0, p);// Q0 - upper upper left + if (x0 != 0 && x0 != y0) + { + if (mask & 0x02) Draw(x + y0, y - x0, p);// Q7 - upper upper right + if (mask & 0x08) Draw(x + x0, y + y0, p);// Q5 - lower right right + if (mask & 0x20) Draw(x - y0, y + x0, p);// Q3 - lower lower left + if (mask & 0x80) Draw(x - x0, y - y0, p);// Q1 - upper left left + } + + if (d < 0) + d += 4 * x0++ + 6; + else + d += 4 * (x0++ - y0--) + 10; + } + } + else + Draw(x, y, p); + } + + void PixelGameEngine::FillCircle(const olc::vi2d& pos, int32_t radius, Pixel p) + { FillCircle(pos.x, pos.y, radius, p); } + + void PixelGameEngine::FillCircle(int32_t x, int32_t y, int32_t radius, Pixel p) + { // Thanks to IanM-Matrix1 #PR121 + if (radius < 0 || x < -radius || y < -radius || x - GetDrawTargetWidth() > radius || y - GetDrawTargetHeight() > radius) + return; + + if (radius > 0) + { + int x0 = 0; + int y0 = radius; + int d = 3 - 2 * radius; + + auto drawline = [&](int sx, int ex, int y) + { + for (int x = sx; x <= ex; x++) + Draw(x, y, p); + }; + + while (y0 >= x0) + { + drawline(x - y0, x + y0, y - x0); + if (x0 > 0) drawline(x - y0, x + y0, y + x0); + + if (d < 0) + d += 4 * x0++ + 6; + else + { + if (x0 != y0) + { + drawline(x - x0, x + x0, y - y0); + drawline(x - x0, x + x0, y + y0); + } + d += 4 * (x0++ - y0--) + 10; + } + } + } + else + Draw(x, y, p); + } + + void PixelGameEngine::DrawRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p) + { DrawRect(pos.x, pos.y, size.x, size.y, p); } + + void PixelGameEngine::DrawRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p) + { + DrawLine(x, y, x + w, y, p); + DrawLine(x + w, y, x + w, y + h, p); + DrawLine(x + w, y + h, x, y + h, p); + DrawLine(x, y + h, x, y, p); + } + + void PixelGameEngine::Clear(Pixel p) + { + int pixels = GetDrawTargetWidth() * GetDrawTargetHeight(); + Pixel* m = GetDrawTarget()->GetData(); + for (int i = 0; i < pixels; i++) m[i] = p; + } + + void PixelGameEngine::ClearBuffer(Pixel p, bool bDepth) + { renderer->ClearBuffer(p, bDepth); } + + olc::Sprite* PixelGameEngine::GetFontSprite() + { return fontRenderable.Sprite(); } + + bool PixelGameEngine::ClipLineToScreen(olc::vi2d& in_p1, olc::vi2d& in_p2) + { + // https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm + static constexpr int SEG_I = 0b0000, SEG_L = 0b0001, SEG_R = 0b0010, SEG_B = 0b0100, SEG_T = 0b1000; + auto Segment = [&vScreenSize = vScreenSize](const olc::vi2d& v) + { + int i = SEG_I; + if (v.x < 0) i |= SEG_L; else if (v.x > vScreenSize.x) i |= SEG_R; + if (v.y < 0) i |= SEG_B; else if (v.y > vScreenSize.y) i |= SEG_T; + return i; + }; + + int s1 = Segment(in_p1), s2 = Segment(in_p2); + + while (true) + { + if (!(s1 | s2)) return true; + else if (s1 & s2) return false; + else + { + int s3 = s2 > s1 ? s2 : s1; + olc::vi2d n; + if (s3 & SEG_T) { n.x = in_p1.x + (in_p2.x - in_p1.x) * (vScreenSize.y - in_p1.y) / (in_p2.y - in_p1.y); n.y = vScreenSize.y; } + else if (s3 & SEG_B) { n.x = in_p1.x + (in_p2.x - in_p1.x) * (0 - in_p1.y) / (in_p2.y - in_p1.y); n.y = 0; } + else if (s3 & SEG_R) { n.x = vScreenSize.x; n.y = in_p1.y + (in_p2.y - in_p1.y) * (vScreenSize.x - in_p1.x) / (in_p2.x - in_p1.x); } + else if (s3 & SEG_L) { n.x = 0; n.y = in_p1.y + (in_p2.y - in_p1.y) * (0 - in_p1.x) / (in_p2.x - in_p1.x); } + if (s3 == s1) { in_p1 = n; s1 = Segment(in_p1); } + else { in_p2 = n; s2 = Segment(in_p2); } + } + } + return true; + } + + void PixelGameEngine::EnablePixelTransfer(const bool bEnable) + { + bSuspendTextureTransfer = !bEnable; + } + + + void PixelGameEngine::FillRect(const olc::vi2d& pos, const olc::vi2d& size, Pixel p) + { FillRect(pos.x, pos.y, size.x, size.y, p); } + + void PixelGameEngine::FillRect(int32_t x, int32_t y, int32_t w, int32_t h, Pixel p) + { + int32_t x2 = x + w; + int32_t y2 = y + h; + + if (x < 0) x = 0; + if (x >= (int32_t)GetDrawTargetWidth()) x = (int32_t)GetDrawTargetWidth(); + if (y < 0) y = 0; + if (y >= (int32_t)GetDrawTargetHeight()) y = (int32_t)GetDrawTargetHeight(); + + if (x2 < 0) x2 = 0; + if (x2 >= (int32_t)GetDrawTargetWidth()) x2 = (int32_t)GetDrawTargetWidth(); + if (y2 < 0) y2 = 0; + if (y2 >= (int32_t)GetDrawTargetHeight()) y2 = (int32_t)GetDrawTargetHeight(); + + for (int i = x; i < x2; i++) + for (int j = y; j < y2; j++) + Draw(i, j, p); + } + + void PixelGameEngine::DrawTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p) + { DrawTriangle(pos1.x, pos1.y, pos2.x, pos2.y, pos3.x, pos3.y, p); } + + void PixelGameEngine::DrawTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p) + { + DrawLine(x1, y1, x2, y2, p); + DrawLine(x2, y2, x3, y3, p); + DrawLine(x3, y3, x1, y1, p); + } + + void PixelGameEngine::FillTriangle(const olc::vi2d& pos1, const olc::vi2d& pos2, const olc::vi2d& pos3, Pixel p) + { FillTriangle(pos1.x, pos1.y, pos2.x, pos2.y, pos3.x, pos3.y, p); } + + // https://www.avrfreaks.net/sites/default/files/triangles.c + void PixelGameEngine::FillTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, Pixel p) + { + auto drawline = [&](int sx, int ex, int ny) { for (int i = sx; i <= ex; i++) Draw(i, ny, p); }; + + int t1x, t2x, y, minx, maxx, t1xp, t2xp; + bool changed1 = false; + bool changed2 = false; + int signx1, signx2, dx1, dy1, dx2, dy2; + int e1, e2; + // Sort vertices + if (y1 > y2) { std::swap(y1, y2); std::swap(x1, x2); } + if (y1 > y3) { std::swap(y1, y3); std::swap(x1, x3); } + if (y2 > y3) { std::swap(y2, y3); std::swap(x2, x3); } + + t1x = t2x = x1; y = y1; // Starting points + dx1 = (int)(x2 - x1); + if (dx1 < 0) { dx1 = -dx1; signx1 = -1; } + else signx1 = 1; + dy1 = (int)(y2 - y1); + + dx2 = (int)(x3 - x1); + if (dx2 < 0) { dx2 = -dx2; signx2 = -1; } + else signx2 = 1; + dy2 = (int)(y3 - y1); + + if (dy1 > dx1) { std::swap(dx1, dy1); changed1 = true; } + if (dy2 > dx2) { std::swap(dy2, dx2); changed2 = true; } + + e2 = (int)(dx2 >> 1); + // Flat top, just process the second half + if (y1 == y2) goto next; + e1 = (int)(dx1 >> 1); + + for (int i = 0; i < dx1;) { + t1xp = 0; t2xp = 0; + if (t1x < t2x) { minx = t1x; maxx = t2x; } + else { minx = t2x; maxx = t1x; } + // process first line until y value is about to change + while (i < dx1) { + i++; + e1 += dy1; + while (e1 >= dx1) { + e1 -= dx1; + if (changed1) t1xp = signx1;//t1x += signx1; + else goto next1; + } + if (changed1) break; + else t1x += signx1; + } + // Move line + next1: + // process second line until y value is about to change + while (1) { + e2 += dy2; + while (e2 >= dx2) { + e2 -= dx2; + if (changed2) t2xp = signx2;//t2x += signx2; + else goto next2; + } + if (changed2) break; + else t2x += signx2; + } + next2: + if (minx > t1x) minx = t1x; + if (minx > t2x) minx = t2x; + if (maxx < t1x) maxx = t1x; + if (maxx < t2x) maxx = t2x; + drawline(minx, maxx, y); // Draw line from min to max points found on the y + // Now increase y + if (!changed1) t1x += signx1; + t1x += t1xp; + if (!changed2) t2x += signx2; + t2x += t2xp; + y += 1; + if (y == y2) break; + } + next: + // Second half + dx1 = (int)(x3 - x2); if (dx1 < 0) { dx1 = -dx1; signx1 = -1; } + else signx1 = 1; + dy1 = (int)(y3 - y2); + t1x = x2; + + if (dy1 > dx1) { // swap values + std::swap(dy1, dx1); + changed1 = true; + } + else changed1 = false; + + e1 = (int)(dx1 >> 1); + + for (int i = 0; i <= dx1; i++) { + t1xp = 0; t2xp = 0; + if (t1x < t2x) { minx = t1x; maxx = t2x; } + else { minx = t2x; maxx = t1x; } + // process first line until y value is about to change + while (i < dx1) { + e1 += dy1; + while (e1 >= dx1) { + e1 -= dx1; + if (changed1) { t1xp = signx1; break; }//t1x += signx1; + else goto next3; + } + if (changed1) break; + else t1x += signx1; + if (i < dx1) i++; + } + next3: + // process second line until y value is about to change + while (t2x != x3) { + e2 += dy2; + while (e2 >= dx2) { + e2 -= dx2; + if (changed2) t2xp = signx2; + else goto next4; + } + if (changed2) break; + else t2x += signx2; + } + next4: + + if (minx > t1x) minx = t1x; + if (minx > t2x) minx = t2x; + if (maxx < t1x) maxx = t1x; + if (maxx < t2x) maxx = t2x; + drawline(minx, maxx, y); + if (!changed1) t1x += signx1; + t1x += t1xp; + if (!changed2) t2x += signx2; + t2x += t2xp; + y += 1; + if (y > y3) return; + } + } + + void PixelGameEngine::FillTexturedTriangle(const std::vector& vPoints, std::vector vTex, std::vector vColour, olc::Sprite* sprTex) + { + olc::vi2d p1 = vPoints[0]; + olc::vi2d p2 = vPoints[1]; + olc::vi2d p3 = vPoints[2]; + + if (p2.y < p1.y){std::swap(p1.y, p2.y); std::swap(p1.x, p2.x); std::swap(vTex[0].x, vTex[1].x); std::swap(vTex[0].y, vTex[1].y); std::swap(vColour[0], vColour[1]);} + if (p3.y < p1.y){std::swap(p1.y, p3.y); std::swap(p1.x, p3.x); std::swap(vTex[0].x, vTex[2].x); std::swap(vTex[0].y, vTex[2].y); std::swap(vColour[0], vColour[2]);} + if (p3.y < p2.y){std::swap(p2.y, p3.y); std::swap(p2.x, p3.x); std::swap(vTex[1].x, vTex[2].x); std::swap(vTex[1].y, vTex[2].y); std::swap(vColour[1], vColour[2]);} + + olc::vi2d dPos1 = p2 - p1; + olc::vf2d dTex1 = vTex[1] - vTex[0]; + int dcr1 = vColour[1].r - vColour[0].r; + int dcg1 = vColour[1].g - vColour[0].g; + int dcb1 = vColour[1].b - vColour[0].b; + int dca1 = vColour[1].a - vColour[0].a; + + olc::vi2d dPos2 = p3 - p1; + olc::vf2d dTex2 = vTex[2] - vTex[0]; + int dcr2 = vColour[2].r - vColour[0].r; + int dcg2 = vColour[2].g - vColour[0].g; + int dcb2 = vColour[2].b - vColour[0].b; + int dca2 = vColour[2].a - vColour[0].a; + + float dax_step = 0, dbx_step = 0, dcr1_step = 0, dcr2_step = 0, dcg1_step = 0, dcg2_step = 0, dcb1_step = 0, dcb2_step = 0, dca1_step = 0, dca2_step = 0; + olc::vf2d vTex1Step, vTex2Step; + + if (dPos1.y) + { + dax_step = dPos1.x / (float)abs(dPos1.y); + vTex1Step = dTex1 / (float)abs(dPos1.y); + dcr1_step = dcr1 / (float)abs(dPos1.y); + dcg1_step = dcg1 / (float)abs(dPos1.y); + dcb1_step = dcb1 / (float)abs(dPos1.y); + dca1_step = dca1 / (float)abs(dPos1.y); + } + + if (dPos2.y) + { + dbx_step = dPos2.x / (float)abs(dPos2.y); + vTex2Step = dTex2 / (float)abs(dPos2.y); + dcr2_step = dcr2 / (float)abs(dPos2.y); + dcg2_step = dcg2 / (float)abs(dPos2.y); + dcb2_step = dcb2 / (float)abs(dPos2.y); + dca2_step = dca2 / (float)abs(dPos2.y); + } + + olc::vi2d vStart; + olc::vi2d vEnd; + int vStartIdx; + + for (int pass = 0; pass < 2; pass++) + { + if (pass == 0) + { + vStart = p1; vEnd = p2; vStartIdx = 0; + } + else + { + dPos1 = p3 - p2; + dTex1 = vTex[2] - vTex[1]; + dcr1 = vColour[2].r - vColour[1].r; + dcg1 = vColour[2].g - vColour[1].g; + dcb1 = vColour[2].b - vColour[1].b; + dca1 = vColour[2].a - vColour[1].a; + dcr1_step = 0; dcg1_step = 0; dcb1_step = 0; dca1_step = 0; + + if (dPos2.y) dbx_step = dPos2.x / (float)abs(dPos2.y); + if (dPos1.y) + { + dax_step = dPos1.x / (float)abs(dPos1.y); + vTex1Step = dTex1 / (float)abs(dPos1.y); + dcr1_step = dcr1 / (float)abs(dPos1.y); + dcg1_step = dcg1 / (float)abs(dPos1.y); + dcb1_step = dcb1 / (float)abs(dPos1.y); + dca1_step = dca1 / (float)abs(dPos1.y); + } + + vStart = p2; vEnd = p3; vStartIdx = 1; + } + + if (dPos1.y) + { + for (int i = vStart.y; i <= vEnd.y; i++) + { + int ax = int(vStart.x + (float)(i - vStart.y) * dax_step); + int bx = int(p1.x + (float)(i - p1.y) * dbx_step); + + olc::vf2d tex_s(vTex[vStartIdx].x + (float)(i - vStart.y) * vTex1Step.x, vTex[vStartIdx].y + (float)(i - vStart.y) * vTex1Step.y); + olc::vf2d tex_e(vTex[0].x + (float)(i - p1.y) * vTex2Step.x, vTex[0].y + (float)(i - p1.y) * vTex2Step.y); + + olc::Pixel col_s(vColour[vStartIdx].r + uint8_t((float)(i - vStart.y) * dcr1_step), vColour[vStartIdx].g + uint8_t((float)(i - vStart.y) * dcg1_step), + vColour[vStartIdx].b + uint8_t((float)(i - vStart.y) * dcb1_step), vColour[vStartIdx].a + uint8_t((float)(i - vStart.y) * dca1_step)); + + olc::Pixel col_e(vColour[0].r + uint8_t((float)(i - p1.y) * dcr2_step), vColour[0].g + uint8_t((float)(i - p1.y) * dcg2_step), + vColour[0].b + uint8_t((float)(i - p1.y) * dcb2_step), vColour[0].a + uint8_t((float)(i - p1.y) * dca2_step)); + + if (ax > bx) { std::swap(ax, bx); std::swap(tex_s, tex_e); std::swap(col_s, col_e); } + + float tstep = 1.0f / ((float)(bx - ax)); + float t = 0.0f; + + for (int j = ax; j < bx; j++) + { + olc::Pixel pixel = PixelLerp(col_s, col_e, t); + if (sprTex != nullptr) pixel *= sprTex->Sample(tex_s.lerp(tex_e, t)); + Draw(j, i, pixel); + t += tstep; + } + } + } + } + } + + void PixelGameEngine::FillTexturedPolygon(const std::vector& vPoints, const std::vector& vTex, const std::vector& vColour, olc::Sprite* sprTex, olc::DecalStructure structure) + { + if (structure == olc::DecalStructure::LINE) + { + return; // Meaningless, so do nothing + } + + if (vPoints.size() < 3 || vTex.size() < 3 || vColour.size() < 3) + return; + + if (structure == olc::DecalStructure::LIST) + { + for (int tri = 0; tri < vPoints.size() / 3; tri++) + { + std::vector vP = { vPoints[tri * 3 + 0], vPoints[tri * 3 + 1], vPoints[tri * 3 + 2] }; + std::vector vT = { vTex[tri * 3 + 0], vTex[tri * 3 + 1], vTex[tri * 3 + 2] }; + std::vector vC = { vColour[tri * 3 + 0], vColour[tri * 3 + 1], vColour[tri * 3 + 2] }; + FillTexturedTriangle(vP, vT, vC, sprTex); + } + return; + } + + if (structure == olc::DecalStructure::STRIP) + { + for (int tri = 2; tri < vPoints.size(); tri++) + { + std::vector vP = { vPoints[tri - 2], vPoints[tri-1], vPoints[tri] }; + std::vector vT = { vTex[tri - 2], vTex[tri - 1], vTex[tri] }; + std::vector vC = { vColour[tri - 2], vColour[tri - 1], vColour[tri] }; + FillTexturedTriangle(vP, vT, vC, sprTex); + } + return; + } + + if (structure == olc::DecalStructure::FAN) + { + for (int tri = 2; tri < vPoints.size(); tri++) + { + std::vector vP = { vPoints[0], vPoints[tri - 1], vPoints[tri] }; + std::vector vT = { vTex[0], vTex[tri - 1], vTex[tri] }; + std::vector vC = { vColour[0], vColour[tri - 1], vColour[tri] }; + FillTexturedTriangle(vP, vT, vC, sprTex); + } + return; + } + } + + + void PixelGameEngine::DrawSprite(const olc::vi2d& pos, Sprite* sprite, uint32_t scale, uint8_t flip) + { DrawSprite(pos.x, pos.y, sprite, scale, flip); } + + void PixelGameEngine::DrawSprite(int32_t x, int32_t y, Sprite* sprite, uint32_t scale, uint8_t flip) + { + if (sprite == nullptr) + return; + + int32_t fxs = 0, fxm = 1, fx = 0; + int32_t fys = 0, fym = 1, fy = 0; + if (flip & olc::Sprite::Flip::HORIZ) { fxs = sprite->width - 1; fxm = -1; } + if (flip & olc::Sprite::Flip::VERT) { fys = sprite->height - 1; fym = -1; } + + if (scale > 1) + { + fx = fxs; + for (int32_t i = 0; i < sprite->width; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < sprite->height; j++, fy += fym) + for (uint32_t is = 0; is < scale; is++) + for (uint32_t js = 0; js < scale; js++) + Draw(x + (i * scale) + is, y + (j * scale) + js, sprite->GetPixel(fx, fy)); + } + } + else + { + fx = fxs; + for (int32_t i = 0; i < sprite->width; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < sprite->height; j++, fy += fym) + Draw(x + i, y + j, sprite->GetPixel(fx, fy)); + } + } + } + + void PixelGameEngine::DrawPartialSprite(const olc::vi2d& pos, Sprite* sprite, const olc::vi2d& sourcepos, const olc::vi2d& size, uint32_t scale, uint8_t flip) + { DrawPartialSprite(pos.x, pos.y, sprite, sourcepos.x, sourcepos.y, size.x, size.y, scale, flip); } + + void PixelGameEngine::DrawPartialSprite(int32_t x, int32_t y, Sprite* sprite, int32_t ox, int32_t oy, int32_t w, int32_t h, uint32_t scale, uint8_t flip) + { + if (sprite == nullptr) + return; + + int32_t fxs = 0, fxm = 1, fx = 0; + int32_t fys = 0, fym = 1, fy = 0; + if (flip & olc::Sprite::Flip::HORIZ) { fxs = w - 1; fxm = -1; } + if (flip & olc::Sprite::Flip::VERT) { fys = h - 1; fym = -1; } + + if (scale > 1) + { + fx = fxs; + for (int32_t i = 0; i < w; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < h; j++, fy += fym) + for (uint32_t is = 0; is < scale; is++) + for (uint32_t js = 0; js < scale; js++) + Draw(x + (i * scale) + is, y + (j * scale) + js, sprite->GetPixel(fx + ox, fy + oy)); + } + } + else + { + fx = fxs; + for (int32_t i = 0; i < w; i++, fx += fxm) + { + fy = fys; + for (int32_t j = 0; j < h; j++, fy += fym) + Draw(x + i, y + j, sprite->GetPixel(fx + ox, fy + oy)); + } + } + } + + void PixelGameEngine::SetDecalMode(const olc::DecalMode& mode) + { nDecalMode = mode; } + + void PixelGameEngine::SetDecalStructure(const olc::DecalStructure& structure) + { nDecalStructure = structure; } + + void PixelGameEngine::DrawPartialDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale, const olc::Pixel& tint) + { + olc::vf2d vScreenSpacePos = + { + (pos.x * vInvScreenSize.x) * 2.0f - 1.0f, + -((pos.y * vInvScreenSize.y) * 2.0f - 1.0f) + }; + + + olc::vf2d vScreenSpaceDim = + { + ((pos.x + source_size.x * scale.x) * vInvScreenSize.x) * 2.0f - 1.0f, + -(((pos.y + source_size.y * scale.y) * vInvScreenSize.y) * 2.0f - 1.0f) + }; + + olc::vf2d vWindow = olc::vf2d(vViewSize); + olc::vf2d vQuantisedPos = ((vScreenSpacePos * vWindow) + olc::vf2d(0.5f, 0.5f)).floor() / vWindow; + olc::vf2d vQuantisedDim = ((vScreenSpaceDim * vWindow) + olc::vf2d(0.5f, -0.5f)).ceil() / vWindow; + + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.pos = { { vQuantisedPos.x, vQuantisedPos.y }, { vQuantisedPos.x, vQuantisedDim.y }, { vQuantisedDim.x, vQuantisedDim.y }, { vQuantisedDim.x, vQuantisedPos.y } }; + olc::vf2d uvtl = (source_pos + olc::vf2d(0.0001f, 0.0001f)) * decal->vUVScale; + olc::vf2d uvbr = (source_pos + source_size - olc::vf2d(0.0001f, 0.0001f)) * decal->vUVScale; + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + di.w = { 1,1,1,1 }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPartialDecal(const olc::vf2d& pos, const olc::vf2d& size, olc::Decal* decal, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { + olc::vf2d vScreenSpacePos = + { + (pos.x * vInvScreenSize.x) * 2.0f - 1.0f, + ((pos.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f + }; + + olc::vf2d vScreenSpaceDim = + { + vScreenSpacePos.x + (2.0f * size.x * vInvScreenSize.x), + vScreenSpacePos.y - (2.0f * size.y * vInvScreenSize.y) + }; + + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.pos = { { vScreenSpacePos.x, vScreenSpacePos.y }, { vScreenSpacePos.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpacePos.y } }; + olc::vf2d uvtl = (source_pos) * decal->vUVScale; + olc::vf2d uvbr = uvtl + ((source_size) * decal->vUVScale); + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + di.w = { 1,1,1,1 }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + + void PixelGameEngine::DrawDecal(const olc::vf2d& pos, olc::Decal* decal, const olc::vf2d& scale, const olc::Pixel& tint) + { + olc::vf2d vScreenSpacePos = + { + (pos.x * vInvScreenSize.x) * 2.0f - 1.0f, + ((pos.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f + }; + + olc::vf2d vScreenSpaceDim = + { + vScreenSpacePos.x + (2.0f * (float(decal->sprite->width) * vInvScreenSize.x)) * scale.x, + vScreenSpacePos.y - (2.0f * (float(decal->sprite->height) * vInvScreenSize.y)) * scale.y + }; + + DecalInstance di; + di.decal = decal; + di.points = 4; + di.tint = { tint, tint, tint, tint }; + di.pos = { { vScreenSpacePos.x, vScreenSpacePos.y }, { vScreenSpacePos.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpaceDim.y }, { vScreenSpaceDim.x, vScreenSpacePos.y } }; + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + di.w = { 1, 1, 1, 1 }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawExplicitDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d* uv, const olc::Pixel* col, uint32_t elements) + { + DecalInstance di; + di.decal = decal; + di.pos.resize(elements); + di.uv.resize(elements); + di.w.resize(elements); + di.tint.resize(elements); + di.points = elements; + for (uint32_t i = 0; i < elements; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = col[i]; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const olc::Pixel tint) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = tint; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector &tint) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = tint[i]; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& uv, const std::vector& colours, const olc::Pixel tint) + { + std::vector newColours(colours.size(), olc::WHITE); + std::transform(colours.begin(), colours.end(), newColours.begin(), + [&tint](const olc::Pixel pin) { return pin * tint; }); + DrawPolygonDecal(decal, pos, uv, newColours); + } + + + void PixelGameEngine::DrawPolygonDecal(olc::Decal* decal, const std::vector& pos, const std::vector& depth, const std::vector& uv, const olc::Pixel tint) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[i] = uv[i]; + di.tint[i] = tint; + di.w[i] = 1.0f; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + +#ifdef OLC_ENABLE_EXPERIMENTAL + // Lightweight 3D + void PixelGameEngine::LW3D_DrawTriangles(olc::Decal* decal, const std::vector>& pos, const std::vector& tex, const std::vector& col) + { + DecalInstance di; + di.decal = decal; + di.points = uint32_t(pos.size()); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + for (uint32_t i = 0; i < di.points; i++) + { + di.pos[i] = { pos[i][0], pos[i][1] }; + di.w[i] = pos[i][2]; + di.uv[i] = tex[i]; + di.tint[i] = col[i]; + } + di.mode = DecalMode::MODEL3D; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } +#endif + + void PixelGameEngine::DrawLineDecal(const olc::vf2d& pos1, const olc::vf2d& pos2, Pixel p) + { + auto m = nDecalMode; + nDecalMode = olc::DecalMode::WIREFRAME; + DrawPolygonDecal(nullptr, { pos1, pos2 }, { {0, 0}, {0,0} }, p); + nDecalMode = m; + + /*DecalInstance di; + di.decal = nullptr; + di.points = uint32_t(2); + di.pos.resize(di.points); + di.uv.resize(di.points); + di.w.resize(di.points); + di.tint.resize(di.points); + di.pos[0] = { (pos1.x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos1.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[0] = { 0.0f, 0.0f }; + di.tint[0] = p; + di.w[0] = 1.0f; + di.pos[1] = { (pos2.x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos2.y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + di.uv[1] = { 0.0f, 0.0f }; + di.tint[1] = p; + di.w[1] = 1.0f; + di.mode = olc::DecalMode::WIREFRAME; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di);*/ + } + + void PixelGameEngine::DrawRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col) + { + auto m = nDecalMode; + SetDecalMode(olc::DecalMode::WIREFRAME); + olc::vf2d vNewSize = size;// (size - olc::vf2d(0.375f, 0.375f)).ceil(); + std::array points = { { {pos}, {pos.x, pos.y + vNewSize.y}, {pos + vNewSize}, {pos.x + vNewSize.x, pos.y} } }; + std::array uvs = { {{0,0},{0,0},{0,0},{0,0}} }; + std::array cols = { {col, col, col, col} }; + DrawExplicitDecal(nullptr, points.data(), uvs.data(), cols.data(), 4); + SetDecalMode(m); + + } + + void PixelGameEngine::FillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel col) + { + olc::vf2d vNewSize = size;// (size - olc::vf2d(0.375f, 0.375f)).ceil(); + std::array points = { { {pos}, {pos.x, pos.y + vNewSize.y}, {pos + vNewSize}, {pos.x + vNewSize.x, pos.y} } }; + std::array uvs = { {{0,0},{0,0},{0,0},{0,0}} }; + std::array cols = { {col, col, col, col} }; + DrawExplicitDecal(nullptr, points.data(), uvs.data(), cols.data(), 4); + } + + void PixelGameEngine::GradientFillRectDecal(const olc::vf2d& pos, const olc::vf2d& size, const olc::Pixel colTL, const olc::Pixel colBL, const olc::Pixel colBR, const olc::Pixel colTR) + { + std::array points = { { {pos}, {pos.x, pos.y + size.y}, {pos + size}, {pos.x + size.x, pos.y} } }; + std::array uvs = { {{0,0},{0,0},{0,0},{0,0}} }; + std::array cols = { {colTL, colBL, colBR, colTR} }; + DrawExplicitDecal(nullptr, points.data(), uvs.data(), cols.data(), 4); + } + + void PixelGameEngine::DrawRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center, const olc::vf2d& scale, const olc::Pixel& tint) + { + DecalInstance di; + di.decal = decal; + di.pos.resize(4); + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + di.w = { 1, 1, 1, 1 }; + di.tint = { tint, tint, tint, tint }; + di.points = 4; + di.pos[0] = (olc::vf2d(0.0f, 0.0f) - center) * scale; + di.pos[1] = (olc::vf2d(0.0f, float(decal->sprite->height)) - center) * scale; + di.pos[2] = (olc::vf2d(float(decal->sprite->width), float(decal->sprite->height)) - center) * scale; + di.pos[3] = (olc::vf2d(float(decal->sprite->width), 0.0f) - center) * scale; + float c = cos(fAngle), s = sin(fAngle); + for (int i = 0; i < 4; i++) + { + di.pos[i] = pos + olc::vf2d(di.pos[i].x * c - di.pos[i].y * s, di.pos[i].x * s + di.pos[i].y * c); + di.pos[i] = di.pos[i] * vInvScreenSize * 2.0f - olc::vf2d(1.0f, 1.0f); + di.pos[i].y *= -1.0f; + di.w[i] = 1; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + + void PixelGameEngine::DrawPartialRotatedDecal(const olc::vf2d& pos, olc::Decal* decal, const float fAngle, const olc::vf2d& center, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::vf2d& scale, const olc::Pixel& tint) + { + DecalInstance di; + di.decal = decal; + di.points = 4; + di.tint = { tint, tint, tint, tint }; + di.w = { 1, 1, 1, 1 }; + di.pos.resize(4); + di.pos[0] = (olc::vf2d(0.0f, 0.0f) - center) * scale; + di.pos[1] = (olc::vf2d(0.0f, source_size.y) - center) * scale; + di.pos[2] = (olc::vf2d(source_size.x, source_size.y) - center) * scale; + di.pos[3] = (olc::vf2d(source_size.x, 0.0f) - center) * scale; + float c = cos(fAngle), s = sin(fAngle); + for (int i = 0; i < 4; i++) + { + di.pos[i] = pos + olc::vf2d(di.pos[i].x * c - di.pos[i].y * s, di.pos[i].x * s + di.pos[i].y * c); + di.pos[i] = di.pos[i] * vInvScreenSize * 2.0f - olc::vf2d(1.0f, 1.0f); + di.pos[i].y *= -1.0f; + } + + olc::vf2d uvtl = source_pos * decal->vUVScale; + olc::vf2d uvbr = uvtl + (source_size * decal->vUVScale); + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + + void PixelGameEngine::DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.w = { 1, 1, 1, 1 }; + di.pos.resize(4); + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + olc::vf2d center; + float rd = ((pos[2].x - pos[0].x) * (pos[3].y - pos[1].y) - (pos[3].x - pos[1].x) * (pos[2].y - pos[0].y)); + if (rd != 0) + { + olc::vf2d uvtl = source_pos * decal->vUVScale; + olc::vf2d uvbr = uvtl + (source_size * decal->vUVScale); + di.uv = { { uvtl.x, uvtl.y }, { uvtl.x, uvbr.y }, { uvbr.x, uvbr.y }, { uvbr.x, uvtl.y } }; + + rd = 1.0f / rd; + float rn = ((pos[3].x - pos[1].x) * (pos[0].y - pos[1].y) - (pos[3].y - pos[1].y) * (pos[0].x - pos[1].x)) * rd; + float sn = ((pos[2].x - pos[0].x) * (pos[0].y - pos[1].y) - (pos[2].y - pos[0].y) * (pos[0].x - pos[1].x)) * rd; + if (!(rn < 0.f || rn > 1.f || sn < 0.f || sn > 1.f)) center = pos[0] + rn * (pos[2] - pos[0]); + float d[4]; for (int i = 0; i < 4; i++) d[i] = (pos[i] - center).mag(); + for (int i = 0; i < 4; i++) + { + float q = d[i] == 0.0f ? 1.0f : (d[i] + d[(i + 2) & 3]) / d[(i + 2) & 3]; + di.uv[i] *= q; di.w[i] *= q; + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + } + + void PixelGameEngine::DrawWarpedDecal(olc::Decal* decal, const olc::vf2d* pos, const olc::Pixel& tint) + { + // Thanks Nathan Reed, a brilliant article explaining whats going on here + // http://www.reedbeta.com/blog/quadrilateral-interpolation-part-1/ + DecalInstance di; + di.points = 4; + di.decal = decal; + di.tint = { tint, tint, tint, tint }; + di.w = { 1, 1, 1, 1 }; + di.pos.resize(4); + di.uv = { { 0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} }; + olc::vf2d center; + float rd = ((pos[2].x - pos[0].x) * (pos[3].y - pos[1].y) - (pos[3].x - pos[1].x) * (pos[2].y - pos[0].y)); + if (rd != 0) + { + rd = 1.0f / rd; + float rn = ((pos[3].x - pos[1].x) * (pos[0].y - pos[1].y) - (pos[3].y - pos[1].y) * (pos[0].x - pos[1].x)) * rd; + float sn = ((pos[2].x - pos[0].x) * (pos[0].y - pos[1].y) - (pos[2].y - pos[0].y) * (pos[0].x - pos[1].x)) * rd; + if (!(rn < 0.f || rn > 1.f || sn < 0.f || sn > 1.f)) center = pos[0] + rn * (pos[2] - pos[0]); + float d[4]; for (int i = 0; i < 4; i++) d[i] = (pos[i] - center).mag(); + for (int i = 0; i < 4; i++) + { + float q = d[i] == 0.0f ? 1.0f : (d[i] + d[(i + 2) & 3]) / d[(i + 2) & 3]; + di.uv[i] *= q; di.w[i] *= q; + di.pos[i] = { (pos[i].x * vInvScreenSize.x) * 2.0f - 1.0f, ((pos[i].y * vInvScreenSize.y) * 2.0f - 1.0f) * -1.0f }; + } + di.mode = nDecalMode; + di.structure = nDecalStructure; + vLayers[nTargetLayer].vecDecalInstance.push_back(di); + } + } + + void PixelGameEngine::DrawWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::Pixel& tint) + { DrawWarpedDecal(decal, pos.data(), tint); } + + void PixelGameEngine::DrawWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::Pixel& tint) + { DrawWarpedDecal(decal, &pos[0], tint); } + + void PixelGameEngine::DrawPartialWarpedDecal(olc::Decal* decal, const std::array& pos, const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { DrawPartialWarpedDecal(decal, pos.data(), source_pos, source_size, tint); } + + void PixelGameEngine::DrawPartialWarpedDecal(olc::Decal* decal, const olc::vf2d(&pos)[4], const olc::vf2d& source_pos, const olc::vf2d& source_size, const olc::Pixel& tint) + { DrawPartialWarpedDecal(decal, &pos[0], source_pos, source_size, tint); } + + void PixelGameEngine::DrawStringDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const olc::vf2d& scale) + { + olc::vf2d spos = { 0.0f, 0.0f }; + for (auto c : sText) + { + if (c == '\n') + { + spos.x = 0; spos.y += 8.0f * scale.y; + } + else if (c == '\t') + { + spos.x += 8.0f * float(nTabSizeInSpaces) * scale.x; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + DrawPartialDecal(pos + spos, fontRenderable.Decal(), {float(ox) * 8.0f, float(oy) * 8.0f}, {8.0f, 8.0f}, scale, col); + spos.x += 8.0f * scale.x; + } + } + } + + void PixelGameEngine::DrawStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const olc::vf2d& scale) + { + olc::vf2d spos = { 0.0f, 0.0f }; + for (auto c : sText) + { + if (c == '\n') + { + spos.x = 0; spos.y += 8.0f * scale.y; + } + else if (c == '\t') + { + spos.x += 8.0f * float(nTabSizeInSpaces) * scale.x; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + DrawPartialDecal(pos + spos, fontRenderable.Decal(), { float(ox) * 8.0f + float(vFontSpacing[c - 32].x), float(oy) * 8.0f }, { float(vFontSpacing[c - 32].y), 8.0f }, scale, col); + spos.x += float(vFontSpacing[c - 32].y) * scale.x; + } + } + } + + void PixelGameEngine::DrawShadowStringDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){ + for(float y=-shadowSizeFactor;y<=shadowSizeFactor+0.1;y+=shadowSizeFactor/2){ + for(float x=-shadowSizeFactor;x<=shadowSizeFactor+0.1;x+=shadowSizeFactor/2){ + if(x!=0||y!=0){ + DrawStringDecal(pos+vf2d{x,y}, sText, shadowCol,scale); + } + } + } + DrawStringDecal(pos, sText, col,scale); + } + + void PixelGameEngine::DrawShadowStringPropDecal(const olc::vf2d& pos, const std::string& sText, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){ + for(float y=-shadowSizeFactor;y<=shadowSizeFactor+0.1;y+=shadowSizeFactor/2){ + for(float x=-shadowSizeFactor;x<=shadowSizeFactor+0.1;x+=shadowSizeFactor/2){ + if(x!=0||y!=0){ + DrawStringPropDecal(pos+vf2d{x,y}, sText, shadowCol,scale); + } + } + } + DrawStringPropDecal(pos, sText, col,scale); + } + // 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); + } + } + } + + void PixelGameEngine::DrawRotatedShadowStringDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){ + for(float y=-shadowSizeFactor;y<=shadowSizeFactor+0.1;y+=shadowSizeFactor/2){ + for(float x=-shadowSizeFactor;x<=shadowSizeFactor+0.1;x+=shadowSizeFactor/2){ + if(x!=0||y!=0){ + DrawRotatedStringDecal(pos+vf2d{x,y}, sText,fAngle,center,shadowCol,scale); + } + } + } + DrawRotatedStringDecal(pos, sText,fAngle,center,col,scale); + } + void PixelGameEngine::DrawRotatedShadowStringPropDecal(const olc::vf2d& pos, const std::string& sText, const float fAngle, const olc::vf2d& center, const Pixel col, const Pixel shadowCol, const olc::vf2d& scale,const float shadowSizeFactor){ + for(float y=-shadowSizeFactor;y<=shadowSizeFactor+0.1;y+=shadowSizeFactor/2){ + for(float x=-shadowSizeFactor;x<=shadowSizeFactor+0.1;x+=shadowSizeFactor/2){ + if(x!=0||y!=0){ + DrawRotatedStringPropDecal(pos+vf2d{x,y}, sText,fAngle,center,shadowCol,scale); + } + } + } + DrawRotatedStringPropDecal(pos, sText,fAngle,center,col,scale); + } + + olc::vi2d PixelGameEngine::GetTextSize(const std::string& s) + { + olc::vi2d size = { 0,1 }; + olc::vi2d pos = { 0,1 }; + for (auto c : s) + { + if (c == '\n') { pos.y++; pos.x = 0; } + else if (c == '\t') { pos.x += nTabSizeInSpaces; } + else pos.x++; + size.x = std::max(size.x, pos.x); + size.y = std::max(size.y, pos.y); + } + return size * 8; + } + + void PixelGameEngine::DrawString(const olc::vi2d& pos, const std::string& sText, Pixel col, uint32_t scale) + { DrawString(pos.x, pos.y, sText, col, scale); } + + void PixelGameEngine::DrawString(int32_t x, int32_t y, const std::string& sText, Pixel col, uint32_t scale) + { + int32_t sx = 0; + int32_t sy = 0; + Pixel::Mode m = nPixelMode; + // Thanks @tucna, spotted bug with col.ALPHA :P + if (m != Pixel::CUSTOM) // Thanks @Megarev, required for "shaders" + { + if (col.a != 255) SetPixelMode(Pixel::ALPHA); + else SetPixelMode(Pixel::MASK); + } + for (auto c : sText) + { + if (c == '\n') + { + sx = 0; sy += 8 * scale; + } + else if (c == '\t') + { + sx += 8 * nTabSizeInSpaces * scale; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + + if (scale > 1) + { + for (uint32_t i = 0; i < 8; i++) + for (uint32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8, j + oy * 8).r > 0) + for (uint32_t is = 0; is < scale; is++) + for (uint32_t js = 0; js < scale; js++) + Draw(x + sx + (i * scale) + is, y + sy + (j * scale) + js, col); + } + else + { + for (uint32_t i = 0; i < 8; i++) + for (uint32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8, j + oy * 8).r > 0) + Draw(x + sx + i, y + sy + j, col); + } + sx += 8 * scale; + } + } + SetPixelMode(m); + } + + olc::vi2d PixelGameEngine::GetTextSizeProp(const std::string& s) + { + olc::vi2d size = { 0,1 }; + olc::vi2d pos = { 0,1 }; + for (auto c : s) + { + if (c == '\n') { pos.y += 1; pos.x = 0; } + else if (c == '\t') { pos.x += nTabSizeInSpaces * 8; } + else pos.x += vFontSpacing[c - 32].y; + size.x = std::max(size.x, pos.x); + size.y = std::max(size.y, pos.y); + } + + size.y *= 8; + return size; + } + + void PixelGameEngine::DrawStringProp(const olc::vi2d& pos, const std::string& sText, Pixel col, uint32_t scale) + { DrawStringProp(pos.x, pos.y, sText, col, scale); } + + void PixelGameEngine::DrawStringProp(int32_t x, int32_t y, const std::string& sText, Pixel col, uint32_t scale) + { + int32_t sx = 0; + int32_t sy = 0; + Pixel::Mode m = nPixelMode; + + if (m != Pixel::CUSTOM) + { + if (col.a != 255) SetPixelMode(Pixel::ALPHA); + else SetPixelMode(Pixel::MASK); + } + for (auto c : sText) + { + if (c == '\n') + { + sx = 0; sy += 8 * scale; + } + else if (c == '\t') + { + sx += 8 * nTabSizeInSpaces * scale; + } + else + { + int32_t ox = (c - 32) % 16; + int32_t oy = (c - 32) / 16; + + if (scale > 1) + { + for (int32_t i = 0; i < vFontSpacing[c - 32].y; i++) + for (int32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8 + vFontSpacing[c - 32].x, j + oy * 8).r > 0) + for (int32_t is = 0; is < int(scale); is++) + for (int32_t js = 0; js < int(scale); js++) + Draw(x + sx + (i * scale) + is, y + sy + (j * scale) + js, col); + } + else + { + for (int32_t i = 0; i < vFontSpacing[c - 32].y; i++) + for (int32_t j = 0; j < 8; j++) + if (fontRenderable.Sprite()->GetPixel(i + ox * 8 + vFontSpacing[c - 32].x, j + oy * 8).r > 0) + Draw(x + sx + i, y + sy + j, col); + } + sx += vFontSpacing[c - 32].y * scale; + } + } + SetPixelMode(m); + } + + void PixelGameEngine::SetPixelMode(Pixel::Mode m) + { nPixelMode = m; } + + Pixel::Mode PixelGameEngine::GetPixelMode() + { return nPixelMode; } + + void PixelGameEngine::SetPixelMode(std::function pixelMode) + { + funcPixelMode = pixelMode; + nPixelMode = Pixel::Mode::CUSTOM; + } + + void PixelGameEngine::SetPixelBlend(float fBlend) + { + fBlendFactor = fBlend; + if (fBlendFactor < 0.0f) fBlendFactor = 0.0f; + if (fBlendFactor > 1.0f) fBlendFactor = 1.0f; + } + + std::stringstream& PixelGameEngine::ConsoleOut() + { return ssConsoleOutput; } + + bool PixelGameEngine::IsConsoleShowing() const + { return bConsoleShow; } + + void PixelGameEngine::ConsoleShow(const olc::Key& keyExit, bool bSuspendTime) + { + if (bConsoleShow) + return; + + bConsoleShow = true; + bConsoleSuspendTime = bSuspendTime; + TextEntryEnable(true); + keyConsoleExit = keyExit; + pKeyboardState[keyConsoleExit].bHeld = false; + pKeyboardState[keyConsoleExit].bPressed = false; + pKeyboardState[keyConsoleExit].bReleased = true; + } + + void PixelGameEngine::ConsoleClear() + { sConsoleLines.clear(); } + + void PixelGameEngine::ConsoleCaptureStdOut(const bool bCapture) + { + if(bCapture) + sbufOldCout = std::cout.rdbuf(ssConsoleOutput.rdbuf()); + else + std::cout.rdbuf(sbufOldCout); + } + + void PixelGameEngine::UpdateConsole() + { + if (GetKey(keyConsoleExit).bPressed) + { + TextEntryEnable(false); + bConsoleSuspendTime = false; + bConsoleShow = false; + return; + } + + // Keep Console sizes based in real screen dimensions + vConsoleCharacterScale = olc::vf2d(1.0f, 2.0f) / (olc::vf2d(vViewSize) * vInvScreenSize); + vConsoleSize = (vViewSize / olc::vi2d(8, 16)) - olc::vi2d(2, 4); + + // If console has changed size, simply reset it + if (vConsoleSize.y != sConsoleLines.size()) + { + vConsoleCursor = { 0,0 }; + sConsoleLines.clear(); + sConsoleLines.resize(vConsoleSize.y); + } + + auto TypeCharacter = [&](const char c) + { + if (c >= 32 && c < 127) + { + sConsoleLines[vConsoleCursor.y].append(1, c); + vConsoleCursor.x++; + } + + if( c == '\n' || vConsoleCursor.x >= vConsoleSize.x) + { + vConsoleCursor.y++; vConsoleCursor.x = 0; + } + + if (vConsoleCursor.y >= vConsoleSize.y) + { + vConsoleCursor.y = vConsoleSize.y - 1; + for (size_t i = 1; i < vConsoleSize.y; i++) + sConsoleLines[i - 1] = sConsoleLines[i]; + sConsoleLines[vConsoleCursor.y].clear(); + } + }; + + // Empty out "std::cout", parsing as we go + while (ssConsoleOutput.rdbuf()->sgetc() != -1) + { + char c = ssConsoleOutput.rdbuf()->sbumpc(); + TypeCharacter(c); + } + + // Draw Shadow + GradientFillRectDecal({ 0,0 }, olc::vf2d(vScreenSize), olc::PixelF(0, 0, 0.5f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f)); + + // Draw the console buffer + SetDecalMode(olc::DecalMode::NORMAL); + for (int32_t nLine = 0; nLine < vConsoleSize.y; nLine++) + DrawStringDecal(olc::vf2d( 1, 1 + float(nLine) ) * vConsoleCharacterScale * 8.0f, sConsoleLines[nLine], olc::WHITE, vConsoleCharacterScale); + + // Draw Input State + FillRectDecal(olc::vf2d(1 + float((TextEntryGetCursor() + 1)), 1 + float((vConsoleSize.y - 1))) * vConsoleCharacterScale * 8.0f, olc::vf2d(8, 8) * vConsoleCharacterScale, olc::DARK_CYAN); + DrawStringDecal(olc::vf2d(1, 1 + float((vConsoleSize.y - 1))) * vConsoleCharacterScale * 8.0f, std::string(">") + TextEntryGetString(), olc::YELLOW, vConsoleCharacterScale); + } + + + const std::vector& PixelGameEngine::GetDroppedFiles() const + { return vDroppedFiles; } + + const olc::vi2d& PixelGameEngine::GetDroppedFilesPoint() const + { return vDroppedFilesPoint; } + + + void PixelGameEngine::TextEntryEnable(const bool bEnable, const std::string& sText) + { + if (bEnable) + { + nTextEntryCursor = int32_t(sText.size()); + sTextEntryString = sText; + bTextEntryEnable = true; + } + else + { + bTextEntryEnable = false; + } + } + + std::string PixelGameEngine::TextEntryGetString() const + { return sTextEntryString; } + + int32_t PixelGameEngine::TextEntryGetCursor() const + { return nTextEntryCursor; } + + bool PixelGameEngine::IsTextEntryEnabled() const + { return bTextEntryEnable; } + + + void PixelGameEngine::UpdateTextEntry() + { + // Check for typed characters + for (const auto& key : vKeyboardMap) + if (GetKey(std::get<0>(key)).bPressed) + { + sTextEntryString.insert(nTextEntryCursor, GetKey(olc::Key::SHIFT).bHeld ? std::get<2>(key) : std::get<1>(key)); + nTextEntryCursor++; + } + + // Check for command characters + if (GetKey(olc::Key::LEFT).bPressed) + nTextEntryCursor = std::max(0, nTextEntryCursor - 1); + if (GetKey(olc::Key::RIGHT).bPressed) + nTextEntryCursor = std::min(int32_t(sTextEntryString.size()), nTextEntryCursor + 1); + if (GetKey(olc::Key::BACK).bPressed && nTextEntryCursor > 0) + { + sTextEntryString.erase(nTextEntryCursor-1, 1); + nTextEntryCursor = std::max(0, nTextEntryCursor - 1); + } + if (GetKey(olc::Key::DEL).bPressed && nTextEntryCursor < sTextEntryString.size()) + sTextEntryString.erase(nTextEntryCursor, 1); + + if (GetKey(olc::Key::UP).bPressed) + { + if (!sCommandHistory.empty()) + { + if (sCommandHistoryIt != sCommandHistory.begin()) + sCommandHistoryIt--; + + nTextEntryCursor = int32_t(sCommandHistoryIt->size()); + sTextEntryString = *sCommandHistoryIt; + } + } + + if (GetKey(olc::Key::DOWN).bPressed) + { + if (!sCommandHistory.empty()) + { + if (sCommandHistoryIt != sCommandHistory.end()) + { + sCommandHistoryIt++; + if (sCommandHistoryIt != sCommandHistory.end()) + { + nTextEntryCursor = int32_t(sCommandHistoryIt->size()); + sTextEntryString = *sCommandHistoryIt; + } + else + { + nTextEntryCursor = 0; + sTextEntryString = ""; + } + } + } + } + + if (GetKey(olc::Key::ENTER).bPressed) + { + if (bConsoleShow) + { + std::cout << ">" + sTextEntryString + "\n"; + if (OnConsoleCommand(sTextEntryString)) + { + sCommandHistory.push_back(sTextEntryString); + sCommandHistoryIt = sCommandHistory.end(); + } + sTextEntryString.clear(); + nTextEntryCursor = 0; + } + else + { + OnTextEntryComplete(sTextEntryString); + TextEntryEnable(false); + } + } + } + + // User must override these functions as required. I have not made + // them abstract because I do need a default behaviour to occur if + // they are not overwritten + + bool PixelGameEngine::OnUserCreate() + { return false; } + + bool PixelGameEngine::OnUserUpdate(float fElapsedTime) + { UNUSED(fElapsedTime); return false; } + + bool PixelGameEngine::OnUserDestroy() + { return true; } + + void PixelGameEngine::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_UpdateWindowPos(int32_t x, int32_t y) + { + vWindowPos = { x, y }; + } + + 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)); + } + + void PixelGameEngine::olc_UpdateMouseState(int32_t button, bool state) + { pMouseNewState[button] = state; } + + void PixelGameEngine::olc_UpdateKeyState(int32_t key, bool state) + { pKeyNewState[key] = state; } + + void PixelGameEngine::olc_UpdateMouseFocus(bool state) + { bHasMouseFocus = state; } + + void PixelGameEngine::olc_UpdateKeyFocus(bool state) + { bHasInputFocus = state; } + + void PixelGameEngine::olc_DropFiles(int32_t x, int32_t y, const std::vector& vFiles) + { + x -= vViewPos.x; + y -= vViewPos.y; + vDroppedFilesPointCache.x = (int32_t)(((float)x / (float)(vWindowSize.x - (vViewPos.x * 2)) * (float)vScreenSize.x)); + vDroppedFilesPointCache.y = (int32_t)(((float)y / (float)(vWindowSize.y - (vViewPos.y * 2)) * (float)vScreenSize.y)); + if (vDroppedFilesPointCache.x >= (int32_t)vScreenSize.x) vDroppedFilesPointCache.x = vScreenSize.x - 1; + if (vDroppedFilesPointCache.y >= (int32_t)vScreenSize.y) vDroppedFilesPointCache.y = vScreenSize.y - 1; + if (vDroppedFilesPointCache.x < 0) vDroppedFilesPointCache.x = 0; + if (vDroppedFilesPointCache.y < 0) vDroppedFilesPointCache.y = 0; + vDroppedFilesCache = vFiles; + } + + void PixelGameEngine::olc_Reanimate() + { bAtomActive = true; } + + bool PixelGameEngine::olc_IsRunning() + { return bAtomActive; } + + void PixelGameEngine::olc_Terminate() + { bAtomActive = false; } + + void PixelGameEngine::EngineThread() + { + // Allow platform to do stuff here if needed, since its now in the + // context of this thread + if (platform->ThreadStartUp() == olc::FAIL) return; + + // Do engine context specific initialisation + olc_PrepareEngine(); + + // Create user resources as part of this thread + for (auto& ext : vExtensions) ext->OnBeforeUserCreate(); + if (!OnUserCreate()) bAtomActive = false; + for (auto& ext : vExtensions) ext->OnAfterUserCreate(); + + while (bAtomActive) + { + // Run as fast as possible + while (bAtomActive) { olc_CoreUpdate(); } + + // Allow the user to free resources if they have overrided the destroy function + if (!OnUserDestroy()) + { + // User denied destroy for some reason, so continue running + bAtomActive = true; + } + } + + platform->ThreadCleanUp(); + } + + void PixelGameEngine::olc_PrepareEngine() + { + // Start OpenGL, the context is owned by the game thread + if (platform->CreateGraphics(bFullScreen, bEnableVSYNC, vViewPos, vViewSize) == olc::FAIL) return; + + // Construct default font sheet + olc_ConstructFontSheet(); + + // Create Primary Layer "0" + CreateLayer(); + vLayers[0].bUpdate = true; + vLayers[0].bShow = true; + SetDrawTarget(nullptr); + + m_tp1 = std::chrono::system_clock::now(); + m_tp2 = std::chrono::system_clock::now(); + } + + + void PixelGameEngine::olc_CoreUpdate() + { + // Handle Timing + m_tp2 = std::chrono::system_clock::now(); + std::chrono::duration elapsedTime = m_tp2 - m_tp1; + m_tp1 = m_tp2; + + // Our time per frame coefficient + float fElapsedTime = elapsedTime.count(); + fLastElapsed = fElapsedTime; + + if (bConsoleSuspendTime) + fElapsedTime = 0.0f; + + // Some platforms will need to check for events + platform->HandleSystemEvent(); + + // Compare hardware input states from previous frame + auto ScanHardware = [&](HWButton* pKeys, bool* pStateOld, bool* pStateNew, uint32_t nKeyCount) + { + for (uint32_t i = 0; i < nKeyCount; i++) + { + pKeys[i].bPressed = false; + pKeys[i].bReleased = false; + if (pStateNew[i] != pStateOld[i]) + { + if (pStateNew[i]) + { + pKeys[i].bPressed = !pKeys[i].bHeld; + pKeys[i].bHeld = true; + } + else + { + pKeys[i].bReleased = true; + pKeys[i].bHeld = false; + } + } + pStateOld[i] = pStateNew[i]; + } + }; + + ScanHardware(pKeyboardState, pKeyOldState, pKeyNewState, 256); + ScanHardware(pMouseState, pMouseOldState, pMouseNewState, nMouseButtons); + + // Cache mouse coordinates so they remain consistent during frame + vMousePos = vMousePosCache; + nMouseWheelDelta = nMouseWheelDeltaCache; + nMouseWheelDeltaCache = 0; + + vDroppedFiles = vDroppedFilesCache; + vDroppedFilesPoint = vDroppedFilesPointCache; + vDroppedFilesCache.clear(); + + if (bTextEntryEnable) + { + UpdateTextEntry(); + } + + // Handle Frame Update + bool bExtensionBlockFrame = false; + for (auto& ext : vExtensions) bExtensionBlockFrame |= ext->OnBeforeUserUpdate(fElapsedTime); + if (!bExtensionBlockFrame) + { + if (!OnUserUpdate(fElapsedTime)) bAtomActive = false; + + } + for (auto& ext : vExtensions) ext->OnAfterUserUpdate(fElapsedTime); + + if (bConsoleShow) + { + SetDrawTarget((uint8_t)0); + UpdateConsole(); + } + + + + // Display Frame + renderer->UpdateViewport(vViewPos, vViewSize); + renderer->ClearBuffer(olc::BLACK, true); + + // Layer 0 must always exist + vLayers[0].bUpdate = true; + vLayers[0].bShow = true; + SetDecalMode(DecalMode::NORMAL); + renderer->PrepareDrawing(); + + for (auto layer = vLayers.rbegin(); layer != vLayers.rend(); ++layer) + { + if (layer->bShow) + { + if (layer->funcHook == nullptr) + { + renderer->ApplyTexture(layer->pDrawTarget.Decal()->id); + if (!bSuspendTextureTransfer && layer->bUpdate) + { + layer->pDrawTarget.Decal()->Update(); + layer->bUpdate = false; + } + + renderer->DrawLayerQuad(layer->vOffset, layer->vScale, layer->tint); + + // Display Decals in order for this layer + for (auto& decal : layer->vecDecalInstance) + renderer->DrawDecal(decal); + layer->vecDecalInstance.clear(); + } + else + { + // Mwa ha ha.... Have Fun!!! + layer->funcHook(); + } + } + } + + + + // Present Graphics to screen + renderer->DisplayFrame(); + + // Update Title Bar + fFrameTimer += fElapsedTime; + nFrameCount++; + if (fFrameTimer >= 1.0f) + { + nLastFPS = nFrameCount; + fFrameTimer -= 1.0f; + std::string sTitle = "OneLoneCoder.com - Pixel Game Engine - " + sAppName + " - FPS: " + std::to_string(nFrameCount); + platform->SetWindowTitle(sTitle); + nFrameCount = 0; + } + } + + void PixelGameEngine::olc_ConstructFontSheet() + { + std::string data; + data += "?Q`0001oOch0o01o@F40o000000000"; + data += "O000000nOT0063Qo4d8>?7a14Gno94AA4gno94AaOT0>o3`oO400o7QN00000400"; + data += "Of80001oOg<7O7moBGT7O7lABET024@aBEd714AiOdl717a_=TH013Q>00000000"; + data += "720D000V?V5oB3Q_HdUoE7a9@DdDE4A9@DmoE4A;Hg]oM4Aj8S4D84@`00000000"; + data += "OaPT1000Oa`^13P1@AI[?g`1@A=[OdAoHgljA4Ao?WlBA7l1710007l100000000"; + data += "ObM6000oOfMV?3QoBDD`O7a0BDDH@5A0BDD<@5A0BGeVO5ao@CQR?5Po00000000"; + data += "Oc``000?Ogij70PO2D]??0Ph2DUM@7i`2DTg@7lh2GUj?0TO0C1870T?00000000"; + data += "70<4001o?P<7?1QoHg43O;`h@GT0@:@LB@d0>:@hN@L0@?aoN@<0O7ao0000?000"; + data += "OcH0001SOglLA7mg24TnK7ln24US>0PL24U140PnOgl0>7QgOcH0K71S0000A000"; + data += "00H00000@Dm1S007@DUSg00?OdTnH7YhOfTL<7Yh@Cl0700?@Ah0300700000000"; + data += "<008001QL00ZA41a@6HnI<1i@FHLM81M@@0LG81?O`0nC?Y7?`0ZA7Y300080000"; + data += "O`082000Oh0827mo6>Hn?Wmo?6HnMb11MP08@C11H`08@FP0@@0004@000000000"; + data += "00P00001Oab00003OcKP0006@6=PMgl<@440MglH@000000`@000001P00000000"; + data += "Ob@8@@00Ob@8@Ga13R@8Mga172@8?PAo3R@827QoOb@820@0O`0007`0000007P0"; + data += "O`000P08Od400g`<3V=P0G`673IP0`@3>1`00P@6O`P00g`SetPixel(px, py, olc::Pixel(k, k, k, k)); + if (++py == 48) { px++; py = 0; } + } + } + + fontRenderable.Decal()->Update(); + + constexpr std::array vSpacing = { { + 0x03,0x25,0x16,0x08,0x07,0x08,0x08,0x04,0x15,0x15,0x08,0x07,0x15,0x07,0x24,0x08, + 0x08,0x17,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x24,0x15,0x06,0x07,0x16,0x17, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x17,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x17,0x08,0x08,0x08,0x08,0x17,0x08,0x15,0x08,0x15,0x08,0x08, + 0x24,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x33,0x17,0x17,0x33,0x18,0x17,0x17, + 0x17,0x17,0x17,0x17,0x07,0x17,0x17,0x18,0x18,0x17,0x17,0x07,0x33,0x07,0x08,0x00, } }; + + for (auto c : vSpacing) vFontSpacing.push_back({ c >> 4, c & 15 }); + + // UK Standard Layout +#ifdef OLC_KEYBOARD_UK + vKeyboardMap = + { + {olc::Key::A, "a", "A"}, {olc::Key::B, "b", "B"}, {olc::Key::C, "c", "C"}, {olc::Key::D, "d", "D"}, {olc::Key::E, "e", "E"}, + {olc::Key::F, "f", "F"}, {olc::Key::G, "g", "G"}, {olc::Key::H, "h", "H"}, {olc::Key::I, "i", "I"}, {olc::Key::J, "j", "J"}, + {olc::Key::K, "k", "K"}, {olc::Key::L, "l", "L"}, {olc::Key::M, "m", "M"}, {olc::Key::N, "n", "N"}, {olc::Key::O, "o", "O"}, + {olc::Key::P, "p", "P"}, {olc::Key::Q, "q", "Q"}, {olc::Key::R, "r", "R"}, {olc::Key::S, "s", "S"}, {olc::Key::T, "t", "T"}, + {olc::Key::U, "u", "U"}, {olc::Key::V, "v", "V"}, {olc::Key::W, "w", "W"}, {olc::Key::X, "x", "X"}, {olc::Key::Y, "y", "Y"}, + {olc::Key::Z, "z", "Z"}, + + {olc::Key::K0, "0", ")"}, {olc::Key::K1, "1", "!"}, {olc::Key::K2, "2", "\""}, {olc::Key::K3, "3", "#"}, {olc::Key::K4, "4", "$"}, + {olc::Key::K5, "5", "%"}, {olc::Key::K6, "6", "^"}, {olc::Key::K7, "7", "&"}, {olc::Key::K8, "8", "*"}, {olc::Key::K9, "9", "("}, + + {olc::Key::NP0, "0", "0"}, {olc::Key::NP1, "1", "1"}, {olc::Key::NP2, "2", "2"}, {olc::Key::NP3, "3", "3"}, {olc::Key::NP4, "4", "4"}, + {olc::Key::NP5, "5", "5"}, {olc::Key::NP6, "6", "6"}, {olc::Key::NP7, "7", "7"}, {olc::Key::NP8, "8", "8"}, {olc::Key::NP9, "9", "9"}, + {olc::Key::NP_MUL, "*", "*"}, {olc::Key::NP_DIV, "/", "/"}, {olc::Key::NP_ADD, "+", "+"}, {olc::Key::NP_SUB, "-", "-"}, {olc::Key::NP_DECIMAL, ".", "."}, + + {olc::Key::PERIOD, ".", ">"}, {olc::Key::EQUALS, "=", "+"}, {olc::Key::COMMA, ",", "<"}, {olc::Key::MINUS, "-", "_"}, {olc::Key::SPACE, " ", " "}, + + {olc::Key::OEM_1, ";", ":"}, {olc::Key::OEM_2, "/", "?"}, {olc::Key::OEM_3, "\'", "@"}, {olc::Key::OEM_4, "[", "{"}, + {olc::Key::OEM_5, "\\", "|"}, {olc::Key::OEM_6, "]", "}"}, {olc::Key::OEM_7, "#", "~"}, + + // {olc::Key::TAB, "\t", "\t"} + }; +#endif + } + + void PixelGameEngine::pgex_Register(olc::PGEX* pgex) + { + if (std::find(vExtensions.begin(), vExtensions.end(), pgex) == vExtensions.end()) + vExtensions.push_back(pgex); + } + + + PGEX::PGEX(bool bHook) { if(bHook) pge->pgex_Register(this); } + void PGEX::OnBeforeUserCreate() {} + void PGEX::OnAfterUserCreate() {} + bool PGEX::OnBeforeUserUpdate(float& fElapsedTime) { return false; } + void PGEX::OnAfterUserUpdate(float fElapsedTime) {} + + // Need a couple of statics as these are singleton instances + // read from multiple locations + std::atomic PixelGameEngine::bAtomActive{ false }; + olc::PixelGameEngine* olc::PGEX::pge = nullptr; + olc::PixelGameEngine* olc::Platform::ptrPGE = nullptr; + olc::PixelGameEngine* olc::Renderer::ptrPGE = nullptr; + std::unique_ptr olc::Sprite::loader = nullptr; +}; +#pragma endregion + + +#pragma region platform_headless +namespace olc +{ +#if defined(OLC_GFX_HEADLESS) + class Renderer_Headless : public olc::Renderer + { + public: + virtual void PrepareDevice() {}; + virtual olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) { return olc::rcode::OK; } + virtual olc::rcode DestroyDevice() { return olc::rcode::OK; } + virtual void DisplayFrame() {} + virtual void PrepareDrawing() {} + virtual void SetDecalMode(const olc::DecalMode& mode) {} + virtual void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) {} + virtual void DrawDecal(const olc::DecalInstance& decal) {} + virtual uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered = false, const bool clamp = true) {return 1;}; + virtual void UpdateTexture(uint32_t id, olc::Sprite* spr) {} + virtual void ReadTexture(uint32_t id, olc::Sprite* spr) {} + virtual uint32_t DeleteTexture(const uint32_t id) {return 1;} + virtual void ApplyTexture(uint32_t id) {} + virtual void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) {} + virtual void ClearBuffer(olc::Pixel p, bool bDepth) {} + }; +#endif +#if defined(OLC_PLATFORM_HEADLESS) + class Platform_Headless : public olc::Platform + { + public: + virtual olc::rcode ApplicationStartUp() { return olc::rcode::OK; } + virtual olc::rcode ApplicationCleanUp() { return olc::rcode::OK; } + virtual olc::rcode ThreadStartUp() { return olc::rcode::OK; } + virtual olc::rcode ThreadCleanUp() { return olc::rcode::OK; } + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) { return olc::rcode::OK; } + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) { return olc::rcode::OK; } + virtual olc::rcode SetWindowTitle(const std::string& s) { return olc::rcode::OK; } + virtual olc::rcode StartSystemEventLoop() { return olc::rcode::OK; } + virtual olc::rcode HandleSystemEvent() { return olc::rcode::OK; } + }; +#endif +} +#pragma endregion + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Renderers - the draw-y bits | +// O------------------------------------------------------------------------------O + +#pragma region image_stb +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: stb_image.h, all systems, very fast | +// O------------------------------------------------------------------------------O +// Thanks to Sean Barrett - https://github.com/nothings/stb/blob/master/stb_image.h +// MIT License - Copyright(c) 2017 Sean Barrett + +// Note you need to download the above file into your project folder, and +// #define OLC_IMAGE_STB +// #define OLC_PGE_APPLICATION +// #include "olcPixelGameEngine.h" + +#if defined(OLC_IMAGE_STB) +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" +namespace olc +{ + class ImageLoader_STB : public olc::ImageLoader + { + public: + ImageLoader_STB() : ImageLoader() + {} + + olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) override + { + UNUSED(pack); + // clear out existing sprite + spr->pColData.clear(); + // Open file + stbi_uc* bytes = nullptr; + int w = 0, h = 0, cmp = 0; + if (pack != nullptr) + { + ResourceBuffer rb = pack->GetFileBuffer(sImageFile); + bytes = stbi_load_from_memory((unsigned char*)rb.vMemory.data(), rb.vMemory.size(), &w, &h, &cmp, 4); + } + else + { + // Check file exists + if (!_gfs::exists(sImageFile)) return olc::rcode::NO_FILE; + bytes = stbi_load(sImageFile.c_str(), &w, &h, &cmp, 4); + } + + if (!bytes) return olc::rcode::FAIL; + spr->width = w; spr->height = h; + spr->pColData.resize(spr->width * spr->height); + std::memcpy(spr->pColData.data(), bytes, spr->width * spr->height * 4); + delete[] bytes; + return olc::rcode::OK; + } + + olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) override + { + return olc::rcode::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: stb_image.h | +// O------------------------------------------------------------------------------O +#pragma endregion + + + +#if !defined(OLC_PGE_HEADLESS) + +#pragma region renderer_ogl10 +// O------------------------------------------------------------------------------O +// | START RENDERER: OpenGL 1.0 (the original, the best...) | +// O------------------------------------------------------------------------------O +#if defined(OLC_GFX_OPENGL10) + +#if defined(OLC_PLATFORM_WINAPI) +#include +#include +#if !defined(__MINGW32__) +#pragma comment(lib, "Dwmapi.lib") +#endif +typedef BOOL(WINAPI wglSwapInterval_t) (int interval); +static wglSwapInterval_t* wglSwapInterval = nullptr; +typedef HDC glDeviceContext_t; +typedef HGLRC glRenderContext_t; +#endif + +#if defined(__linux__) || defined(__FreeBSD__) +#include +#endif + +#if defined(OLC_PLATFORM_X11) +namespace X11 +{ +#include +} +typedef int(glSwapInterval_t)(X11::Display* dpy, X11::GLXDrawable drawable, int interval); +static glSwapInterval_t* glSwapIntervalEXT; +typedef X11::GLXContext glDeviceContext_t; +typedef X11::GLXContext glRenderContext_t; +#endif + +#if defined(__APPLE__) +#define GL_SILENCE_DEPRECATION +#include +#include +#include +#endif + +namespace olc +{ + class Renderer_OGL10 : public olc::Renderer + { + private: +#if defined(OLC_PLATFORM_GLUT) + bool mFullScreen = false; +#else + glDeviceContext_t glDeviceContext = 0; + glRenderContext_t glRenderContext = 0; +#endif + + bool bSync = false; + olc::DecalMode nDecalMode = olc::DecalMode(-1); // Thanks Gusgo & Bispoo + olc::DecalStructure nDecalStructure = olc::DecalStructure(-1); +#if defined(OLC_PLATFORM_X11) + X11::Display* olc_Display = nullptr; + X11::Window* olc_Window = nullptr; + X11::XVisualInfo* olc_VisualInfo = nullptr; +#endif + + public: + void PrepareDevice() override + { +#if defined(OLC_PLATFORM_GLUT) + //glutInit has to be called with main() arguments, make fake ones + int argc = 0; + char* argv[1] = { (char*)"" }; + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(512, 512); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); + // Creates the window and the OpenGL context for it + glutCreateWindow("OneLoneCoder.com - Pixel Game Engine"); + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif + } + + olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) override + { +#if defined(OLC_PLATFORM_WINAPI) + // Create Device Context + glDeviceContext = GetDC((HWND)(params[0])); + PIXELFORMATDESCRIPTOR pfd = + { + sizeof(PIXELFORMATDESCRIPTOR), 1, + PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, + PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + PFD_MAIN_PLANE, 0, 0, 0, 0 + }; + + int pf = 0; + if (!(pf = ChoosePixelFormat(glDeviceContext, &pfd))) return olc::FAIL; + SetPixelFormat(glDeviceContext, pf, &pfd); + + if (!(glRenderContext = wglCreateContext(glDeviceContext))) return olc::FAIL; + wglMakeCurrent(glDeviceContext, glRenderContext); + + // Remove Frame cap + wglSwapInterval = (wglSwapInterval_t*)wglGetProcAddress("wglSwapIntervalEXT"); + if (wglSwapInterval && !bVSYNC) wglSwapInterval(0); + bSync = bVSYNC; +#endif + +#if defined(OLC_PLATFORM_X11) + using namespace X11; + // Linux has tighter coupling between OpenGL and X11, so we store + // various "platform" handles in the renderer + olc_Display = (X11::Display*)(params[0]); + olc_Window = (X11::Window*)(params[1]); + olc_VisualInfo = (X11::XVisualInfo*)(params[2]); + + glDeviceContext = glXCreateContext(olc_Display, olc_VisualInfo, nullptr, GL_TRUE); + glXMakeCurrent(olc_Display, *olc_Window, glDeviceContext); + + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, *olc_Window, &gwa); + glViewport(0, 0, gwa.width, gwa.height); + + glSwapIntervalEXT = nullptr; + glSwapIntervalEXT = (glSwapInterval_t*)glXGetProcAddress((unsigned char*)"glXSwapIntervalEXT"); + + if (glSwapIntervalEXT == nullptr && !bVSYNC) + { + printf("NOTE: Could not disable VSYNC, glXSwapIntervalEXT() was not found!\n"); + printf(" Don't worry though, things will still work, it's just the\n"); + printf(" frame rate will be capped to your monitors refresh rate - javidx9\n"); + } + + if (glSwapIntervalEXT != nullptr && !bVSYNC) + glSwapIntervalEXT(olc_Display, *olc_Window, 0); +#endif + +#if defined(OLC_PLATFORM_GLUT) + mFullScreen = bFullScreen; + if (!bVSYNC) + { +#if defined(__APPLE__) + GLint sync = 0; + CGLContextObj ctx = CGLGetCurrentContext(); + if (ctx) CGLSetParameter(ctx, kCGLCPSwapInterval, &sync); +#endif + } +#else + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif + return olc::rcode::OK; + } + + olc::rcode DestroyDevice() override + { +#if defined(OLC_PLATFORM_WINAPI) + wglDeleteContext(glRenderContext); +#endif + +#if defined(OLC_PLATFORM_X11) + glXMakeCurrent(olc_Display, None, NULL); + glXDestroyContext(olc_Display, glDeviceContext); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutDestroyWindow(glutGetWindow()); +#endif + return olc::rcode::OK; + } + + void DisplayFrame() override + { +#if defined(OLC_PLATFORM_WINAPI) + SwapBuffers(glDeviceContext); + if (bSync) DwmFlush(); // Woooohooooooo!!!! SMOOOOOOOTH! +#endif + +#if defined(OLC_PLATFORM_X11) + X11::glXSwapBuffers(olc_Display, *olc_Window); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutSwapBuffers(); +#endif + } + + void PrepareDrawing() override + { + + //ClearBuffer(olc::GREEN, true); + glEnable(GL_BLEND); + nDecalMode = DecalMode::NORMAL; + nDecalStructure = DecalStructure::FAN; + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + } + + void SetDecalMode(const olc::DecalMode& mode) + { + if (mode != nDecalMode) + { + switch (mode) + { + case olc::DecalMode::NORMAL: + case olc::DecalMode::MODEL3D: + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + break; + case olc::DecalMode::ADDITIVE: + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + break; + case olc::DecalMode::MULTIPLICATIVE: + glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); + break; + case olc::DecalMode::STENCIL: + glBlendFunc(GL_ZERO, GL_SRC_ALPHA); + break; + case olc::DecalMode::ILLUMINATE: + glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); + break; + case olc::DecalMode::WIREFRAME: + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + break; + } + + nDecalMode = mode; + } + } + + void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) override + { + glBegin(GL_QUADS); + glColor4ub(tint.r, tint.g, tint.b, tint.a); + glTexCoord2f(0.0f * scale.x + offset.x, 1.0f * scale.y + offset.y); + glVertex3f(-1.0f /*+ vSubPixelOffset.x*/, -1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glTexCoord2f(0.0f * scale.x + offset.x, 0.0f * scale.y + offset.y); + glVertex3f(-1.0f /*+ vSubPixelOffset.x*/, 1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glTexCoord2f(1.0f * scale.x + offset.x, 0.0f * scale.y + offset.y); + glVertex3f(1.0f /*+ vSubPixelOffset.x*/, 1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glTexCoord2f(1.0f * scale.x + offset.x, 1.0f * scale.y + offset.y); + glVertex3f(1.0f /*+ vSubPixelOffset.x*/, -1.0f /*+ vSubPixelOffset.y*/, 0.0f); + glEnd(); + } + + void DrawDecal(const olc::DecalInstance& decal) override + { + SetDecalMode(decal.mode); + + if (decal.decal == nullptr) + glBindTexture(GL_TEXTURE_2D, 0); + else + glBindTexture(GL_TEXTURE_2D, decal.decal->id); + + if (nDecalMode == DecalMode::MODEL3D) + { +#ifdef OLC_ENABLE_EXPERIMENTAL + glMatrixMode(GL_PROJECTION); glPushMatrix(); + glMatrixMode(GL_MODELVIEW); glPushMatrix(); + + glEnable(GL_DEPTH_TEST); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-1.0f, 1.0f, -1.0f, 1.0f, 1, 1000); + +#pragma comment (lib, "winmm.lib") + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0, -40, -200); + glRotatef(float(clock()) * 0.1f, 1, 0, 0); + glRotatef(float(clock()) * 0.1f * 2, 0, 1, 0); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glBegin(GL_TRIANGLES); + + + // Render as 3D Spatial Entity + for (uint32_t n = 0; n < decal.points; n++) + { + glColor4ub(decal.tint[n].r, decal.tint[n].g, decal.tint[n].b, decal.tint[n].a); + glTexCoord2f(decal.uv[n].x, decal.uv[n].y); + glVertex3f(decal.pos[n].x, decal.pos[n].y, decal.w[n]); + } + + glEnd(); + + glMatrixMode(GL_PROJECTION); glPopMatrix(); + glMatrixMode(GL_MODELVIEW); glPopMatrix(); + glDisable(GL_DEPTH_TEST); +#endif + } + else + { + if (nDecalMode == DecalMode::WIREFRAME) + glBegin(GL_LINE_LOOP); + else + { + if(decal.structure == olc::DecalStructure::FAN) + glBegin(GL_TRIANGLE_FAN); + else if(decal.structure == olc::DecalStructure::STRIP) + glBegin(GL_TRIANGLE_STRIP); + else if(decal.structure == olc::DecalStructure::LIST) + glBegin(GL_TRIANGLES); + } + + // Render as 2D Spatial entity + for (uint32_t n = 0; n < decal.points; n++) + { + glColor4ub(decal.tint[n].r, decal.tint[n].g, decal.tint[n].b, decal.tint[n].a); + glTexCoord4f(decal.uv[n].x, decal.uv[n].y, 0.0f, decal.w[n]); + glVertex2f(decal.pos[n].x, decal.pos[n].y); + } + + glEnd(); + } + + + //glDisable(GL_DEPTH_TEST); + } + + uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered, const bool clamp) override + { + UNUSED(width); + UNUSED(height); + uint32_t id = 0; + glGenTextures(1, &id); + glBindTexture(GL_TEXTURE_2D, id); + if (filtered) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + + if (clamp) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + } + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + return id; + } + + uint32_t DeleteTexture(const uint32_t id) override + { + glDeleteTextures(1, &id); + return id; + } + + void UpdateTexture(uint32_t id, olc::Sprite* spr) override + { + UNUSED(id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, spr->width, spr->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ReadTexture(uint32_t id, olc::Sprite* spr) override + { + glReadPixels(0, 0, spr->width, spr->height, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ApplyTexture(uint32_t id) override + { + glBindTexture(GL_TEXTURE_2D, id); + } + + void ClearBuffer(olc::Pixel p, bool bDepth) override + { + glClearColor(float(p.r) / 255.0f, float(p.g) / 255.0f, float(p.b) / 255.0f, float(p.a) / 255.0f); + glClear(GL_COLOR_BUFFER_BIT); + if (bDepth) glClear(GL_DEPTH_BUFFER_BIT); + } + + void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) override + { + glViewport(pos.x, pos.y, size.x, size.y); + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END RENDERER: OpenGL 1.0 (the original, the best...) | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region renderer_ogl33 +// O------------------------------------------------------------------------------O +// | START RENDERER: OpenGL 3.3 (3.0 es) (sh-sh-sh-shaders....) | +// O------------------------------------------------------------------------------O +#if defined(OLC_GFX_OPENGL33) + +#if defined(OLC_PLATFORM_WINAPI) +#include +//#include +#if !defined(__MINGW32__) +#pragma comment(lib, "Dwmapi.lib") +#endif +//typedef void __stdcall locSwapInterval_t(GLsizei n); +typedef HDC glDeviceContext_t; +typedef HGLRC glRenderContext_t; +//#define CALLSTYLE __stdcall +#define OGL_LOAD(t, n) (t*)wglGetProcAddress(#n) +#endif +// +//#if defined(__linux__) || defined(__FreeBSD__) +// #include +//#endif + +#if defined(OLC_PLATFORM_X11) +/*namespace X11 +{ +#include +} +typedef int(locSwapInterval_t)(X11::Display* dpy, X11::GLXDrawable drawable, int interval);*/ +typedef X11::GLXContext glDeviceContext_t; +typedef X11::GLXContext glRenderContext_t; +//#define CALLSTYLE +#define OGL_LOAD(t, n) (t*)glXGetProcAddress((unsigned char*)#n); +#endif + +//#if defined(__APPLE__) +// #define GL_SILENCE_DEPRECATION +// #include +// #include +// #include +//#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) +#include +#include +#define GL_GLEXT_PROTOTYPES +#include +#include +#define CALLSTYLE +typedef EGLBoolean(locSwapInterval_t)(EGLDisplay display, EGLint interval); +#define GL_CLAMP GL_CLAMP_TO_EDGE +#define OGL_LOAD(t, n) n; +#endif + +namespace olc +{ + // typedef char GLchar; + // typedef ptrdiff_t GLsizeiptr; + // typedef GLuint CALLSTYLE locCreateShader_t(GLenum type); + // typedef GLuint CALLSTYLE locCreateProgram_t(void); + // typedef void CALLSTYLE locDeleteShader_t(GLuint shader); + //#if defined(OLC_PLATFORM_EMSCRIPTEN) + // typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); + //#else + // typedef void CALLSTYLE locShaderSource_t(GLuint shader, GLsizei count, const GLchar** string, const GLint* length); + //#endif + // typedef void CALLSTYLE locCompileShader_t(GLuint shader); + // typedef void CALLSTYLE locLinkProgram_t(GLuint program); + // typedef void CALLSTYLE locDeleteProgram_t(GLuint program); + // typedef void CALLSTYLE locAttachShader_t(GLuint program, GLuint shader); + // typedef void CALLSTYLE locBindBuffer_t(GLenum target, GLuint buffer); + // typedef void CALLSTYLE locBufferData_t(GLenum target, GLsizeiptr size, const void* data, GLenum usage); + // typedef void CALLSTYLE locGenBuffers_t(GLsizei n, GLuint* buffers); + // typedef void CALLSTYLE locVertexAttribPointer_t(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); + // typedef void CALLSTYLE locEnableVertexAttribArray_t(GLuint index); + // typedef void CALLSTYLE locUseProgram_t(GLuint program); + // typedef void CALLSTYLE locBindVertexArray_t(GLuint array); + // typedef void CALLSTYLE locGenVertexArrays_t(GLsizei n, GLuint* arrays); + // typedef void CALLSTYLE locGetShaderInfoLog_t(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); + // typedef GLint CALLSTYLE locGetUniformLocation_t(GLuint program, const GLchar* name); + // typedef void CALLSTYLE locUniform1f_t(GLint location, GLfloat v0); + // typedef void CALLSTYLE locUniform1i_t(GLint location, GLint v0); + // typedef void CALLSTYLE locUniform2fv_t(GLint location, GLsizei count, const GLfloat* value); + // typedef void CALLSTYLE locActiveTexture_t(GLenum texture); + // typedef void CALLSTYLE locGenFrameBuffers_t(GLsizei n, GLuint* ids); + // typedef void CALLSTYLE locBindFrameBuffer_t(GLenum target, GLuint fb); + // typedef GLenum CALLSTYLE locCheckFrameBufferStatus_t(GLenum target); + // typedef void CALLSTYLE locDeleteFrameBuffers_t(GLsizei n, const GLuint* fbs); + // typedef void CALLSTYLE locFrameBufferTexture2D_t(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + // typedef void CALLSTYLE locDrawBuffers_t(GLsizei n, const GLenum* bufs); + // typedef void CALLSTYLE locBlendFuncSeparate_t(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + + + + class Renderer_OGL33 : public olc::Renderer + { + private: +#if defined(OLC_PLATFORM_EMSCRIPTEN) + EGLDisplay olc_Display; + EGLConfig olc_Config; + EGLContext olc_Context; + EGLSurface olc_Surface; +#endif + +#if defined(OLC_PLATFORM_GLUT) + bool mFullScreen = false; +#else +#if !defined(OLC_PLATFORM_EMSCRIPTEN) + glDeviceContext_t glDeviceContext = 0; + glRenderContext_t glRenderContext = 0; +#endif +#endif + bool bSync = false; + olc::DecalMode nDecalMode = olc::DecalMode(-1); // Thanks Gusgo & Bispoo +#if defined(OLC_PLATFORM_X11) + X11::Display* olc_Display = nullptr; + X11::Window* olc_Window = nullptr; + X11::XVisualInfo* olc_VisualInfo = nullptr; +#endif + + private: + locCreateShader_t* locCreateShader = nullptr; + locShaderSource_t* locShaderSource = nullptr; + locCompileShader_t* locCompileShader = nullptr; + locDeleteShader_t* locDeleteShader = nullptr; + locCreateProgram_t* locCreateProgram = nullptr; + locDeleteProgram_t* locDeleteProgram = nullptr; + locLinkProgram_t* locLinkProgram = nullptr; + locAttachShader_t* locAttachShader = nullptr; + locBindBuffer_t* locBindBuffer = nullptr; + locBufferData_t* locBufferData = nullptr; + locGenBuffers_t* locGenBuffers = nullptr; + locVertexAttribPointer_t* locVertexAttribPointer = nullptr; + locEnableVertexAttribArray_t* locEnableVertexAttribArray = nullptr; + locUseProgram_t* locUseProgram = nullptr; + locBindVertexArray_t* locBindVertexArray = nullptr; + locGenVertexArrays_t* locGenVertexArrays = nullptr; + locSwapInterval_t* locSwapInterval = nullptr; + locGetShaderInfoLog_t* locGetShaderInfoLog = nullptr; + + uint32_t m_nFS = 0; + uint32_t m_nVS = 0; + uint32_t m_nQuadShader = 0; + uint32_t m_vbQuad = 0; + uint32_t m_vaQuad = 0; + + struct locVertex + { + float pos[3]; + olc::vf2d tex; + olc::Pixel col; + }; + + locVertex pVertexMem[OLC_MAX_VERTS]; + + olc::Renderable rendBlankQuad; + + public: + void PrepareDevice() override + { +#if defined(OLC_PLATFORM_GLUT) + //glutInit has to be called with main() arguments, make fake ones + int argc = 0; + char* argv[1] = { (char*)"" }; + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(512, 512); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); + // Creates the window and the OpenGL context for it + glutCreateWindow("OneLoneCoder.com - Pixel Game Engine"); + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif + } + + olc::rcode CreateDevice(std::vector params, bool bFullScreen, bool bVSYNC) override + { + // Create OpenGL Context +#if defined(OLC_PLATFORM_WINAPI) + // Create Device Context + glDeviceContext = GetDC((HWND)(params[0])); + PIXELFORMATDESCRIPTOR pfd = + { + sizeof(PIXELFORMATDESCRIPTOR), 1, + PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, + PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + PFD_MAIN_PLANE, 0, 0, 0, 0 + }; + + int pf = 0; + if (!(pf = ChoosePixelFormat(glDeviceContext, &pfd))) return olc::FAIL; + SetPixelFormat(glDeviceContext, pf, &pfd); + + if (!(glRenderContext = wglCreateContext(glDeviceContext))) return olc::FAIL; + wglMakeCurrent(glDeviceContext, glRenderContext); + + // Set Vertical Sync + locSwapInterval = OGL_LOAD(locSwapInterval_t, wglSwapIntervalEXT); + if (locSwapInterval && !bVSYNC) locSwapInterval(0); + bSync = bVSYNC; +#endif + +#if defined(OLC_PLATFORM_X11) + using namespace X11; + // Linux has tighter coupling between OpenGL and X11, so we store + // various "platform" handles in the renderer + olc_Display = (X11::Display*)(params[0]); + olc_Window = (X11::Window*)(params[1]); + olc_VisualInfo = (X11::XVisualInfo*)(params[2]); + + glDeviceContext = glXCreateContext(olc_Display, olc_VisualInfo, nullptr, GL_TRUE); + glXMakeCurrent(olc_Display, *olc_Window, glDeviceContext); + + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, *olc_Window, &gwa); + glViewport(0, 0, gwa.width, gwa.height); + + locSwapInterval = OGL_LOAD(locSwapInterval_t, glXSwapIntervalEXT); + + if (locSwapInterval == nullptr && !bVSYNC) + { + printf("NOTE: Could not disable VSYNC, glXSwapIntervalEXT() was not found!\n"); + printf(" Don't worry though, things will still work, it's just the\n"); + printf(" frame rate will be capped to your monitors refresh rate - javidx9\n"); + } + + if (locSwapInterval != nullptr && !bVSYNC) + locSwapInterval(olc_Display, *olc_Window, 0); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + EGLint const attribute_list[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_ALPHA_SIZE, 8, EGL_NONE }; + EGLint const context_config[] = { EGL_CONTEXT_CLIENT_VERSION , 2, EGL_NONE }; + EGLint num_config; + + olc_Display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + eglInitialize(olc_Display, nullptr, nullptr); + eglChooseConfig(olc_Display, attribute_list, &olc_Config, 1, &num_config); + + /* create an EGL rendering context */ + olc_Context = eglCreateContext(olc_Display, olc_Config, EGL_NO_CONTEXT, context_config); + olc_Surface = eglCreateWindowSurface(olc_Display, olc_Config, NULL, nullptr); + eglMakeCurrent(olc_Display, olc_Surface, olc_Surface, olc_Context); + //eglSwapInterval is currently a NOP, plement anyways in case it becomes supported + locSwapInterval = &eglSwapInterval; + locSwapInterval(olc_Display, bVSYNC ? 1 : 0); +#endif + +#if defined(OLC_PLATFORM_GLUT) + mFullScreen = bFullScreen; + if (!bVSYNC) + { +#if defined(__APPLE__) + GLint sync = 0; + CGLContextObj ctx = CGLGetCurrentContext(); + if (ctx) CGLSetParameter(ctx, kCGLCPSwapInterval, &sync); +#endif + } +#else +#if !defined(OLC_PLATFORM_EMSCRIPTEN) + glEnable(GL_TEXTURE_2D); // Turn on texturing + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); +#endif +#endif + // Load External OpenGL Functions + locCreateShader = OGL_LOAD(locCreateShader_t, glCreateShader); + locCompileShader = OGL_LOAD(locCompileShader_t, glCompileShader); + locShaderSource = OGL_LOAD(locShaderSource_t, glShaderSource); + locDeleteShader = OGL_LOAD(locDeleteShader_t, glDeleteShader); + locCreateProgram = OGL_LOAD(locCreateProgram_t, glCreateProgram); + locDeleteProgram = OGL_LOAD(locDeleteProgram_t, glDeleteProgram); + locLinkProgram = OGL_LOAD(locLinkProgram_t, glLinkProgram); + locAttachShader = OGL_LOAD(locAttachShader_t, glAttachShader); + locBindBuffer = OGL_LOAD(locBindBuffer_t, glBindBuffer); + locBufferData = OGL_LOAD(locBufferData_t, glBufferData); + locGenBuffers = OGL_LOAD(locGenBuffers_t, glGenBuffers); + locVertexAttribPointer = OGL_LOAD(locVertexAttribPointer_t, glVertexAttribPointer); + locEnableVertexAttribArray = OGL_LOAD(locEnableVertexAttribArray_t, glEnableVertexAttribArray); + locUseProgram = OGL_LOAD(locUseProgram_t, glUseProgram); + locGetShaderInfoLog = OGL_LOAD(locGetShaderInfoLog_t, glGetShaderInfoLog); +#if !defined(OLC_PLATFORM_EMSCRIPTEN) + locBindVertexArray = OGL_LOAD(locBindVertexArray_t, glBindVertexArray); + locGenVertexArrays = OGL_LOAD(locGenVertexArrays_t, glGenVertexArrays); +#else + locBindVertexArray = glBindVertexArrayOES; + locGenVertexArrays = glGenVertexArraysOES; +#endif + + // Load & Compile Quad Shader - assumes no errors + m_nFS = locCreateShader(0x8B30); + const GLchar* strFS = +#if defined(__arm__) || defined(OLC_PLATFORM_EMSCRIPTEN) + "#version 300 es\n" + "precision mediump float;" +#else + "#version 330 core\n" +#endif + "out vec4 pixel;\n""in vec2 oTex;\n" + "in vec4 oCol;\n""uniform sampler2D sprTex;\n""void main(){pixel = texture(sprTex, oTex) * oCol;}"; + locShaderSource(m_nFS, 1, &strFS, NULL); + locCompileShader(m_nFS); + + m_nVS = locCreateShader(0x8B31); + const GLchar* strVS = +#if defined(__arm__) || defined(OLC_PLATFORM_EMSCRIPTEN) + "#version 300 es\n" + "precision mediump float;" +#else + "#version 330 core\n" +#endif + "layout(location = 0) in vec3 aPos;\n""layout(location = 1) in vec2 aTex;\n" + "layout(location = 2) in vec4 aCol;\n""out vec2 oTex;\n""out vec4 oCol;\n" + "void main(){ float p = 1.0 / aPos.z; gl_Position = p * vec4(aPos.x, aPos.y, 0.0, 1.0); oTex = p * aTex; oCol = aCol;}"; + locShaderSource(m_nVS, 1, &strVS, NULL); + locCompileShader(m_nVS); + + m_nQuadShader = locCreateProgram(); + locAttachShader(m_nQuadShader, m_nFS); + locAttachShader(m_nQuadShader, m_nVS); + locLinkProgram(m_nQuadShader); + + // Create Quad + locGenBuffers(1, &m_vbQuad); + locGenVertexArrays(1, &m_vaQuad); + locBindVertexArray(m_vaQuad); + locBindBuffer(0x8892, m_vbQuad); + + locVertex verts[OLC_MAX_VERTS]; + locBufferData(0x8892, sizeof(locVertex) * OLC_MAX_VERTS, verts, 0x88E0); + locVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(locVertex), 0); locEnableVertexAttribArray(0); + locVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(locVertex), (void*)(3 * sizeof(float))); locEnableVertexAttribArray(1); + locVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(locVertex), (void*)(5 * sizeof(float))); locEnableVertexAttribArray(2); + locBindBuffer(0x8892, 0); + locBindVertexArray(0); + + // Create blank texture for spriteless decals + rendBlankQuad.Create(1, 1); + rendBlankQuad.Sprite()->GetData()[0] = olc::WHITE; + rendBlankQuad.Decal()->Update(); + return olc::rcode::OK; + } + + olc::rcode DestroyDevice() override + { +#if defined(OLC_PLATFORM_WINAPI) + wglDeleteContext(glRenderContext); +#endif + +#if defined(OLC_PLATFORM_X11) + glXMakeCurrent(olc_Display, None, NULL); + glXDestroyContext(olc_Display, glDeviceContext); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutDestroyWindow(glutGetWindow()); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + eglMakeCurrent(olc_Display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglDestroyContext(olc_Display, olc_Context); + eglDestroySurface(olc_Display, olc_Surface); + eglTerminate(olc_Display); + olc_Display = EGL_NO_DISPLAY; + olc_Surface = EGL_NO_SURFACE; + olc_Context = EGL_NO_CONTEXT; +#endif + return olc::rcode::OK; + } + + void DisplayFrame() override + { +#if defined(OLC_PLATFORM_WINAPI) + SwapBuffers(glDeviceContext); + if (bSync) DwmFlush(); // Woooohooooooo!!!! SMOOOOOOOTH! +#endif + +#if defined(OLC_PLATFORM_X11) + X11::glXSwapBuffers(olc_Display, *olc_Window); +#endif + +#if defined(OLC_PLATFORM_GLUT) + glutSwapBuffers(); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + eglSwapBuffers(olc_Display, olc_Surface); +#endif + } + + void PrepareDrawing() override + { + glEnable(GL_BLEND); + nDecalMode = DecalMode::NORMAL; + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + locUseProgram(m_nQuadShader); + locBindVertexArray(m_vaQuad); + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + locVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(locVertex), 0); locEnableVertexAttribArray(0); + locVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(locVertex), (void*)(3 * sizeof(float))); locEnableVertexAttribArray(1); + locVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(locVertex), (void*)(5 * sizeof(float))); locEnableVertexAttribArray(2); +#endif + } + + void SetDecalMode(const olc::DecalMode& mode) override + { + if (mode != nDecalMode) + { + switch (mode) + { + case olc::DecalMode::NORMAL: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; + case olc::DecalMode::ADDITIVE: glBlendFunc(GL_SRC_ALPHA, GL_ONE); break; + case olc::DecalMode::MULTIPLICATIVE: glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); break; + case olc::DecalMode::STENCIL: glBlendFunc(GL_ZERO, GL_SRC_ALPHA); break; + case olc::DecalMode::ILLUMINATE: glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); break; + case olc::DecalMode::WIREFRAME: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; + } + + nDecalMode = mode; + } + } + + void DrawLayerQuad(const olc::vf2d& offset, const olc::vf2d& scale, const olc::Pixel tint) override + { + locBindBuffer(0x8892, m_vbQuad); + locVertex verts[4] = { + {{-1.0f, -1.0f, 1.0}, {0.0f * scale.x + offset.x, 1.0f * scale.y + offset.y}, tint}, + {{+1.0f, -1.0f, 1.0}, {1.0f * scale.x + offset.x, 1.0f * scale.y + offset.y}, tint}, + {{-1.0f, +1.0f, 1.0}, {0.0f * scale.x + offset.x, 0.0f * scale.y + offset.y}, tint}, + {{+1.0f, +1.0f, 1.0}, {1.0f * scale.x + offset.x, 0.0f * scale.y + offset.y}, tint}, + }; + + locBufferData(0x8892, sizeof(locVertex) * 4, verts, 0x88E0); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } + + void DrawDecal(const olc::DecalInstance& decal) override + { + SetDecalMode(decal.mode); + if (decal.decal == nullptr) + glBindTexture(GL_TEXTURE_2D, rendBlankQuad.Decal()->id); + else + glBindTexture(GL_TEXTURE_2D, decal.decal->id); + + locBindBuffer(0x8892, m_vbQuad); + + for (uint32_t i = 0; i < decal.points; i++) + pVertexMem[i] = { { decal.pos[i].x, decal.pos[i].y, decal.w[i] }, { decal.uv[i].x, decal.uv[i].y }, decal.tint[i] }; + + locBufferData(0x8892, sizeof(locVertex) * decal.points, pVertexMem, 0x88E0); + + if (nDecalMode == DecalMode::WIREFRAME) + glDrawArrays(GL_LINE_LOOP, 0, decal.points); + else + { + if (decal.structure == olc::DecalStructure::FAN) + glDrawArrays(GL_TRIANGLE_FAN, 0, decal.points); + else if (decal.structure == olc::DecalStructure::STRIP) + glDrawArrays(GL_TRIANGLE_STRIP, 0, decal.points); + else if (decal.structure == olc::DecalStructure::LIST) + glDrawArrays(GL_TRIANGLES, 0, decal.points); + } + } + + uint32_t CreateTexture(const uint32_t width, const uint32_t height, const bool filtered, const bool clamp) override + { + UNUSED(width); + UNUSED(height); + uint32_t id = 0; + glGenTextures(1, &id); + glBindTexture(GL_TEXTURE_2D, id); + + if (filtered) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + + if (clamp) + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + } + else + { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + } +#if !defined(OLC_PLATFORM_EMSCRIPTEN) + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); +#endif + return id; + } + + uint32_t DeleteTexture(const uint32_t id) override + { + glDeleteTextures(1, &id); + return id; + } + + void UpdateTexture(uint32_t id, olc::Sprite* spr) override + { + UNUSED(id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, spr->width, spr->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ReadTexture(uint32_t id, olc::Sprite* spr) override + { + glReadPixels(0, 0, spr->width, spr->height, GL_RGBA, GL_UNSIGNED_BYTE, spr->GetData()); + } + + void ApplyTexture(uint32_t id) override + { + glBindTexture(GL_TEXTURE_2D, id); + } + + void ClearBuffer(olc::Pixel p, bool bDepth) override + { + glClearColor(float(p.r) / 255.0f, float(p.g) / 255.0f, float(p.b) / 255.0f, float(p.a) / 255.0f); + glClear(GL_COLOR_BUFFER_BIT); + if (bDepth) glClear(GL_DEPTH_BUFFER_BIT); + } + + void UpdateViewport(const olc::vi2d& pos, const olc::vi2d& size) override + { + glViewport(pos.x, pos.y, size.x, size.y); + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END RENDERER: OpenGL 3.3 (3.0 es) (sh-sh-sh-shaders....) | +// O------------------------------------------------------------------------------O +#pragma endregion + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Image loaders | +// O------------------------------------------------------------------------------O + +#pragma region image_gdi +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: GDI+, Windows Only, always exists, a little slow | +// O------------------------------------------------------------------------------O +#if defined(OLC_IMAGE_GDI) + +#define min(a, b) ((a < b) ? a : b) +#define max(a, b) ((a > b) ? a : b) +#include +#include +#if defined(__MINGW32__) // Thanks Gusgo & Dandistine, but c'mon mingw!! wtf?! +#include +#else +#include +#endif +#include +#undef min +#undef max + +#if !defined(__MINGW32__) +#pragma comment(lib, "gdiplus.lib") +#pragma comment(lib, "Shlwapi.lib") +#endif + +namespace olc +{ + // Thanks @MaGetzUb for this, which allows sprites to be defined + // at construction, by initialising the GDI subsystem + static class GDIPlusStartup + { + public: + GDIPlusStartup() + { + Gdiplus::GdiplusStartupInput startupInput; + GdiplusStartup(&token, &startupInput, NULL); + } + + ULONG_PTR token; + + ~GDIPlusStartup() + { + // Well, MarcusTU thought this was important :D + Gdiplus::GdiplusShutdown(token); + } + } gdistartup; + + class ImageLoader_GDIPlus : public olc::ImageLoader + { + private: + std::wstring ConvertS2W(std::string s) + { +#ifdef __MINGW32__ + wchar_t* buffer = new wchar_t[s.length() + 1]; + mbstowcs(buffer, s.c_str(), s.length()); + buffer[s.length()] = L'\0'; +#else + int count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0); + wchar_t* buffer = new wchar_t[count]; + MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, buffer, count); +#endif + std::wstring w(buffer); + delete[] buffer; + return w; + } + + public: + ImageLoader_GDIPlus() : ImageLoader() + {} + + olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) override + { + // clear out existing sprite + spr->pColData.clear(); + + // Open file + UNUSED(pack); + Gdiplus::Bitmap* bmp = nullptr; + if (pack != nullptr) + { + // Load sprite from input stream + ResourceBuffer rb = pack->GetFileBuffer(sImageFile); + bmp = Gdiplus::Bitmap::FromStream(SHCreateMemStream((BYTE*)rb.vMemory.data(), UINT(rb.vMemory.size()))); + } + else + { + // Check file exists + if (!_gfs::exists(sImageFile)) return olc::rcode::NO_FILE; + + // Load sprite from file + bmp = Gdiplus::Bitmap::FromFile(ConvertS2W(sImageFile).c_str()); + } + + if (bmp->GetLastStatus() != Gdiplus::Ok) return olc::rcode::FAIL; + spr->width = bmp->GetWidth(); + spr->height = bmp->GetHeight(); + + spr->pColData.resize(spr->width * spr->height); + + for (int y = 0; y < spr->height; y++) + for (int x = 0; x < spr->width; x++) + { + Gdiplus::Color c; + bmp->GetPixel(x, y, &c); + spr->SetPixel(x, y, olc::Pixel(c.GetRed(), c.GetGreen(), c.GetBlue(), c.GetAlpha())); + } + delete bmp; + return olc::rcode::OK; + } + + olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) override + { + return olc::rcode::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END IMAGE LOADER: GDI+ | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region image_libpng +// O------------------------------------------------------------------------------O +// | START IMAGE LOADER: libpng, default on linux, requires -lpng (libpng-dev) | +// O------------------------------------------------------------------------------O +#if defined(OLC_IMAGE_LIBPNG) +#include +namespace olc +{ + void pngReadStream(png_structp pngPtr, png_bytep data, png_size_t length) + { + png_voidp a = png_get_io_ptr(pngPtr); + ((std::istream*)a)->read((char*)data, length); + } + + class ImageLoader_LibPNG : public olc::ImageLoader + { + public: + ImageLoader_LibPNG() : ImageLoader() + {} + + olc::rcode LoadImageResource(olc::Sprite* spr, const std::string& sImageFile, olc::ResourcePack* pack) override + { + UNUSED(pack); + + // clear out existing sprite + spr->pColData.clear(); + + //////////////////////////////////////////////////////////////////////////// + // Use libpng, Thanks to Guillaume Cottenceau + // https://gist.github.com/niw/5963798 + // Also reading png from streams + // http://www.piko3d.net/tutorials/libpng-tutorial-loading-png-files-from-streams/ + png_structp png; + png_infop info; + + auto loadPNG = [&]() + { + png_read_info(png, info); + png_byte color_type; + png_byte bit_depth; + png_bytep* row_pointers; + spr->width = png_get_image_width(png, info); + spr->height = png_get_image_height(png, info); + color_type = png_get_color_type(png, info); + bit_depth = png_get_bit_depth(png, info); + if (bit_depth == 16) png_set_strip_16(png); + if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png); + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png); + if (png_get_valid(png, info, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png); + if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_PALETTE) + png_set_filler(png, 0xFF, PNG_FILLER_AFTER); + if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb(png); + png_read_update_info(png, info); + row_pointers = (png_bytep*)malloc(sizeof(png_bytep) * spr->height); + for (int y = 0; y < spr->height; y++) { + row_pointers[y] = (png_byte*)malloc(png_get_rowbytes(png, info)); + } + png_read_image(png, row_pointers); + //////////////////////////////////////////////////////////////////////////// + // Create sprite array + spr->pColData.resize(spr->width * spr->height); + // Iterate through image rows, converting into sprite format + for (int y = 0; y < spr->height; y++) + { + png_bytep row = row_pointers[y]; + for (int x = 0; x < spr->width; x++) + { + png_bytep px = &(row[x * 4]); + spr->SetPixel(x, y, Pixel(px[0], px[1], px[2], px[3])); + } + } + + for (int y = 0; y < spr->height; y++) // Thanks maksym33 + free(row_pointers[y]); + free(row_pointers); + png_destroy_read_struct(&png, &info, nullptr); + }; + + png = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png) goto fail_load; + + info = png_create_info_struct(png); + if (!info) goto fail_load; + + if (setjmp(png_jmpbuf(png))) goto fail_load; + + if (pack == nullptr) + { + FILE* f = fopen(sImageFile.c_str(), "rb"); + if (!f) return olc::rcode::NO_FILE; + png_init_io(png, f); + loadPNG(); + fclose(f); + } + else + { + ResourceBuffer rb = pack->GetFileBuffer(sImageFile); + std::istream is(&rb); + png_set_read_fn(png, (png_voidp)&is, pngReadStream); + loadPNG(); + } + + return olc::rcode::OK; + + fail_load: + spr->width = 0; + spr->height = 0; + spr->pColData.clear(); + return olc::rcode::FAIL; + } + + olc::rcode SaveImageResource(olc::Sprite* spr, const std::string& sImageFile) override + { + return olc::rcode::OK; + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END IMAGE LOADER: | +// O------------------------------------------------------------------------------O +#pragma endregion + + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Platforms | +// O------------------------------------------------------------------------------O + +#pragma region platform_windows +// O------------------------------------------------------------------------------O +// | START PLATFORM: MICROSOFT WINDOWS XP, VISTA, 7, 8, 10 | +// O------------------------------------------------------------------------------O +#if defined(OLC_PLATFORM_WINAPI) + +#if defined(_WIN32) && !defined(__MINGW32__) +#pragma comment(lib, "user32.lib") // Visual Studio Only +#pragma comment(lib, "gdi32.lib") // For other Windows Compilers please add +#pragma comment(lib, "opengl32.lib") // these libs to your linker input +#endif + +namespace olc +{ + class Platform_Windows : public olc::Platform + { + private: + HWND olc_hWnd = nullptr; + std::wstring wsAppName; + + std::wstring ConvertS2W(std::string s) + { +#ifdef __MINGW32__ + wchar_t* buffer = new wchar_t[s.length() + 1]; + mbstowcs(buffer, s.c_str(), s.length()); + buffer[s.length()] = L'\0'; +#else + int count = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, NULL, 0); + wchar_t* buffer = new wchar_t[count]; + MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, buffer, count); +#endif + std::wstring w(buffer); + delete[] buffer; + return w; + } + + + + public: + virtual olc::rcode ApplicationStartUp() override { return olc::rcode::OK; } + virtual olc::rcode ApplicationCleanUp() override { return olc::rcode::OK; } + virtual olc::rcode ThreadStartUp() override { return olc::rcode::OK; } + + virtual olc::rcode ThreadCleanUp() override + { + renderer->DestroyDevice(); + PostMessage(olc_hWnd, WM_DESTROY, 0, 0); + return olc::OK; + } + + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) override + { + if (renderer->CreateDevice({ olc_hWnd }, bFullScreen, bEnableVSYNC) == olc::rcode::OK) + { + renderer->UpdateViewport(vViewPos, vViewSize); + return olc::rcode::OK; + } + else + return olc::rcode::FAIL; + } + + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) override + { + WNDCLASS wc; + wc.hIcon = static_cast(::LoadImage(GetModuleHandle(nullptr), + MAKEINTRESOURCE(102), + IMAGE_ICON, + 48, 48, + LR_DEFAULTCOLOR));; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; + wc.hInstance = GetModuleHandle(nullptr); + wc.lpfnWndProc = olc_WindowEvent; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.lpszMenuName = nullptr; + wc.hbrBackground = nullptr; + wc.lpszClassName = olcT("OLC_PIXEL_GAME_ENGINE"); + RegisterClass(&wc); + + // Define window furniture + DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; + DWORD dwStyle = WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_THICKFRAME; + + olc::vi2d vTopLeft = vWindowPos; + + // Handle Fullscreen + if (bFullScreen) + { + dwExStyle = 0; + dwStyle = WS_VISIBLE | WS_POPUP; + HMONITOR hmon = MonitorFromWindow(olc_hWnd, MONITOR_DEFAULTTONEAREST); + MONITORINFO mi = { sizeof(mi) }; + if (!GetMonitorInfo(hmon, &mi)) return olc::rcode::FAIL; + vWindowSize = { mi.rcMonitor.right, mi.rcMonitor.bottom }; + vTopLeft.x = 0; + vTopLeft.y = 0; + } + + // Keep client size as requested + RECT rWndRect = { 0, 0, vWindowSize.x, vWindowSize.y }; + AdjustWindowRectEx(&rWndRect, dwStyle, FALSE, dwExStyle); + int width = rWndRect.right - rWndRect.left; + int height = rWndRect.bottom - rWndRect.top; + + olc_hWnd = CreateWindowEx(dwExStyle, olcT("OLC_PIXEL_GAME_ENGINE"), olcT(""), dwStyle, + vTopLeft.x, vTopLeft.y, width, height, NULL, NULL, GetModuleHandle(nullptr), this); + + DragAcceptFiles(olc_hWnd, true); + + // Create Keyboard Mapping + mapKeys[0x00] = Key::NONE; + mapKeys[0x41] = Key::A; mapKeys[0x42] = Key::B; mapKeys[0x43] = Key::C; mapKeys[0x44] = Key::D; mapKeys[0x45] = Key::E; + mapKeys[0x46] = Key::F; mapKeys[0x47] = Key::G; mapKeys[0x48] = Key::H; mapKeys[0x49] = Key::I; mapKeys[0x4A] = Key::J; + mapKeys[0x4B] = Key::K; mapKeys[0x4C] = Key::L; mapKeys[0x4D] = Key::M; mapKeys[0x4E] = Key::N; mapKeys[0x4F] = Key::O; + mapKeys[0x50] = Key::P; mapKeys[0x51] = Key::Q; mapKeys[0x52] = Key::R; mapKeys[0x53] = Key::S; mapKeys[0x54] = Key::T; + mapKeys[0x55] = Key::U; mapKeys[0x56] = Key::V; mapKeys[0x57] = Key::W; mapKeys[0x58] = Key::X; mapKeys[0x59] = Key::Y; + mapKeys[0x5A] = Key::Z; + + mapKeys[VK_F1] = Key::F1; mapKeys[VK_F2] = Key::F2; mapKeys[VK_F3] = Key::F3; mapKeys[VK_F4] = Key::F4; + mapKeys[VK_F5] = Key::F5; mapKeys[VK_F6] = Key::F6; mapKeys[VK_F7] = Key::F7; mapKeys[VK_F8] = Key::F8; + mapKeys[VK_F9] = Key::F9; mapKeys[VK_F10] = Key::F10; mapKeys[VK_F11] = Key::F11; mapKeys[VK_F12] = Key::F12; + + mapKeys[VK_DOWN] = Key::DOWN; mapKeys[VK_LEFT] = Key::LEFT; mapKeys[VK_RIGHT] = Key::RIGHT; mapKeys[VK_UP] = Key::UP; + //mapKeys[VK_RETURN] = Key::ENTER;// mapKeys[VK_RETURN] = Key::RETURN; + + mapKeys[VK_BACK] = Key::BACK; mapKeys[VK_ESCAPE] = Key::ESCAPE; mapKeys[VK_RETURN] = Key::ENTER; mapKeys[VK_PAUSE] = Key::PAUSE; + mapKeys[VK_SCROLL] = Key::SCROLL; mapKeys[VK_TAB] = Key::TAB; mapKeys[VK_DELETE] = Key::DEL; mapKeys[VK_HOME] = Key::HOME; + mapKeys[VK_END] = Key::END; mapKeys[VK_PRIOR] = Key::PGUP; mapKeys[VK_NEXT] = Key::PGDN; mapKeys[VK_INSERT] = Key::INS; + mapKeys[VK_SHIFT] = Key::SHIFT; mapKeys[VK_CONTROL] = Key::CTRL; + mapKeys[VK_SPACE] = Key::SPACE; + + mapKeys[0x30] = Key::K0; mapKeys[0x31] = Key::K1; mapKeys[0x32] = Key::K2; mapKeys[0x33] = Key::K3; mapKeys[0x34] = Key::K4; + mapKeys[0x35] = Key::K5; mapKeys[0x36] = Key::K6; mapKeys[0x37] = Key::K7; mapKeys[0x38] = Key::K8; mapKeys[0x39] = Key::K9; + + mapKeys[VK_NUMPAD0] = Key::NP0; mapKeys[VK_NUMPAD1] = Key::NP1; mapKeys[VK_NUMPAD2] = Key::NP2; mapKeys[VK_NUMPAD3] = Key::NP3; mapKeys[VK_NUMPAD4] = Key::NP4; + mapKeys[VK_NUMPAD5] = Key::NP5; mapKeys[VK_NUMPAD6] = Key::NP6; mapKeys[VK_NUMPAD7] = Key::NP7; mapKeys[VK_NUMPAD8] = Key::NP8; mapKeys[VK_NUMPAD9] = Key::NP9; + mapKeys[VK_MULTIPLY] = Key::NP_MUL; mapKeys[VK_ADD] = Key::NP_ADD; mapKeys[VK_DIVIDE] = Key::NP_DIV; mapKeys[VK_SUBTRACT] = Key::NP_SUB; mapKeys[VK_DECIMAL] = Key::NP_DECIMAL; + + // Thanks scripticuk + mapKeys[VK_OEM_1] = Key::OEM_1; // On US and UK keyboards this is the ';:' key + mapKeys[VK_OEM_2] = Key::OEM_2; // On US and UK keyboards this is the '/?' key + mapKeys[VK_OEM_3] = Key::OEM_3; // On US keyboard this is the '~' key + mapKeys[VK_OEM_4] = Key::OEM_4; // On US and UK keyboards this is the '[{' key + mapKeys[VK_OEM_5] = Key::OEM_5; // On US keyboard this is '\|' key. + mapKeys[VK_OEM_6] = Key::OEM_6; // On US and UK keyboards this is the ']}' key + mapKeys[VK_OEM_7] = Key::OEM_7; // On US keyboard this is the single/double quote key. On UK, this is the single quote/@ symbol key + mapKeys[VK_OEM_8] = Key::OEM_8; // miscellaneous characters. Varies by keyboard + mapKeys[VK_OEM_PLUS] = Key::EQUALS; // the '+' key on any keyboard + mapKeys[VK_OEM_COMMA] = Key::COMMA; // the comma key on any keyboard + mapKeys[VK_OEM_MINUS] = Key::MINUS; // the minus key on any keyboard + mapKeys[VK_OEM_PERIOD] = Key::PERIOD; // the period key on any keyboard + mapKeys[VK_CAPITAL] = Key::CAPS_LOCK; + return olc::OK; + } + + virtual olc::rcode SetWindowTitle(const std::string& s) override + { +#ifdef UNICODE + SetWindowText(olc_hWnd, ConvertS2W(s).c_str()); +#else + SetWindowText(olc_hWnd, s.c_str()); +#endif + return olc::OK; + } + + virtual olc::rcode StartSystemEventLoop() override + { + MSG msg; + while (GetMessage(&msg, NULL, 0, 0) > 0) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + return olc::OK; + } + + virtual olc::rcode HandleSystemEvent() override { + struct tagPOINT p{0,0}; + //Update mouse positions and states outside the window. + GetCursorPos(&p); + ptrPGE->olc_UpdateMouse(p.x-ptrPGE->GetWindowPos().x,p.y-ptrPGE->GetWindowPos().y); + ptrPGE->olc_UpdateMouseState(0,GetAsyncKeyState(VK_LBUTTON)>>7); + ptrPGE->olc_UpdateMouseState(1,GetAsyncKeyState(VK_RBUTTON)>>7); + ptrPGE->olc_UpdateMouseState(2,GetAsyncKeyState(VK_MBUTTON)>>7); + ptrPGE->olc_UpdateMouseState(3,GetAsyncKeyState(VK_XBUTTON1)>>7); + ptrPGE->olc_UpdateMouseState(4,GetAsyncKeyState(VK_XBUTTON2)>>7); + return olc::rcode::OK; + } + + // 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_MOVE: ptrPGE->olc_UpdateWindowPos(lParam & 0xFFFF, (lParam >> 16) & 0xFFFF); return 0; + case WM_SIZE: ptrPGE->olc_UpdateWindowSize(lParam & 0xFFFF, (lParam >> 16) & 0xFFFF); return 0; + case WM_MOUSEWHEEL: ptrPGE->olc_UpdateMouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); return 0; + case WM_MOUSELEAVE: ptrPGE->olc_UpdateMouseFocus(false); return 0; + case WM_SETFOCUS: ptrPGE->olc_UpdateKeyFocus(true); return 0; + case WM_KILLFOCUS: ptrPGE->olc_UpdateKeyFocus(false); return 0; + case WM_KEYDOWN: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], true); return 0; + case WM_KEYUP: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], false); return 0; + case WM_SYSKEYDOWN: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], true); return 0; + case WM_SYSKEYUP: ptrPGE->olc_UpdateKeyState(mapKeys[wParam], false); return 0; + case WM_LBUTTONDOWN:ptrPGE->olc_UpdateMouseState(0, true); return 0; + case WM_LBUTTONUP: ptrPGE->olc_UpdateMouseState(0, false); return 0; + case WM_RBUTTONDOWN:ptrPGE->olc_UpdateMouseState(1, true); return 0; + case WM_RBUTTONUP: ptrPGE->olc_UpdateMouseState(1, false); return 0; + case WM_MBUTTONDOWN:ptrPGE->olc_UpdateMouseState(2, true); return 0; + case WM_MBUTTONUP: ptrPGE->olc_UpdateMouseState(2, false); return 0; + case WM_DROPFILES: + { + // This is all eww... + HDROP drop = (HDROP)wParam; + + uint32_t nFiles = DragQueryFile(drop, 0xFFFFFFFF, nullptr, 0); + std::vector vFiles; + for (uint32_t i = 0; i < nFiles; i++) + { + TCHAR dfbuffer[256]{}; + uint32_t len = DragQueryFile(drop, i, nullptr, 0); + DragQueryFile(drop, i, dfbuffer, 256); +#ifdef UNICODE +#ifdef __MINGW32__ + char* buffer = new char[len + 1]; + wcstombs(buffer, dfbuffer, len); + buffer[len] = '\0'; +#else + int count = WideCharToMultiByte(CP_UTF8, 0, dfbuffer, -1, NULL, 0, NULL, NULL); + char* buffer = new char[count]; + WideCharToMultiByte(CP_UTF8, 0, dfbuffer, -1, buffer, count, NULL, NULL); +#endif + vFiles.push_back(std::string(buffer)); + delete[] buffer; +#else + vFiles.push_back(std::string(dfbuffer)); +#endif + } + + // Even more eww... + POINT p; DragQueryPoint(drop, &p); + ptrPGE->olc_DropFiles(p.x, p.y, vFiles); + DragFinish(drop); + return 0; + } + break; + + + case WM_CLOSE: ptrPGE->olc_Terminate(); return 0; + case WM_DESTROY: PostQuitMessage(0); DestroyWindow(hWnd); return 0; + } + return DefWindowProc(hWnd, uMsg, wParam, lParam); + } + }; +} +#endif +// O------------------------------------------------------------------------------O +// | END PLATFORM: MICROSOFT WINDOWS XP, VISTA, 7, 8, 10 | +// O------------------------------------------------------------------------------O +#pragma endregion + +#pragma region platform_linux +// O------------------------------------------------------------------------------O +// | START PLATFORM: LINUX | +// O------------------------------------------------------------------------------O +#if defined(OLC_PLATFORM_X11) +namespace olc +{ + class Platform_Linux : public olc::Platform + { + private: + X11::Display* olc_Display = nullptr; + X11::Window olc_WindowRoot; + X11::Window olc_Window; + X11::XVisualInfo* olc_VisualInfo; + X11::Colormap olc_ColourMap; + X11::XSetWindowAttributes olc_SetWindowAttribs; + + public: + virtual olc::rcode ApplicationStartUp() override + { + return olc::rcode::OK; + } + + virtual olc::rcode ApplicationCleanUp() override + { + XDestroyWindow(olc_Display, olc_Window); + return olc::rcode::OK; + } + + virtual olc::rcode ThreadStartUp() override + { + return olc::rcode::OK; + } + + virtual olc::rcode ThreadCleanUp() override + { + renderer->DestroyDevice(); + return olc::OK; + } + + virtual olc::rcode CreateGraphics(bool bFullScreen, bool bEnableVSYNC, const olc::vi2d& vViewPos, const olc::vi2d& vViewSize) override + { + if (renderer->CreateDevice({ olc_Display, &olc_Window, olc_VisualInfo }, bFullScreen, bEnableVSYNC) == olc::rcode::OK) + { + renderer->UpdateViewport(vViewPos, vViewSize); + return olc::rcode::OK; + } + else + return olc::rcode::FAIL; + } + + virtual olc::rcode CreateWindowPane(const olc::vi2d& vWindowPos, olc::vi2d& vWindowSize, bool bFullScreen) override + { + using namespace X11; + XInitThreads(); + + // Grab the deafult display and window + olc_Display = XOpenDisplay(NULL); + olc_WindowRoot = DefaultRootWindow(olc_Display); + + // Based on the display capabilities, configure the appearance of the window + GLint olc_GLAttribs[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None }; + olc_VisualInfo = glXChooseVisual(olc_Display, 0, olc_GLAttribs); + olc_ColourMap = XCreateColormap(olc_Display, olc_WindowRoot, olc_VisualInfo->visual, AllocNone); + olc_SetWindowAttribs.colormap = olc_ColourMap; + + // Register which events we are interested in receiving + olc_SetWindowAttribs.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | PointerMotionMask | FocusChangeMask | StructureNotifyMask; + + // Create the window + olc_Window = XCreateWindow(olc_Display, olc_WindowRoot, vWindowPos.x, vWindowPos.y, + vWindowSize.x, vWindowSize.y, + 0, olc_VisualInfo->depth, InputOutput, olc_VisualInfo->visual, + CWColormap | CWEventMask, &olc_SetWindowAttribs); + + Atom wmDelete = XInternAtom(olc_Display, "WM_DELETE_WINDOW", true); + XSetWMProtocols(olc_Display, olc_Window, &wmDelete, 1); + + XMapWindow(olc_Display, olc_Window); + XStoreName(olc_Display, olc_Window, "OneLoneCoder.com - Pixel Game Engine"); + + if (bFullScreen) // Thanks DragonEye, again :D + { + Atom wm_state; + Atom fullscreen; + wm_state = XInternAtom(olc_Display, "_NET_WM_STATE", False); + fullscreen = XInternAtom(olc_Display, "_NET_WM_STATE_FULLSCREEN", False); + XEvent xev{ 0 }; + xev.type = ClientMessage; + xev.xclient.window = olc_Window; + xev.xclient.message_type = wm_state; + xev.xclient.format = 32; + xev.xclient.data.l[0] = (bFullScreen ? 1 : 0); // the action (0: off, 1: on, 2: toggle) + xev.xclient.data.l[1] = fullscreen; // first property to alter + xev.xclient.data.l[2] = 0; // second property to alter + xev.xclient.data.l[3] = 0; // source indication + XMapWindow(olc_Display, olc_Window); + XSendEvent(olc_Display, DefaultRootWindow(olc_Display), False, + SubstructureRedirectMask | SubstructureNotifyMask, &xev); + XFlush(olc_Display); + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, olc_Window, &gwa); + vWindowSize.x = gwa.width; + vWindowSize.y = gwa.height; + } + + // Create Keyboard Mapping + mapKeys[0x00] = Key::NONE; + mapKeys[0x61] = Key::A; mapKeys[0x62] = Key::B; mapKeys[0x63] = Key::C; mapKeys[0x64] = Key::D; mapKeys[0x65] = Key::E; + mapKeys[0x66] = Key::F; mapKeys[0x67] = Key::G; mapKeys[0x68] = Key::H; mapKeys[0x69] = Key::I; mapKeys[0x6A] = Key::J; + mapKeys[0x6B] = Key::K; mapKeys[0x6C] = Key::L; mapKeys[0x6D] = Key::M; mapKeys[0x6E] = Key::N; mapKeys[0x6F] = Key::O; + mapKeys[0x70] = Key::P; mapKeys[0x71] = Key::Q; mapKeys[0x72] = Key::R; mapKeys[0x73] = Key::S; mapKeys[0x74] = Key::T; + mapKeys[0x75] = Key::U; mapKeys[0x76] = Key::V; mapKeys[0x77] = Key::W; mapKeys[0x78] = Key::X; mapKeys[0x79] = Key::Y; + mapKeys[0x7A] = Key::Z; + + mapKeys[XK_F1] = Key::F1; mapKeys[XK_F2] = Key::F2; mapKeys[XK_F3] = Key::F3; mapKeys[XK_F4] = Key::F4; + mapKeys[XK_F5] = Key::F5; mapKeys[XK_F6] = Key::F6; mapKeys[XK_F7] = Key::F7; mapKeys[XK_F8] = Key::F8; + mapKeys[XK_F9] = Key::F9; mapKeys[XK_F10] = Key::F10; mapKeys[XK_F11] = Key::F11; mapKeys[XK_F12] = Key::F12; + + mapKeys[XK_Down] = Key::DOWN; mapKeys[XK_Left] = Key::LEFT; mapKeys[XK_Right] = Key::RIGHT; mapKeys[XK_Up] = Key::UP; + mapKeys[XK_KP_Enter] = Key::ENTER; mapKeys[XK_Return] = Key::ENTER; + + mapKeys[XK_BackSpace] = Key::BACK; mapKeys[XK_Escape] = Key::ESCAPE; mapKeys[XK_Linefeed] = Key::ENTER; mapKeys[XK_Pause] = Key::PAUSE; + mapKeys[XK_Scroll_Lock] = Key::SCROLL; mapKeys[XK_Tab] = Key::TAB; mapKeys[XK_Delete] = Key::DEL; mapKeys[XK_Home] = Key::HOME; + mapKeys[XK_End] = Key::END; mapKeys[XK_Page_Up] = Key::PGUP; mapKeys[XK_Page_Down] = Key::PGDN; mapKeys[XK_Insert] = Key::INS; + mapKeys[XK_Shift_L] = Key::SHIFT; mapKeys[XK_Shift_R] = Key::SHIFT; mapKeys[XK_Control_L] = Key::CTRL; mapKeys[XK_Control_R] = Key::CTRL; + mapKeys[XK_space] = Key::SPACE; mapKeys[XK_period] = Key::PERIOD; + + mapKeys[XK_0] = Key::K0; mapKeys[XK_1] = Key::K1; mapKeys[XK_2] = Key::K2; mapKeys[XK_3] = Key::K3; mapKeys[XK_4] = Key::K4; + mapKeys[XK_5] = Key::K5; mapKeys[XK_6] = Key::K6; mapKeys[XK_7] = Key::K7; mapKeys[XK_8] = Key::K8; mapKeys[XK_9] = Key::K9; + + mapKeys[XK_KP_0] = Key::NP0; mapKeys[XK_KP_1] = Key::NP1; mapKeys[XK_KP_2] = Key::NP2; mapKeys[XK_KP_3] = Key::NP3; mapKeys[XK_KP_4] = Key::NP4; + mapKeys[XK_KP_5] = Key::NP5; mapKeys[XK_KP_6] = Key::NP6; mapKeys[XK_KP_7] = Key::NP7; mapKeys[XK_KP_8] = Key::NP8; mapKeys[XK_KP_9] = Key::NP9; + mapKeys[XK_KP_Multiply] = Key::NP_MUL; mapKeys[XK_KP_Add] = Key::NP_ADD; mapKeys[XK_KP_Divide] = Key::NP_DIV; mapKeys[XK_KP_Subtract] = Key::NP_SUB; mapKeys[XK_KP_Decimal] = Key::NP_DECIMAL; + + // These keys vary depending on the keyboard. I've included comments for US and UK keyboard layouts + mapKeys[XK_semicolon] = Key::OEM_1; // On US and UK keyboards this is the ';:' key + mapKeys[XK_slash] = Key::OEM_2; // On US and UK keyboards this is the '/?' key + mapKeys[XK_asciitilde] = Key::OEM_3; // On US keyboard this is the '~' key + mapKeys[XK_bracketleft] = Key::OEM_4; // On US and UK keyboards this is the '[{' key + mapKeys[XK_backslash] = Key::OEM_5; // On US keyboard this is '\|' key. + mapKeys[XK_bracketright] = Key::OEM_6; // On US and UK keyboards this is the ']}' key + mapKeys[XK_apostrophe] = Key::OEM_7; // On US keyboard this is the single/double quote key. On UK, this is the single quote/@ symbol key + mapKeys[XK_numbersign] = Key::OEM_8; // miscellaneous characters. Varies by keyboard. I believe this to be the '#~' key on UK keyboards + mapKeys[XK_equal] = Key::EQUALS; // the '+' key on any keyboard + mapKeys[XK_comma] = Key::COMMA; // the comma key on any keyboard + mapKeys[XK_minus] = Key::MINUS; // the minus key on any keyboard + + mapKeys[XK_Caps_Lock] = Key::CAPS_LOCK; + + return olc::OK; + } + + virtual olc::rcode SetWindowTitle(const std::string& s) override + { + X11::XStoreName(olc_Display, olc_Window, s.c_str()); + return olc::OK; + } + + virtual olc::rcode StartSystemEventLoop() override + { + return olc::OK; + } + + virtual olc::rcode HandleSystemEvent() override + { + using namespace X11; + // Handle Xlib Message Loop - we do this in the + // same thread that OpenGL was created so we dont + // need to worry too much about multithreading with X11 + XEvent xev; + while (XPending(olc_Display)) + { + XNextEvent(olc_Display, &xev); + if (xev.type == Expose) + { + XWindowAttributes gwa; + XGetWindowAttributes(olc_Display, olc_Window, &gwa); + ptrPGE->olc_UpdateWindowPos(gwa.x, gwa.y); + ptrPGE->olc_UpdateWindowSize(gwa.width, gwa.height); + } + else if (xev.type == ConfigureNotify) + { + XConfigureEvent xce = xev.xconfigure; + ptrPGE->olc_UpdateWindowPos(xce.x, xce.y); + 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("body", 0, 1, keyboard_callback); + emscripten_set_keyup_callback("body", 0, 1, keyboard_callback); + + // Mouse Callbacks + emscripten_set_wheel_callback("#canvas", 0, 1, wheel_callback); + emscripten_set_mousedown_callback("body", 0, 1, mouse_callback); + emscripten_set_mouseup_callback("body", 0, 1, mouse_callback); + emscripten_set_mousemove_callback("body", 0, 1, mouse_callback); + + // Touch Callbacks + emscripten_set_touchstart_callback("body", 0, 1, touch_callback); + emscripten_set_touchmove_callback("body", 0, 1, touch_callback); + emscripten_set_touchend_callback("body", 0, 1, touch_callback); + + // Canvas Focus Callbacks + emscripten_set_blur_callback("#canvas", 0, 1, focus_callback); + emscripten_set_focus_callback("#canvas", 0, 1, focus_callback); + +#pragma warning disable format + EM_ASM( window.onunload = Module._olc_OnPageUnload; ); + + // IMPORTANT! - Sorry About This... + // + // In order to handle certain browser based events, such as resizing and + // going to full screen, we have to effectively inject code into the container + // running the PGE. Yes, I vomited about 11 times too when the others were + // convincing me this is the future. Well, this isnt the future, and if it + // were to be, I want no part of what must be a miserable distopian free + // for all of anarchic code injection to get rudimentary events like "Resize()". + // + // Wake up people! Of course theres a spoon. There has to be to keep feeding + // the giant web baby. + + + EM_ASM({ + + // olc_ApsectRatio + // + // Used by olc_ResizeHandler to calculate the viewport from the + // dimensions of the canvas container's element. + Module.olc_AspectRatio = $0 / $1; + + // HACK ALERT! + // + // Here we assume any html shell that uses 3 or more instance of the class "emscripten" + // is using one of the default or minimal emscripten page layouts + Module.olc_AssumeDefaultShells = (document.querySelectorAll('.emscripten').length >= 3) ? true : false; + + oncontextmenu=function(e){return false}; //Because we can click outside the window, we want to disable normal right-click context menu for the application. + + // olc_ResizeHandler + // + // Used by olc_Init, and is called when a resize observer and fullscreenchange event is triggered. + var olc_ResizeHandler = function() + { + // are we in fullscreen mode? + let isFullscreen = (document.fullscreenElement != null); + + // get the width of the containing element + let width = (isFullscreen) ? window.innerWidth : Module.canvas.parentNode.clientWidth; + let height = (isFullscreen) ? window.innerHeight : Module.canvas.parentNode.clientHeight; + + // calculate the expected viewport size + let viewWidth = width; + let viewHeight = width / Module.olc_AspectRatio; + + // if we're taller than the containing element, recalculate based on height + if(viewHeight > height) + { + viewWidth = height * Module.olc_AspectRatio; + viewHeight = height; + } + + // ensure resulting viewport is in integer space + viewWidth = parseInt(viewWidth); + viewHeight = parseInt(viewHeight); + + setTimeout(function() + { + // if default shells, apply default styles + if(Module.olc_AssumeDefaultShells) + Module.canvas.parentNode.setAttribute('style', 'width: 100%; height: 70vh; margin-left: auto; margin-right: auto;'); + + // apply viewport dimensions to teh canvas + Module.canvas.setAttribute('width', viewWidth); + Module.canvas.setAttribute('height', viewHeight); + Module.canvas.setAttribute('style', `width: ${viewWidth}px; height: ${viewHeight}px;`); + + // update the PGE window size + Module._olc_PGE_UpdateWindowSize(viewWidth, viewHeight); + + // force focus on our PGE canvas + Module.canvas.focus(); + }, 200); + }; + + + // olc_Init + // + // set up resize observer and fullscreenchange event handler + var olc_Init = function() + { + if(Module.olc_AspectRatio === undefined) + { + setTimeout(function() { Module.olc_Init(); }, 50); + return; + } + + let resizeObserver = new ResizeObserver(function(entries) + { + Module.olc_ResizeHandler(); + }).observe(Module.canvas.parentNode); + + let mutationObserver = new MutationObserver(function(mutationsList, observer) + { + setTimeout(function() { Module.olc_ResizeHandler(); }, 200); + }).observe(Module.canvas.parentNode, { attributes: false, childList: true, subtree: false }); + + window.addEventListener('fullscreenchange', function(e) + { + setTimeout(function() { Module.olc_ResizeHandler();}, 200); + }); + }; + + // set up hooks + Module.olc_ResizeHandler = (Module.olc_ResizeHandler != undefined) ? Module.olc_ResizeHandler : olc_ResizeHandler; + Module.olc_Init = (Module.olc_Init != undefined) ? Module.olc_Init : olc_Init; + + // run everything! + Module.olc_Init(); + + }, vWindowSize.x, vWindowSize.y); // Fullscreen and Resize Observers +#pragma warning restore format + return olc::rcode::OK; + } + + // Interface PGE's UpdateWindowSize, for use in Javascript + void UpdateWindowSize(int width, int height) + { + ptrPGE->olc_UpdateWindowSize(width, height); + } + + //TY Gorbit + static EM_BOOL focus_callback(int eventType, const EmscriptenFocusEvent* focusEvent, void* userData) + { + if (eventType == EMSCRIPTEN_EVENT_BLUR) + { + ptrPGE->olc_UpdateKeyFocus(false); + ptrPGE->olc_UpdateMouseFocus(false); + } + else if (eventType == EMSCRIPTEN_EVENT_FOCUS) + { + ptrPGE->olc_UpdateKeyFocus(true); + ptrPGE->olc_UpdateMouseFocus(true); + } + + return 0; + } + + //TY Moros + static EM_BOOL keyboard_callback(int eventType, const EmscriptenKeyboardEvent* e, void* userData) + { + if (eventType == EMSCRIPTEN_EVENT_KEYDOWN) + ptrPGE->olc_UpdateKeyState(mapKeys[emscripten_compute_dom_pk_code(e->code)], true); + + // THANK GOD!! for this compute function. And thanks Dandistine for pointing it out! + if (eventType == EMSCRIPTEN_EVENT_KEYUP) + ptrPGE->olc_UpdateKeyState(mapKeys[emscripten_compute_dom_pk_code(e->code)], false); + + //Consume keyboard events so that keys like F1 and F5 don't do weird things + return EM_TRUE; + } + + //TY Moros + static EM_BOOL wheel_callback(int eventType, const EmscriptenWheelEvent* e, void* userData) + { + if (eventType == EMSCRIPTEN_EVENT_WHEEL) + ptrPGE->olc_UpdateMouseWheel(-1 * e->deltaY); + + return EM_TRUE; + } + + //TY Bispoo + static EM_BOOL touch_callback(int eventType, const EmscriptenTouchEvent* e, void* userData) + { + // Move + if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) + { + ptrPGE->olc_UpdateMouse(e->touches->targetX-ptrPGE->GetWindowPos().x, e->touches->targetY-ptrPGE->GetWindowPos().y); + } + + // Start + if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) + { + ptrPGE->olc_UpdateMouse(e->touches->targetX-ptrPGE->GetWindowPos().x, e->touches->targetY-ptrPGE->GetWindowPos().y); + 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-ptrPGE->GetWindowPos().x, e->targetY-ptrPGE->GetWindowPos().y); + + + //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 + { + ptrPGE->olc_UpdateWindowPos(EM_ASM_INT({return Module.canvas.getBoundingClientRect().left}),EM_ASM_INT({return Module.canvas.getBoundingClientRect().top})); + return olc::OK; + } + + static void MainLoop() + { + olc::Platform::ptrPGE->olc_CoreUpdate(); + if (!ptrPGE->olc_IsRunning()) + { + if (ptrPGE->OnUserDestroy()) + { + emscripten_cancel_main_loop(); + platform->ApplicationCleanUp(); + } + else + { + ptrPGE->olc_Reanimate(); + } + } + } + }; + + //Emscripten needs a special Start function + //Much of this is usually done in EngineThread, but that isn't used here + olc::rcode PixelGameEngine::Start() + { + if (platform->ApplicationStartUp() != olc::OK) return olc::FAIL; + + // Construct the window + if (platform->CreateWindowPane({ 30,30 }, vWindowSize, bFullScreen) != olc::OK) return olc::FAIL; + olc_UpdateWindowSize(vWindowSize.x, vWindowSize.y); + + // Some implementations may form an event loop here + if (platform->ThreadStartUp() == olc::FAIL) return olc::FAIL; + + // Do engine context specific initialisation + olc_PrepareEngine(); + + // Consider the "thread" started + bAtomActive = true; + + // Create user resources as part of this thread + for (auto& ext : vExtensions) ext->OnBeforeUserCreate(); + if (!OnUserCreate()) bAtomActive = false; + for (auto& ext : vExtensions) ext->OnAfterUserCreate(); + + platform->StartSystemEventLoop(); + + //This causes a heap memory corruption in Emscripten for some reason + //Platform_Emscripten::bActiveRef = &bAtomActive; + emscripten_set_main_loop(&Platform_Emscripten::MainLoop, 0, 1); + + // Wait for thread to be exited + if (platform->ApplicationCleanUp() != olc::OK) return olc::FAIL; + return olc::OK; + } +} + +extern "C" +{ + EMSCRIPTEN_KEEPALIVE inline void olc_PGE_UpdateWindowSize(int width, int height) + { + emscripten_set_canvas_element_size("#canvas", width, height); + // Thanks slavka + ((olc::Platform_Emscripten*)olc::platform.get())->UpdateWindowSize(width, height); + } +} + +#endif +// O------------------------------------------------------------------------------O +// | END PLATFORM: Emscripten | +// O------------------------------------------------------------------------------O +#pragma endregion + + +#endif // Headless + +// O------------------------------------------------------------------------------O +// | olcPixelGameEngine Auto-Configuration | +// O------------------------------------------------------------------------------O +#pragma region pge_config +namespace olc +{ + void PixelGameEngine::olc_ConfigureSystem() + { + + //#if !defined(OLC_PGE_HEADLESS) + + olc::Sprite::loader = nullptr; + +#if defined(OLC_IMAGE_GDI) + olc::Sprite::loader = std::make_unique(); +#endif + +#if defined(OLC_IMAGE_LIBPNG) + olc::Sprite::loader = std::make_unique(); +#endif + +#if defined(OLC_IMAGE_STB) + olc::Sprite::loader = std::make_unique(); +#endif + +#if defined(OLC_IMAGE_CUSTOM_EX) + olc::Sprite::loader = std::make_unique(); +#endif + + +#if defined(OLC_PLATFORM_HEADLESS) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_WINAPI) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_X11) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_GLUT) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_EMSCRIPTEN) + platform = std::make_unique(); +#endif + +#if defined(OLC_PLATFORM_CUSTOM_EX) + platform = std::make_unique(); +#endif + +#if defined(OLC_GFX_HEADLESS) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_OPENGL10) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_OPENGL33) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_OPENGLES2) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_DIRECTX10) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_DIRECTX11) + renderer = std::make_unique(); +#endif + +#if defined(OLC_GFX_CUSTOM_EX) + renderer = std::make_unique(); +#endif + + // Associate components with PGE instance + platform->ptrPGE = this; + renderer->ptrPGE = this; + //#else + // olc::Sprite::loader = nullptr; + // platform = nullptr; + // renderer = nullptr; + //#endif + } +} + +#pragma endregion + +#endif // End OLC_PGE_APPLICATION + +// O------------------------------------------------------------------------------O +// | END OF OLC_PGE_APPLICATION | +// O------------------------------------------------------------------------------O + +using namespace olc; + +#define PI 3.14159 \ No newline at end of file diff --git a/ReflectionPrototype/olcUTIL_Geometry2D.h b/ReflectionPrototype/olcUTIL_Geometry2D.h new file mode 100644 index 0000000..1d66f41 --- /dev/null +++ b/ReflectionPrototype/olcUTIL_Geometry2D.h @@ -0,0 +1,1097 @@ +/* +OneLoneCoder - Geometry 2D v1.01 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A collection of 2D Geometric primitives and functions to work with +and between them. + + +License (OLC-3) +~~~~~~~~~~~~~~~ + +Copyright 2018 - 2022 OneLoneCoder.com + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions or derivations of source code must retain the above +copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions or derivative works in binary form must reproduce +the above copyright notice. This list of conditions and the following +disclaimer must be reproduced in the documentation and/or other +materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Links +~~~~~ +YouTube: https://www.youtube.com/javidx9 +Discord: https://discord.gg/WhwHUMV +Twitter: https://www.twitter.com/javidx9 +Twitch: https://www.twitch.tv/javidx9 +GitHub: https://www.github.com/onelonecoder +Homepage: https://www.onelonecoder.com + +Author +~~~~~~ +David Barr, aka javidx9, �OneLoneCoder 2019, 2020, 2021, 2022 + +Changes: +v1.01: +Made constants inline ++Header guards (lol... sigh...) + +*/ + +#pragma once +#include "olcPixelGameEngine.h" + +namespace olc::utils::geom2d +{ + // Lemon Meringue + inline const double pi = 3.141592653589793238462643383279502884; + + // Floating point error margin + inline const double epsilon = 0.001; + + //https://stackoverflow.com/questions/1903954/is-there-a-standard-sign-function-signum-sgn-in-c-c + template + constexpr int sgn(T val) { return (T(0) < val) - (val < T(0)); } + + // Defines a line segment + template + struct line + { + olc::v2d_generic start; + olc::v2d_generic end; + + inline line(const olc::v2d_generic& s = { T(0), T(0) }, + const olc::v2d_generic& e = { T(0), T(0) }) + : start(s), end(e) + { } + + + // Get length of line + inline constexpr T length() + { + return (end - start).mag(); + } + + // Get length of line^2 + inline constexpr T length2() + { + return (end - start).mag2(); + } + + inline constexpr olc::v2d_generic vector() const + { + return (end - start); + } + + // Given a real distance, get point along line + inline constexpr olc::v2d_generic rpoint(const T& distance) const + { + return start + (end - start).norm() * distance; + } + + // Given a unit distance, get point along line + inline constexpr olc::v2d_generic upoint(const T& distance) const + { + return start + (end - start) * distance; + } + + // Return which side of the line does a point lie + inline constexpr int32_t side(const olc::v2d_generic& point) const + { + double d = (end - start).cross(point - start); + if (d < 0) + return -1; + else + if (d > 0) + return 1; + else + return 0; + } + }; + + template + struct ray + { + olc::v2d_generic origin; + olc::v2d_generic direction; + }; + + template + struct rect + { + olc::v2d_generic pos; + olc::v2d_generic size; + + inline rect(const olc::v2d_generic& p = { T(0), T(0) }, + const olc::v2d_generic& s = { T(1), T(1) }) + : pos(p), size(s) + { } + + inline olc::v2d_generic middle() const + { + return pos + (size * double(0.5)); + } + + // Get line segment from top side of rectangle + inline line top() const + { + return { pos, {pos.x + size.x, pos.y } }; + } + + // Get line segment from bottom side of rectangle + inline line bottom() const + { + return { {pos.x, pos.y + size.y}, pos + size }; + } + + // Get line segment from left side of rectangle + inline line left() const + { + return { pos, {pos.x, pos.y + size.y} }; + } + + // Get line segment from right side of rectangle + inline line right() const + { + return { {pos.x + size.x, pos.y }, pos + size }; + } + + // Get a line from an indexed side, starting top, going clockwise + inline line side(const size_t i) const + { + if (i & (0b11 == 0)) return top(); + if (i & (0b11 == 1)) return right(); + if (i & (0b11 == 2)) return bottom(); + if (i & (0b11 == 3)) return left(); + } + + // Get area of rectangle + inline constexpr T area() const + { + return size.x * size.y; + } + + // Get perimeter of rectangle + inline constexpr T perimeter() const + { + return T(2) * (size.x + size.y); + } + }; + + template + struct ellipse + { + olc::v2d_generic pos; + olc::v2d_generic radius; + + inline ellipse(const olc::v2d_generic& p = { T(0), T(0) }, const olc::v2d_generic r = {T(1),T(1)}) + : pos(p), radius(r) + { } + + // Get area of ellipse + inline constexpr T area() const + { + return T(pi) * radius.x * radius.y; + } + + // Get perimeter of an ellipse + inline constexpr T perimeter() const + { + return T(2.0 * pi) * sqrt((radius.x*radius.x+radius.y*radius.y)/(2*1.0)); + } + + // Get circumference of ellipse. Which is the same as a permieter of one. + inline constexpr T circumference() const + { + return perimeter(); + } + }; + + template + struct circle + { + olc::v2d_generic pos; + T radius = T(0); + + inline circle(const olc::v2d_generic& p = { T(0), T(0) }, const T r = T(0)) + : pos(p), radius(r) + { } + + // Get area of circle + inline constexpr T area() const + { + return T(pi) * radius * radius; + } + + // Get circumference of circle + inline constexpr T perimeter() const + { + return T(2.0 * pi) * radius; + } + + // Get circumference of circle + inline constexpr T circumference() const + { + return perimeter(); + } + }; + + + template + struct triangle + { + std::array, 3> pos; + + inline triangle( + const olc::v2d_generic& p0 = { T(0), T(0) }, + const olc::v2d_generic& p1 = { T(0), T(0) }, + const olc::v2d_generic& p2 = { T(0), T(0) }) + : pos{ p0,p1,p2 } + { } + + // Get a line from an indexed side, starting top, going clockwise + inline line side(const size_t i) const + { + return line(pos[i % 3], pos[(i + 1) % 3]); + } + + // Get area of triangle + inline constexpr T area() const + { + return double(0.5) * std::abs( + (pos[0].x * (pos[1].y - pos[2].y)) + + (pos[1].x * (pos[2].y - pos[0].y)) + + (pos[2].x * (pos[0].y - pos[1].y))); + } + + // Get perimeter of triangle + inline constexpr T perimeter() const + { + return line(pos[0], pos[1]).length() + + line(pos[1], pos[2]).length() + + line(pos[2], pos[0]).length(); + } + }; + + + template + struct polygon + { + std::vector> vPoints; + }; + + + // ========================================================================================================================= + // Closest(shape, point) =================================================================================================== + + // Returns closest point to point + template + inline olc::v2d_generic closest(const olc::v2d_generic& p1, const olc::v2d_generic& p2) + { + return p1; + } + + // Returns closest point on line to point + template + inline olc::v2d_generic closest(const line& l, const olc::v2d_generic& p) + { + auto d = l.vector(); + double u = std::clamp(double(d.dot(p - l.start)) / d.mag2(), 0.0, 1.0); + return l.start + u * d; + } + + // Returns closest point on circle to point + template + inline olc::v2d_generic closest(const circle& c, const olc::v2d_generic& p) + { + return c.pos + olc::vd2d(p - c.pos).norm() * c.radius; + } + + // Returns closest point on rectangle to point + template + inline olc::v2d_generic closest(const rect& r, const olc::v2d_generic& p) + { + // This could be a "constrain" function hmmmm + // TODO: Not quite what i wanted, should restrain to boundary + return olc::v2d_generic{ std::clamp(p.x, r.pos.x, r.pos.x + r.size.x), std::clamp(p.y, r.pos.y, r.pos.y + r.size.y) }; + + } + + // Returns closest point on triangle to point + template + inline olc::v2d_generic closest(const triangle& t, const olc::v2d_generic& p) + { + olc::utils::geom2d::line l{t.pos[0], t.pos[1]}; + auto p0 = closest(l, p); + auto d0 = (p0 - p).mag2(); + + l.end = t.pos[2]; + auto p1 = closest(l, p); + auto d1 = (p1 - p).mag2(); + + l.start = t.pos[1]; + auto p2 = closest(l, p); + auto d2 = (p2 - p).mag2(); + + if((d0 <= d1) && (d0 <= d2)) { + return p0; + } else if((d1 <= d0) && (d1 <= d2)) { + return p1; + } else { + return p2; + } + } + + + + + + + + + + + + // ================================================================================================================ + // POINT ========================================================================================================== + + // Checks if point contains point + template + inline constexpr bool contains(const olc::v2d_generic& p1, const olc::v2d_generic& p2) + { + return (p1 - p2).mag2() < epsilon; + } + + // Checks if line contains point + template + inline constexpr bool contains(const line& l, const olc::v2d_generic& p) + { + double d = ((p.x - l.start.x) * (l.end.y - l.start.y) - (p.y - l.start.y) * (l.end.x - l.start.x)); + if (std::abs(d) < epsilon) + { + // point is on line + double u = l.vector().dot(p - l.start) / l.vector().mag2(); + return (u >= double(0.0) && u <= double(1.0)); + } + + return false; + } + + // Checks if rectangle contains point + template + inline constexpr bool contains(const rect& r, const olc::v2d_generic& p) + { + return !(p.x < r.pos.x || p.y < r.pos.y || + p.x > (r.pos.x + r.size.x) || p.y > (r.pos.y + r.size.y)); + } + + // Checks if ellipse contains a point + template + inline constexpr bool contains(const ellipse& c, const olc::v2d_generic& p) + { + return std::pow(p.x-c.pos.x,2)/(c.radius.x*c.radius.x)+std::pow(p.y-c.pos.y,2)/(c.radius.y*c.radius.y)<1; + } + + // Checks if circle contains a point + template + inline constexpr bool contains(const circle& c, const olc::v2d_generic& p) + { + return (c.pos - p).mag2() < (c.radius * c.radius); + } + + // Checks if triangle contains a point + template + inline constexpr bool contains(const triangle& t, const olc::v2d_generic& p) + { + // http://jsfiddle.net/PerroAZUL/zdaY8/1/ + T2 A = T2(0.5) * (-t.pos[1].y * t.pos[2].x + t.pos[0].y * (-t.pos[1].x + t.pos[2].x) + t.pos[0].x * (t.pos[1].y - t.pos[2].y) + t.pos[1].x * t.pos[2].y); + T2 sign = A < T2(0) ? T2(-1) : T2(1); + T2 s = (t.pos[0].y * t.pos[2].x - t.pos[0].x * t.pos[2].y + (t.pos[2].y - t.pos[0].y) * p.x + (t.pos[0].x - t.pos[2].x) * p.y) * sign; + T2 v = (t.pos[0].x * t.pos[1].y - t.pos[0].y * t.pos[1].x + (t.pos[0].y - t.pos[1].y) * p.x + (t.pos[1].x - t.pos[0].x) * p.y) * sign; + return s > T2(0) && v > T2(0) && (s + v) < T2(2) * A * sign; + } + + + + + // Check if point overlaps with point (analagous to contains()) + template + inline constexpr bool overlaps(const olc::v2d_generic& p1, const olc::v2d_generic& p2) + { + return contains(p1, p2); + } + + // Checks if line segment overlaps with point + template + inline constexpr bool overlaps(const line& l, const olc::v2d_generic& p) + { + return contains(l, p); + } + + // Checks if rectangle overlaps with point + template + inline constexpr bool overlaps(const rect& r, const olc::v2d_generic& p) + { + return contains(r, p); + } + + // Checks if circle overlaps with point + template + inline constexpr bool overlaps(const circle& c, const olc::v2d_generic& p) + { + return contains(c, p); + } + + // Checks if triangle overlaps with point + template + inline constexpr bool overlaps(const triangle& t, const olc::v2d_generic& p) + { + return contains(t, p); + } + + + + + // Get intersection points where point intersects with point + template + inline std::vector> intersects(const olc::v2d_generic& p1, const olc::v2d_generic& p2) + { + if (contains(p1, p2)) + return { p1 }; + else + return {}; + } + + // Get intersection points where line segment intersects with point + template + inline std::vector> intersects(const line& l, const olc::v2d_generic& p) + { + if (contains(l, p)) + return { p }; + else + return {}; + } + + // Get intersection points where rectangle intersects with point + template + inline std::vector> intersects(const rect& r, const olc::v2d_generic& p) + { + std::vector> vPoints; + if (contains(r.top(), p)) vPoints.push_back(p); + if (contains(r.bottom(), p)) vPoints.push_back(p); + if (contains(r.left(), p)) vPoints.push_back(p); + if (contains(r.right(), p)) vPoints.push_back(p); + return vPoints; + } + + // Get intersection points where circle intersects with point + template + inline std::vector> intersects(const circle& c, const olc::v2d_generic& p) + { + if (std::abs((p - c.pos).mag2() - (c.radius * c.radius)) <= epsilon) + return { p }; + else + return {}; + } + + // Get intersection points where triangle intersects with point + template + inline std::vector> intersects(const triangle& r, const olc::v2d_generic& p) + { + // TODO: + return {}; + } + + + + + + + + + + + + + // ================================================================================================================ + // LINE =========================================================================================================== + + // Check if point contains line segment + template + inline constexpr bool contains(const olc::v2d_generic& p, const line& l) + { + return false; // It can't! + } + + // Check if line segment contains line segment + template + inline constexpr bool contains(const line& l1, const line& l2) + { + // TODO: Check if segments are colinear, and l1 exists within bounds of l2 + return false; + } + + // Check if rectangle contains line segment + template + inline constexpr bool contains(const rect& r, const line& l) + { + return contains(r, l.start) && contains(r, l.end); + } + + // Check if circle contains line segment + template + inline constexpr bool contains(const circle& c1, const line& l) + { + return contains(c1, l.start) && contains(c1, l.end); + } + + // Check if triangle contains line segment + template + inline constexpr bool contains(const triangle& t, const line& l) + { + return contains(t, l.start) && contains(t, l.end); + } + + + + + // Check if point overlaps line segment + template + inline constexpr bool overlaps(const olc::v2d_generic& p, const line& l) + { + return contains(l, p); + } + + // Check if line segment overlaps line segment + template + inline constexpr bool overlaps(const line& l1, const line& l2) + { + float uA = ((l2.end.x-l2.start.x)*(l1.start.y-l2.start.y) - (l2.end.y-l2.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y)); + float uB = ((l1.end.x-l1.start.x)*(l1.start.y-l2.start.y) - (l1.end.y-l1.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y)); + return uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1; + } + + // Check if rectangle overlaps line segment + template + inline constexpr bool overlaps(const rect& r, const line& l) + { + return overlaps(r.left(),l)|| + overlaps(r.top(),l)|| + overlaps(r.bottom(),l)|| + overlaps(r.right(),l); + } + + // Check if circle overlaps line segment + template + inline constexpr bool overlaps(const circle& c, const line& l) + { + // TODO: + return false; + } + + // Check if triangle overlaps line segment + template + inline constexpr bool overlaps(const triangle& t, const line& l) + { + return overlaps(t, l.start) || overlaps(t, l.end); + + // TODO: This method is no good, it cant detect lines whose start and end + // points are outside the triangle + } + + + + + // Get intersection points where point intersects with line segment + template + inline std::vector> intersects(const olc::v2d_generic& p, const line& l) + { + // TODO: + return {}; + } + + // Get intersection points where line segment intersects with line segment + template + inline std::vector> intersects(const line& l1, const line& l2) + { + float uA = ((l2.end.x-l2.start.x)*(l1.start.y-l2.start.y) - (l2.end.y-l2.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y)); + float uB = ((l1.end.x-l1.start.x)*(l1.start.y-l2.start.y) - (l1.end.y-l1.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y)); + + if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) { + float intersectionX = l1.start.x + (uA * (l1.end.x-l1.start.x)); + float intersectionY = l1.start.y + (uA * (l1.end.y-l1.start.y)); + return {{intersectionX,intersectionY}}; + } + return {}; + } + + // Get intersection points where rectangle intersects with line segment + template + inline std::vector> intersects(const rect& r, const line& l) + { + std::vector>intersections; + std::vector>result=intersects(r.left(),l); + if(result.size()>0)intersections.push_back(result[0]); + result=intersects(r.right(),l); + if(result.size()>0)intersections.push_back(result[0]); + result=intersects(r.top(),l); + if(result.size()>0)intersections.push_back(result[0]); + result=intersects(r.bottom(),l); + if(result.size()>0)intersections.push_back(result[0]); + return intersections; + } + + // Get intersection points where circle intersects with line segment + template + inline std::vector> intersects(const circle& c, const line& l) + { + // TODO: + return {}; + } + + // Get intersection points where triangle intersects with line segment + template + inline std::vector> intersects(const triangle& t, const line& l) + { + // TODO: + return {}; + } + + + + + + + + + + + + + // ================================================================================================================ + // RECTANGLE ====================================================================================================== + + // Check if point contains rectangle + template + inline constexpr bool contains(const olc::v2d_generic& p, const rect& r) + { + return false; // It can't! + } + + // Check if line segment contains rectangle + template + inline constexpr bool contains(const line& l, const rect& r) + { + return false; // It can't + } + + // Check if rectangle contains rectangle + template + inline constexpr bool contains(const rect& r1, const rect& r2) + { + return (r2.pos.x >= r1.pos.x) && (r2.pos.x + r2.size.x < r1.pos.x + r1.size.x) && + (r2.pos.y >= r1.pos.y) && (r2.pos.y + r2.size.y < r1.pos.y + r1.size.y); + } + + // Check if circle contains rectangle + template + inline constexpr bool contains(const circle& c, const rect& r) + { + return contains(c, r.pos) + && contains(c, olc::v2d_generic{ r.pos.x + r.size.x, r.pos.y }) + && contains(c, olc::v2d_generic{ r.pos.x, r.pos.y + r.size.y }) + && contains(c, r.pos + r.size); + } + + // Check if triangle contains rectangle + template + inline constexpr bool contains(const triangle& t, const rect& r) + { + return contains(t, r.pos) + && contains(t, r.pos + r.size) + && contains(t, olc::v2d_generic{ r.pos.x + r.size.x,r.pos.y }) + && contains(t, olc::v2d_generic{ r.pos.x, r.pos.y + r.size.y }); + } + + + + + // Check if point overlaps rectangle + template + inline constexpr bool overlaps(const olc::v2d_generic& p, const rect& r) + { + return overlaps(r, p); + } + + // Check if line segment overlaps rectangle + template + inline constexpr bool overlaps(const line& l, const rect& r) + { + return overlaps(r, l); + } + + // Check if rectangle overlaps rectangle + template + inline constexpr bool overlaps(const rect& r1, const rect& r2) + { + return (r1.pos.x < r2.pos.x + r2.size.x && r1.pos.x + r1.size.x >= r2.pos.x && + r1.pos.y < r2.pos.y + r2.size.y && r1.pos.y + r1.size.y >= r2.pos.y); + } + + // Check if circle overlaps rectangle + template + inline constexpr bool overlaps(const circle& c, const rect& r) + { + // Inspired by this (very clever btw) + // https://stackoverflow.com/questions/45370692/circle-rectangle-collision-response + // But modified to work :P + T2 overlap = (olc::v2d_generic{ std::clamp(c.pos.x, r.pos.x, r.pos.x + r.size.x), std::clamp(c.pos.y, r.pos.y, r.pos.y + r.size.y) } - c.pos).mag2(); + if (std::isnan(overlap)) overlap = T2(0); + return (overlap - (c.radius * c.radius)) < T2(0); + } + + // Check if triangle overlaps rectangle + template + inline constexpr bool overlaps(const triangle& t, const rect& r) + { + return contains(t, r.pos) + || contains(t, r.pos + r.size) + || contains(t, olc::v2d_generic{ r.pos.x + r.size.x, r.pos.y }) + || contains(t, olc::v2d_generic{ r.pos.x, r.pos.y + r.size.y }); + + // TODO: This method is no good, consider rectangle with all vertices + // outside of triangle, but edges still crossing + } + + + + + // Get intersection points where point intersects with rectangle + template + inline std::vector> intersects(const olc::v2d_generic& p, const rect& r) + { + return intersects(r, p); + } + + // Get intersection points where line segment intersects with rectangle + template + inline std::vector> intersects(const line& l, const rect& r) + { + return intersects(r,l); + } + + // Get intersection points where rectangle intersects with rectangle + template + inline std::vector> intersects(const rect& r1, const rect& r2) + { + // TODO: + return {}; + } + + // Get intersection points where circle intersects with rectangle + template + inline std::vector> intersects(const circle& c, const rect& r) + { + // TODO: + return {}; + } + + // Get intersection points where triangle intersects with rectangle + template + inline std::vector> intersects(const triangle& t, const rect& r) + { + // TODO: + return {}; + } + + + + + + + + + + + + + + // ================================================================================================================ + // CIRCLE ========================================================================================================= + + // Check if point contains circle + template + inline constexpr bool contains(const olc::v2d_generic& p, const circle& c) + { + return false; // It can't! + } + + // Check if line segment contains circle + template + inline constexpr bool contains(const line& l, const circle& c) + { + return false; // It can't! + } + + // Check if rectangle contains circle + template + inline constexpr bool contains(const rect& r, const circle& c) + { + // TODO: + return false; + } + + // Check if circle contains circle + template + inline constexpr bool contains(const circle& c1, const circle& c2) + { + return (c1.pos - c2.pos).mag2() <= (c1.radius - c2.radius) * (c1.radius - c2.radius); + } + + // Check if triangle contains circle + template + inline constexpr bool contains(const triangle& t, const circle& c) + { + // TODO: + return false; + } + + + + + // Check if point overlaps circle + template + inline constexpr bool overlaps(const olc::v2d_generic& p, const circle& c) + { + return overlaps(c, p); + } + + // Check if line segment overlaps circle + template + inline constexpr bool overlaps(const line& l, const circle& c) + { + return overlaps(c, l); + } + + // Check if rectangle overlaps circle + template + inline constexpr bool overlaps(const rect& r, const circle& c) + { + return overlaps(c, r); + } + + // Check if circle overlaps circle + template + inline constexpr bool overlaps(const circle& c1, const circle& c2) + { + return (c1.pos - c2.pos).mag2() <= (c1.radius + c2.radius) * (c1.radius + c2.radius); + } + + // Check if triangle overlaps circle + template + inline constexpr bool overlaps(const triangle& t, const circle& c) + { + // TODO: + return false; + } + + + + + // Get intersection points where point intersects with circle + template + inline std::vector> intersects(const olc::v2d_generic& p, const circle& c) + { + // TODO: + return {}; + } + + // Get intersection points where line segment intersects with circle + template + inline std::vector> intersects(const line& l, const circle& c) + { + // TODO: + return {}; + } + + // Get intersection points where rectangle intersects with circle + template + inline std::vector> intersects(const rect& r, const circle& c) + { + // TODO: + return {}; + } + + // Get intersection points where circle intersects with circle + template + inline std::vector> intersects(const circle& c1, const circle& c2) + { + // TODO: + return {}; + } + + // Get intersection points where triangle intersects with circle + template + inline std::vector> intersects(const triangle& t, const circle& c) + { + // TODO: + return {}; + } + + + + + + + + + + + + + + // ================================================================================================================ + // TRIANGLE ======================================================================================================= + + // Check if point contains triangle + template + inline constexpr bool contains(const olc::v2d_generic& p, const triangle& t) + { + return false; // It can't! + } + + // Check if line segment contains triangle + template + inline constexpr bool contains(const line& l, const triangle& t) + { + return false; // It can't + } + + // Check if rectangle contains triangle + template + inline constexpr bool contains(const rect& r, const triangle& t) + { + // TODO: + return false; + } + + // Check if circle contains triangle + template + inline constexpr bool contains(const circle& c, const triangle& t) + { + // TODO: + return false; + } + + // Check if triangle contains triangle + template + inline constexpr bool contains(const triangle& t1, const triangle& t2) + { + // TODO: + return false; + } + + + + + // Check if point overlaps triangle + template + inline constexpr bool overlaps(const olc::v2d_generic& p, const triangle& t) + { + return overlaps(t, p); + } + + // Check if line segment overlaps triangle + template + inline constexpr bool overlaps(const line& l, const triangle& t) + { + return overlaps(t, l); + } + + // Check if rectangle overlaps triangle + template + inline constexpr bool overlaps(const rect& r, const triangle& t) + { + return overlaps(t, r); + } + + // Check if circle overlaps triangle + template + inline constexpr bool overlaps(const circle& c, const triangle& t) + { + return overlaps(t, c); + } + + // Check if triangle overlaps triangle + template + inline constexpr bool overlaps(const triangle& t1, const triangle& t2) + { + // TODO: + return false; + } + + + + + // Get intersection points where point intersects with triangle + template + inline std::vector> intersects(const olc::v2d_generic& p, const triangle& t) + { + // TODO: + return {}; + } + + // Get intersection points where line segment intersects with triangle + template + inline std::vector> intersects(const line& l, const triangle& t) + { + // TODO: + return {}; + } + + // Get intersection points where rectangle intersects with triangle + template + inline std::vector> intersects(const rect& r, const triangle& t) + { + // TODO: + return {}; + } + + // Get intersection points where circle intersects with triangle + template + inline std::vector> intersects(const circle& c, const triangle& t) + { + // TODO: + return {}; + } + + // Get intersection points where triangle intersects with triangle + template + inline std::vector> intersects(const triangle& t1, const triangle& t2) + { + // TODO: + return {}; + } + +} + +using namespace olc::utils; \ No newline at end of file