From ef4888f94a5b18220690c69cc77f8c59df7ebd3e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9au?= <theau.baton@etu.univ-amu.fr>
Date: Sat, 25 May 2024 13:59:32 +0200
Subject: [PATCH] Write spawn method

---
 ParticleGenerator/res/config/imgui.ini                  | 2 +-
 ParticleGenerator/src/Interface/Scene/SceneParticle.cpp | 3 +++
 ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp    | 1 -
 ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp    | 1 -
 ParticleGenerator/src/Scene/Scenes/Path.cpp             | 7 +++----
 ParticleGenerator/src/Scene/Scenes/Path.hpp             | 1 -
 ParticleGenerator/src/Scene/Scenes/Physic.cpp           | 7 +++----
 ParticleGenerator/src/Scene/Scenes/Physic.hpp           | 1 -
 8 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/ParticleGenerator/res/config/imgui.ini b/ParticleGenerator/res/config/imgui.ini
index d77fdd2..1e77131 100644
--- a/ParticleGenerator/res/config/imgui.ini
+++ b/ParticleGenerator/res/config/imgui.ini
@@ -4,5 +4,5 @@ Size=400,400
 
 [Window][Particle Generator]
 Pos=60,60
-Size=533,291
+Size=838,505
 
diff --git a/ParticleGenerator/src/Interface/Scene/SceneParticle.cpp b/ParticleGenerator/src/Interface/Scene/SceneParticle.cpp
index a1f43e2..68d169e 100644
--- a/ParticleGenerator/src/Interface/Scene/SceneParticle.cpp
+++ b/ParticleGenerator/src/Interface/Scene/SceneParticle.cpp
@@ -1,5 +1,7 @@
 #include "SceneParticle.hpp"
 
+#include "../../Scene/Scene.hpp"
+
 #include <imgui.h>
 
 namespace pg::interface {
@@ -7,6 +9,7 @@ namespace pg::interface {
     : _scene(scene) {}
 
     void SceneParticle::draw(double) {
+        ImGui::Text("Particule Number : %i / %i", this->_scene->_particles.size(), this->_scene->_max);
         ImGui::Text("Scene Particle Interface !");
     }
 }
\ No newline at end of file
diff --git a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp
index 360ca05..71bc6d6 100644
--- a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp
+++ b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp
@@ -14,7 +14,6 @@ namespace pg::scene {
       _meshPosition(0.f),
       _meshRotation(0.f),
       _generators(),
-      _particles(),
       _billboard(),
       _billboardTexture(),
       _billboardProgram(),
diff --git a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp
index c53003d..298501b 100644
--- a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp
+++ b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp
@@ -20,7 +20,6 @@ namespace pg::scene {
             glm::vec3 _meshRotation;
 
             std::vector<PhysicsParticleGenerator> _generators;
-            std::vector<std::unique_ptr<Particle>> _particles;
             Billboard _billboard;
             Material _billboardTexture;
             Program _billboardProgram;
diff --git a/ParticleGenerator/src/Scene/Scenes/Path.cpp b/ParticleGenerator/src/Scene/Scenes/Path.cpp
index 787d4e3..48bd6ee 100644
--- a/ParticleGenerator/src/Scene/Scenes/Path.cpp
+++ b/ParticleGenerator/src/Scene/Scenes/Path.cpp
@@ -11,7 +11,6 @@ namespace pg::scene {
      _texture(),
      _generator(generator, ctrlpoint),
      _trajectory(&this->_generator),
-     _particles(),
      _interface(this, &this->_generator) {}
 
     void Path::initialize() {
@@ -63,8 +62,7 @@ namespace pg::scene {
         if(duration_cast<std::chrono::milliseconds>(end - start).count() >= 500) {
             start = std::chrono::high_resolution_clock::now();
             if((5 + this->_particles.size() <= 1024) && true) {
-                std::vector<std::unique_ptr<pg::Particle>> newParticles = this->_generator.generate(5, static_cast<size_t>(current_time));
-                this->_particles.insert(this->_particles.begin(), std::make_move_iterator(newParticles.begin()), std::make_move_iterator(newParticles.end()));
+                this->spawn(5, current_time);
             }
         }
 
@@ -126,6 +124,7 @@ namespace pg::scene {
     }
 
     void Path::spawn(size_t count, double current_time) {
-        
+        std::vector<std::unique_ptr<pg::Particle>> newParticles = this->_generator.generate(count, static_cast<size_t>(current_time));
+        this->_particles.insert(this->_particles.begin(), std::make_move_iterator(newParticles.begin()), std::make_move_iterator(newParticles.end()));
     }
 }
\ No newline at end of file
diff --git a/ParticleGenerator/src/Scene/Scenes/Path.hpp b/ParticleGenerator/src/Scene/Scenes/Path.hpp
index 4105bdf..e6a85f2 100644
--- a/ParticleGenerator/src/Scene/Scenes/Path.hpp
+++ b/ParticleGenerator/src/Scene/Scenes/Path.hpp
@@ -19,7 +19,6 @@ namespace pg::scene {
             Trajectory _trajectory;
             Material _texture;
             PathParticleGenerator _generator;
-            std::vector<std::unique_ptr<Particle>> _particles;
 
             interface::Path _interface;
 
diff --git a/ParticleGenerator/src/Scene/Scenes/Physic.cpp b/ParticleGenerator/src/Scene/Scenes/Physic.cpp
index 68babd3..14248da 100644
--- a/ParticleGenerator/src/Scene/Scenes/Physic.cpp
+++ b/ParticleGenerator/src/Scene/Scenes/Physic.cpp
@@ -10,7 +10,6 @@ namespace pg::scene {
         _program(),
         _texture(),
         _generator(),
-        _particles(),
         _interface(this, &this->_generator) {}
 
     void Physic::initialize() {
@@ -59,8 +58,7 @@ namespace pg::scene {
         if(duration_cast<std::chrono::milliseconds>(end - start).count() >= 500) {
             start = std::chrono::high_resolution_clock::now();
             if((5 + this->_particles.size()) <= 1024 && true) {
-                std::vector<std::unique_ptr<pg::Particle>> newParticles = this->_generator.generate(5, static_cast<size_t>(current_time));
-                this->_particles.insert(this->_particles.begin(), std::make_move_iterator(newParticles.begin()), std::make_move_iterator(newParticles.end()));
+                this->spawn(5, current_time);
             }
         }
 
@@ -120,6 +118,7 @@ namespace pg::scene {
     }
 
     void Physic::spawn(size_t count, double current_time) {
-        
+        std::vector<std::unique_ptr<pg::Particle>> newParticles = this->_generator.generate(count, static_cast<size_t>(current_time));
+        this->_particles.insert(this->_particles.begin(), std::make_move_iterator(newParticles.begin()), std::make_move_iterator(newParticles.end()));
     }
 }
\ No newline at end of file
diff --git a/ParticleGenerator/src/Scene/Scenes/Physic.hpp b/ParticleGenerator/src/Scene/Scenes/Physic.hpp
index aaaac8f..6694086 100644
--- a/ParticleGenerator/src/Scene/Scenes/Physic.hpp
+++ b/ParticleGenerator/src/Scene/Scenes/Physic.hpp
@@ -17,7 +17,6 @@ namespace pg::scene {
             Material _texture;
             Billboard _billboards;
             PhysicsParticleGenerator _generator;
-            std::vector<std::unique_ptr<Particle>> _particles;
 
             interface::Physic _interface;
 
-- 
GitLab