diff --git a/cpp/ui/ncurses/hw/hwcurses.cpp b/cpp/ui/ncurses/hw/hwcurses.cpp index d5e94e5..6c1195e 100644 --- a/cpp/ui/ncurses/hw/hwcurses.cpp +++ b/cpp/ui/ncurses/hw/hwcurses.cpp @@ -1,12 +1,132 @@ +#include +#include +#include +#include +#include #include +#include +#include + +// dynamic, let's for loop hello +/* let's add a timer + function "subscribes" to a function that omits a signal whenever a second has pased +*/ +// void printhellos(int inputnumber) { +// for (int i = 0; i < inputnumber; i++) { +// mvprintw(i, 10, "hello %d", i); +// refresh(); +// } +// } + +/* + todo + figure out namespaces, using, and auto + formalize timer struct + read about std function and std bind + try to do with objects / classes instead + centralize into event sender and subscriber +*/ + +struct printhelloswithupdate { + int numofhellos = 0; + int maxhellos = 10; + int xloc = 8; + int yloc = 8; + void updatehello() { + if (numofhellos < maxhellos) { + mvprintw(xloc, yloc, "hello: %d", numofhellos); + numofhellos++, xloc++, yloc++; + } + } +}; + +struct updater { + +}; + +struct secondsdisplay { + double accumulator = 0; + size_t interval = 2;//only display every 2 seconds + int currenttime = 10; + int minutex = 5; + int minutey = 5; + void updatedisplay() { + printf("time: %d\n", currenttime); + // mvprintw(minutex, minutey, "time: %d", currenttime); + // refresh(); + } + void updatetime(double DeltaTime) { + accumulator += DeltaTime; + if (accumulator >= interval) { + currenttime -= 1; + accumulator = 0; + updatedisplay(); + } + if (currenttime < 1) { + currenttime = 10; + } + } +}; + + +struct mysecondsdisplay { + int currenttime = 10; + void myupdatedisplay() { + currenttime -= 1; + printf("time: %d\n", currenttime); + if (currenttime < 1) { + currenttime = 10; + } + } +}; + +struct timer { + std::function callbackfunc; + double accumulator = 0; + size_t interval = 2; // only display every 2 seconds + + void updatetime(double DeltaTime) { + accumulator += DeltaTime; + printf("accumulated: %f\n", accumulator); + if (accumulator >= interval) { + printf("interval\n"); + accumulator = 0; + callbackfunc(); + } + + } +}; int main() { - initscr(); - move(11, 26); - printw("Hello curses"); - refresh(); - getch(); - endwin(); + // initscr(); + // nodelay(stdscr,FALSE); + // move(11, 26); + // printw("Hello curses"); + // refresh(); + printf("verification\n"); + std::cout << "couttest\n"; + //secondsdisplay mymindisp = {}; + printhelloswithupdate myhelloprinter = {}; + auto starttime = + std::chrono::system_clock::now(); + timer clocktimer = {}; + mysecondsdisplay secdisp; + clocktimer.callbackfunc = [&]() { secdisp.myupdatedisplay(); }; + while (true) { + auto currenttime = + std::chrono::system_clock::now(); + std::chrono::duration myDeltaTime = currenttime - starttime; + double DoubleDeltaTime = myDeltaTime.count(); + clocktimer.updatetime(DoubleDeltaTime); + //mymindisp.updatetime(DoubleDeltaTime); + myhelloprinter.updatehello(); + printf("deltatime:%f\n", DoubleDeltaTime); + starttime = currenttime; + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } + + // getch(); + // endwin(); return 0; }