diff --git a/CMakeLists.txt b/CMakeLists.txt index f8a10b8..4d24c59 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,7 @@ target_compile_options(common INTERFACE set(METHODS_PATH "./src/*/methods/*.cpp") -set(VERSION "V8") +set(VERSION "V9") file(GLOB_RECURSE METHODS_SRC "${METHODS_PATH}") add_executable(main${VERSION} ./src/testMain.cpp ${METHODS_SRC} ) diff --git a/README.md b/README.md index 375d5b2..c8930a4 100644 --- a/README.md +++ b/README.md @@ -60,4 +60,4 @@ Per spostare l'intera scena si tiene premuto il tasto centrale del mouse. # Per lanciare: - ./build/bin/mainV8 + ./build/bin/mainV9 diff --git a/src/collections/headers/collection_interface.hpp b/src/collections/headers/collection_interface.hpp index 58ed5ac..db647de 100644 --- a/src/collections/headers/collection_interface.hpp +++ b/src/collections/headers/collection_interface.hpp @@ -13,7 +13,7 @@ struct collection{ class CollectionInterface{ public: virtual collection create(ReferencePlane plane) = 0; - virtual void update(sf::Clock cl) = 0; + virtual void update(sf::Clock cl, float multiplier) = 0; virtual bool setTransparency(float alpha) = 0; virtual ~CollectionInterface(){}; }; diff --git a/src/collections/headers/gamba.hpp b/src/collections/headers/gamba.hpp index f848e95..2905913 100644 --- a/src/collections/headers/gamba.hpp +++ b/src/collections/headers/gamba.hpp @@ -15,7 +15,7 @@ class Gamba : public CollectionInterface { PieceInterface* getJointPiece(); void setDirection(Direction dir); bool setTransparency(float alpha) override; - void update(sf::Clock cl)override {}; + void update(sf::Clock cl, float multiplier)override {}; float getZ_Acc(); }; diff --git a/src/collections/headers/lower_body.hpp b/src/collections/headers/lower_body.hpp index f7fb930..c9a31d4 100644 --- a/src/collections/headers/lower_body.hpp +++ b/src/collections/headers/lower_body.hpp @@ -33,7 +33,7 @@ protected: public: Lower_Body(rb::Vector3 pos, std::vector data); ~Lower_Body(); - void update(sf::Clock cl) override; + void update(sf::Clock cl, float multiplier) override; void setVisibility(bool c); bool setTransparency(float alpha) override; collection create(ReferencePlane plane) override; diff --git a/src/collections/methods/lower_body.cpp b/src/collections/methods/lower_body.cpp index 72d37ad..5703af0 100644 --- a/src/collections/methods/lower_body.cpp +++ b/src/collections/methods/lower_body.cpp @@ -76,7 +76,7 @@ bool Lower_Body::setTransparency(float alpha){ return true; } -void Lower_Body::update(sf::Clock cl){ +void Lower_Body::update(sf::Clock cl, float multiplier){ float sxAcc = sx->getZ_Acc() ; float dxAcc = dx->getZ_Acc() ; diff --git a/src/pieces/headers/caviglia.hpp b/src/pieces/headers/caviglia.hpp index 23c5031..49f5e5d 100644 --- a/src/pieces/headers/caviglia.hpp +++ b/src/pieces/headers/caviglia.hpp @@ -14,7 +14,7 @@ class Caviglia : public PieceInterface{ Caviglia(rb::Vector3 coords, _Float16 mass); ~Caviglia(); - void update(sf::Clock cl) override; + void update(sf::Clock cl, float multiplier) override; sf::Shape* draw(ReferencePlane plane) override; }; diff --git a/src/pieces/headers/coscia.hpp b/src/pieces/headers/coscia.hpp index 28b44e6..7921268 100644 --- a/src/pieces/headers/coscia.hpp +++ b/src/pieces/headers/coscia.hpp @@ -15,7 +15,7 @@ class Coscia : public PieceInterface{ Coscia(rb::Vector3 coords, _Float16 mass); ~Coscia(); - void update(sf::Clock cl) override; + void update(sf::Clock cl, float multiplier) override; sf::Shape* draw(ReferencePlane plane) override; }; diff --git a/src/pieces/headers/piece_interface.hpp b/src/pieces/headers/piece_interface.hpp index fb4cfb2..a5d55cd 100644 --- a/src/pieces/headers/piece_interface.hpp +++ b/src/pieces/headers/piece_interface.hpp @@ -38,7 +38,7 @@ class PieceInterface{ sf::Color color; float transparency = 1.0; //canale alpha del pezzo - virtual void update(sf::Clock cl) = 0; + virtual void update(sf::Clock cl, float multiplier) = 0; virtual sf::Shape* draw(ReferencePlane plane) = 0; virtual ~PieceInterface(){} virtual void setDirection(Direction dir){ diff --git a/src/pieces/headers/sensore.hpp b/src/pieces/headers/sensore.hpp index 53cb173..0191993 100644 --- a/src/pieces/headers/sensore.hpp +++ b/src/pieces/headers/sensore.hpp @@ -29,7 +29,7 @@ class Sensore : public PieceInterface{ Sensore(rb::Vector3 coords, _Float16 mass, unsigned int* st, std::vector> data); ~Sensore(); - void update(sf::Clock cl) override; + void update(sf::Clock cl,float multiplier) override; sf::Shape* draw(ReferencePlane plane) override; //funzioni specifiche diff --git a/src/pieces/headers/torso.hpp b/src/pieces/headers/torso.hpp index 69a6ec6..59bbb73 100644 --- a/src/pieces/headers/torso.hpp +++ b/src/pieces/headers/torso.hpp @@ -14,7 +14,7 @@ class Torso : public PieceInterface{ Torso(rb::Vector3 coords, _Float16 mass); ~Torso(); - void update(sf::Clock cl) override; + void update(sf::Clock cl, float multiplier) override; sf::Shape* draw(ReferencePlane plane) override; }; diff --git a/src/pieces/methods/caviglia_class.cpp b/src/pieces/methods/caviglia_class.cpp index a1ea29e..410532f 100644 --- a/src/pieces/methods/caviglia_class.cpp +++ b/src/pieces/methods/caviglia_class.cpp @@ -15,7 +15,7 @@ Caviglia::~Caviglia(){ delete shapeYZ; } -void Caviglia::update(sf::Clock cl){ +void Caviglia::update(sf::Clock cl,float multiplier){ //body.step(cl); } diff --git a/src/pieces/methods/coscia_class.cpp b/src/pieces/methods/coscia_class.cpp index d8e0709..b63c0cb 100644 --- a/src/pieces/methods/coscia_class.cpp +++ b/src/pieces/methods/coscia_class.cpp @@ -13,7 +13,7 @@ Coscia::~Coscia(){ delete shapeYZ; } -void Coscia::update(sf::Clock cl){ +void Coscia::update(sf::Clock cl, float multiplier){ //body.step(cl); } diff --git a/src/pieces/methods/sensore_class.cpp b/src/pieces/methods/sensore_class.cpp index af6f6f4..505bc0e 100644 --- a/src/pieces/methods/sensore_class.cpp +++ b/src/pieces/methods/sensore_class.cpp @@ -49,7 +49,7 @@ void Sensore::initCSV(std::vector> data){ } -void Sensore::update(sf::Clock cl){ +void Sensore::update(sf::Clock cl, float multiplier){ //calcolo la posizione e velocità if (*dataPos >= gData.size()) *dataPos = gData.size()-1; @@ -58,7 +58,7 @@ void Sensore::update(sf::Clock cl){ body.setAcc(rb::Vector3{accData[*dataPos]}); - body.step(cl); + body.step(cl, multiplier); } diff --git a/src/pieces/methods/torso.cpp b/src/pieces/methods/torso.cpp index a48c7f7..fa15fa8 100644 --- a/src/pieces/methods/torso.cpp +++ b/src/pieces/methods/torso.cpp @@ -14,7 +14,7 @@ Torso::~Torso(){ delete shapeYZ; } -void Torso::update(sf::Clock cl){ +void Torso::update(sf::Clock cl,float multiplier){ } diff --git a/src/rigidbody/headers/rb.hpp b/src/rigidbody/headers/rb.hpp index 7db6e5e..e0345bd 100644 --- a/src/rigidbody/headers/rb.hpp +++ b/src/rigidbody/headers/rb.hpp @@ -49,7 +49,7 @@ void setVel(const Vector3 Nacc); void setAcc(const Vector3 Nvel); void setTanAcc(const Vector3 Dacc); - void step(const sf::Clock time); + void step(const sf::Clock time, float multiplier); //complesso, deve definire accelerazione e accelerazione tangenziale void appForce(Vector3 f, Vector3 pos); diff --git a/src/rigidbody/methods/rb_class.cpp b/src/rigidbody/methods/rb_class.cpp index 96ddffe..c0ed1bc 100755 --- a/src/rigidbody/methods/rb_class.cpp +++ b/src/rigidbody/methods/rb_class.cpp @@ -85,12 +85,12 @@ void rigidbody::calcPos(const float Dtime){ } } -void rigidbody::step(const sf::Clock time){ +void rigidbody::step(const sf::Clock time, float multiplier){ int64_t Dtime = time.getElapsedTime().asMicroseconds(); if (prevT == 0) prevT = Dtime; - float dt = (float(Dtime) / 1000000.0) - (float(prevT) / 1000000.0); + float dt = ((float(Dtime) / 1000000.0) - (float(prevT) / 1000000.0)) * multiplier; prevT = Dtime; calcRot(dt); diff --git a/src/sfml_util.cpp b/src/sfml_util.cpp index e066d97..a800a72 100644 --- a/src/sfml_util.cpp +++ b/src/sfml_util.cpp @@ -29,11 +29,11 @@ struct State sf::Vector2f cameraOffset = {0.,0.}; sf::Clock clock; + float* tMul; sf::Clock PieceClock; ReferencePlane selectedPlane = ReferencePlane::XZ; PieceInterface* selected = nullptr; - bool rot_Piece = false; bool drag_Piece = false; bool drag = false; @@ -51,6 +51,7 @@ struct State window = sf::RenderWindow(sf::VideoMode({w, h}), title); if (ImGui::SFML::Init(window)); // L'if è solo per togliere il warning, va aggiustato gestendo le eccezioni clock.restart(); + tMul = new float(1.0); PieceClock.restart(); intervalMajLimit = maj; intervalMinLimit = min; @@ -68,6 +69,9 @@ struct State createdColl.push_back(c->create(selectedPlane)); } } + ~State(){ + delete tMul; + } }; /// @@ -84,14 +88,14 @@ void State::update(){ */ if (play){ for (auto i : collections){ - i->update(PieceClock); + i->update(PieceClock, *tMul); } } for (auto i : createdColl){ if (play){ for (auto j : i.pieces){ - j->update(PieceClock); + j->update(PieceClock, *tMul); } } for (auto j : i.joints){ @@ -101,7 +105,7 @@ void State::update(){ if (play){ for(PieceInterface* p : pieces){ - p->update(PieceClock); + p->update(PieceClock, *tMul); } } for(JointInterface* j : joints){ @@ -333,9 +337,15 @@ void doGUI(State &gs) } - /*////// DA FARE ///////*/ - + //Finestra gestione velocità di riproduzione + ImGui::Begin("Set time multiplier", 0,sdp_flags); + const float TimeMul[] = {0.5, 0.75, 1, 1.25, 1.5}; + const char* TimeMulChar[] = {"0.5", "0.75", "1", "1.25", "1.5"}; + int id = 2; + ImGui::SliderInt("Selected Plane", &id,0,4,TimeMulChar[id]); + gs.tMul* = TimeMul[id]; + ImGui::End(); //Finestra controllo sovrapposizione