aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/crepe/facade/SDLContext.cpp15
-rw-r--r--src/crepe/facade/SDLContext.h23
-rw-r--r--src/crepe/system/RenderSystem.h1
-rw-r--r--src/example/rendering.cpp2
-rw-r--r--src/example/rendering_particle.cpp4
5 files changed, 42 insertions, 3 deletions
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index 378ccee..4bc4cf8 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -6,10 +6,12 @@
#include <SDL2/SDL_video.h>
#include <cmath>
#include <cstddef>
+#include <cstdint>
#include <functional>
#include <iostream>
#include <memory>
#include <string>
+#include <sys/types.h>
#include <utility>
#include "../api/Sprite.h"
@@ -110,6 +112,13 @@ void SDLContext::present_screen() {
SDL_RenderPresent(this->game_renderer.get());
}
+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_alpha_texture(const std::shared_ptr<Texture>& texture, const uint8_t& alpha){
+ SDL_SetTextureAlphaMod(texture->texture.get(), alpha );
+}
+
void SDLContext::draw(const Sprite & sprite, const Transform & transform,
const Camera & cam) {
@@ -117,6 +126,11 @@ void SDLContext::draw(const Sprite & sprite, const Transform & transform,
= (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x)
| (SDL_FLIP_VERTICAL * sprite.flip.flip_y));
+ sprite.sprite_image->texture.get();
+
+ this->set_rbg_texture(sprite.sprite_image, sprite.color.r, sprite.color.g, sprite.color.b);
+ this->set_alpha_texture(sprite.sprite_image, sprite.color.a);
+
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;
@@ -129,6 +143,7 @@ void SDLContext::draw(const Sprite & sprite, const Transform & transform,
.h = sprite.sprite_rect.h,
};
+
SDL_Rect dstrect = {
.x = static_cast<int>(adjusted_x),
.y = static_cast<int>(adjusted_y),
diff --git a/src/crepe/facade/SDLContext.h b/src/crepe/facade/SDLContext.h
index c4392bd..5b5ee3e 100644
--- a/src/crepe/facade/SDLContext.h
+++ b/src/crepe/facade/SDLContext.h
@@ -3,6 +3,7 @@
#include <SDL2/SDL_keycode.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_video.h>
+#include <cstdint>
#include <functional>
#include <memory>
#include <string>
@@ -145,6 +146,28 @@ private:
*/
void camera(const Camera & camera);
+ /**
+ * \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
+ *
+ *
+ * \param texture the given texture to adjust
+ * \param r Red color
+ * \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);
+
+
+ /**
+ * \brief Modifies the transparency of the given texture
+ *
+ * \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);
+
private:
//! sdl Window
std::unique_ptr<SDL_Window, std::function<void(SDL_Window *)>> game_window;
diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h
index 468f79b..feefa09 100644
--- a/src/crepe/system/RenderSystem.h
+++ b/src/crepe/system/RenderSystem.h
@@ -59,6 +59,7 @@ private:
void render_normal(const Sprite &, const Transform & tm);
+
/**
* \todo Include color handling for sprites.
* \todo Add text rendering using SDL_ttf for text components.
diff --git a/src/example/rendering.cpp b/src/example/rendering.cpp
index a7cb5d6..f481f03 100644
--- a/src/example/rendering.cpp
+++ b/src/example/rendering.cpp
@@ -33,7 +33,7 @@ int main() {
obj.add_component<Camera>(Color::get_red());
}
{
- Color color(0, 0, 0, 0);
+ Color color(255, 0, 0, 0);
obj1.add_component<Sprite>(make_shared<Texture>("../asset/texture/second.png"), color, FlipSettings{true, true});
obj1.add_component<Sprite>(make_shared<Texture>("../asset/texture/second.png"), color, FlipSettings{true, true});
}
diff --git a/src/example/rendering_particle.cpp b/src/example/rendering_particle.cpp
index dd08354..cb95ede 100644
--- a/src/example/rendering_particle.cpp
+++ b/src/example/rendering_particle.cpp
@@ -22,9 +22,9 @@ using namespace std;
int main(int argc, char * argv[]) {
GameObject game_object(0, "", "", Vector2{100, 100}, 0, 0.1);
- Color color(0, 0, 0, 0);
+ Color color(255, 255, 255, 0);
Sprite test_sprite = game_object.add_component<Sprite>(
- make_shared<Texture>("../asset/texture/img.png"), color,
+ make_shared<Texture>("../asset/texture/img.png"), Color::get_red(),
FlipSettings{false, false});
game_object.add_component<ParticleEmitter>(ParticleEmitter::Data{
.position = {0, 0},