diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/facade/SDLContext.cpp | 15 | ||||
| -rw-r--r-- | src/crepe/facade/SDLContext.h | 23 | ||||
| -rw-r--r-- | src/crepe/system/RenderSystem.h | 1 | ||||
| -rw-r--r-- | src/example/rendering.cpp | 2 | ||||
| -rw-r--r-- | src/example/rendering_particle.cpp | 4 | 
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}, |