diff options
author | heavydemon21 <nielsstunnebrink1@gmail.com> | 2024-11-26 10:26:42 +0100 |
---|---|---|
committer | heavydemon21 <nielsstunnebrink1@gmail.com> | 2024-11-26 10:26:42 +0100 |
commit | 60a9879f268977d57b460eec830a3f8b5b24e1a2 (patch) | |
tree | 5e8e870864f85c3c6c66e721379b1e55b9446a03 /src/crepe | |
parent | 8cfb59093ce7b18c2b81cc8429a7568a3ba21a73 (diff) |
added window default config settings
Diffstat (limited to 'src/crepe')
-rw-r--r-- | src/crepe/api/Camera.h | 11 | ||||
-rw-r--r-- | src/crepe/api/Config.h | 9 | ||||
-rw-r--r-- | src/crepe/facade/SDLContext.cpp | 12 | ||||
-rw-r--r-- | src/crepe/facade/SDLContext.h | 4 |
4 files changed, 21 insertions, 15 deletions
diff --git a/src/crepe/api/Camera.h b/src/crepe/api/Camera.h index eea1b28..ec94c44 100644 --- a/src/crepe/api/Camera.h +++ b/src/crepe/api/Camera.h @@ -3,6 +3,7 @@ #include "Color.h" #include "Component.h" +#include "api/Config.h" #include "types.h" namespace crepe { @@ -30,19 +31,17 @@ public: Color bg_color; //! pos The position of the camera in world units - vec2 pos = {0, 0}; + vec2 pos = Config::get_instance().win_set.pos; //! screen the display size in pixels ( output resolution ) - //vec2 screen = {720, 480}; - vec2 screen = {1080, 720}; + vec2 screen = Config::get_instance().win_set.def_size; //! viewport is the area of the world visible through the camera (in world units) - //vec2 viewport = {720, 480}; - vec2 viewport = {2000, 1000}; + vec2 viewport = Config::get_instance().win_set.def_size; //! scale scaling factor from world units to pixel coordinates //! Zoom level of the camera view. - double zoom = 1.0f; + double zoom = Config::get_instance().win_set.zoom; public: /** diff --git a/src/crepe/api/Config.h b/src/crepe/api/Config.h index 671fd02..e1aef7d 100644 --- a/src/crepe/api/Config.h +++ b/src/crepe/api/Config.h @@ -1,6 +1,7 @@ #pragma once #include "../util/Log.h" +#include "types.h" namespace crepe { @@ -62,6 +63,14 @@ public: double gravity = 1; } physics; + //! default window settings + struct { + //TODO make this constexpr because this will never change + vec2 def_size = {1080,720}; + vec2 pos = {0,0}; + float zoom = 1.0f; + } win_set; + //! Asset loading options struct { /** diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index fc59d84..8b29f8a 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -30,14 +30,13 @@ SDLContext & SDLContext::get_instance() { SDLContext::SDLContext() { dbg_trace(); - // FIXME: read window defaults from config manager if (SDL_Init(SDL_INIT_VIDEO) != 0) { throw runtime_error(format("SDLContext: SDL_Init error: {}", SDL_GetError())); } SDL_Window * tmp_window = SDL_CreateWindow("Crepe Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - this->viewport.w, this->viewport.h, 0); + this->window.x, this->window.y, 0); if (!tmp_window) { throw runtime_error(format("SDLContext: SDL_Window error: {}", SDL_GetError())); } @@ -123,8 +122,8 @@ SDL_Rect SDLContext::get_dst_rect(const Sprite & sprite, const vec2 & pos, pixel_width *= img_scale; pixel_height *= img_scale; - int pixel_x = static_cast<int>((pos.x - cam_pos.x + this->viewport.w / 2 - pixel_width / 2)); - int pixel_y = static_cast<int>((pos.y - cam_pos.y + this->viewport.h / 2 - pixel_height / 2)); + int pixel_x = static_cast<int>((pos.x - cam_pos.x + this->window.x / 2 - pixel_width / 2)); + int pixel_y = static_cast<int>((pos.y - cam_pos.y + this->window.y / 2 - pixel_height / 2)); return SDL_Rect{ .x = pixel_x, @@ -167,10 +166,9 @@ void SDLContext::draw(const Sprite & sprite, const Transform & transform, void SDLContext::set_camera(const Camera & cam, vec2 & scale) { // resize window - if (this->viewport.w != (int) cam.screen.x || this->viewport.h != (int) cam.screen.y) { + if ((int)this->window.x != (int) cam.screen.x || (int)this->window.y != (int) cam.screen.y) { SDL_SetWindowSize(this->game_window.get(), (int) cam.screen.x, (int) cam.screen.y); - this->viewport.h = (int)cam.screen.y; - this->viewport.w = (int)cam.screen.x; + this->window = cam.screen; } double screen_aspect = cam.screen.x / cam.screen.y; diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index c9f3299..f72eecb 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -13,6 +13,7 @@ #include "../api/Transform.h" #include "api/Camera.h" +#include "api/Config.h" #include "types.h" namespace crepe { @@ -179,8 +180,7 @@ private: std::unique_ptr<SDL_Renderer, std::function<void(SDL_Renderer *)>> game_renderer; //! viewport for the camera window - //todo change this so that it becomes a vec2 for only width and height - SDL_Rect viewport = {0, 0, 1200, 1200}; + vec2 window = Config::get_instance().win_set.def_size; }; } // namespace crepe |