From 9432900158e6a31815345fcf0af8d28ae34c6da9 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 8 Nov 2024 11:44:21 +0100 Subject: code style --- src/crepe/facade/SDLContext.cpp | 144 +++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 62 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 8da93e9..bbeb3a9 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -21,34 +22,6 @@ SDLContext & SDLContext::get_instance() { return instance; } -void SDLContext::handle_events(bool & running) { - SDL_Event event; - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - running = false; - } - } -} - -SDLContext::~SDLContext() { - dbg_trace(); - - if (this->game_renderer != nullptr) - SDL_DestroyRenderer(this->game_renderer); - - if (this->game_window != nullptr) { - SDL_DestroyWindow(this->game_window); - } - - // TODO: how are we going to ensure that these are called from the same - // thread that SDL_Init() was called on? This has caused problems for me - // before. - IMG_Quit(); - SDL_Quit(); -} - -void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } - SDLContext::SDLContext() { dbg_trace(); // FIXME: read window defaults from config manager @@ -62,7 +35,7 @@ SDLContext::SDLContext() { this->game_window = SDL_CreateWindow( "Crepe Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - 1920, 1080, SDL_WINDOW_SHOWN); + this->viewport.w, this->viewport.h, 0); if (!this->game_window) { // FIXME: throw exception std::cerr << "Window could not be created! SDL_Error: " @@ -87,55 +60,92 @@ SDLContext::SDLContext() { } } +SDLContext::~SDLContext() { + dbg_trace(); + + if (this->game_renderer != nullptr) + SDL_DestroyRenderer(this->game_renderer); + + if (this->game_window != nullptr) { + SDL_DestroyWindow(this->game_window); + } + + // TODO: how are we going to ensure that these are called from the same + // thread that SDL_Init() was called on? This has caused problems for me + // before. + IMG_Quit(); + SDL_Quit(); +} + +void SDLContext::handle_events(bool & running) { + //TODO: wouter i need events + /* + SDL_Event event; + SDL_PollEvent(&event); + switch (event.type) { + case SDL_QUIT: + running = false; + break; + case SDL_KEYDOWN: + triggerEvent(KeyPressedEvent(getCustomKey(event.key.keysym.sym))); + break; + case SDL_MOUSEBUTTONDOWN: + int x, y; + SDL_GetMouseState(&x, &y); + triggerEvent(MousePressedEvent(x, y)); + break; + } + */ +} + +void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } void SDLContext::present_screen() { SDL_RenderPresent(this->game_renderer); } -void SDLContext::draw(const Sprite & sprite, const Transform & transform) { +void SDLContext::draw(const Sprite & sprite, const Transform & transform, + const Camera & cam) { static SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * sprite.flip.flip_y)); - int w, h; - SDL_QueryTexture(sprite.sprite_image->texture, NULL, NULL, &w, &h); - // needs maybe camera for position + double adjusted_x = (transform.position.x - cam.x) * cam.zoom; + double adjusted_y = (transform.position.y - cam.y) * cam.zoom; + double adjusted_w = sprite.sprite_rect.w * transform.scale * cam.zoom; + double adjusted_h = sprite.sprite_rect.h * transform.scale * cam.zoom; + + SDL_Rect srcrect = { + .x = sprite.sprite_rect.x, + .y = sprite.sprite_rect.y, + .w = sprite.sprite_rect.w, + .h = sprite.sprite_rect.h, + }; + SDL_Rect dstrect = { - .x = static_cast(transform.position.x), - .y = static_cast(transform.position.y), - .w = static_cast(w * transform.scale), - .h = static_cast(h * transform.scale), + .x = static_cast(adjusted_x), + .y = static_cast(adjusted_y), + .w = static_cast(adjusted_w), + .h = static_cast(adjusted_h), }; double degrees = transform.rotation * 180 / M_PI; - SDL_RenderCopyEx(this->game_renderer, sprite.sprite_image->texture, NULL, - &dstrect, degrees, NULL, render_flip); -} -/* -SDL_Texture * SDLContext::setTextureFromPath(const char * path, SDL_Rect & clip, - const int row, const int col) { - dbg_trace(); + SDL_RenderCopyEx(this->game_renderer, sprite.sprite_image->texture, + &srcrect, - SDL_Surface * tmp = IMG_Load(path); - if (!tmp) { - std::cerr << "Error surface " << IMG_GetError << std::endl; - } - - clip. - w = tmp->w / col; - clip.h = tmp->h / row; - - SDL_Texture * CreatedTexture - = SDL_CreateTextureFromSurface(this->game_renderer, tmp); + &dstrect, degrees, NULL, render_flip); +} - if (!CreatedTexture) { - std::cerr << "Error could not create texture " << IMG_GetError - << std::endl; - } - SDL_FreeSurface(tmp); +void SDLContext::camera(const Camera & cam) { + this->viewport.w = static_cast(cam.aspect_width); + this->viewport.h = static_cast(cam.aspect_height); + this->viewport.x = static_cast(cam.x) - (SCREEN_WIDTH / 2); + this->viewport.y = static_cast(cam.y) - (SCREEN_HEIGHT / 2); - return CreatedTexture; + SDL_SetRenderDrawColor(this->game_renderer, cam.bg_color.r, cam.bg_color.g, + cam.bg_color.b, cam.bg_color.a); } -*/ + +const uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } SDL_Texture * SDLContext::texture_from_path(const char * path) { dbg_trace(); @@ -155,3 +165,13 @@ SDL_Texture * SDLContext::texture_from_path(const char * path) { return created_texture; } +int SDLContext::get_width(const Texture & ctx) { + int w; + SDL_QueryTexture(ctx.texture, NULL, NULL, &w, NULL); + return w; +} +int SDLContext::get_height(const Texture & ctx) { + int h; + SDL_QueryTexture(ctx.texture, NULL, NULL, NULL, &h); + return h; +} -- cgit v1.2.3 From 2e0b75fc51c4ef025f6b74f7f1648d04039bb955 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 8 Nov 2024 12:16:41 +0100 Subject: fixed the includes and const settings --- src/crepe/api/Animator.cpp | 6 +++--- src/crepe/api/Animator.h | 3 ++- src/crepe/api/Camera.cpp | 9 ++++++--- src/crepe/api/Camera.h | 3 ++- src/crepe/api/Sprite.cpp | 9 ++++----- src/crepe/api/Sprite.h | 6 +++--- src/crepe/api/Texture.cpp | 2 +- src/crepe/facade/SDLContext.cpp | 12 ++++++------ src/crepe/facade/SDLContext.h | 12 ++++++------ src/crepe/system/AnimatorSystem.cpp | 9 ++++----- src/crepe/system/RenderSystem.cpp | 6 +++--- src/crepe/system/RenderSystem.h | 6 +++--- 12 files changed, 43 insertions(+), 40 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/api/Animator.cpp b/src/crepe/api/Animator.cpp index 3834e0b..0896bb0 100644 --- a/src/crepe/api/Animator.cpp +++ b/src/crepe/api/Animator.cpp @@ -1,11 +1,11 @@ +#include -#include "Animator.h" #include "Component.h" #include "api/Sprite.h" - #include "util/log.h" -#include + +#include "Animator.h" using namespace crepe; diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h index 3493623..ec29a7f 100644 --- a/src/crepe/api/Animator.h +++ b/src/crepe/api/Animator.h @@ -1,8 +1,9 @@ #pragma once +#include + #include "Component.h" #include "api/Sprite.h" -#include namespace crepe { class AnimatorSystem; diff --git a/src/crepe/api/Camera.cpp b/src/crepe/api/Camera.cpp index 46a56b2..d423131 100644 --- a/src/crepe/api/Camera.cpp +++ b/src/crepe/api/Camera.cpp @@ -1,14 +1,17 @@ +#include -#include "Camera.h" #include "Component.h" #include "api/Color.h" #include "util/log.h" -#include + +#include "Camera.h" using namespace crepe; -Camera::Camera(uint32_t id, const Color& color) : Component(id), bg_color(color), aspect_width(640), aspect_height(480), zoom(1), x(0),y(0){ +Camera::Camera(uint32_t id, const Color & color) + : Component(id), bg_color(color), aspect_width(640), aspect_height(480), + zoom(1), x(0), y(0) { dbg_trace(); } diff --git a/src/crepe/api/Camera.h b/src/crepe/api/Camera.h index 022496d..1ff9f37 100644 --- a/src/crepe/api/Camera.h +++ b/src/crepe/api/Camera.h @@ -1,8 +1,9 @@ #pragma once +#include + #include "Component.h" #include "api/Color.h" -#include namespace crepe { diff --git a/src/crepe/api/Sprite.cpp b/src/crepe/api/Sprite.cpp index 3db8f2b..42e1177 100644 --- a/src/crepe/api/Sprite.cpp +++ b/src/crepe/api/Sprite.cpp @@ -1,17 +1,16 @@ -#include #include -#include "../util/log.h" - #include "Component.h" -#include "Sprite.h" #include "Texture.h" #include "facade/SDLContext.h" +#include "../util/log.h" + +#include "Sprite.h" using namespace std; using namespace crepe; -Sprite::Sprite(game_object_id_t id, shared_ptr image, +Sprite::Sprite(game_object_id_t id, const shared_ptr image, const Color & color, const FlipSettings & flip) : Component(id), color(color), flip(flip), sprite_image(image) { dbg_trace(); diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index 2e8b52a..6f83ac8 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -5,9 +5,9 @@ #include "api/Color.h" #include "api/Texture.h" - #include "Component.h" + namespace crepe { /** @@ -62,7 +62,7 @@ public: * \param color Color tint applied to the sprite. * \param flip Flip settings for horizontal and vertical orientation. */ - Sprite(game_object_id_t id, std::shared_ptr image, + Sprite(game_object_id_t id, const std::shared_ptr image, const Color & color, const FlipSettings & flip); /** @@ -72,7 +72,7 @@ public: //! Texture used for the sprite - std::shared_ptr sprite_image; + const std::shared_ptr sprite_image; //! Color tint of the sprite Color color; //! Flip settings for the sprite diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index 5519e5e..f052e4d 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -2,8 +2,8 @@ #include "../facade/SDLContext.h" #include "../util/log.h" - #include "Asset.h" + #include "Texture.h" using namespace crepe; diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index bbeb3a9..9a2d15a 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -98,11 +98,11 @@ void SDLContext::handle_events(bool & running) { */ } -void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } -void SDLContext::present_screen() { SDL_RenderPresent(this->game_renderer); } +void SDLContext::clear_screen() const { SDL_RenderClear(this->game_renderer); } +void SDLContext::present_screen() const { SDL_RenderPresent(this->game_renderer); } void SDLContext::draw(const Sprite & sprite, const Transform & transform, - const Camera & cam) { + const Camera & cam) const { static SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) @@ -147,7 +147,7 @@ void SDLContext::camera(const Camera & cam) { const uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } -SDL_Texture * SDLContext::texture_from_path(const char * path) { +SDL_Texture * SDLContext::texture_from_path(const char * path) const { dbg_trace(); SDL_Surface * tmp = IMG_Load(path); @@ -165,12 +165,12 @@ SDL_Texture * SDLContext::texture_from_path(const char * path) { return created_texture; } -int SDLContext::get_width(const Texture & ctx) { +int SDLContext::get_width(const Texture & ctx) const { int w; SDL_QueryTexture(ctx.texture, NULL, NULL, &w, NULL); return w; } -int SDLContext::get_height(const Texture & ctx) { +int SDLContext::get_height(const Texture & ctx) const { int h; SDL_QueryTexture(ctx.texture, NULL, NULL, NULL, &h); return h; diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index a08d0d8..3396697 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -101,21 +101,21 @@ private: * \param path Path to the image file. * \return Pointer to the created SDL_Texture. */ - SDL_Texture * texture_from_path(const char * path); + SDL_Texture * texture_from_path(const char * path) const; /** * \brief Gets the width of a texture. * \param texture Reference to the Texture object. * \return Width of the texture as an integer. */ - int get_width(const Texture & ); + int get_width(const Texture & ) const ; /** * \brief Gets the height of a texture. * \param texture Reference to the Texture object. * \return Height of the texture as an integer. */ - int get_height(const Texture &); + int get_height(const Texture &) const ; private: @@ -129,17 +129,17 @@ private: * \param camera Reference to the Camera for view adjustments. */ void draw(const Sprite & sprite, const Transform & transform, - const Camera & camera); + const Camera & camera) const; /** * \brief Clears the screen, preparing for a new frame. */ - void clear_screen(); + void clear_screen() const ; /** * \brief Presents the rendered frame to the screen. */ - void present_screen(); + void present_screen() const ; /** * \brief Sets the current camera for rendering. diff --git a/src/crepe/system/AnimatorSystem.cpp b/src/crepe/system/AnimatorSystem.cpp index 052d264..3d6c807 100644 --- a/src/crepe/system/AnimatorSystem.cpp +++ b/src/crepe/system/AnimatorSystem.cpp @@ -1,15 +1,14 @@ +#include +#include +#include -#include "AnimatorSystem.h" #include "ComponentManager.h" #include "facade/SDLContext.h" #include "util/log.h" - #include "api/Animator.h" -#include -#include -#include +#include "AnimatorSystem.h" using namespace crepe; diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp index 149af68..849d810 100644 --- a/src/crepe/system/RenderSystem.cpp +++ b/src/crepe/system/RenderSystem.cpp @@ -20,9 +20,9 @@ RenderSystem & RenderSystem::get_instance() { return instance; } -void RenderSystem::clear_screen() { SDLContext::get_instance().clear_screen(); } +void RenderSystem::clear_screen() const { SDLContext::get_instance().clear_screen(); } -void RenderSystem::present_screen() { +void RenderSystem::present_screen() const { SDLContext::get_instance().present_screen(); } void RenderSystem::update_camera() { @@ -36,7 +36,7 @@ void RenderSystem::update_camera() { this->curr_cam = &cam; } } -void RenderSystem::render_sprites() { +void RenderSystem::render_sprites() const { ComponentManager & mgr = ComponentManager::get_instance(); diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h index 684776b..c5e674a 100644 --- a/src/crepe/system/RenderSystem.h +++ b/src/crepe/system/RenderSystem.h @@ -43,12 +43,12 @@ private: /** * \brief Clears the screen in preparation for rendering. */ - void clear_screen(); + void clear_screen() const; /** * \brief Presents the rendered frame to the display. */ - void present_screen(); + void present_screen() const; /** * \brief Updates the active camera used for rendering. @@ -58,7 +58,7 @@ private: /** * \brief Renders all active sprites to the screen. */ - void render_sprites(); + void render_sprites() const; /** * \todo Include color handling for sprites. -- cgit v1.2.3 From 91a277c69fd5f8ba814adc1006a49c7415ff65be Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 8 Nov 2024 17:31:25 +0100 Subject: updated to satisfy the code review --- src/crepe/api/Animator.h | 14 ++++++----- src/crepe/api/Camera.h | 26 ++++++-------------- src/crepe/api/Sprite.h | 36 ++++++++++----------------- src/crepe/api/Texture.cpp | 16 +++--------- src/crepe/api/Texture.h | 1 + src/crepe/facade/SDLContext.cpp | 17 +++++++------ src/crepe/facade/SDLContext.h | 49 ++++++++++++------------------------- src/crepe/system/AnimatorSystem.cpp | 2 +- 8 files changed, 60 insertions(+), 101 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h index ede1610..42ce957 100644 --- a/src/crepe/api/Animator.h +++ b/src/crepe/api/Animator.h @@ -28,11 +28,11 @@ public: /** * \brief Constructs an Animator object that will control animations for a sprite sheet. * - * \param[in] id The unique identifier for the component, typically assigned automatically. - * \param[in] spritesheet A reference to the Sprite object which holds the sprite sheet for animation. - * \param[in] row The maximum number of rows in the sprite sheet. - * \param[in] col The maximum number of columns in the sprite sheet. - * \param[in] col__animate The specific col index of the sprite sheet to animate. This allows selecting which col to animate from multiple col in the sheet. + * \param id The unique identifier for the component, typically assigned automatically. + * \param spritesheet A reference to the Sprite object which holds the sprite sheet for animation. + * \param row The maximum number of rows in the sprite sheet. + * \param col The maximum number of columns in the sprite sheet. + * \param col__animate The specific col index of the sprite sheet to animate. This allows selecting which col to animate from multiple col in the sheet. * * This constructor sets up the Animator with the given parameters, and initializes the animation system. */ @@ -80,8 +80,10 @@ private: //int fps; private: - //! Friend class that can directly access the private members of the Animator. + //! AnimatorSystem adjust the private member parameters of Animator; friend class AnimatorSystem; + + //! SDLContext reads the Animator member var's friend class SDLContext; }; } // namespace crepe diff --git a/src/crepe/api/Camera.h b/src/crepe/api/Camera.h index 7587b44..708a523 100644 --- a/src/crepe/api/Camera.h +++ b/src/crepe/api/Camera.h @@ -2,8 +2,8 @@ #include -#include "Component.h" #include "Color.h" +#include "Component.h" namespace crepe { @@ -31,34 +31,22 @@ public: ~Camera(); public: - /** - * \brief Background color of the camera view. - */ + //! \brief Background color of the camera view. Color bg_color; - /** - * \brief Aspect ratio height for the camera. - */ + //! \brief Aspect ratio height for the camera. double aspect_height; - /** - * \brief Aspect ratio width for the camera. - */ + //! \brief Aspect ratio width for the camera. double aspect_width; - /** - * \brief X-coordinate of the camera position. - */ + //! \brief X-coordinate of the camera position. double x; - /** - * \brief Y-coordinate of the camera position. - */ + //! \brief Y-coordinate of the camera position. double y; - /** - * \brief Zoom level of the camera view. - */ + //! \brief Zoom level of the camera view. double zoom; public: diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index 51cb860..1db32d7 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -10,13 +10,6 @@ namespace crepe { -/** - * \struct Rect - * \brief Represents a rectangle area for rendering. - * - * Everything within the defined rectangle will be rendered. - * The SDLContext will translate this into the library's rectangle structure. - */ struct Rect { int w = 0; int h = 0; @@ -24,29 +17,16 @@ struct Rect { int y = 0; }; -/** - * \struct FlipSettings - * \brief Flip settings for the sprite. - * - * Defines the horizontal and vertical flip settings for a sprite, which the - * SDLContext will translate into the corresponding settings for the library. - */ struct FlipSettings { bool flip_x = false; bool flip_y = false; }; -//! Forward declaration of the SDLContext facade. class SDLContext; - -//! Forward declaration of the Animator class. class Animator; - -//! Forward declaration of the AnimatorSystem class. class AnimatorSystem; /** - * \class Sprite * \brief Represents a renderable sprite component. * * A renderable sprite that can be displayed in the game. It includes a texture, @@ -55,6 +35,9 @@ class AnimatorSystem; class Sprite : public Component { public: + + // TODO: Loek comment in github #27 will be looked another time + // about shared_ptr Texture /** * \brief Constructs a Sprite with specified parameters. * \param game_id Unique identifier for the game object this sprite belongs to. @@ -78,23 +61,30 @@ public: //! Flip settings for the sprite FlipSettings flip; //! Layer sorting level of the sprite - uint8_t sorting_in_layer; + uint8_t sorting_in_layer = 0; //! Order within the sorting layer - uint8_t order_in_layer; + uint8_t order_in_layer = 0; public: /** * \brief Gets the maximum number of instances allowed for this sprite. * \return Maximum instance count as an integer. + * + * For now is this number randomly picked. I think it will eventually be 1. */ virtual int get_instances_max() const { return 10; } private: + //! Reads the sprite_rect of sprite friend class SDLContext; + + //! Reads the all the variables plus the sprite_rect friend class Animator; + + //! Reads the all the variables plus the sprite_rect friend class AnimatorSystem; - //! Render area of the sprite + //! Render area of the sprite this will also be adjusted by the AnimatorSystem if an Animator object is present in GameObject Rect sprite_rect; }; diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index 5519e5e..e6c2e05 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -32,18 +32,10 @@ void Texture::load(unique_ptr res) { } int Texture::get_width() const{ - if (this->texture) { - return SDLContext::get_instance().get_width(*this); - } - else { - return 0; - } + if (this->texture == nullptr) return 0; + return SDLContext::get_instance().get_width(*this); } int Texture::get_height() const{ - if (this->texture) { - return SDLContext::get_instance().get_height(*this); - } - else { - return 0; - } + if (this->texture == nullptr) return 0; + return SDLContext::get_instance().get_width(*this); } diff --git a/src/crepe/api/Texture.h b/src/crepe/api/Texture.h index 6d99a93..828518d 100644 --- a/src/crepe/api/Texture.h +++ b/src/crepe/api/Texture.h @@ -64,6 +64,7 @@ private: void load(std::unique_ptr res); private: + //TODO make RAII //! The texture of the class from the library SDL_Texture * texture = nullptr; diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 9a2d15a..cedb7b8 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "../api/Sprite.h" #include "../api/Texture.h" @@ -98,13 +99,15 @@ void SDLContext::handle_events(bool & running) { */ } -void SDLContext::clear_screen() const { SDL_RenderClear(this->game_renderer); } -void SDLContext::present_screen() const { SDL_RenderPresent(this->game_renderer); } +void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } +void SDLContext::present_screen() { + SDL_RenderPresent(this->game_renderer); +} void SDLContext::draw(const Sprite & sprite, const Transform & transform, - const Camera & cam) const { + const Camera & cam) { - static SDL_RendererFlip render_flip + SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * sprite.flip.flip_y)); @@ -147,10 +150,10 @@ void SDLContext::camera(const Camera & cam) { const uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } -SDL_Texture * SDLContext::texture_from_path(const char * path) const { - dbg_trace(); +//TODO: make this RAII +SDL_Texture * SDLContext::texture_from_path(const std::string & path) { - SDL_Surface * tmp = IMG_Load(path); + SDL_Surface * tmp = IMG_Load(path.c_str()); if (!tmp) { std::cerr << "Error surface " << IMG_GetError << std::endl; } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 3396697..80b76dd 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -3,18 +3,18 @@ #include #include #include +#include #include "../api/Sprite.h" #include "../api/Transform.h" #include "api/Camera.h" -typedef SDL_Keycode CREPE_KEYCODES; - //FIXME: this needs to be removed const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; namespace crepe { +typedef SDL_Keycode CREPE_KEYCODES; class Texture; class LoopManager; @@ -35,29 +35,13 @@ public: */ static SDLContext & get_instance(); - /** - * \brief Deleted copy constructor. - */ SDLContext(const SDLContext &) = delete; - - /** - * \brief Deleted move constructor. - */ SDLContext(SDLContext &&) = delete; - - /** - * \brief Deleted copy assignment operator. - * \return Reference to the SDLContext instance. - */ SDLContext & operator=(const SDLContext &) = delete; - - /** - * \brief Deleted move assignment operator. - * \return Reference to the SDLContext instance. - */ SDLContext & operator=(SDLContext &&) = delete; private: + //! will only use handle_events friend class LoopManager; /** * \brief Handles SDL events such as window close and input. @@ -65,8 +49,8 @@ private: */ void handle_events(bool & running); - private: + //! Will only use get_ticks friend class AnimatorSystem; /** @@ -75,7 +59,6 @@ private: */ const uint64_t get_ticks() const; - private: /** * \brief Constructs an SDLContext instance. @@ -87,13 +70,13 @@ private: * \brief Destroys the SDLContext instance. * Cleans up SDL resources, including the window and renderer. */ - virtual ~SDLContext(); - - + ~SDLContext(); private: - + //! Will use the funtions: texture_from_path, get_width,get_height. friend class Texture; + + //! Will use the funtions: texture_from_path, get_width,get_height. friend class Animator; /** @@ -101,25 +84,24 @@ private: * \param path Path to the image file. * \return Pointer to the created SDL_Texture. */ - SDL_Texture * texture_from_path(const char * path) const; + SDL_Texture * texture_from_path(const std::string & path); /** * \brief Gets the width of a texture. * \param texture Reference to the Texture object. * \return Width of the texture as an integer. */ - int get_width(const Texture & ) const ; + int get_width(const Texture &) const; /** * \brief Gets the height of a texture. * \param texture Reference to the Texture object. * \return Height of the texture as an integer. */ - int get_height(const Texture &) const ; - + int get_height(const Texture &) const; private: - + //! Will use draw,clear_screen, present_screen, camera. friend class RenderSystem; /** @@ -129,17 +111,17 @@ private: * \param camera Reference to the Camera for view adjustments. */ void draw(const Sprite & sprite, const Transform & transform, - const Camera & camera) const; + const Camera & camera); /** * \brief Clears the screen, preparing for a new frame. */ - void clear_screen() const ; + void clear_screen(); /** * \brief Presents the rendered frame to the screen. */ - void present_screen() const ; + void present_screen(); /** * \brief Sets the current camera for rendering. @@ -148,6 +130,7 @@ private: void camera(const Camera & camera); private: + //TODO: Make this RAII //! sdl window SDL_Window * game_window = nullptr; //! renderer for the crepe engine diff --git a/src/crepe/system/AnimatorSystem.cpp b/src/crepe/system/AnimatorSystem.cpp index 3d6c807..4ea889a 100644 --- a/src/crepe/system/AnimatorSystem.cpp +++ b/src/crepe/system/AnimatorSystem.cpp @@ -3,11 +3,11 @@ #include #include -#include "ComponentManager.h" #include "facade/SDLContext.h" #include "util/log.h" #include "api/Animator.h" +#include "ComponentManager.h" #include "AnimatorSystem.h" using namespace crepe; -- cgit v1.2.3 From ba713ba89127e3b4a24f204f67bccaa9c2972916 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 8 Nov 2024 18:04:36 +0100 Subject: Made it RAII --- src/crepe/api/Texture.cpp | 6 ++---- src/crepe/api/Texture.h | 6 ++++-- src/crepe/api/Transform.h | 2 +- src/crepe/facade/SDLContext.cpp | 40 +++++++++++++++++----------------------- src/crepe/facade/SDLContext.h | 17 +++++++++++++---- 5 files changed, 37 insertions(+), 34 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index e6c2e05..1eac655 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -21,14 +21,12 @@ Texture::Texture(const char * src) { Texture::~Texture() { dbg_trace(); - if (this->texture != nullptr) { - SDL_DestroyTexture(this->texture); - } + this->texture.reset(); } void Texture::load(unique_ptr res) { SDLContext & ctx = SDLContext::get_instance(); - this->texture = ctx.texture_from_path(res->canonical()); + this->texture.reset(ctx.texture_from_path(res->canonical())); } int Texture::get_width() const{ diff --git a/src/crepe/api/Texture.h b/src/crepe/api/Texture.h index 828518d..0cacfe5 100644 --- a/src/crepe/api/Texture.h +++ b/src/crepe/api/Texture.h @@ -64,9 +64,11 @@ private: void load(std::unique_ptr res); private: - //TODO make RAII + struct TextureDeleter{ + void operator()(SDL_Texture* texture) const { SDL_DestroyTexture(texture);} + }; //! The texture of the class from the library - SDL_Texture * texture = nullptr; + std::unique_ptr texture; //! Grants SDLContext access to private members. friend class SDLContext; diff --git a/src/crepe/api/Transform.h b/src/crepe/api/Transform.h index d7a5b8a..756e45b 100644 --- a/src/crepe/api/Transform.h +++ b/src/crepe/api/Transform.h @@ -32,7 +32,7 @@ public: public: //! Translation (shift) Vector2 position; - //! Rotation, in radians + //! Rotation, in degrees double rotation; //! Multiplication factor double scale; diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index cedb7b8..770e93b 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -34,22 +34,22 @@ SDLContext::SDLContext() { return; } - this->game_window = SDL_CreateWindow( + this->game_window.reset(SDL_CreateWindow( "Crepe Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - this->viewport.w, this->viewport.h, 0); + this->viewport.w, this->viewport.h, 0)); if (!this->game_window) { // FIXME: throw exception std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl; } - this->game_renderer - = SDL_CreateRenderer(this->game_window, -1, SDL_RENDERER_ACCELERATED); + this->game_renderer.reset(SDL_CreateRenderer(this->game_window.get(), -1, + SDL_RENDERER_ACCELERATED)); if (!this->game_renderer) { // FIXME: throw exception std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl; - SDL_DestroyWindow(this->game_window); + SDL_DestroyWindow(this->game_window.get()); return; } @@ -64,12 +64,8 @@ SDLContext::SDLContext() { SDLContext::~SDLContext() { dbg_trace(); - if (this->game_renderer != nullptr) - SDL_DestroyRenderer(this->game_renderer); - - if (this->game_window != nullptr) { - SDL_DestroyWindow(this->game_window); - } + this->game_renderer.reset(); + this->game_window.reset(); // TODO: how are we going to ensure that these are called from the same // thread that SDL_Init() was called on? This has caused problems for me @@ -99,9 +95,9 @@ void SDLContext::handle_events(bool & running) { */ } -void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } +void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer.get()); } void SDLContext::present_screen() { - SDL_RenderPresent(this->game_renderer); + SDL_RenderPresent(this->game_renderer.get()); } void SDLContext::draw(const Sprite & sprite, const Transform & transform, @@ -130,12 +126,10 @@ void SDLContext::draw(const Sprite & sprite, const Transform & transform, .h = static_cast(adjusted_h), }; - double degrees = transform.rotation * 180 / M_PI; - - SDL_RenderCopyEx(this->game_renderer, sprite.sprite_image->texture, - &srcrect, + SDL_RenderCopyEx(this->game_renderer.get(), + sprite.sprite_image->texture.get(), &srcrect, - &dstrect, degrees, NULL, render_flip); + &dstrect, transform.rotation, NULL, render_flip); } void SDLContext::camera(const Camera & cam) { @@ -144,8 +138,8 @@ void SDLContext::camera(const Camera & cam) { this->viewport.x = static_cast(cam.x) - (SCREEN_WIDTH / 2); this->viewport.y = static_cast(cam.y) - (SCREEN_HEIGHT / 2); - SDL_SetRenderDrawColor(this->game_renderer, cam.bg_color.r, cam.bg_color.g, - cam.bg_color.b, cam.bg_color.a); + SDL_SetRenderDrawColor(this->game_renderer.get(), cam.bg_color.r, + cam.bg_color.g, cam.bg_color.b, cam.bg_color.a); } const uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } @@ -158,7 +152,7 @@ SDL_Texture * SDLContext::texture_from_path(const std::string & path) { std::cerr << "Error surface " << IMG_GetError << std::endl; } SDL_Texture * created_texture - = SDL_CreateTextureFromSurface(this->game_renderer, tmp); + = SDL_CreateTextureFromSurface(this->game_renderer.get(), tmp); if (!created_texture) { std::cerr << "Error could not create texture " << IMG_GetError @@ -170,11 +164,11 @@ SDL_Texture * SDLContext::texture_from_path(const std::string & path) { } int SDLContext::get_width(const Texture & ctx) const { int w; - SDL_QueryTexture(ctx.texture, NULL, NULL, &w, NULL); + SDL_QueryTexture(ctx.texture.get(), NULL, NULL, &w, NULL); return w; } int SDLContext::get_height(const Texture & ctx) const { int h; - SDL_QueryTexture(ctx.texture, NULL, NULL, NULL, &h); + SDL_QueryTexture(ctx.texture.get(), NULL, NULL, NULL, &h); return h; } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 80b76dd..0a8dbcf 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "../api/Sprite.h" @@ -130,11 +131,19 @@ private: void camera(const Camera & camera); private: - //TODO: Make this RAII - //! sdl window - SDL_Window * game_window = nullptr; + struct WindowDeleter { + void operator()(SDL_Window * window) { SDL_DestroyWindow(window); } + }; + + struct RendererDeleter { + void operator()(SDL_Renderer * renderer) { SDL_DestroyRenderer(renderer); } + }; + + //! sdl Window + std::unique_ptr game_window; + //! renderer for the crepe engine - SDL_Renderer * game_renderer = nullptr; + std::unique_ptr game_renderer; //! viewport for the camera window SDL_Rect viewport = {0, 0, 640, 480}; -- cgit v1.2.3 From ac8a58a2a16118ea4c40fcc533c3420edde45122 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 8 Nov 2024 19:12:37 +0100 Subject: fixed all the RAII --- src/crepe/api/Animator.h | 14 +----------- src/crepe/api/Texture.cpp | 2 +- src/crepe/api/Texture.h | 9 ++------ src/crepe/facade/SDLContext.cpp | 48 +++++++++++++++++++++++++---------------- src/crepe/facade/SDLContext.h | 17 ++++++--------- 5 files changed, 40 insertions(+), 50 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h index 42ce957..ae0a896 100644 --- a/src/crepe/api/Animator.h +++ b/src/crepe/api/Animator.h @@ -39,23 +39,11 @@ public: Animator(uint32_t id, Sprite & spritesheet, int row, int col, int col_animate); - /** - * \brief Destroys the Animator object and cleans up any resources. - * - * This destructor will handle any necessary cleanup when the Animator component is no longer needed. - */ - ~Animator(); - //! Deleted copy constructor to prevent copying of the Animator instance. + ~Animator(); Animator(const Animator &) = delete; - - //! Deleted move constructor to prevent moving of the Animator instance. Animator(Animator &&) = delete; - - //! Deleted copy assignment operator to prevent copying the Animator instance. Animator & operator=(const Animator &) = delete; - - //! Deleted move assignment operator to prevent moving the Animator instance. Animator & operator=(Animator &&) = delete; private: diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index 1eac655..c31f704 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -26,7 +26,7 @@ Texture::~Texture() { void Texture::load(unique_ptr res) { SDLContext & ctx = SDLContext::get_instance(); - this->texture.reset(ctx.texture_from_path(res->canonical())); + this->texture = std::move(ctx.texture_from_path(res->canonical())); } int Texture::get_width() const{ diff --git a/src/crepe/api/Texture.h b/src/crepe/api/Texture.h index 0cacfe5..9bda5fe 100644 --- a/src/crepe/api/Texture.h +++ b/src/crepe/api/Texture.h @@ -5,16 +5,14 @@ // API namespace? #include +#include #include #include "Asset.h" namespace crepe { -//! Forward declaration of SDLContext class. class SDLContext; - -//! Forward declaration of Animator class. class Animator; /** @@ -64,11 +62,8 @@ private: void load(std::unique_ptr res); private: - struct TextureDeleter{ - void operator()(SDL_Texture* texture) const { SDL_DestroyTexture(texture);} - }; //! The texture of the class from the library - std::unique_ptr texture; + std::unique_ptr> texture; //! Grants SDLContext access to private members. friend class SDLContext; diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 770e93b..5b9ca71 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -6,13 +6,17 @@ #include #include #include +#include #include +#include #include +#include #include "../api/Sprite.h" #include "../api/Texture.h" #include "../api/Transform.h" #include "../util/log.h" +#include "Exception.h" #include "SDLContext.h" @@ -33,19 +37,21 @@ SDLContext::SDLContext() { << std::endl; return; } - - this->game_window.reset(SDL_CreateWindow( + SDL_Window * tmp_window = SDL_CreateWindow( "Crepe Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - this->viewport.w, this->viewport.h, 0)); - if (!this->game_window) { + this->viewport.w, this->viewport.h, 0); + if (!tmp_window) { // FIXME: throw exception std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl; + return; } + this->game_window = {tmp_window, [](SDL_Window* window) { SDL_DestroyWindow(window); }}; - this->game_renderer.reset(SDL_CreateRenderer(this->game_window.get(), -1, - SDL_RENDERER_ACCELERATED)); - if (!this->game_renderer) { + + SDL_Renderer* tmp_renderer = SDL_CreateRenderer(this->game_window.get(), -1, + SDL_RENDERER_ACCELERATED); + if (!tmp_renderer) { // FIXME: throw exception std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl; @@ -53,6 +59,8 @@ SDLContext::SDLContext() { return; } + this->game_renderer = {tmp_renderer, [](SDL_Renderer* renderer) { SDL_DestroyRenderer(renderer); }}; + int img_flags = IMG_INIT_PNG; if (!(IMG_Init(img_flags) & img_flags)) { // FIXME: throw exception @@ -144,23 +152,27 @@ void SDLContext::camera(const Camera & cam) { const uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } -//TODO: make this RAII -SDL_Texture * SDLContext::texture_from_path(const std::string & path) { +std::unique_ptr> SDLContext::texture_from_path(const std::string & path) { SDL_Surface * tmp = IMG_Load(path.c_str()); - if (!tmp) { - std::cerr << "Error surface " << IMG_GetError << std::endl; + if (tmp == nullptr) { + throw Exception("surface cannot be load from %s", path.c_str()); } - SDL_Texture * created_texture - = SDL_CreateTextureFromSurface(this->game_renderer.get(), tmp); - if (!created_texture) { - std::cerr << "Error could not create texture " << IMG_GetError - << std::endl; + std::unique_ptr> img_surface; + img_surface = {tmp, [](SDL_Surface * surface) { SDL_FreeSurface(surface); }}; + + SDL_Texture * tmp_texture = SDL_CreateTextureFromSurface( + this->game_renderer.get(), img_surface.get()); + + if ( tmp_texture == nullptr) { + throw Exception("Texture cannot be load from %s", path.c_str()); } - SDL_FreeSurface(tmp); - return created_texture; + std::unique_ptr> img_texture; + img_texture = {tmp_texture, [](SDL_Texture * texture) { SDL_DestroyTexture(texture); }}; + + return img_texture; } int SDLContext::get_width(const Texture & ctx) const { int w; diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 0a8dbcf..93166f2 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -15,6 +16,8 @@ const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; namespace crepe { + +//TODO: Wouter will fix this. cause user cannot this at the moment typedef SDL_Keycode CREPE_KEYCODES; class Texture; @@ -85,8 +88,7 @@ private: * \param path Path to the image file. * \return Pointer to the created SDL_Texture. */ - SDL_Texture * texture_from_path(const std::string & path); - + std::unique_ptr> texture_from_path(const std::string & path); /** * \brief Gets the width of a texture. * \param texture Reference to the Texture object. @@ -131,19 +133,12 @@ private: void camera(const Camera & camera); private: - struct WindowDeleter { - void operator()(SDL_Window * window) { SDL_DestroyWindow(window); } - }; - - struct RendererDeleter { - void operator()(SDL_Renderer * renderer) { SDL_DestroyRenderer(renderer); } - }; //! sdl Window - std::unique_ptr game_window; + std::unique_ptr> game_window; //! renderer for the crepe engine - std::unique_ptr game_renderer; + std::unique_ptr> game_renderer; //! viewport for the camera window SDL_Rect viewport = {0, 0, 640, 480}; -- cgit v1.2.3 From 506de66aaecc9b82415dde46058b848e46bc7258 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 8 Nov 2024 20:21:36 +0100 Subject: nitpicks (merge #27) --- src/crepe/api/Animator.cpp | 4 +- src/crepe/api/Animator.h | 6 +-- src/crepe/api/Camera.cpp | 9 ++-- src/crepe/api/Camera.h | 42 ++++++++-------- src/crepe/api/Color.h | 4 +- src/crepe/api/Sprite.cpp | 4 +- src/crepe/api/Sprite.h | 17 +++---- src/crepe/api/Texture.cpp | 4 +- src/crepe/api/Texture.h | 76 ++++++++++++++--------------- src/crepe/facade/SDLContext.cpp | 33 ++++++++----- src/crepe/facade/SDLContext.h | 95 ++++++++++++++++++------------------- src/crepe/system/AnimatorSystem.cpp | 13 +++-- src/crepe/system/AnimatorSystem.h | 22 ++------- src/crepe/system/RenderSystem.cpp | 9 ++-- src/crepe/system/RenderSystem.h | 80 +++++++++++++------------------ 15 files changed, 195 insertions(+), 223 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/api/Animator.cpp b/src/crepe/api/Animator.cpp index 4b4d4be..8b396af 100644 --- a/src/crepe/api/Animator.cpp +++ b/src/crepe/api/Animator.cpp @@ -3,14 +3,14 @@ #include "util/log.h" +#include "Animator.h" #include "Component.h" #include "Sprite.h" -#include "Animator.h" using namespace crepe; Animator::Animator(uint32_t id, Sprite & ss, int row, int col, int col_animator) - : Component(id), spritesheet(ss), row(row), col(col){ + : Component(id), spritesheet(ss), row(row), col(col) { dbg_trace(); animator_rect = spritesheet.sprite_rect; diff --git a/src/crepe/api/Animator.h b/src/crepe/api/Animator.h index ae0a896..def0240 100644 --- a/src/crepe/api/Animator.h +++ b/src/crepe/api/Animator.h @@ -9,7 +9,6 @@ namespace crepe { class AnimatorSystem; class SDLContext; - /** * \brief The Animator component is used to animate sprites by managing the movement * and frame changes within a sprite sheet. @@ -39,8 +38,7 @@ public: Animator(uint32_t id, Sprite & spritesheet, int row, int col, int col_animate); - - ~Animator(); + ~Animator(); // dbg_trace Animator(const Animator &) = delete; Animator(Animator &&) = delete; Animator & operator=(const Animator &) = delete; @@ -71,7 +69,7 @@ private: //! AnimatorSystem adjust the private member parameters of Animator; friend class AnimatorSystem; - //! SDLContext reads the Animator member var's + //! SDLContext reads the Animator member var's friend class SDLContext; }; } // namespace crepe diff --git a/src/crepe/api/Camera.cpp b/src/crepe/api/Camera.cpp index dbbfb32..820a6a8 100644 --- a/src/crepe/api/Camera.cpp +++ b/src/crepe/api/Camera.cpp @@ -3,15 +3,14 @@ #include "util/log.h" -#include "Component.h" -#include "Color.h" #include "Camera.h" +#include "Color.h" +#include "Component.h" using namespace crepe; -Camera::Camera(uint32_t id, const Color & color) - : Component(id), bg_color(color), aspect_width(640), aspect_height(480), - zoom(1), x(0), y(0) { +Camera::Camera(uint32_t id, const Color & bg_color) + : Component(id), bg_color(bg_color) { dbg_trace(); } diff --git a/src/crepe/api/Camera.h b/src/crepe/api/Camera.h index 708a523..ba3a9ef 100644 --- a/src/crepe/api/Camera.h +++ b/src/crepe/api/Camera.h @@ -19,41 +19,37 @@ class Camera : public Component { public: /** - * \brief Constructs a Camera with the specified ID and background color. - * \param id Unique identifier for the camera component. - * \param bg_color Background color for the camera view. - */ + * \brief Constructs a Camera with the specified ID and background color. + * \param id Unique identifier for the camera component. + * \param bg_color Background color for the camera view. + */ Camera(uint32_t id, const Color & bg_color); - - /** - * \brief Destroys the Camera instance. - */ - ~Camera(); + ~Camera(); // dbg_trace only public: - //! \brief Background color of the camera view. + //! Background color of the camera view. Color bg_color; - //! \brief Aspect ratio height for the camera. - double aspect_height; + //! Aspect ratio height for the camera. + double aspect_height = 480; - //! \brief Aspect ratio width for the camera. - double aspect_width; + //! Aspect ratio width for the camera. + double aspect_width = 640; - //! \brief X-coordinate of the camera position. - double x; + //! X-coordinate of the camera position. + double x = 0.0; - //! \brief Y-coordinate of the camera position. - double y; + //! Y-coordinate of the camera position. + double y = 0.0; - //! \brief Zoom level of the camera view. - double zoom; + //! Zoom level of the camera view. + double zoom = 1.0; public: /** - * \brief Gets the maximum number of camera instances allowed. - * \return Maximum instance count as an integer. - */ + * \brief Gets the maximum number of camera instances allowed. + * \return Maximum instance count as an integer. + */ virtual int get_instances_max() const { return 10; } }; } // namespace crepe diff --git a/src/crepe/api/Color.h b/src/crepe/api/Color.h index 4ebe3a3..aa47bf4 100644 --- a/src/crepe/api/Color.h +++ b/src/crepe/api/Color.h @@ -2,8 +2,9 @@ #include -namespace crepe{ +namespace crepe { +// TODO: make Color a struct w/o constructors/destructors class Color { // FIXME: can't these colors be defined as a `static constexpr const Color` @@ -21,6 +22,7 @@ public: static const Color & get_black(); private: + // TODO: why are these private!? uint8_t r; uint8_t g; uint8_t b; diff --git a/src/crepe/api/Sprite.cpp b/src/crepe/api/Sprite.cpp index db96c32..f9cd761 100644 --- a/src/crepe/api/Sprite.cpp +++ b/src/crepe/api/Sprite.cpp @@ -1,11 +1,11 @@ #include -#include "facade/SDLContext.h" #include "../util/log.h" +#include "facade/SDLContext.h" #include "Component.h" -#include "Texture.h" #include "Sprite.h" +#include "Texture.h" using namespace std; using namespace crepe; diff --git a/src/crepe/api/Sprite.h b/src/crepe/api/Sprite.h index 1db32d7..deb3f93 100644 --- a/src/crepe/api/Sprite.h +++ b/src/crepe/api/Sprite.h @@ -4,22 +4,21 @@ #include #include "Color.h" -#include "Texture.h" #include "Component.h" - +#include "Texture.h" namespace crepe { struct Rect { int w = 0; - int h = 0; - int x = 0; - int y = 0; + int h = 0; + int x = 0; + int y = 0; }; struct FlipSettings { - bool flip_x = false; - bool flip_y = false; + bool flip_x = false; + bool flip_y = false; }; class SDLContext; @@ -35,7 +34,6 @@ class AnimatorSystem; class Sprite : public Component { public: - // TODO: Loek comment in github #27 will be looked another time // about shared_ptr Texture /** @@ -53,10 +51,9 @@ public: */ ~Sprite(); - //! Texture used for the sprite const std::shared_ptr sprite_image; - //! Color tint of the sprite + //! Color tint of the sprite Color color; //! Flip settings for the sprite FlipSettings flip; diff --git a/src/crepe/api/Texture.cpp b/src/crepe/api/Texture.cpp index c31f704..5ebd23d 100644 --- a/src/crepe/api/Texture.cpp +++ b/src/crepe/api/Texture.cpp @@ -29,11 +29,11 @@ void Texture::load(unique_ptr res) { this->texture = std::move(ctx.texture_from_path(res->canonical())); } -int Texture::get_width() const{ +int Texture::get_width() const { if (this->texture == nullptr) return 0; return SDLContext::get_instance().get_width(*this); } -int Texture::get_height() const{ +int Texture::get_height() const { if (this->texture == nullptr) return 0; return SDLContext::get_instance().get_width(*this); } diff --git a/src/crepe/api/Texture.h b/src/crepe/api/Texture.h index 9bda5fe..b89bc17 100644 --- a/src/crepe/api/Texture.h +++ b/src/crepe/api/Texture.h @@ -25,51 +25,53 @@ class Animator; class Texture { public: - /** - * \brief Constructs a Texture from a file path. - * \param src Path to the image file to be loaded as a texture. - */ - Texture(const char * src); - - /** - * \brief Constructs a Texture from an Asset resource. - * \param res Unique pointer to an Asset resource containing texture data. - */ - Texture(std::unique_ptr res); - - /** - * \brief Destroys the Texture instance, freeing associated resources. - */ - ~Texture(); - - /** - * \brief Gets the width of the texture. - * \return Width of the texture in pixels. - */ - int get_width() const; - - /** - * \brief Gets the height of the texture. - * \return Height of the texture in pixels. - */ - int get_height() const; + /** + * \brief Constructs a Texture from a file path. + * \param src Path to the image file to be loaded as a texture. + */ + Texture(const char * src); + + /** + * \brief Constructs a Texture from an Asset resource. + * \param res Unique pointer to an Asset resource containing texture data. + */ + Texture(std::unique_ptr res); + + /** + * \brief Destroys the Texture instance, freeing associated resources. + */ + ~Texture(); + // FIXME: this constructor shouldn't be necessary because this class doesn't + // manage memory + + /** + * \brief Gets the width of the texture. + * \return Width of the texture in pixels. + */ + int get_width() const; + + /** + * \brief Gets the height of the texture. + * \return Height of the texture in pixels. + */ + int get_height() const; private: - /** - * \brief Loads the texture from an Asset resource. - * \param res Unique pointer to an Asset resource to load the texture from. - */ - void load(std::unique_ptr res); + /** + * \brief Loads the texture from an Asset resource. + * \param res Unique pointer to an Asset resource to load the texture from. + */ + void load(std::unique_ptr res); private: //! The texture of the class from the library std::unique_ptr> texture; - //! Grants SDLContext access to private members. - friend class SDLContext; + //! Grants SDLContext access to private members. + friend class SDLContext; - //! Grants Animator access to private members. - friend class Animator; + //! Grants Animator access to private members. + friend class Animator; }; } // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 5b9ca71..c4c96e2 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -46,11 +46,11 @@ SDLContext::SDLContext() { << SDL_GetError() << std::endl; return; } - this->game_window = {tmp_window, [](SDL_Window* window) { SDL_DestroyWindow(window); }}; + this->game_window + = {tmp_window, [](SDL_Window * window) { SDL_DestroyWindow(window); }}; - - SDL_Renderer* tmp_renderer = SDL_CreateRenderer(this->game_window.get(), -1, - SDL_RENDERER_ACCELERATED); + SDL_Renderer * tmp_renderer = SDL_CreateRenderer( + this->game_window.get(), -1, SDL_RENDERER_ACCELERATED); if (!tmp_renderer) { // FIXME: throw exception std::cerr << "Renderer could not be created! SDL_Error: " @@ -59,7 +59,9 @@ SDLContext::SDLContext() { return; } - this->game_renderer = {tmp_renderer, [](SDL_Renderer* renderer) { SDL_DestroyRenderer(renderer); }}; + this->game_renderer = {tmp_renderer, [](SDL_Renderer * renderer) { + SDL_DestroyRenderer(renderer); + }}; int img_flags = IMG_INIT_PNG; if (!(IMG_Init(img_flags) & img_flags)) { @@ -150,27 +152,32 @@ void SDLContext::camera(const Camera & cam) { cam.bg_color.g, cam.bg_color.b, cam.bg_color.a); } -const uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } +uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } -std::unique_ptr> SDLContext::texture_from_path(const std::string & path) { +std::unique_ptr> +SDLContext::texture_from_path(const std::string & path) { SDL_Surface * tmp = IMG_Load(path.c_str()); - if (tmp == nullptr) { + if (tmp == nullptr) { throw Exception("surface cannot be load from %s", path.c_str()); } - std::unique_ptr> img_surface; - img_surface = {tmp, [](SDL_Surface * surface) { SDL_FreeSurface(surface); }}; + std::unique_ptr> + img_surface; + img_surface + = {tmp, [](SDL_Surface * surface) { SDL_FreeSurface(surface); }}; SDL_Texture * tmp_texture = SDL_CreateTextureFromSurface( this->game_renderer.get(), img_surface.get()); - if ( tmp_texture == nullptr) { + if (tmp_texture == nullptr) { throw Exception("Texture cannot be load from %s", path.c_str()); } - std::unique_ptr> img_texture; - img_texture = {tmp_texture, [](SDL_Texture * texture) { SDL_DestroyTexture(texture); }}; + std::unique_ptr> + img_texture; + img_texture = {tmp_texture, + [](SDL_Texture * texture) { SDL_DestroyTexture(texture); }}; return img_texture; } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 93166f2..e358c21 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -11,13 +11,15 @@ #include "../api/Transform.h" #include "api/Camera.h" -//FIXME: this needs to be removed +// FIXME: this needs to be removed const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; namespace crepe { -//TODO: Wouter will fix this. cause user cannot this at the moment +// TODO: SDL_Keycode is defined in a header not distributed with crepe, which +// means this typedef is unusable when crepe is packaged. Wouter will fix this +// later. typedef SDL_Keycode CREPE_KEYCODES; class Texture; @@ -34,9 +36,9 @@ class SDLContext { public: /** - * \brief Gets the singleton instance of SDLContext. - * \return Reference to the SDLContext instance. - */ + * \brief Gets the singleton instance of SDLContext. + * \return Reference to the SDLContext instance. + */ static SDLContext & get_instance(); SDLContext(const SDLContext &) = delete; @@ -48,9 +50,9 @@ private: //! will only use handle_events friend class LoopManager; /** - * \brief Handles SDL events such as window close and input. - * \param running Reference to a boolean flag that controls the main loop. - */ + * \brief Handles SDL events such as window close and input. + * \param running Reference to a boolean flag that controls the main loop. + */ void handle_events(bool & running); private: @@ -58,22 +60,22 @@ private: friend class AnimatorSystem; /** - * \brief Gets the current SDL ticks since the program started. - * \return Current ticks in milliseconds as a constant uint64_t. - */ - const uint64_t get_ticks() const; + * \brief Gets the current SDL ticks since the program started. + * \return Current ticks in milliseconds as a constant uint64_t. + */ + uint64_t get_ticks() const; private: /** - * \brief Constructs an SDLContext instance. - * Initializes SDL, creates a window and renderer. - */ + * \brief Constructs an SDLContext instance. + * Initializes SDL, creates a window and renderer. + */ SDLContext(); /** - * \brief Destroys the SDLContext instance. - * Cleans up SDL resources, including the window and renderer. - */ + * \brief Destroys the SDLContext instance. + * Cleans up SDL resources, including the window and renderer. + */ ~SDLContext(); private: @@ -84,23 +86,24 @@ private: friend class Animator; /** - * \brief Loads a texture from a file path. - * \param path Path to the image file. - * \return Pointer to the created SDL_Texture. - */ - std::unique_ptr> texture_from_path(const std::string & path); + * \brief Loads a texture from a file path. + * \param path Path to the image file. + * \return Pointer to the created SDL_Texture. + */ + std::unique_ptr> + texture_from_path(const std::string & path); /** - * \brief Gets the width of a texture. - * \param texture Reference to the Texture object. - * \return Width of the texture as an integer. - */ + * \brief Gets the width of a texture. + * \param texture Reference to the Texture object. + * \return Width of the texture as an integer. + */ int get_width(const Texture &) const; /** - * \brief Gets the height of a texture. - * \param texture Reference to the Texture object. - * \return Height of the texture as an integer. - */ + * \brief Gets the height of a texture. + * \param texture Reference to the Texture object. + * \return Height of the texture as an integer. + */ int get_height(const Texture &) const; private: @@ -108,37 +111,33 @@ private: friend class RenderSystem; /** - * \brief Draws a sprite to the screen using the specified transform and camera. - * \param sprite Reference to the Sprite to draw. - * \param transform Reference to the Transform for positioning. - * \param camera Reference to the Camera for view adjustments. - */ + * \brief Draws a sprite to the screen using the specified transform and camera. + * \param sprite Reference to the Sprite to draw. + * \param transform Reference to the Transform for positioning. + * \param camera Reference to the Camera for view adjustments. + */ void draw(const Sprite & sprite, const Transform & transform, const Camera & camera); - /** - * \brief Clears the screen, preparing for a new frame. - */ + //! Clears the screen, preparing for a new frame. void clear_screen(); - /** - * \brief Presents the rendered frame to the screen. - */ + //! Presents the rendered frame to the screen. void present_screen(); /** - * \brief Sets the current camera for rendering. - * \param camera Reference to the Camera object. - */ + * \brief Sets the current camera for rendering. + * \param camera Reference to the Camera object. + */ void camera(const Camera & camera); private: - //! sdl Window - std::unique_ptr> game_window; + std::unique_ptr> game_window; //! renderer for the crepe engine - std::unique_ptr> game_renderer; + std::unique_ptr> + game_renderer; //! viewport for the camera window SDL_Rect viewport = {0, 0, 640, 480}; diff --git a/src/crepe/system/AnimatorSystem.cpp b/src/crepe/system/AnimatorSystem.cpp index 4ea889a..bf45362 100644 --- a/src/crepe/system/AnimatorSystem.cpp +++ b/src/crepe/system/AnimatorSystem.cpp @@ -3,17 +3,16 @@ #include #include +#include "api/Animator.h" #include "facade/SDLContext.h" #include "util/log.h" -#include "api/Animator.h" -#include "ComponentManager.h" #include "AnimatorSystem.h" +#include "ComponentManager.h" using namespace crepe; AnimatorSystem::AnimatorSystem() { dbg_trace(); } - AnimatorSystem::~AnimatorSystem() { dbg_trace(); } AnimatorSystem & AnimatorSystem::get_instance() { @@ -22,12 +21,13 @@ AnimatorSystem & AnimatorSystem::get_instance() { } void AnimatorSystem::update() { - ComponentManager& mgr = ComponentManager::get_instance(); + ComponentManager & mgr = ComponentManager::get_instance(); - std::vector> animations = mgr.get_components_by_type(); + std::vector> animations + = mgr.get_components_by_type(); uint64_t tick = SDLContext::get_instance().get_ticks(); - for(Animator& a : animations){ + for (Animator & a : animations) { if (a.active) { a.curr_row = (tick / 100) % a.row; a.animator_rect.x = (a.curr_row * a.animator_rect.w) + a.curr_col; @@ -35,4 +35,3 @@ void AnimatorSystem::update() { } } } - diff --git a/src/crepe/system/AnimatorSystem.h b/src/crepe/system/AnimatorSystem.h index c377ce9..969e9d1 100644 --- a/src/crepe/system/AnimatorSystem.h +++ b/src/crepe/system/AnimatorSystem.h @@ -2,9 +2,7 @@ #include "System.h" - - -//TODO: +//TODO: // control if flip works with animation system namespace crepe { @@ -38,21 +36,9 @@ public: void update() override; private: - /** - * \brief Private constructor for the AnimatorSystem. - * - * The constructor is private to enforce the singleton pattern, ensuring that only - * one instance of this system can exist. - */ - AnimatorSystem(); - - /** - * \brief Private destructor for the AnimatorSystem. - * - * The destructor cleans up any resources used by the AnimatorSystem. It is private - * to maintain the singleton pattern and prevent direct deletion. - */ - ~AnimatorSystem(); + // private because singleton + AnimatorSystem(); // dbg_trace + ~AnimatorSystem(); // dbg_trace }; } // namespace crepe diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp index 849d810..10211a3 100644 --- a/src/crepe/system/RenderSystem.cpp +++ b/src/crepe/system/RenderSystem.cpp @@ -20,7 +20,9 @@ RenderSystem & RenderSystem::get_instance() { return instance; } -void RenderSystem::clear_screen() const { SDLContext::get_instance().clear_screen(); } +void RenderSystem::clear_screen() const { + SDLContext::get_instance().clear_screen(); +} void RenderSystem::present_screen() const { SDLContext::get_instance().present_screen(); @@ -45,8 +47,9 @@ void RenderSystem::render_sprites() const { SDLContext & render = SDLContext::get_instance(); for (const Sprite & sprite : sprites) { - auto transforms = mgr.get_components_by_id(sprite.game_object_id); - render.draw(sprite, transforms[0] , *curr_cam); + auto transforms + = mgr.get_components_by_id(sprite.game_object_id); + render.draw(sprite, transforms[0], *curr_cam); } } diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h index ec80a0e..70db21a 100644 --- a/src/crepe/system/RenderSystem.h +++ b/src/crepe/system/RenderSystem.h @@ -4,7 +4,6 @@ #include "System.h" - namespace crepe { /** @@ -18,63 +17,48 @@ namespace crepe { class RenderSystem : public System { public: - /** - * \brief Gets the singleton instance of RenderSystem. - * \return Reference to the RenderSystem instance. - */ - static RenderSystem & get_instance(); + /** + * \brief Gets the singleton instance of RenderSystem. + * \return Reference to the RenderSystem instance. + */ + static RenderSystem & get_instance(); - /** - * \brief Updates the RenderSystem for the current frame. - * This method is called to perform all rendering operations for the current game frame. - */ - void update() override; + /** + * \brief Updates the RenderSystem for the current frame. + * This method is called to perform all rendering operations for the current game frame. + */ + void update() override; private: - /** - * \brief Constructs a RenderSystem instance. - * Private constructor to enforce singleton pattern. - */ - RenderSystem(); - - /** - * \brief Destroys the RenderSystem instance. - */ - ~RenderSystem(); + // Private constructor to enforce singleton pattern. + RenderSystem(); + ~RenderSystem(); - /** - * \brief Clears the screen in preparation for rendering. - */ - void clear_screen() const; + //! Clears the screen in preparation for rendering. + void clear_screen() const; - /** - * \brief Presents the rendered frame to the display. - */ - void present_screen() const; + //! Presents the rendered frame to the display. + void present_screen() const; - /** - * \brief Updates the active camera used for rendering. - */ - void update_camera(); + //! Updates the active camera used for rendering. + void update_camera(); - /** - * \brief Renders all active sprites to the screen. - */ - void render_sprites() const; + //! Renders all active sprites to the screen. + void render_sprites() const; - /** - * \todo Include color handling for sprites. - * \todo Implement particle emitter rendering with sprites. - * \todo Add text rendering using SDL_ttf for text components. - * \todo Implement a text component and a button component. - * \todo Ensure each sprite is checked for active status before rendering. - * \todo Sort all layers by order before rendering. - * \todo Consider adding text input functionality. - */ + /** + * \todo Include color handling for sprites. + * \todo Implement particle emitter rendering with sprites. + * \todo Add text rendering using SDL_ttf for text components. + * \todo Implement a text component and a button component. + * \todo Ensure each sprite is checked for active status before rendering. + * \todo Sort all layers by order before rendering. + * \todo Consider adding text input functionality. + */ private: //! Pointer to the current active camera for rendering - // \todo needs a better solution - Camera * curr_cam; + Camera * curr_cam = nullptr; + // TODO: needs a better solution }; } // namespace crepe -- cgit v1.2.3 From acfa153789d9b55f3453a1d32f249da04ad6b5c1 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Sat, 9 Nov 2024 13:21:34 +0100 Subject: changed comment --- src/crepe/api/LoopTimer.h | 2 +- src/crepe/facade/SDLContext.cpp | 203 ++++++++++++++++++++++++---------------- src/crepe/facade/SDLContext.h | 127 +++++++++++++++++++++++-- 3 files changed, 239 insertions(+), 93 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h index 584a408..8d95921 100644 --- a/src/crepe/api/LoopTimer.h +++ b/src/crepe/api/LoopTimer.h @@ -78,4 +78,4 @@ double elapsed_fixed_time = 0; ///< Total elapsed time for fixed updates uint64_t last_frame_time = 0; ///< Time of the last frame }; -} // namespace crepe::api +} // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 8da93e9..17ced0c 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -1,16 +1,22 @@ #include #include +#include #include #include #include #include #include +#include #include +#include +#include +#include #include "../api/Sprite.h" #include "../api/Texture.h" #include "../api/Transform.h" #include "../util/log.h" +#include "Exception.h" #include "SDLContext.h" @@ -21,34 +27,6 @@ SDLContext & SDLContext::get_instance() { return instance; } -void SDLContext::handle_events(bool & running) { - SDL_Event event; - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - running = false; - } - } -} - -SDLContext::~SDLContext() { - dbg_trace(); - - if (this->game_renderer != nullptr) - SDL_DestroyRenderer(this->game_renderer); - - if (this->game_window != nullptr) { - SDL_DestroyWindow(this->game_window); - } - - // TODO: how are we going to ensure that these are called from the same - // thread that SDL_Init() was called on? This has caused problems for me - // before. - IMG_Quit(); - SDL_Quit(); -} - -void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer); } - SDLContext::SDLContext() { dbg_trace(); // FIXME: read window defaults from config manager @@ -59,26 +37,32 @@ SDLContext::SDLContext() { << std::endl; return; } - - this->game_window = SDL_CreateWindow( + SDL_Window * tmp_window = SDL_CreateWindow( "Crepe Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, - 1920, 1080, SDL_WINDOW_SHOWN); - if (!this->game_window) { + this->viewport.w, this->viewport.h, 0); + if (!tmp_window) { // FIXME: throw exception std::cerr << "Window could not be created! SDL_Error: " << SDL_GetError() << std::endl; + return; } + this->game_window + = {tmp_window, [](SDL_Window * window) { SDL_DestroyWindow(window); }}; - this->game_renderer - = SDL_CreateRenderer(this->game_window, -1, SDL_RENDERER_ACCELERATED); - if (!this->game_renderer) { + SDL_Renderer * tmp_renderer = SDL_CreateRenderer( + this->game_window.get(), -1, SDL_RENDERER_ACCELERATED); + if (!tmp_renderer) { // FIXME: throw exception std::cerr << "Renderer could not be created! SDL_Error: " << SDL_GetError() << std::endl; - SDL_DestroyWindow(this->game_window); + SDL_DestroyWindow(this->game_window.get()); return; } + this->game_renderer = {tmp_renderer, [](SDL_Renderer * renderer) { + SDL_DestroyRenderer(renderer); + }}; + int img_flags = IMG_INIT_PNG; if (!(IMG_Init(img_flags) & img_flags)) { // FIXME: throw exception @@ -87,71 +71,126 @@ SDLContext::SDLContext() { } } -void SDLContext::present_screen() { SDL_RenderPresent(this->game_renderer); } +SDLContext::~SDLContext() { + dbg_trace(); + + this->game_renderer.reset(); + this->game_window.reset(); + + // TODO: how are we going to ensure that these are called from the same + // thread that SDL_Init() was called on? This has caused problems for me + // before. + IMG_Quit(); + SDL_Quit(); +} + +void SDLContext::handle_events(bool & running) { + //TODO: wouter i need events + /* + SDL_Event event; + SDL_PollEvent(&event); + switch (event.type) { + case SDL_QUIT: + running = false; + break; + case SDL_KEYDOWN: + triggerEvent(KeyPressedEvent(getCustomKey(event.key.keysym.sym))); + break; + case SDL_MOUSEBUTTONDOWN: + int x, y; + SDL_GetMouseState(&x, &y); + triggerEvent(MousePressedEvent(x, y)); + break; + } + */ +} + +void SDLContext::clear_screen() { SDL_RenderClear(this->game_renderer.get()); } +void SDLContext::present_screen() { + SDL_RenderPresent(this->game_renderer.get()); +} -void SDLContext::draw(const Sprite & sprite, const Transform & transform) { +void SDLContext::draw(const Sprite & sprite, const Transform & transform, + const Camera & cam) { - static SDL_RendererFlip render_flip + SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * sprite.flip.flip_y)); - int w, h; - SDL_QueryTexture(sprite.sprite_image->texture, NULL, NULL, &w, &h); - // needs maybe camera for position + double adjusted_x = (transform.position.x - cam.x) * cam.zoom; + double adjusted_y = (transform.position.y - cam.y) * cam.zoom; + double adjusted_w = sprite.sprite_rect.w * transform.scale * cam.zoom; + double adjusted_h = sprite.sprite_rect.h * transform.scale * cam.zoom; + + SDL_Rect srcrect = { + .x = sprite.sprite_rect.x, + .y = sprite.sprite_rect.y, + .w = sprite.sprite_rect.w, + .h = sprite.sprite_rect.h, + }; + SDL_Rect dstrect = { - .x = static_cast(transform.position.x), - .y = static_cast(transform.position.y), - .w = static_cast(w * transform.scale), - .h = static_cast(h * transform.scale), + .x = static_cast(adjusted_x), + .y = static_cast(adjusted_y), + .w = static_cast(adjusted_w), + .h = static_cast(adjusted_h), }; - double degrees = transform.rotation * 180 / M_PI; - SDL_RenderCopyEx(this->game_renderer, sprite.sprite_image->texture, NULL, - &dstrect, degrees, NULL, render_flip); + SDL_RenderCopyEx(this->game_renderer.get(), + sprite.sprite_image->texture.get(), &srcrect, + + &dstrect, transform.rotation, NULL, render_flip); } -/* -SDL_Texture * SDLContext::setTextureFromPath(const char * path, SDL_Rect & clip, - const int row, const int col) { - dbg_trace(); +void SDLContext::camera(const Camera & cam) { + this->viewport.w = static_cast(cam.aspect_width); + this->viewport.h = static_cast(cam.aspect_height); + this->viewport.x = static_cast(cam.x) - (SCREEN_WIDTH / 2); + this->viewport.y = static_cast(cam.y) - (SCREEN_HEIGHT / 2); - SDL_Surface * tmp = IMG_Load(path); - if (!tmp) { - std::cerr << "Error surface " << IMG_GetError << std::endl; - } + SDL_SetRenderDrawColor(this->game_renderer.get(), cam.bg_color.r, + cam.bg_color.g, cam.bg_color.b, cam.bg_color.a); +} - clip. - w = tmp->w / col; - clip.h = tmp->h / row; +uint64_t SDLContext::get_ticks() const { return SDL_GetTicks64(); } - SDL_Texture * CreatedTexture - = SDL_CreateTextureFromSurface(this->game_renderer, tmp); +std::unique_ptr> +SDLContext::texture_from_path(const std::string & path) { - if (!CreatedTexture) { - std::cerr << "Error could not create texture " << IMG_GetError - << std::endl; + SDL_Surface * tmp = IMG_Load(path.c_str()); + if (tmp == nullptr) { + throw Exception("surface cannot be load from %s", path.c_str()); } - SDL_FreeSurface(tmp); - return CreatedTexture; -} -*/ + std::unique_ptr> + img_surface; + img_surface + = {tmp, [](SDL_Surface * surface) { SDL_FreeSurface(surface); }}; -SDL_Texture * SDLContext::texture_from_path(const char * path) { - dbg_trace(); + SDL_Texture * tmp_texture = SDL_CreateTextureFromSurface( + this->game_renderer.get(), img_surface.get()); - SDL_Surface * tmp = IMG_Load(path); - if (!tmp) { - std::cerr << "Error surface " << IMG_GetError << std::endl; + if (tmp_texture == nullptr) { + throw Exception("Texture cannot be load from %s", path.c_str()); } - SDL_Texture * created_texture - = SDL_CreateTextureFromSurface(this->game_renderer, tmp); - if (!created_texture) { - std::cerr << "Error could not create texture " << IMG_GetError - << std::endl; - } - SDL_FreeSurface(tmp); + std::unique_ptr> + img_texture; + img_texture = {tmp_texture, + [](SDL_Texture * texture) { SDL_DestroyTexture(texture); }}; - return created_texture; + return img_texture; +} +int SDLContext::get_width(const Texture & ctx) const { + int w; + SDL_QueryTexture(ctx.texture.get(), NULL, NULL, &w, NULL); + return w; +} +int SDLContext::get_height(const Texture & ctx) const { + int h; + SDL_QueryTexture(ctx.texture.get(), NULL, NULL, NULL, &h); + return h; +} +void SDLContext::delay(int ms) const{ + SDL_Delay(ms); } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index f1ba8a6..6c57ef9 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -1,48 +1,155 @@ #pragma once +#include #include #include +#include +#include +#include #include "../api/Sprite.h" #include "../api/Transform.h" -#include "../system/RenderSystem.h" +#include "api/Camera.h" + +// FIXME: this needs to be removed +const int SCREEN_WIDTH = 640; +const int SCREEN_HEIGHT = 480; namespace crepe { +// TODO: SDL_Keycode is defined in a header not distributed with crepe, which +// means this typedef is unusable when crepe is packaged. Wouter will fix this +// later. +typedef SDL_Keycode CREPE_KEYCODES; + class Texture; +class LoopManager; + +/** + * \class SDLContext + * \brief Facade for the SDL library + * + * SDLContext is a singleton that handles the SDL window and renderer, provides methods + * for event handling, and rendering to the screen. It is never used directly by the user + */ class SDLContext { public: - // singleton + /** + * \brief Gets the singleton instance of SDLContext. + * \return Reference to the SDLContext instance. + */ static SDLContext & get_instance(); + SDLContext(const SDLContext &) = delete; SDLContext(SDLContext &&) = delete; SDLContext & operator=(const SDLContext &) = delete; SDLContext & operator=(SDLContext &&) = delete; - //TODO decide events wouter? - private: + //! will only use handle_events + friend class LoopManager; + /** + * \brief Handles SDL events such as window close and input. + * \param running Reference to a boolean flag that controls the main loop. + */ void handle_events(bool & running); private: + //! Will only use get_ticks + friend class AnimatorSystem; + friend class LoopTimer; + /** + * \brief Gets the current SDL ticks since the program started. + * \return Current ticks in milliseconds as a constant uint64_t. + */ + uint64_t get_ticks() const; + /** + * \brief Pauses the execution for a specified duration. + * + * This function uses SDL's delay function to halt the program execution + * for a given number of milliseconds, allowing for frame rate control + * or other timing-related functionality. + * + * \param ms Duration of the delay in milliseconds. + */ + void delay(int ms) const; +private: + /** + * \brief Constructs an SDLContext instance. + * Initializes SDL, creates a window and renderer. + */ SDLContext(); - virtual ~SDLContext(); + + /** + * \brief Destroys the SDLContext instance. + * Cleans up SDL resources, including the window and renderer. + */ + ~SDLContext(); private: + //! Will use the funtions: texture_from_path, get_width,get_height. friend class Texture; - SDL_Texture * texture_from_path(const char *); - //SDL_Texture* setTextureFromPath(const char*, SDL_Rect& clip, const int row, const int col); + + //! Will use the funtions: texture_from_path, get_width,get_height. + friend class Animator; + + /** + * \brief Loads a texture from a file path. + * \param path Path to the image file. + * \return Pointer to the created SDL_Texture. + */ + std::unique_ptr> + texture_from_path(const std::string & path); + /** + * \brief Gets the width of a texture. + * \param texture Reference to the Texture object. + * \return Width of the texture as an integer. + */ + int get_width(const Texture &) const; + + /** + * \brief Gets the height of a texture. + * \param texture Reference to the Texture object. + * \return Height of the texture as an integer. + */ + int get_height(const Texture &) const; private: + //! Will use draw,clear_screen, present_screen, camera. friend class RenderSystem; - void draw(const Sprite &, const Transform &); + + /** + * \brief Draws a sprite to the screen using the specified transform and camera. + * \param sprite Reference to the Sprite to draw. + * \param transform Reference to the Transform for positioning. + * \param camera Reference to the Camera for view adjustments. + */ + void draw(const Sprite & sprite, const Transform & transform, + const Camera & camera); + + //! Clears the screen, preparing for a new frame. void clear_screen(); + + //! Presents the rendered frame to the screen. void present_screen(); + /** + * \brief Sets the current camera for rendering. + * \param camera Reference to the Camera object. + */ + void camera(const Camera & camera); + private: - SDL_Window * game_window = nullptr; - SDL_Renderer * game_renderer = nullptr; + //! sdl Window + std::unique_ptr> game_window; + + //! renderer for the crepe engine + std::unique_ptr> + game_renderer; + + //! viewport for the camera window + SDL_Rect viewport = {0, 0, 640, 480}; }; } // namespace crepe -- cgit v1.2.3 From e7dc31dad155b7b623374d3bb0ffbb8a8f579d2a Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Mon, 11 Nov 2024 18:18:54 +0100 Subject: ran make format --- mwe/events/include/event.h | 2 +- src/crepe/api/LoopManager.cpp | 72 +++++++++++++++---------------- src/crepe/api/LoopManager.h | 9 ++-- src/crepe/api/LoopTimer.cpp | 68 +++++++++++++++-------------- src/crepe/api/LoopTimer.h | 94 ++++++++++++++++++++--------------------- src/crepe/facade/SDLContext.cpp | 4 +- src/crepe/facade/SDLContext.h | 1 + src/example/gameloop.cpp | 2 +- src/makefile | 6 +-- 9 files changed, 128 insertions(+), 130 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/mwe/events/include/event.h b/mwe/events/include/event.h index 16c75bf..3e70201 100644 --- a/mwe/events/include/event.h +++ b/mwe/events/include/event.h @@ -152,7 +152,7 @@ private: }; class ShutDownEvent : public Event { public: - ShutDownEvent() : Event("ShutDownEvent") {}; + ShutDownEvent() : Event("ShutDownEvent"){}; REGISTER_EVENT_TYPE(ShutDownEvent) diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp index d4345d0..b4382a6 100644 --- a/src/crepe/api/LoopManager.cpp +++ b/src/crepe/api/LoopManager.cpp @@ -1,66 +1,62 @@ +#include "../facade/SDLContext.h" #include "../system/RenderSystem.h" #include "../system/ScriptSystem.h" -#include "../facade/SDLContext.h" #include "LoopManager.h" #include "LoopTimer.h" using namespace crepe; -LoopManager::LoopManager(const RenderSystem& renderSystem, const SDLContext& sdlContext, - const LoopTimer& loopTimer, const ScriptSystem& scriptSystem, - const SoundSystem& soundSystem, const ParticleSystem& particleSystem, - const PhysicsSystem& physicsSystem, const AnimatorSystem& animatorSystem, - const CollisionSystem& collisionSystem) { - // Initialize systems if needed - // Example: this->renderSystem = renderSystem; +LoopManager::LoopManager( + const RenderSystem & renderSystem, const SDLContext & sdlContext, + const LoopTimer & loopTimer, const ScriptSystem & scriptSystem, + const SoundSystem & soundSystem, const ParticleSystem & particleSystem, + const PhysicsSystem & physicsSystem, const AnimatorSystem & animatorSystem, + const CollisionSystem & collisionSystem) { + // Initialize systems if needed + // Example: this->renderSystem = renderSystem; } void LoopManager::process_input() { - SDLContext::get_instance().handle_events(this->game_running); + SDLContext::get_instance().handle_events(this->game_running); } -void LoopManager::start(){ - this->setup(); - this->loop(); +void LoopManager::start() { + this->setup(); + this->loop(); } void LoopManager::set_running(bool running) { this->game_running = running; } -void LoopManager::fixed_update() { -} +void LoopManager::fixed_update() {} void LoopManager::loop() { - LoopTimer & timer = LoopTimer::get_instance(); - timer.start(); + LoopTimer & timer = LoopTimer::get_instance(); + timer.start(); - while (game_running) { - timer.update(); + while (game_running) { + timer.update(); - while (timer.get_lag() >= timer.get_fixed_delta_time()) { - this->process_input(); - this->fixed_update(); - timer.advance_fixed_update(); - } + while (timer.get_lag() >= timer.get_fixed_delta_time()) { + this->process_input(); + this->fixed_update(); + timer.advance_fixed_update(); + } - this->update(); - this->render(); + this->update(); + this->render(); - timer.enforce_frame_rate(); - } + timer.enforce_frame_rate(); + } } - void LoopManager::setup() { - this->game_running = true; - LoopTimer::get_instance().start(); - LoopTimer::get_instance().set_fps(60); + this->game_running = true; + LoopTimer::get_instance().start(); + LoopTimer::get_instance().set_fps(60); } void LoopManager::render() { - if (this->game_running) { - RenderSystem::get_instance().update(); - } -} - -void LoopManager::update() { - LoopTimer & timer = LoopTimer::get_instance(); + if (this->game_running) { + RenderSystem::get_instance().update(); + } } +void LoopManager::update() { LoopTimer & timer = LoopTimer::get_instance(); } diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h index 79abae6..5d8c91b 100644 --- a/src/crepe/api/LoopManager.h +++ b/src/crepe/api/LoopManager.h @@ -1,6 +1,5 @@ #pragma once - namespace crepe { class RenderSystem; @@ -16,9 +15,11 @@ class CollisionSystem; class LoopManager { public: void start(); - LoopManager(const RenderSystem&, const SDLContext&, const LoopTimer&, const ScriptSystem&, - const SoundSystem&, const ParticleSystem&, const PhysicsSystem&, const AnimatorSystem&, - const CollisionSystem&); + LoopManager(const RenderSystem &, const SDLContext &, const LoopTimer &, + const ScriptSystem &, const SoundSystem &, + const ParticleSystem &, const PhysicsSystem &, + const AnimatorSystem &, const CollisionSystem &); + private: /** * \brief Setup function for one-time initialization. diff --git a/src/crepe/api/LoopTimer.cpp b/src/crepe/api/LoopTimer.cpp index dd4d7e5..f68d75a 100644 --- a/src/crepe/api/LoopTimer.cpp +++ b/src/crepe/api/LoopTimer.cpp @@ -1,45 +1,48 @@ +#include "LoopTimer.h" #include "../facade/SDLContext.h" #include "../util/log.h" -#include "LoopTimer.h" using namespace crepe; -LoopTimer::LoopTimer() { - dbg_trace(); -} +LoopTimer::LoopTimer() { dbg_trace(); } -LoopTimer& LoopTimer::get_instance() { - static LoopTimer instance; - return instance; +LoopTimer & LoopTimer::get_instance() { + static LoopTimer instance; + return instance; } void LoopTimer::start() { - this->last_frame_time = SDLContext::get_instance().get_ticks(); - this->elapsed_time = 0; - this->elapsed_fixed_time = 0; - this->delta_time = 0; + this->last_frame_time = SDLContext::get_instance().get_ticks(); + this->elapsed_time = 0; + this->elapsed_fixed_time = 0; + this->delta_time = 0; } void LoopTimer::update() { - uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); - this->delta_time = (current_frame_time - last_frame_time); + uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); + this->delta_time = (current_frame_time - last_frame_time); - if (this->delta_time > this->maximum_delta_time) { - this->delta_time = this->maximum_delta_time; - } - this->delta_time *= this->game_scale; - this->elapsed_time += this->delta_time; - this->last_frame_time = current_frame_time; + if (this->delta_time > this->maximum_delta_time) { + this->delta_time = this->maximum_delta_time; + } + this->delta_time *= this->game_scale; + this->elapsed_time += this->delta_time; + this->last_frame_time = current_frame_time; } double LoopTimer::get_delta_time() const { return this->delta_time; } double LoopTimer::get_current_time() const { return this->elapsed_time; } -void LoopTimer::advance_fixed_update() { this->elapsed_fixed_time += this->fixed_delta_time; } -double LoopTimer::get_fixed_delta_time() const { return this->fixed_delta_time; } +void LoopTimer::advance_fixed_update() { + this->elapsed_fixed_time += this->fixed_delta_time; +} +double LoopTimer::get_fixed_delta_time() const { + return this->fixed_delta_time; +} void LoopTimer::set_fps(int fps) { - this->fps = fps; - this->frame_target_time = 1000.0 / this->fps; + this->fps = fps; + //! use fps to calculate frame_target_time in ms + this->frame_target_time = 1000.0 / this->fps; } int LoopTimer::get_fps() const { return this->fps; } @@ -47,15 +50,18 @@ void LoopTimer::set_game_scale(double value) { this->game_scale = value; } double LoopTimer::get_game_scale() const { return this->game_scale; } void LoopTimer::enforce_frame_rate() { - uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); - double frame_duration = (current_frame_time - this->last_frame_time); + uint64_t current_frame_time = SDLContext::get_instance().get_ticks(); + double frame_duration = (current_frame_time - this->last_frame_time); - if (frame_duration < this->frame_target_time) { - uint32_t delay_time = static_cast(this->frame_target_time - frame_duration); - SDLContext::get_instance().delay(delay_time); - } + if (frame_duration < this->frame_target_time) { + uint32_t delay_time + = static_cast(this->frame_target_time - frame_duration); + SDLContext::get_instance().delay(delay_time); + } - this->last_frame_time = current_frame_time; + this->last_frame_time = current_frame_time; } -double LoopTimer::get_lag() const { return this->elapsed_time - this->elapsed_fixed_time; } +double LoopTimer::get_lag() const { + return this->elapsed_time - this->elapsed_fixed_time; +} diff --git a/src/crepe/api/LoopTimer.h b/src/crepe/api/LoopTimer.h index 5f9b6a7..5309d2f 100644 --- a/src/crepe/api/LoopTimer.h +++ b/src/crepe/api/LoopTimer.h @@ -6,21 +6,21 @@ namespace crepe { class LoopTimer { public: - /** + /** * \brief Get the singleton instance of LoopTimer. * * \return A reference to the LoopTimer instance. */ - static LoopTimer& get_instance(); + static LoopTimer & get_instance(); - /** + /** * \brief Get the current delta time for the current frame. * * \return Delta time in milliseconds since the last frame. */ - double get_delta_time() const; + double get_delta_time() const; - /** + /** * \brief Get the current game time. * * \note The current game time may vary from real-world elapsed time. @@ -28,55 +28,55 @@ public: * * \return Elapsed game time in milliseconds. */ - double get_current_time() const; + double get_current_time() const; - /** + /** * \brief Set the target frames per second (FPS). * * \param fps The desired frames rendered per second. */ - void set_fps(int fps); + void set_fps(int fps); - /** + /** * \brief Get the current frames per second (FPS). * * \return Current FPS. */ - int get_fps() const; + int get_fps() const; - /** + /** * \brief Get the current game scale. * * \return The current game scale, where 0 = paused, 1 = normal speed, and values > 1 speed up the game. */ - double get_game_scale() const; + double get_game_scale() const; - /** + /** * \brief Set the game scale. * * \param game_scale The desired game scale (0 = pause, 1 = normal speed, > 1 = speed up). */ - void set_game_scale(double game_scale); + void set_game_scale(double game_scale); private: - friend class LoopManager; + friend class LoopManager; - /** + /** * \brief Start the loop timer. * * Initializes the timer to begin tracking frame times. */ - void start(); + void start(); - /** + /** * \brief Enforce the frame rate limit. * * Ensures that the game loop does not exceed the target FPS by delaying * frame updates as necessary. */ - void enforce_frame_rate(); + void enforce_frame_rate(); - /** + /** * \brief Get the fixed delta time for consistent updates. * * Fixed delta time is used for operations that require uniform time steps, @@ -84,9 +84,9 @@ private: * * \return Fixed delta time in milliseconds. */ - double get_fixed_delta_time() const; + double get_fixed_delta_time() const; - /** + /** * \brief Get the accumulated lag in the game loop. * * Lag represents the difference between the target frame time and the @@ -94,51 +94,51 @@ private: * * \return Accumulated lag in milliseconds. */ - double get_lag() const; + double get_lag() const; - /** + /** * \brief Construct a new LoopTimer object. * * Private constructor for singleton pattern to restrict instantiation * outside the class. */ - LoopTimer(); + LoopTimer(); - /** + /** * \brief Update the timer to the current frame. * * Calculates and updates the delta time for the current frame and adds it to * the cumulative game time. */ - void update(); + void update(); - /** + /** * \brief Advance the game loop by a fixed update interval. * * This method progresses the game state by a consistent, fixed time step, * allowing for stable updates independent of frame rate fluctuations. */ - void advance_fixed_update(); + void advance_fixed_update(); private: - //! Current frames per second - int fps = 50; - //! Current game scale - double game_scale = 1; - //! Maximum delta time in milliseconds to avoid large jumps - double maximum_delta_time = 250; - //! Delta time for the current frame in milliseconds - double delta_time = 0; - //! Target time per frame in milliseconds - double frame_target_time = 1000.0 / fps; - //! Fixed delta time for fixed updates in milliseconds - double fixed_delta_time = 20; - //! Total elapsed game time in milliseconds - double elapsed_time = 0; - //! Total elapsed time for fixed updates in milliseconds - double elapsed_fixed_time = 0; - //! Time of the last frame in milliseconds - uint64_t last_frame_time = 0; + //! Current frames per second + int fps = 50; + //! Current game scale + double game_scale = 1; + //! Maximum delta time in milliseconds to avoid large jumps + double maximum_delta_time = 250; + //! Delta time for the current frame in milliseconds + double delta_time = 0; + //! Target time per frame in milliseconds + double frame_target_time = 1000.0 / fps; + //! Fixed delta time for fixed updates in milliseconds + double fixed_delta_time = 20; + //! Total elapsed game time in milliseconds + double elapsed_time = 0; + //! Total elapsed time for fixed updates in milliseconds + double elapsed_fixed_time = 0; + //! Time of the last frame in milliseconds + uint64_t last_frame_time = 0; }; } // namespace crepe diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 17ced0c..39d0d4d 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -191,6 +191,4 @@ int SDLContext::get_height(const Texture & ctx) const { SDL_QueryTexture(ctx.texture.get(), NULL, NULL, NULL, &h); return h; } -void SDLContext::delay(int ms) const{ - SDL_Delay(ms); -} +void SDLContext::delay(int ms) const { SDL_Delay(ms); } diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 6c57ef9..90147e0 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -74,6 +74,7 @@ private: * \param ms Duration of the delay in milliseconds. */ void delay(int ms) const; + private: /** * \brief Constructs an SDLContext instance. diff --git a/src/example/gameloop.cpp b/src/example/gameloop.cpp index 6cd0301..a676f20 100644 --- a/src/example/gameloop.cpp +++ b/src/example/gameloop.cpp @@ -1,6 +1,6 @@ #include "crepe/api/LoopManager.h" using namespace crepe; -int main(){ +int main() { LoopManager gameloop; gameloop.start(); return 1; diff --git a/src/makefile b/src/makefile index ce5a29f..a2c2961 100644 --- a/src/makefile +++ b/src/makefile @@ -94,11 +94,7 @@ LOEK += example/script.cpp LOEK += test/audio.cpp LOEK += test/dummy.cpp JARO += test/PhysicsTest.cpp -WOUTER += crepe/api/LoopManager.h -WOUTER += crepe/api/LoopManager.cpp -WOUTER += crepe/api/LoopTimer.h -WOUTER += crepe/api/LoopTimer.cpp -FMT := $(WOUTER) #<<< CHANGE THIS TO YOUR NAME FOR STEP 2 +FMT := $(JARO) #<<< CHANGE THIS TO YOUR NAME FOR STEP 2 format: FORCE clang-tidy -p build/compile_commands.json --fix-errors $(FMT) -- cgit v1.2.3 From 59c7588c6162a0be7dac13610e0b854f70b6d8b9 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Mon, 11 Nov 2024 19:26:42 +0100 Subject: Adjusted rendering to make it work with newer system --- .gitignore | 2 +- src/crepe/facade/SDLContext.cpp | 2 +- src/example/rendering.cpp | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/.gitignore b/.gitignore index 180afb8..8bfb819 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,4 @@ compile_commands.json CTestTestfile.cmake _deps CMakeUserPresets.json - +compile.sh diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index c4c96e2..e87a2c5 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -159,7 +159,7 @@ SDLContext::texture_from_path(const std::string & path) { SDL_Surface * tmp = IMG_Load(path.c_str()); if (tmp == nullptr) { - throw Exception("surface cannot be load from %s", path.c_str()); + tmp = IMG_Load("../asset/texture/ERROR.png"); } std::unique_ptr> diff --git a/src/example/rendering.cpp b/src/example/rendering.cpp index d554a8a..e02f6a3 100644 --- a/src/example/rendering.cpp +++ b/src/example/rendering.cpp @@ -1,3 +1,4 @@ +#include "api/Camera.h" #include #include #include @@ -23,26 +24,26 @@ int main() { auto obj1 = GameObject(1, "name", "tag", Vector2{500, 0}, 1, 0.1); auto obj2 = GameObject(2, "name", "tag", Vector2{800, 0}, 1, 0.1); - auto & mgr = AssetManager::get_instance(); // Normal adding components { Color color(0, 0, 0, 0); obj.add_component( make_shared("../asset/texture/img.png"), color, - FlipSettings{true, true}); + FlipSettings{false, false}); + obj.add_component(Color::get_red()); } - { Color color(0, 0, 0, 0); - auto img = mgr.cache("../asset/texture/second.png"); - obj1.add_component(img, color, FlipSettings{true, true}); + obj1.add_component(make_shared("../asset/texture/second.png"), color, FlipSettings{true, true}); } + /* { Color color(0, 0, 0, 0); auto img = mgr.cache("../asset/texture/second.png"); obj2.add_component(img, color, FlipSettings{true, true}); } + */ auto & sys = crepe::RenderSystem::get_instance(); auto start = std::chrono::steady_clock::now(); -- cgit v1.2.3 From be1e97bc7a494963ab1567492fafcda99e36f683 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 13 Nov 2024 19:52:11 +0100 Subject: `make format` --- src/crepe/Particle.cpp | 4 ++-- src/crepe/Particle.h | 4 ++-- src/crepe/api/AssetManager.h | 3 ++- src/crepe/api/ParticleEmitter.cpp | 6 ++++-- src/crepe/facade/SDLContext.cpp | 2 +- src/crepe/system/ParticleSystem.h | 2 +- src/example/rendering.cpp | 4 +++- 7 files changed, 15 insertions(+), 10 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/Particle.cpp b/src/crepe/Particle.cpp index 1c3c138..582edf4 100644 --- a/src/crepe/Particle.cpp +++ b/src/crepe/Particle.cpp @@ -2,8 +2,8 @@ using namespace crepe; -void Particle::reset(uint32_t lifespan, const Vector2& position,const Vector2& velocity, - double angle) { +void Particle::reset(uint32_t lifespan, const Vector2 & position, + const Vector2 & velocity, double angle) { // Initialize the particle state this->time_in_life = 0; this->lifespan = lifespan; diff --git a/src/crepe/Particle.h b/src/crepe/Particle.h index 8782382..3eaebc3 100644 --- a/src/crepe/Particle.h +++ b/src/crepe/Particle.h @@ -43,8 +43,8 @@ public: * \param velocity The initial velocity of the particle. * \param angle The angle of the particle's trajectory or orientation. */ - void reset(uint32_t lifespan, const Vector2& position,const Vector2& velocity, - double angle); + void reset(uint32_t lifespan, const Vector2 & position, + const Vector2 & velocity, double angle); /** * \brief Updates the particle's state. * diff --git a/src/crepe/api/AssetManager.h b/src/crepe/api/AssetManager.h index dbfaef3..86a9902 100644 --- a/src/crepe/api/AssetManager.h +++ b/src/crepe/api/AssetManager.h @@ -56,7 +56,8 @@ public: * cache. */ template - std::shared_ptr cache(const std::string & file_path, bool reload = false); + std::shared_ptr cache(const std::string & file_path, + bool reload = false); }; } // namespace crepe diff --git a/src/crepe/api/ParticleEmitter.cpp b/src/crepe/api/ParticleEmitter.cpp index 43d2e69..35f960d 100644 --- a/src/crepe/api/ParticleEmitter.cpp +++ b/src/crepe/api/ParticleEmitter.cpp @@ -2,8 +2,10 @@ using namespace crepe; -ParticleEmitter::ParticleEmitter(game_object_id_t game_object_id, const Data & data) - : Component(game_object_id), data(data) { +ParticleEmitter::ParticleEmitter(game_object_id_t game_object_id, + const Data & data) + : Component(game_object_id), + data(data) { for (size_t i = 0; i < this->data.max_particles; i++) { this->data.particles.emplace_back(); } diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index 46230b4..236bf8c 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -159,7 +159,7 @@ SDLContext::texture_from_path(const std::string & path) { SDL_Surface * tmp = IMG_Load(path.c_str()); if (tmp == nullptr) { - tmp = IMG_Load("../asset/texture/ERROR.png"); + tmp = IMG_Load("../asset/texture/ERROR.png"); } std::unique_ptr> diff --git a/src/crepe/system/ParticleSystem.h b/src/crepe/system/ParticleSystem.h index 664394e..d7ca148 100644 --- a/src/crepe/system/ParticleSystem.h +++ b/src/crepe/system/ParticleSystem.h @@ -10,7 +10,7 @@ class Transform; /** * \brief ParticleSystem class responsible for managing particle emission, updates, and bounds checking. */ -class ParticleSystem : public System{ +class ParticleSystem : public System { public: /** * \brief Updates all particle emitters by emitting particles, updating particle states, and checking bounds. diff --git a/src/example/rendering.cpp b/src/example/rendering.cpp index e02f6a3..827ad07 100644 --- a/src/example/rendering.cpp +++ b/src/example/rendering.cpp @@ -34,7 +34,9 @@ int main() { } { Color color(0, 0, 0, 0); - obj1.add_component(make_shared("../asset/texture/second.png"), color, FlipSettings{true, true}); + obj1.add_component( + make_shared("../asset/texture/second.png"), color, + FlipSettings{true, true}); } /* -- cgit v1.2.3