Squashed 'deps/nostalgia/' changes from 5e90f8d4..3b874c6e

3b874c6e [turbine] Fix refresh logic to handle default refresh within value
6cf7bf96 [ox/std] Hopefully fix MSVC build
e34df255 [nostalgia] Update developer-handbook non-error return
7eab2f92 [studio/modlib] Comment out logging in configio
3824788a [ox/std] Add non-const operator[] to Pair
1eac7e1e [ox/std] Add Pair
8798d2d7 [nostalgia/core] Fix getTileIdx(TileSheet, SubSheetId)
f82db690 [nostalgia/core] Make load TileSheet functions take CompactTileSheet, in addition to FileAddresses
0dfa7c30 [studio/modlib] Make TaskRunner check that task is not null
2afade24 Merge commit 'fc2dec64389824a251fb258f6fd0a9074e521cc2'
3635702e [nostalgia] Cleanup config IO
6cbafc75 [nostalgia,keel] Make repair return ox::Error
0d7b89a0 [turbine] Add TimeMs alias to uint64_t
e8f5c911 [studio/applib] Change updateHandler to 10 second interval
3cb3bc12 [nostalgia/core] Add valid and repair functions for PaletteV3
a2cec10c [keel] Add valid and repair functions for AssetManager

git-subtree-dir: deps/nostalgia
git-subtree-split: 3b874c6e6aa0b80783fc9d712c31bc837326337c
This commit is contained in:
2024-06-18 00:50:59 -05:00
parent fc2dec6438
commit 2da3579818
24 changed files with 240 additions and 253 deletions

View File

@@ -14,6 +14,8 @@
namespace turbine {
using TimeMs = uint64_t;
ox::Result<ContextUPtr> init(ox::UPtr<ox::FileSystem> &&fs, ox::CRStringView appName) noexcept;
ox::Error run(Context &ctx) noexcept;
@@ -21,7 +23,7 @@ ox::Error run(Context &ctx) noexcept;
// Returns the number of milliseconds that have passed since the start of the
// program.
[[nodiscard]]
uint64_t ticksMs(Context const&ctx) noexcept;
TimeMs ticksMs(Context const&ctx) noexcept;
void requestShutdown(Context &ctx) noexcept;

View File

@@ -8,6 +8,7 @@
#include <keel/keel.hpp>
#include <turbine/context.hpp>
#include <turbine/gfx.hpp>
#include <turbine/turbine.hpp>
#include "context.hpp"
#include "turbine.hpp"
@@ -71,7 +72,7 @@ ox::Result<ContextUPtr> init(
void shutdown(Context&) noexcept {
}
uint64_t ticksMs(Context const&) noexcept {
TimeMs ticksMs(Context const&) noexcept {
return g_timerMs;
}

View File

@@ -8,12 +8,13 @@
#include <turbine/context.hpp>
#include <turbine/gfx.hpp>
#include <turbine/event.hpp>
#include <turbine/turbine.hpp>
namespace turbine {
class Context {
public:
UpdateHandler updateHandler = [](Context&) -> int {return 0;};
UpdateHandler updateHandler = [](Context&) -> int {return -1;};
keel::Context keelCtx;
KeyEventHandler keyEventHandler = nullptr;
ox::AnyPtr applicationData;
@@ -24,7 +25,7 @@ class Context {
struct GLFWwindow *window = nullptr;
int refreshWithinMs = 0;
ox::Vector<gl::Drawer*, 5> drawers;
int64_t startTime = 0;
TimeMs startTime = 0;
uint64_t wakeupTime = 0;
uint64_t keysDown = 0;
uint64_t prevFpsCheckTime = 0;

View File

@@ -45,7 +45,8 @@ ox::Result<ContextUPtr> init(
auto ctx = ox::make_unique<Context>();
oxReturnError(keel::init(ctx->keelCtx, std::move(fs), appName));
using namespace std::chrono;
ctx->startTime = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
ctx->startTime = static_cast<TimeMs>(
duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count());
glfwInit();
oxReturnError(initGfx(*ctx));
glfwSetWindowSizeCallback(ctx->window, draw);
@@ -67,24 +68,26 @@ static void tickFps(Context &ctx, uint64_t nowMs) noexcept {
}
ox::Error run(Context &ctx) noexcept {
int sleepTime = 0;
uint64_t sleepTime = 0;
while (!glfwWindowShouldClose(ctx.window)) {
ctx.refreshWithinMs = 10 * 1000; // refresh within 10 seconds
glfwPollEvents();
auto const ticks = ticksMs(ctx);
if (ctx.wakeupTime <= ticks) {
sleepTime = ctx.updateHandler(ctx);
if (sleepTime >= 0) {
ctx.wakeupTime = ticks + static_cast<unsigned>(sleepTime);
auto const st = ctx.updateHandler(ctx);
if (st >= 0) {
ctx.wakeupTime = ticks + static_cast<unsigned>(st);
sleepTime = static_cast<uint64_t>(st);
} else {
ctx.wakeupTime = ~uint64_t(0);
sleepTime = ctx.wakeupTime - ticks;
}
} else {
sleepTime = static_cast<int>(ctx.wakeupTime - ticks);
sleepTime = ctx.wakeupTime - ticks;
}
tickFps(ctx, ticks);
draw(ctx);
auto const realSleepTime = ox::min(ctx.refreshWithinMs, sleepTime);
auto const realSleepTime = ox::min(static_cast<uint64_t>(ctx.refreshWithinMs), sleepTime);
if (realSleepTime) {
if (ctx.uninterruptedRefreshes) {
--ctx.uninterruptedRefreshes;
@@ -108,10 +111,10 @@ void shutdown(Context &ctx) noexcept {
}
}
uint64_t ticksMs(Context const&ctx) noexcept {
TimeMs ticksMs(Context const&ctx) noexcept {
using namespace std::chrono;
auto const now = duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
return static_cast<uint64_t>(now - ctx.startTime);
return static_cast<TimeMs>(now) - ctx.startTime;
}
bool buttonDown(Context const&ctx, Key key) noexcept {