diff --git a/ParticleGenerator/res/config/imgui.ini b/ParticleGenerator/res/config/imgui.ini index d59a5fdfcef08d8835f66e92dac664ae8fff0534..18995efe87ec47f0e8d5646debd4463175ab3d00 100644 --- a/ParticleGenerator/res/config/imgui.ini +++ b/ParticleGenerator/res/config/imgui.ini @@ -3,6 +3,6 @@ Pos=60,60 Size=400,400 [Window][Particle Generator] -Pos=60,60 -Size=504,424 +Pos=83,81 +Size=864,632 diff --git a/ParticleGenerator/src/Interface/Manager.cpp b/ParticleGenerator/src/Interface/Manager.cpp index 57b2e8d809db74849d6b323ceb6a154f92d5b278..0fcb4841b7d3636f5e27b089f520c73773ad23fc 100644 --- a/ParticleGenerator/src/Interface/Manager.cpp +++ b/ParticleGenerator/src/Interface/Manager.cpp @@ -32,10 +32,25 @@ namespace pg::interface { this->_historical.count(current_time); if(ImGui::Begin(this->_title.c_str())) { + + auto current = this->_manager.current(); if(ImGui::BeginTabBar("")) { if(ImGui::BeginTabItem("Scene")) { - auto current = this->_manager.current(); - if(current.has_value()) { + if(!this->_manager.getScenes().empty()) { + std::string name = !current.has_value() ? (*this->_manager.getScenes().begin())->name() : (*current)->name(); + if(ImGui::BeginCombo("Current Scene", name.c_str())) { + for(auto & scene : this->_manager.getScenes()) { + bool is_selected = (scene->name() == name); + if(ImGui::Selectable(scene->name().c_str(), is_selected)) { + this->_manager.setCurrent(*scene); + } + } + ImGui::EndCombo(); + } + ImGui::Separator(); + } + + if(current.has_value() && (*current)->interface().has_value()) { (*(*current)->interface())->render(current_time); } diff --git a/ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp.old b/ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp.old rename to ParticleGenerator/src/Interface/Scene/MeshGenerator.cpp diff --git a/ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp.old b/ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp.old rename to ParticleGenerator/src/Interface/Scene/MeshGenerator.hpp diff --git a/ParticleGenerator/src/Interface/Scene/MeshScene.cpp.old b/ParticleGenerator/src/Interface/Scene/MeshScene.cpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/MeshScene.cpp.old rename to ParticleGenerator/src/Interface/Scene/MeshScene.cpp diff --git a/ParticleGenerator/src/Interface/Scene/MeshScene.hpp.old b/ParticleGenerator/src/Interface/Scene/MeshScene.hpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/MeshScene.hpp.old rename to ParticleGenerator/src/Interface/Scene/MeshScene.hpp diff --git a/ParticleGenerator/src/Interface/Scene/PathScene.cpp.old b/ParticleGenerator/src/Interface/Scene/PathScene.cpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/PathScene.cpp.old rename to ParticleGenerator/src/Interface/Scene/PathScene.cpp diff --git a/ParticleGenerator/src/Interface/Scene/PathScene.hpp.old b/ParticleGenerator/src/Interface/Scene/PathScene.hpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/PathScene.hpp.old rename to ParticleGenerator/src/Interface/Scene/PathScene.hpp diff --git a/ParticleGenerator/src/Interface/Scene/PhysicScene.cpp.old b/ParticleGenerator/src/Interface/Scene/PhysicScene.cpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/PhysicScene.cpp.old rename to ParticleGenerator/src/Interface/Scene/PhysicScene.cpp diff --git a/ParticleGenerator/src/Interface/Scene/PhysicScene.hpp.old b/ParticleGenerator/src/Interface/Scene/PhysicScene.hpp similarity index 100% rename from ParticleGenerator/src/Interface/Scene/PhysicScene.hpp.old rename to ParticleGenerator/src/Interface/Scene/PhysicScene.hpp diff --git a/ParticleGenerator/src/Mesh/Trajectory.cpp b/ParticleGenerator/src/Mesh/Trajectory.cpp index edcd8927e273f5cce4fbe95ab0e7e21fc5a8d57e..e8f0d3adc1ecb17d1f4fbfc10f8d858f110349cc 100644 --- a/ParticleGenerator/src/Mesh/Trajectory.cpp +++ b/ParticleGenerator/src/Mesh/Trajectory.cpp @@ -56,6 +56,7 @@ namespace pg { } void Trajectory::draw(const Camera & camera, double current_time) { + glEnable(GL_LINE_SMOOTH); this->_vao.bind(); glEnable(GL_PROGRAM_POINT_SIZE); diff --git a/ParticleGenerator/src/Scene/Manager.cpp b/ParticleGenerator/src/Scene/Manager.cpp index 8f93c281e09351a41a6bebb2bf6ad245d7ddd198..6616635856bae4941f0677a8f6d5631ad3e9a393 100644 --- a/ParticleGenerator/src/Scene/Manager.cpp +++ b/ParticleGenerator/src/Scene/Manager.cpp @@ -5,35 +5,29 @@ namespace pg { Manager::Manager(const Window & window) - : _current(this->_scenes.begin()), + : _current(), _sceneRenderer(window, *this) {} Manager::~Manager() { - if(this->_current != this->_scenes.end()) { + if(this->_current.has_value()) { (*this->_current)->destroy(); } } std::optional<scene::Scene *> Manager::current() const { - return this->_current != this->_scenes.end() ? std::optional<scene::Scene *>((*this->_current).get()) : std::optional<scene::Scene *>(); + return this->_current; } void Manager::setCurrent(scene::Scene & scene) { - if(this->_current != this->_scenes.end()) { + if(this->_current.has_value()) { (*this->_current)->destroy(); } - auto ptr = std::shared_ptr<scene::Scene>(&scene); - if(!this->_scenes.contains(ptr)) { - this->_scenes.insert(ptr); - } - - this->_current = std::find(this->_scenes.begin(), this->_scenes.end(), ptr); + this->_current = std::optional<scene::Scene*>(&scene); (*this->_current)->initialize(); } void Manager::render(const Camera & camera, double current_time) { - auto current = this->current(); - this->_sceneRenderer.render(current, camera, current_time); + this->_sceneRenderer.render(this->_current, camera, current_time); } } \ No newline at end of file diff --git a/ParticleGenerator/src/Scene/Manager.hpp b/ParticleGenerator/src/Scene/Manager.hpp index ca30daf84eea527802b4494d36a0a7d88f7432d6..4e05e8bdcfa013c196168fe8d9fa1c60e29501c7 100644 --- a/ParticleGenerator/src/Scene/Manager.hpp +++ b/ParticleGenerator/src/Scene/Manager.hpp @@ -9,12 +9,12 @@ #include "../Renderer/Camera/Camera.hpp" namespace pg { - using SceneContainer = std::set<std::shared_ptr<scene::Scene>>; + using SceneContainer = std::set<scene::Scene *>; class Manager { private: SceneContainer _scenes; - SceneContainer::iterator _current; + std::optional<scene::Scene *> _current; scene::Renderer _sceneRenderer; @@ -26,7 +26,7 @@ namespace pg { inline const SceneContainer & getScenes() const {return this->_scenes;} inline const scene::Renderer & getSceneRenderer() const {return this->_sceneRenderer;} - inline void add(scene::Scene * scene) {this->_scenes.insert(std::shared_ptr<scene::Scene>(scene));} + inline void add(scene::Scene * scene) {this->_scenes.insert(scene);} std::optional<scene::Scene *> current() const; diff --git a/ParticleGenerator/src/Scene/Renderer.cpp b/ParticleGenerator/src/Scene/Renderer.cpp index c8264994ec3f7832ead60f4b4ba5680b6f8828d0..4bb373645f04899e4982134933f60a0f98178511 100644 --- a/ParticleGenerator/src/Scene/Renderer.cpp +++ b/ParticleGenerator/src/Scene/Renderer.cpp @@ -39,6 +39,7 @@ namespace pg::scene { this->_grid.render(camera, current_time); if(scene.has_value()) { + (*scene)->update(current_time); (*scene)->render(camera, current_time); } diff --git a/ParticleGenerator/src/Scene/Scenes/Grid.hpp b/ParticleGenerator/src/Scene/Scenes/Grid.hpp index bc2f71ec847cb1ad96ee02fea55e3639a875af3b..faa1e52c44bbec0299ff964ce4e592e66f17813a 100644 --- a/ParticleGenerator/src/Scene/Scenes/Grid.hpp +++ b/ParticleGenerator/src/Scene/Scenes/Grid.hpp @@ -25,5 +25,6 @@ namespace pg::scene void destroy() override; std::string name() const override; + std::optional<interface::Interface *> interface() override {return std::optional<interface::Interface *>();} }; } \ No newline at end of file diff --git a/ParticleGenerator/src/Scene/Scenes/Mesh.cpp.old b/ParticleGenerator/src/Scene/Scenes/Mesh.cpp similarity index 99% rename from ParticleGenerator/src/Scene/Scenes/Mesh.cpp.old rename to ParticleGenerator/src/Scene/Scenes/Mesh.cpp index c80904f0b3dd84718f2b63e8306d33611d6dbb0d..ccf2f55023e6caa78f50fc9dee08a0ce5baacb3f 100644 --- a/ParticleGenerator/src/Scene/Scenes/Mesh.cpp.old +++ b/ParticleGenerator/src/Scene/Scenes/Mesh.cpp @@ -189,10 +189,6 @@ namespace pg::scene return "Mesh Scene"; } - interface::Interface* Mesh::interface() { - return &this->_interface; - } - void Mesh::setMesh(const std::string & path) { Model gridModel(path); this->_mesh.generate(gridModel.getMeshGeometry().vertices, gridModel.getMeshGeometry().indices); diff --git a/ParticleGenerator/src/Scene/Scenes/Mesh.hpp.old b/ParticleGenerator/src/Scene/Scenes/Mesh.hpp similarity index 89% rename from ParticleGenerator/src/Scene/Scenes/Mesh.hpp.old rename to ParticleGenerator/src/Scene/Scenes/Mesh.hpp index 385128e1b2b582a38eedf191eb6b118a792dcb4c..586e5e8e77f9c843585fa4368e1ba77752f60fc8 100644 --- a/ParticleGenerator/src/Scene/Scenes/Mesh.hpp.old +++ b/ParticleGenerator/src/Scene/Scenes/Mesh.hpp @@ -43,6 +43,7 @@ namespace pg::scene public: Mesh(ct::CurveGenerator *, const ct::Curve &); + virtual ~Mesh() = default; void initialize() override; void update(double) override; @@ -50,7 +51,7 @@ namespace pg::scene void destroy() override; std::string name() const override; - interface::Interface* interface() override; + virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);} void setMesh(const std::string &); void setTexture(const std::string &); diff --git a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp.old b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp similarity index 100% rename from ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp.old rename to ParticleGenerator/src/Scene/Scenes/MeshGenerator.cpp diff --git a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp.old b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp similarity index 88% rename from ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp.old rename to ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp index 9bbefc8e2212a750bf73cb6708e2ffd2123569e6..58609cfab987e98418f1d27d304cfca2a591817c 100644 --- a/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp.old +++ b/ParticleGenerator/src/Scene/Scenes/MeshGenerator.hpp @@ -30,9 +30,7 @@ namespace pg::scene { public: MeshGenerator(); - /*virtual ~MeshGenerator() { - - };*/ + virtual ~MeshGenerator() = default; virtual void initialize(); virtual void update(double); @@ -40,7 +38,7 @@ namespace pg::scene { virtual void destroy(); virtual std::string name() const {return "Mesh Generator Scene";}; - virtual interface::Interface * interface() {return &this->_interface;} + virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);} void changeMesh(const std::string &); void changeTexture(const std::string &); diff --git a/ParticleGenerator/src/Scene/Scenes/Path.cpp.old b/ParticleGenerator/src/Scene/Scenes/Path.cpp similarity index 100% rename from ParticleGenerator/src/Scene/Scenes/Path.cpp.old rename to ParticleGenerator/src/Scene/Scenes/Path.cpp diff --git a/ParticleGenerator/src/Scene/Scenes/Path.hpp.old b/ParticleGenerator/src/Scene/Scenes/Path.hpp similarity index 89% rename from ParticleGenerator/src/Scene/Scenes/Path.hpp.old rename to ParticleGenerator/src/Scene/Scenes/Path.hpp index b50c5a47231936f5fef70f9884bb046de3e30bbb..f89c30ce0f492e251ddb070b55ea5f03d23ea5d7 100644 --- a/ParticleGenerator/src/Scene/Scenes/Path.hpp.old +++ b/ParticleGenerator/src/Scene/Scenes/Path.hpp @@ -26,6 +26,7 @@ namespace pg::scene { public: Path(ct::CurveGenerator *, const ct::Curve &); + virtual ~Path() = default; virtual void initialize(); virtual void render(const Camera &, double); @@ -39,7 +40,7 @@ namespace pg::scene { void changeParticletexture(const std::string &); virtual std::string name() const {return "Path Scene";} - virtual interface::Interface * interface() {return &this->_interface;} + virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);} friend class pg::interface::PathScene; }; diff --git a/ParticleGenerator/src/Scene/Scenes/Physic.cpp.old b/ParticleGenerator/src/Scene/Scenes/Physic.cpp similarity index 100% rename from ParticleGenerator/src/Scene/Scenes/Physic.cpp.old rename to ParticleGenerator/src/Scene/Scenes/Physic.cpp diff --git a/ParticleGenerator/src/Scene/Scenes/Physic.hpp.old b/ParticleGenerator/src/Scene/Scenes/Physic.hpp similarity index 88% rename from ParticleGenerator/src/Scene/Scenes/Physic.hpp.old rename to ParticleGenerator/src/Scene/Scenes/Physic.hpp index 65d1c993a22ffb2db91446de3ac3f15f20701c3a..419c40a5fa7dce39a2bb8391b19899cb185df3ed 100644 --- a/ParticleGenerator/src/Scene/Scenes/Physic.hpp.old +++ b/ParticleGenerator/src/Scene/Scenes/Physic.hpp @@ -23,6 +23,7 @@ namespace pg::scene { public: Physic(); + virtual ~Physic() = default; inline const Program & getProgram() const {return this->_program;} inline const Material & getTexture() const {return this->_texture;} @@ -31,6 +32,7 @@ namespace pg::scene { void changeParticletexture(const std::string &); virtual std::string name() const {return "Physic Scene";} + virtual std::optional<interface::Interface *> interface() {return std::optional<interface::Interface *>(&this->_interface);} virtual void initialize(); virtual void render(const Camera &, double); diff --git a/ParticleGenerator/src/Scene/Scenes/Scene.hpp b/ParticleGenerator/src/Scene/Scenes/Scene.hpp index 454a9dcaaec58ce4bbdfeb813f64a9ce9e02757a..a9f08bd4b60eb265d6ae8ae7b25bff1c1bbe3735 100644 --- a/ParticleGenerator/src/Scene/Scenes/Scene.hpp +++ b/ParticleGenerator/src/Scene/Scenes/Scene.hpp @@ -13,7 +13,7 @@ namespace pg::scene { virtual ~Scene() = default; virtual std::string name() const {return "Scene";} - virtual std::optional<interface::Interface *> interface() const {return std::optional<interface::Interface *>();} + virtual std::optional<interface::Interface *> interface() = 0;// const {return std::optional<interface::Interface *>();} virtual void initialize() = 0; virtual void update(double) = 0; diff --git a/ParticleGenerator/src/main.cpp b/ParticleGenerator/src/main.cpp index 282260691a5f9f2ffc46807a1a57171403b0e7ca..efa5244124d7661edc63d16de62e7d20af156fd8 100644 --- a/ParticleGenerator/src/main.cpp +++ b/ParticleGenerator/src/main.cpp @@ -7,10 +7,11 @@ #include "Scene/Manager.hpp" #include "Interface/Manager.hpp" -//#include "Scene/Scenes/Physic.hpp" -//#include "Scene/Scenes/Path.hpp" -//#include "Scene/Scenes/Mesh.hpp" -//#include "Scene/Scenes/MeshGenerator.hpp" +#include "Scene/Scenes/Physic.hpp" +#include "Scene/Scenes/Path.hpp" +#include "Scene/Scenes/Mesh.hpp" +#include "Scene/Scenes/MeshGenerator.hpp" +#include "Scene/Scenes/Grid.hpp" #include "Interface/Manager.hpp" @@ -73,14 +74,18 @@ int main(int argc, const char * argv[]) { ct::BezierGenerator bezier(ctrlPoints.size()); - //pg::scene::Physic physic; - //pg::scene::MeshGenerator meshGenerator; - //pg::scene::Path path(&bezier, ctrlPoints); - //pg::scene::Mesh mesh(&bezier, ctrlPoints); + pg::scene::Physic physic; + pg::scene::MeshGenerator meshGenerator; + pg::scene::Path path(&bezier, ctrlPoints); + pg::scene::Mesh mesh(&bezier, ctrlPoints); pg::Manager manager(window); pg::interface::Manager imanager(window, manager); - //pg::interface::Global interface(window, manager, "Particle Generator Settings"); + + manager.add(&path); + manager.add(&physic); + manager.add(&meshGenerator); + manager.add(&mesh); while(window.isOpen()) { double current_time = glfwGetTime();