From 8a60e45cd1e231be33887fa5fffe92a67d5a2f9f Mon Sep 17 00:00:00 2001 From: my name Date: Wed, 12 Aug 2026 01:43:50 +0200 Subject: [PATCH] timermanager now creates its own timers --- src/sortui.cpp | 29 ++++++++++++++++++++--------- src/timer.cpp | 13 +++++++------ src/timer.hpp | 15 +++++++-------- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/src/sortui.cpp b/src/sortui.cpp index 84cb63e..332a014 100644 --- a/src/sortui.cpp +++ b/src/sortui.cpp @@ -49,11 +49,10 @@ vector dataprovider(){ } void setupsorttimers(TimerManager &mytimermanager, unique_ptr &mysession){ - unique_ptr mytimer = make_unique( - "sort1", 0, - [&mysession](){return mysession->step();}, - milliseconds(250)); - mytimermanager.add_timer(std::move(mytimer)); + mytimermanager.add_timer( + 0, + [&mysession](){return mysession->step();}, + milliseconds(250)); } //list of inputs, manually assign them to sorts @@ -63,14 +62,27 @@ struct SortSession { TimerManager SortTimer; SortSession(vector &inputs): inputs(inputs), sorts(make_unique(inputs[0])) { - setupsorttimers(SortTimer, sorts); + //setupsorttimers(SortTimer, sorts); + add_session(sorts); } + + void add_session(unique_ptr &mysteppable){ + SortTimer.add_timer(0, + [&mysteppable]() {return mysteppable->step();}, + milliseconds(250)); + } void update_sorts(){ SortTimer.update_timers(); } }; +struct ViewSession{ + sf::RenderWindow mywindow; + sf::Font myfont; + sf::Text text; +}; + struct App{ sf::RenderWindow mywindow; sf::Font myfont; @@ -111,13 +123,12 @@ struct App{ mywindow.clear(sf::Color::Black); mywindow.draw(text); text.setString(arraytostr(inputs[0])); - + mysortsession.update_sorts(); for (SortInput input : inputs) { displaySortInput(input); } - mywindow.display(); this_thread::sleep_for(milliseconds(250)); @@ -132,7 +143,7 @@ int main() { inputs.push_back(myinput); inputs.push_back(myinput2); - + App myapp(inputs); myapp.run(); } diff --git a/src/timer.cpp b/src/timer.cpp index bdf4bd4..5fe433c 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -8,8 +8,8 @@ using namespace std::chrono; using namespace std; -Timer::Timer(string name, int triggercount, function myaction, milliseconds triggerinterval) - : name(name), triggeramount(triggercount), timeraction(myaction), triggerinterval(triggerinterval) {} +Timer::Timer(size_t triggeramount, function myaction, milliseconds triggerinterval) + :triggeramount(triggeramount), timeraction(myaction), triggerinterval(triggerinterval) {} void Timer::add_time(milliseconds deltatime) { accumulator += deltatime; @@ -23,16 +23,17 @@ void Timer::add_time(milliseconds deltatime) { } }; -void TimerManager::add_timer(unique_ptr newtimer) { - timers.push_back(std::move(newtimer)); +void TimerManager::add_timer(size_t triggeramount, function myaction, std::chrono::milliseconds triggerinterval) { + Timer mynewtimer(triggeramount, myaction, triggerinterval); + timers.push_back(mynewtimer); }; void TimerManager::update_timers() { steady_clock::time_point currenttime = steady_clock::now(); milliseconds deltatime = duration_cast(currenttime-previoustime); - for(unique_ptr &mytimer: timers){ - mytimer->add_time(deltatime); + for(Timer &mytimer: timers){ + mytimer.add_time(deltatime); } previoustime = currenttime; } diff --git a/src/timer.hpp b/src/timer.hpp index 1ef0b6b..df36d38 100644 --- a/src/timer.hpp +++ b/src/timer.hpp @@ -11,9 +11,9 @@ using namespace std; //check if the timer is still valid, check if enough time has passed and if so, actuate action + class Timer { public: - string name; size_t triggeramount; bool isexpired = false; @@ -21,22 +21,21 @@ public: size_t triggercount = 0; function timeraction; - Timer(string name, int triggercount, function myaction, std::chrono::milliseconds triggerinterval); + Timer(size_t triggeramount, function myaction, std::chrono::milliseconds triggerinterval); void add_time(std::chrono::milliseconds deltatime); - - private: std::chrono::milliseconds accumulator = std::chrono::milliseconds(0); std::chrono::milliseconds triggerinterval = std::chrono::milliseconds(1000); //default to 1 sec }; + //CRUD timers and give them dt on update class TimerManager { public: - vector> timers; - TimerManager() { previoustime = std::chrono::steady_clock::now(); } - void add_timer(unique_ptr newtimer); + vector timers; + TimerManager(){previoustime = std::chrono::steady_clock::now();} + void add_timer(size_t triggeramount, function myaction, std::chrono::milliseconds triggerinterval); void delete_timer(); void update_timers(); @@ -44,4 +43,4 @@ private: std::chrono::steady_clock::time_point previoustime; }; -#endif +#endif