PixelGameEngine 1.19

Added resizing, tweaks to built in types.
pull/113/head
Javidx9 5 years ago committed by GitHub
parent 9782a2b5b9
commit 1848ae0e9a
  1. 68
      olcPixelGameEngine.h

@ -2,7 +2,7 @@
olcPixelGameEngine.h
+-------------------------------------------------------------+
| OneLoneCoder Pixel Game Engine v1.17 |
| OneLoneCoder Pixel Game Engine v1.19 |
| "Like the command prompt console one, but not..." - javidx9 |
+-------------------------------------------------------------+
@ -119,8 +119,8 @@
I'd like to extend thanks to Eremiell, slavka, gurkanctn, Phantim,
JackOJC, KrossX, Huhlig, Dragoneye, Appa, JustinRichardsMusic, SliceNDice
Ralakus, Gorbit99, raoul, joshinils, benedani & MagetzUb for advice, ideas and
testing, and I'd like to extend my appreciation to the 40K YouTube followers,
22 Patreons and 2.6K Discord server members who give me the motivation to keep
testing, and I'd like to extend my appreciation to the 96K YouTube followers,
47 Patreons and 4.5K Discord server members who give me the motivation to keep
going with all this :D
Special thanks to those who bring gifts!
@ -250,6 +250,9 @@ namespace olc // All OneLoneCoder stuff will now exist in the "olc" namespace
Pixel(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha = 255);
Pixel(uint32_t p);
enum Mode { NORMAL, MASK, ALPHA, CUSTOM };
bool operator==(const Pixel& p) const;
bool operator!=(const Pixel& p) const;
};
// Some constants for symbolic naming of Pixels
@ -284,6 +287,7 @@ namespace olc // All OneLoneCoder stuff will now exist in the "olc" namespace
inline v2d_generic(T _x, T _y) : x(_x), y(_y) { }
inline v2d_generic(const v2d_generic& v) : x(v.x), y(v.y){ }
inline T mag() { return sqrt(x * x + y * y); }
inline T mag2() { return x * x + y * y; }
inline v2d_generic norm() { T r = 1 / mag(); return v2d_generic(x*r, y*r); }
inline v2d_generic perp() { return v2d_generic(-y, x); }
inline T dot(const v2d_generic& rhs) { return this->x * rhs.x + this->y * rhs.y; }
@ -413,7 +417,7 @@ namespace olc // All OneLoneCoder stuff will now exist in the "olc" namespace
PixelGameEngine();
public:
olc::rcode Construct(uint32_t screen_w, uint32_t screen_h, uint32_t pixel_w, uint32_t pixel_h, bool full_screen = false);
olc::rcode Construct(uint32_t screen_w, uint32_t screen_h, uint32_t pixel_w, uint32_t pixel_h, bool full_screen = false, bool vsync = false);
olc::rcode Start();
public: // Override Interfaces
@ -492,6 +496,8 @@ namespace olc // All OneLoneCoder stuff will now exist in the "olc" namespace
void DrawString(int32_t x, int32_t y, std::string sText, Pixel col = olc::WHITE, uint32_t scale = 1);
// Clears entire draw target to Pixel
void Clear(Pixel p);
// Resize the primary screen sprite
void SetScreenSize(int w, int h);
public: // Branding
std::string sAppName;
@ -524,12 +530,13 @@ namespace olc // All OneLoneCoder stuff will now exist in the "olc" namespace
float fSubPixelOffsetY = 0.0f;
bool bHasInputFocus = false;
bool bHasMouseFocus = false;
bool bEnableVSYNC = false;
float fFrameTimer = 1.0f;
int nFrameCount = 0;
Sprite *fontSprite = nullptr;
std::function<olc::Pixel(const int x, const int y, const olc::Pixel&, const olc::Pixel&)> funcPixelMode;
static std::map<uint16_t, uint8_t> mapKeys;
static std::map<size_t, uint8_t> mapKeys;
bool pKeyNewState[256]{ 0 };
bool pKeyOldState[256]{ 0 };
HWButton pKeyboardState[256];
@ -635,6 +642,16 @@ namespace olc
n = p;
}
bool Pixel::operator==(const Pixel& p) const
{
return n == p.n;
}
bool Pixel::operator!=(const Pixel& p) const
{
return n != p.n;
}
//==========================================================
std::wstring ConvertS2W(std::string s)
@ -1005,15 +1022,15 @@ namespace olc
if (!ifs.is_open()) return olc::FAIL;
// 1) Read Map
size_t nMapEntries;
ifs.read((char*)&nMapEntries, sizeof(size_t));
for (size_t i = 0; i < nMapEntries; i++)
uint32_t nMapEntries;
ifs.read((char*)&nMapEntries, sizeof(uint32_t));
for (uint32_t i = 0; i < nMapEntries; i++)
{
size_t nFilePathSize = 0;
ifs.read((char*)&nFilePathSize, sizeof(size_t));
uint32_t nFilePathSize = 0;
ifs.read((char*)&nFilePathSize, sizeof(uint32_t));
std::string sFileName(nFilePathSize, ' ');
for (size_t j = 0; j < nFilePathSize; j++)
for (uint32_t j = 0; j < nFilePathSize; j++)
sFileName[j] = ifs.get();
sEntry e;
@ -1062,13 +1079,14 @@ namespace olc
olc::PGEX::pge = this;
}
olc::rcode PixelGameEngine::Construct(uint32_t screen_w, uint32_t screen_h, uint32_t pixel_w, uint32_t pixel_h, bool full_screen)
olc::rcode PixelGameEngine::Construct(uint32_t screen_w, uint32_t screen_h, uint32_t pixel_w, uint32_t pixel_h, bool full_screen, bool vsync)
{
nScreenWidth = screen_w;
nScreenHeight = screen_h;
nPixelWidth = pixel_w;
nPixelHeight = pixel_h;
bFullScreen = full_screen;
bEnableVSYNC = vsync;
fPixelX = 2.0f / (float)(nScreenWidth);
fPixelY = 2.0f / (float)(nScreenHeight);
@ -1092,6 +1110,24 @@ namespace olc
return olc::OK;
}
void PixelGameEngine::SetScreenSize(int w, int h)
{
delete pDefaultDrawTarget;
nScreenWidth = w;
nScreenHeight = h;
pDefaultDrawTarget = new Sprite(nScreenWidth, nScreenHeight);
SetDrawTarget(nullptr);
glClear(GL_COLOR_BUFFER_BIT);
#ifdef _WIN32
SwapBuffers(glDeviceContext);
#else
glXSwapBuffers(olc_Display, olc_Window);
#endif
glClear(GL_COLOR_BUFFER_BIT);
olc_UpdateViewport();
}
olc::rcode PixelGameEngine::Start()
{
// Construct the window
@ -2054,7 +2090,7 @@ namespace olc
// Define window furniture
DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
DWORD dwStyle = WS_CAPTION | WS_SYSMENU | WS_VISIBLE; // | WS_THICKFRAME;
DWORD dwStyle = WS_CAPTION | WS_SYSMENU | WS_VISIBLE | WS_THICKFRAME;
int nCosmeticOffset = 30;
nViewW = nWindowWidth;
@ -2146,7 +2182,7 @@ namespace olc
// Remove Frame cap
wglSwapInterval = (wglSwapInterval_t*)wglGetProcAddress("wglSwapIntervalEXT");
if (wglSwapInterval) wglSwapInterval(0);
if (wglSwapInterval && !bEnableVSYNC) wglSwapInterval(0);
return true;
}
@ -2289,7 +2325,7 @@ namespace olc
glSwapIntervalEXT = nullptr;
glSwapIntervalEXT = (glSwapInterval_t*)glXGetProcAddress((unsigned char*)"glXSwapIntervalEXT");
if (glSwapIntervalEXT)
if (glSwapIntervalEXT && !bEnableVSYNC)
glSwapIntervalEXT(olc_Display, olc_Window, 0);
else
{
@ -2306,7 +2342,7 @@ namespace olc
// Need a couple of statics as these are singleton instances
// read from multiple locations
std::atomic<bool> PixelGameEngine::bAtomActive{ false };
std::map<uint16_t, uint8_t> PixelGameEngine::mapKeys;
std::map<size_t, uint8_t> PixelGameEngine::mapKeys;
olc::PixelGameEngine* olc::PGEX::pge = nullptr;
#ifdef OLC_DBG_OVERDRAW
int olc::Sprite::nOverdrawCount = 0;

Loading…
Cancel
Save