aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorheavydemon21 <nielsstunnebrink1@gmail.com>2024-11-20 15:16:06 +0100
committerheavydemon21 <nielsstunnebrink1@gmail.com>2024-11-20 15:16:06 +0100
commita0f39be4510665614d25d23d88fe1d0f0b5cc740 (patch)
treeb5a82723490bab97c40e8774a176293fae670e6a /src
parenta01c2dc46daeffa0a5c92230d1513047a072c04d (diff)
rendering system bug
Diffstat (limited to 'src')
-rw-r--r--src/crepe/system/RenderSystem.cpp29
-rw-r--r--src/crepe/system/RenderSystem.h12
-rw-r--r--src/example/rendering_particle.cpp8
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();