diff --git a/demos/demo1-wireframes/src/wirescene.cpp b/demos/demo1-wireframes/src/wirescene.cpp index bad47e6..db01b35 100644 --- a/demos/demo1-wireframes/src/wirescene.cpp +++ b/demos/demo1-wireframes/src/wirescene.cpp @@ -4,6 +4,7 @@ #include #include +#include #include "wirescene.h" @@ -19,6 +20,7 @@ Camera WireScene::camera() { return Camera(VectorFx::fromInt(0, 0, 10), VectorFx::fromInt(0, 0, 0)); } +int msecs = 1; void WireScene::load() { foregroundPalette = std::unique_ptr(new ForegroundPaletteManager()); backgroundPalette = std::unique_ptr(new BackgroundPaletteManager(pal, sizeof(pal))); @@ -46,9 +48,17 @@ void WireScene::load() { cube->addFace({ 0, 4, 7}); cube->addFace({ 4, 5, 6}); cube->addFace({ 4, 6, 7}); + + engine->getTimer()->start(); } void WireScene::tick(u16 keys) { + int curmsecs = engine->getTimer()->getMsecs(); + int elapsed = curmsecs - msecs; + msecs = curmsecs; + + TextStream::instance().setText(std::to_string(1000 / elapsed) + std::string(" FPS"), 1, 1); + cube->rotate(2, 2); if(keys & KEY_A) { diff --git a/engine/include/libgba-sprite-engine/timer.h b/engine/include/libgba-sprite-engine/timer.h index 7389318..154e5ae 100644 --- a/engine/include/libgba-sprite-engine/timer.h +++ b/engine/include/libgba-sprite-engine/timer.h @@ -31,10 +31,10 @@ public: std::string to_string(); int getTotalMsecs(); - int getMsecs() { return msecs; } - int getSecs() { return secs; } - int getMinutes() { return minutes; } - int getHours() { return hours; } + inline int getMsecs() { return msecs; } + inline int getSecs() { return secs; } + inline int getMinutes() { return minutes; } + inline int getHours() { return hours; } friend std::ostream& operator<<(std::ostream& os, Timer& timer); }; diff --git a/engine/src/gba_engine.cpp b/engine/src/gba_engine.cpp index 2519497..c162b6c 100644 --- a/engine/src/gba_engine.cpp +++ b/engine/src/gba_engine.cpp @@ -130,12 +130,11 @@ void GBAEngine::update() { // WARNING - keep amount of instructions as minimal as possible in here! u16 keys = readKeys(); - // main scene update loop call. This *might* take a while. - currentScene->tick(keys); // TODO use software interrupt Vsyncing instead of 2 wasteful whiles vsync(); renderClear(); + currentScene->tick(keys); render(); flipPage(); } diff --git a/img/wired.gif b/img/wired.gif new file mode 100644 index 0000000..9bf1d64 Binary files /dev/null and b/img/wired.gif differ diff --git a/img/wireless.gif b/img/wireless.gif new file mode 100644 index 0000000..6886925 Binary files /dev/null and b/img/wireless.gif differ