diff --git a/source/frontends/ncurses/main.cpp b/source/frontends/ncurses/main.cpp index 8113cb23..c85b2fd5 100644 --- a/source/frontends/ncurses/main.cpp +++ b/source/frontends/ncurses/main.cpp @@ -162,14 +162,16 @@ namespace VideoRedrawScreen(); } + const auto end = std::chrono::steady_clock::now(); + const auto diff = end - start; + const long us = std::chrono::duration_cast(diff).count(); + + const double coeff = exp(-0.000001 * nExecutionPeriodUsec); // 0.36 after 1 second + + g_relativeSpeed = g_relativeSpeed * coeff + double(us) / double(nExecutionPeriodUsec) * (1.0 - coeff); + if (!DiskIsSpinning()) { - const auto end = std::chrono::steady_clock::now(); - const auto diff = end - start; - const long us = std::chrono::duration_cast(diff).count(); - - g_relativeSpeed = double(us) / double(nExecutionPeriodUsec); - if (us < nExecutionPeriodUsec) { usleep(nExecutionPeriodUsec - us); diff --git a/source/frontends/ncurses/world.cpp b/source/frontends/ncurses/world.cpp index f86b477b..0e7319cc 100644 --- a/source/frontends/ncurses/world.cpp +++ b/source/frontends/ncurses/world.cpp @@ -150,7 +150,7 @@ namespace } -double g_relativeSpeed = 0; +double g_relativeSpeed = 1.0; void output(const char *fmt, ...) {