diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crepe/system/RenderSystem.cpp | 29 | ||||
| -rw-r--r-- | src/crepe/system/RenderSystem.h | 12 | ||||
| -rw-r--r-- | src/example/rendering_particle.cpp | 8 | 
3 files changed, 24 insertions, 25 deletions
| diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp index bc5422d..c599729 100644 --- a/src/crepe/system/RenderSystem.cpp +++ b/src/crepe/system/RenderSystem.cpp @@ -1,6 +1,8 @@  #include <algorithm>  #include <cassert>  #include <cmath> +#include <functional> +#include <iostream>  #include <stdexcept>  #include <vector> @@ -48,8 +50,6 @@ RenderSystem::sort(std::vector<std::reference_wrapper<Sprite>> & objs) {  	return sorted_objs;  } - -  void RenderSystem::update() {  	this->clear_screen();  	this->update_camera(); @@ -57,43 +57,42 @@ void RenderSystem::update() {  	this->present_screen();  } -bool RenderSystem::render_particle(const Sprite & sprite, const double & scale) const { +bool RenderSystem::render_particle(const Sprite & sprite, const double & scale) {  	ComponentManager & mgr = this->component_manager; -	auto emitters = mgr.get_components_by_id<ParticleEmitter>(sprite.game_object_id); +	vector<reference_wrapper<ParticleEmitter>> emitters +		= mgr.get_components_by_id<ParticleEmitter>(sprite.game_object_id);  	bool rendering_particles = false;  	for (const ParticleEmitter & em : emitters) { +		cout << &em.data.sprite << " " << &sprite << endl;  		if (!(&em.data.sprite == &sprite)) continue;  		rendering_particles = true;  		if (!em.active) continue; -  		for (const Particle & p : em.data.particles) {  			if (!p.active) continue; -			this->context.draw_particle(sprite, p.position, p.angle, scale, *this->curr_cam); +			this->context.draw_particle(sprite, p.position, p.angle, scale, +										*this->curr_cam_ref);  		}  	}  	return rendering_particles;  } -void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) const { - -	ComponentManager & mgr = this->component_manager; - -	this->context.draw(sprite, tm, *this->curr_cam); +void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) { +	this->context.draw(sprite, tm, *this->curr_cam_ref);  } -void RenderSystem::render() const { +void RenderSystem::render() {  	ComponentManager & mgr = this->component_manager;  	vector<reference_wrapper<Sprite>> sprites = mgr.get_components_by_type<Sprite>(); -	vector<reference_wrapper<Sprite>> sorted_sprites = this->sort(sprites); +	//vector<reference_wrapper<Sprite>> sorted_sprites = this->sort(sprites); -	for (const Sprite & sprite : sorted_sprites) { +	for (const Sprite & sprite : sprites) {  		if (!sprite.active) continue; -		const Transform & transform +		Transform & transform  			= mgr.get_components_by_id<Transform>(sprite.game_object_id).front().get();  		bool rendered_particles = this->render_particle(sprite, transform.scale); diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h index b9033fb..0393f2f 100644 --- a/src/crepe/system/RenderSystem.h +++ b/src/crepe/system/RenderSystem.h @@ -31,16 +31,16 @@ public:  private:  	//! Clears the screen in preparation for rendering. -	void clear_screen(); +	void clear_screen() ;  	//! Presents the rendered frame to the display. -	void present_screen(); +	void present_screen() ;  	//! Updates the active camera used for rendering.  	void update_camera();  	//! Renders the whole screen -	void render() const; +	void render() ;  	/**  	 * \brief Renders all the particles on the screen from a given sprite. @@ -49,7 +49,7 @@ private:  	 * \param tm the Transform component for scale  	 * \return true if particles have been rendered  	 */ -	bool render_particle(const Sprite & sprite, const double & scale) const; +	bool render_particle(const Sprite & sprite, const double & scale) ;  	/**  	 * \brief renders a sprite with a Transform component on the screen  @@ -57,7 +57,7 @@ private:  	 * \param sprite  the sprite component that holds all the data  	 * \param tm the Transform component that holds the position,rotation and scale   	 */ -	void render_normal(const Sprite & sprite, const Transform & tm); +	void render_normal(const Sprite & sprite, const Transform & tm) ;  	/**  	 * \brief sort a vector sprite objects with @@ -66,7 +66,7 @@ private:  	 * \return returns a sorted reference vector  	 */  	std::vector<std::reference_wrapper<Sprite>> -	sort(std::vector<std::reference_wrapper<Sprite>> & objs); +	sort(std::vector<std::reference_wrapper<Sprite>> & objs) ;  	/**  	 * \todo Include color handling for sprites. diff --git a/src/example/rendering_particle.cpp b/src/example/rendering_particle.cpp index bcf95b8..062f11f 100644 --- a/src/example/rendering_particle.cpp +++ b/src/example/rendering_particle.cpp @@ -27,12 +27,12 @@ int main(int argc, char * argv[]) {  	ParticleSystem psys{mgr};  	Color color(255, 255, 255, 255); -	game_object.add_component<Sprite>(make_shared<Texture>("../asset/texture/img.png"), color, FlipSettings{false,false}); +	//game_object.add_component<Sprite>(make_shared<Texture>("../asset/texture/img.png"), color, FlipSettings{false,false});  	Sprite test_sprite = game_object.add_component<Sprite>(  		make_shared<Texture>("../asset/texture/img.png"), color, FlipSettings{false, false});  	game_object.add_component<ParticleEmitter>(ParticleEmitter::Data{ -		.position = {100, 0}, +		.position = {0, 0},  		.max_particles = 10,  		.emission_rate = 0.1,  		.min_speed = 6, @@ -49,8 +49,8 @@ int main(int argc, char * argv[]) {  			.reset_on_exit = false,  		},  		.sprite = test_sprite, -	}).active = false; -	game_object.add_component<Camera>(Color::get_white()); +	}); +	game_object.add_component<Camera>(Color::WHITE);  	auto start = std::chrono::steady_clock::now(); |