diff --git a/desktop_version/src/Editor.cpp b/desktop_version/src/Editor.cpp index 1f065bc5..c0f20911 100644 --- a/desktop_version/src/Editor.cpp +++ b/desktop_version/src/Editor.cpp @@ -16,6 +16,7 @@ #include "KeyPoll.h" #include "Map.h" #include "Music.h" +#include "Screen.h" #include "Script.h" #include "UtilityClass.h" @@ -1921,10 +1922,10 @@ void editorinput(void) game.my = (float) key.my; ed.tilex=(game.mx - (game.mx%8))/8; ed.tiley=(game.my - (game.my%8))/8; - if (graphics.screenbuffer->scalingMode == 1) { + if (gameScreen.scalingMode == 1) { // In this mode specifically, we have to fix the mouse coordinates int winwidth, winheight; - graphics.screenbuffer->GetWindowSize(&winwidth, &winheight); + gameScreen.GetWindowSize(&winwidth, &winheight); ed.tilex = ed.tilex * 320 / winwidth; ed.tiley = ed.tiley * 240 / winheight; } diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index ce41922a..85e145ad 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -20,6 +20,7 @@ #include "Map.h" #include "Music.h" #include "Network.h" +#include "Screen.h" #include "Script.h" #include "UtilityClass.h" #include "Vlogging.h" @@ -4326,13 +4327,8 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s bool Game::savestats(bool sync /*= true*/) { - if (graphics.screenbuffer == NULL) - { - return false; - } - ScreenSettings screen_settings; - graphics.screenbuffer->GetSettings(&screen_settings); + gameScreen.GetSettings(&screen_settings); return savestats(&screen_settings, sync); } @@ -4596,13 +4592,8 @@ void Game::loadsettings(ScreenSettings* screen_settings) bool Game::savesettings(void) { - if (graphics.screenbuffer == NULL) - { - return false; - } - ScreenSettings screen_settings; - graphics.screenbuffer->GetSettings(&screen_settings); + gameScreen.GetSettings(&screen_settings); return savesettings(&screen_settings); } @@ -6094,7 +6085,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ ) case Menu::graphicoptions: option("toggle fullscreen"); option("scaling mode"); - option("resize to nearest", graphics.screenbuffer->isWindowed); + option("resize to nearest", gameScreen.isWindowed); option("toggle filter"); option("toggle analogue"); option("toggle vsync"); diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index a8f4f833..763a2602 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -109,7 +109,6 @@ void Graphics::init(void) m = 0; linedelay = 0; menubuffer = NULL; - screenbuffer = NULL; tempBuffer = NULL; warpbuffer = NULL; warpbuffer_lerp = NULL; @@ -3014,7 +3013,7 @@ void Graphics::menuoffrender(void) BlitSurfaceStandard(tempBuffer, NULL, backBuffer, NULL); BlitSurfaceStandard(menubuffer, NULL, backBuffer, &offsetRect); - screenbuffer->UpdateScreen(backBuffer, NULL); + gameScreen.UpdateScreen(backBuffer, NULL); ClearSurface(backBuffer); } @@ -3135,7 +3134,7 @@ void Graphics::flashlight(void) void Graphics::screenshake(void) { SDL_Rect shakeRect = {screenshake_x, screenshake_y, backBuffer->w, backBuffer->h}; - screenbuffer->UpdateScreen(backBuffer, &shakeRect); + gameScreen.UpdateScreen(backBuffer, &shakeRect); ClearSurface(backBuffer); } @@ -3148,12 +3147,7 @@ void Graphics::updatescreenshake(void) void Graphics::render(void) { - if (screenbuffer == NULL) - { - return; - } - - screenbuffer->UpdateScreen(backBuffer, NULL); + gameScreen.UpdateScreen(backBuffer, NULL); } void Graphics::renderwithscreeneffects(void) @@ -3180,7 +3174,7 @@ void Graphics::renderfixedpre(void) updatescreenshake(); } - if (screenbuffer != NULL && screenbuffer->badSignalEffect) + if (gameScreen.badSignalEffect) { UpdateFilter(); } @@ -3414,10 +3408,7 @@ bool Graphics::reloadresources(void) images.push_back(grphx.im_image11); images.push_back(grphx.im_image12); - if (screenbuffer != NULL) - { - screenbuffer->LoadIcon(); - } + gameScreen.LoadIcon(); music.destroy(); music.init(); diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index c0e9d81a..ae046d99 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -8,7 +8,6 @@ #include "GraphicsResources.h" #include "GraphicsUtil.h" #include "Maths.h" -#include "Screen.h" #include "Textbox.h" #include "TowerBG.h" @@ -258,7 +257,6 @@ public: bool notextoutline; //buffer objects. //TODO refactor buffer objects SDL_Surface* backBuffer; - Screen* screenbuffer; SDL_Surface* menubuffer; SDL_Surface* foregroundBuffer; SDL_Surface* tempBuffer; diff --git a/desktop_version/src/Input.cpp b/desktop_version/src/Input.cpp index c17555e4..1f501c8e 100644 --- a/desktop_version/src/Input.cpp +++ b/desktop_version/src/Input.cpp @@ -13,6 +13,7 @@ #include "MakeAndPlay.h" #include "Map.h" #include "Music.h" +#include "Screen.h" #include "Script.h" #include "UtilityClass.h" #include "Vlogging.h" @@ -559,7 +560,7 @@ static void menuactionpress(void) && FILESYSTEM_openDirectory(FILESYSTEM_getUserLevelDirectory())) { music.playef(11); - SDL_MinimizeWindow(graphics.screenbuffer->m_window); + SDL_MinimizeWindow(gameScreen.m_window); } else { @@ -604,30 +605,24 @@ static void menuactionpress(void) map.nexttowercolour(); break; case Menu::graphicoptions: - if (graphics.screenbuffer == NULL) - { - SDL_assert(0 && "Screenbuffer is NULL!"); - break; - } - switch (game.currentmenuoption) { case 0: music.playef(11); - graphics.screenbuffer->toggleFullScreen(); + gameScreen.toggleFullScreen(); game.savestatsandsettings_menu(); break; case 1: music.playef(11); - graphics.screenbuffer->toggleScalingMode(); + gameScreen.toggleScalingMode(); game.savestatsandsettings_menu(); break; case 2: // resize to nearest multiple - if (graphics.screenbuffer->isWindowed) + if (gameScreen.isWindowed) { music.playef(11); - graphics.screenbuffer->ResizeToNearestMultiple(); + gameScreen.ResizeToNearestMultiple(); game.savestatsandsettings_menu(); } else @@ -637,13 +632,13 @@ static void menuactionpress(void) break; case 3: music.playef(11); - graphics.screenbuffer->toggleLinearFilter(); + gameScreen.toggleLinearFilter(); game.savestatsandsettings_menu(); break; case 4: //change smoothing music.playef(11); - graphics.screenbuffer->badSignalEffect= !graphics.screenbuffer->badSignalEffect; + gameScreen.badSignalEffect= !gameScreen.badSignalEffect; game.savestatsandsettings_menu(); break; case 5: @@ -651,7 +646,7 @@ static void menuactionpress(void) #if SDL_VERSION_ATLEAST(2, 0, 17) //toggle vsync music.playef(11); - graphics.screenbuffer->toggleVSync(); + gameScreen.toggleVSync(); game.savestatsandsettings_menu(); #endif break; diff --git a/desktop_version/src/KeyPoll.cpp b/desktop_version/src/KeyPoll.cpp index 409ecc4f..cd777849 100644 --- a/desktop_version/src/KeyPoll.cpp +++ b/desktop_version/src/KeyPoll.cpp @@ -9,6 +9,7 @@ #include "GlitchrunnerMode.h" #include "Graphics.h" #include "Music.h" +#include "Screen.h" #include "Vlogging.h" int inline KeyPoll::getThreshold(void) @@ -67,10 +68,7 @@ bool KeyPoll::textentry(void) void KeyPoll::toggleFullscreen(void) { - if (graphics.screenbuffer != NULL) - { - graphics.screenbuffer->toggleFullScreen(); - } + gameScreen.toggleFullScreen(); keymap.clear(); /* we lost the input due to a new window. */ if (GlitchrunnerMode_less_than_or_equal(Glitchrunner2_2)) @@ -337,7 +335,7 @@ void KeyPoll::Poll(void) { if (wasFullscreen) { - graphics.screenbuffer->isWindowed = false; + gameScreen.isWindowed = false; SDL_SetWindowFullscreen( SDL_GetWindowFromID(evt.window.windowID), SDL_WINDOW_FULLSCREEN_DESKTOP @@ -359,8 +357,8 @@ void KeyPoll::Poll(void) if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0) { - wasFullscreen = !graphics.screenbuffer->isWindowed; - graphics.screenbuffer->isWindowed = true; + wasFullscreen = !gameScreen.isWindowed; + gameScreen.isWindowed = true; SDL_SetWindowFullscreen( SDL_GetWindowFromID(evt.window.windowID), 0 diff --git a/desktop_version/src/Render.cpp b/desktop_version/src/Render.cpp index 3f7e70e3..b00b5422 100644 --- a/desktop_version/src/Render.cpp +++ b/desktop_version/src/Render.cpp @@ -14,6 +14,7 @@ #include "Map.h" #include "Maths.h" #include "Music.h" +#include "Screen.h" #include "Script.h" #include "UtilityClass.h" #include "Version.h" @@ -288,19 +289,13 @@ static void menurender(void) } break; case Menu::graphicoptions: - if (graphics.screenbuffer == NULL) - { - SDL_assert(0 && "Screenbuffer is NULL!"); - break; - } - switch (game.currentmenuoption) { case 0: graphics.bigprint( -1, 30, "Toggle Fullscreen", tr, tg, tb, true); graphics.Print( -1, 65, "Change to fullscreen/windowed mode.", tr, tg, tb, true); - if (graphics.screenbuffer->isWindowed) + if (gameScreen.isWindowed) { graphics.Print( -1, 85, "Current mode: WINDOWED", tr, tg, tb, true); } @@ -314,7 +309,7 @@ static void menurender(void) graphics.bigprint( -1, 30, "Scaling Mode", tr, tg, tb, true); graphics.Print( -1, 65, "Choose letterbox/stretch/integer mode.", tr, tg, tb, true); - switch (graphics.screenbuffer->scalingMode) + switch (gameScreen.scalingMode) { case 2: graphics.Print( -1, 85, "Current mode: INTEGER", tr, tg, tb, true); @@ -331,7 +326,7 @@ static void menurender(void) graphics.bigprint(-1, 30, "Resize to Nearest", tr, tg, tb, true); graphics.Print(-1, 65, "Resize to the nearest window size", tr, tg, tb, true); graphics.Print(-1, 75, "that is of an integer multiple.", tr, tg, tb, true); - if (!graphics.screenbuffer->isWindowed) + if (!gameScreen.isWindowed) { graphics.Print(-1, 95, "You must be in windowed mode", tr, tg, tb, true); graphics.Print(-1, 105, "to use this option.", tr, tg, tb, true); @@ -341,7 +336,7 @@ static void menurender(void) graphics.bigprint( -1, 30, "Toggle Filter", tr, tg, tb, true); graphics.Print( -1, 65, "Change to nearest/linear filter.", tr, tg, tb, true); - if (graphics.screenbuffer->isFiltered) + if (gameScreen.isFiltered) { graphics.Print( -1, 85, "Current mode: LINEAR", tr, tg, tb, true); } @@ -367,7 +362,7 @@ static void menurender(void) graphics.Print(-1, 75, "Edit the config file.", tr, tg, tb, true); #endif - if (!graphics.screenbuffer->vsync) + if (!gameScreen.vsync) { graphics.Print(-1, 85, "Current mode: VSYNC OFF", tr/2, tg/2, tb/2, true); } diff --git a/desktop_version/src/Screen.cpp b/desktop_version/src/Screen.cpp index 99784a55..30fb7179 100644 --- a/desktop_version/src/Screen.cpp +++ b/desktop_version/src/Screen.cpp @@ -1,3 +1,4 @@ +#define GAMESCREEN_DEFINITION #include "Screen.h" #include diff --git a/desktop_version/src/Screen.h b/desktop_version/src/Screen.h index a5469fb2..aa3d076c 100644 --- a/desktop_version/src/Screen.h +++ b/desktop_version/src/Screen.h @@ -41,4 +41,8 @@ public: SDL_Surface* m_screen; }; +#ifndef GAMESCREEN_DEFINITION +extern Screen gameScreen; +#endif + #endif /* SCREEN_H */ diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index fc465ad5..50909257 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -576,7 +576,6 @@ int main(int argc, char *argv[]) game.loadsettings(&screen_settings); gameScreen.init(screen_settings); } - graphics.screenbuffer = &gameScreen; graphics.create_buffers(gameScreen.GetFormat());