diff options
author | heavydemon21 <nielsstunnebrink1@gmail.com> | 2024-12-02 18:59:43 +0100 |
---|---|---|
committer | heavydemon21 <nielsstunnebrink1@gmail.com> | 2024-12-02 18:59:43 +0100 |
commit | 9e1d1f0952ed09ee4b0c241fad3d0d66b380b1a3 (patch) | |
tree | a8a8c15fce530f700a49a3a1104a06ee0d460b76 | |
parent | 47e6d987ced269ec16ea455706513025cb9c50c5 (diff) |
fixed the color functionality
-rw-r--r-- | src/crepe/facade/SDLContext.cpp | 20 | ||||
-rw-r--r-- | src/crepe/facade/SDLContext.h | 10 |
2 files changed, 21 insertions, 9 deletions
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index c01d118..cfe79d2 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -19,6 +19,7 @@ #include "../util/Log.h" #include "SDLContext.h" +#include "api/Color.h" #include "types.h" using namespace crepe; @@ -131,10 +132,16 @@ void SDLContext::draw(const RenderContext & ctx) { = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * ctx.sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * ctx.sprite.flip.flip_y)); + const Color & color = ctx.sprite.color; + SDL_Rect srcrect = this->get_src_rect(ctx.sprite); SDL_Rect dstrect = this->get_dst_rect(ctx.sprite, ctx.pos, ctx.cam, ctx.cam_pos, ctx.scale); + this->set_rbg_texture(ctx.sprite.sprite_image, color.r, color.g, color.b); + this->set_alpha_texture(ctx.sprite.sprite_image, color.a); + + SDL_RenderCopyEx(this->game_renderer.get(), ctx.sprite.sprite_image.texture.get(), &srcrect, &dstrect, ctx.angle, NULL, render_flip); } @@ -221,9 +228,12 @@ int SDLContext::get_height(const Texture & ctx) const { return h; } void SDLContext::delay(int ms) const { SDL_Delay(ms); } -void SDLContext::set_rbg_texture(const std::shared_ptr<Texture>& texture, const uint8_t& r, const uint8_t& g, const uint8_t& b){ - SDL_SetTextureColorMod(texture->texture.get(), r, g, b); + +void SDLContext::set_rbg_texture(const Texture & texture, const uint8_t & r, + const uint8_t & g, const uint8_t & b) { + SDL_SetTextureColorMod(texture.texture.get(), r, g, b); +} +void SDLContext::set_alpha_texture(const Texture & texture, + const uint8_t & alpha) { + SDL_SetTextureAlphaMod(texture.texture.get(), alpha); } -void SDLContext::set_alpha_texture(const std::shared_ptr<Texture>& texture, const uint8_t& alpha){ - SDL_SetTextureAlphaMod(texture->texture.get(), alpha ); -}
\ No newline at end of file diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h index 6284a9c..8d63c43 100644 --- a/src/crepe/facade/SDLContext.h +++ b/src/crepe/facade/SDLContext.h @@ -12,6 +12,7 @@ #include "../api/Camera.h" #include "../api/Sprite.h" +#include "api/Texture.h" #include "types.h" namespace crepe { @@ -160,7 +161,7 @@ private: */ SDL_Rect get_dst_rect(const Sprite & sprite, const vec2 & pos, const Camera & cam, const vec2 & cam_pos, const double & img_scale) const; -/** + /** * \brief changes the texture rbg values with the given parameters * it sets the allowed color inside a image. So if all the colors are 255 (MAXIMUM) * it will show the given texture. however if the one of the colors is reduced it will reduce the @@ -171,8 +172,8 @@ private: * \param g Green color * \param b Blue color */ - void set_rbg_texture(const std::shared_ptr<Texture>& texture, const uint8_t& r, const uint8_t& g, const uint8_t& b); - + void set_rbg_texture(const Texture & texture, const uint8_t & r, + const uint8_t & g, const uint8_t & b); /** * \brief Modifies the transparency of the given texture @@ -180,7 +181,8 @@ private: * \param texture modify the given texture alpha channel * \param alpha alpha channel */ - void set_alpha_texture(const std::shared_ptr<Texture>& texture, const uint8_t& alpha); + void set_alpha_texture(const Texture & texture, const uint8_t & alpha); + private: //! sdl Window std::unique_ptr<SDL_Window, std::function<void(SDL_Window *)>> game_window; |