diff --git a/source/core/timer/timer.hpp b/source/core/timer/timer.hpp new file mode 100644 index 0000000..8913875 --- /dev/null +++ b/source/core/timer/timer.hpp @@ -0,0 +1,25 @@ +// timer.hpp + +#pragma once + +#include + +#include + +class Timer { + public: + void start() { + last_ticks_ms_ = SDL_GetTicks(); + } + + auto getDelta() -> int { + const Uint64 NOW_MS = SDL_GetTicks(); + int delta_ms = static_cast(NOW_MS - last_ticks_ms_); + delta_ms = std::max(delta_ms, 0); + last_ticks_ms_ = NOW_MS; + return delta_ms; + } + + private: + Uint64 last_ticks_ms_{0}; +}; diff --git a/source/game/director.cpp b/source/game/director.cpp index 54c98d0..69e2e90 100644 --- a/source/game/director.cpp +++ b/source/game/director.cpp @@ -2,6 +2,8 @@ #include "director.hpp" +#include + #include "core/rendering/video.hpp" #include "defaults.hpp" #include "game/scenes/scenes.hpp" @@ -18,6 +20,7 @@ Director::Director() { Defaults::Video::ZOOM, Defaults::Video::WIDTH, Defaults::Video::HEIGHT}); + timer_ = std::make_unique(); // Inicializa el contexto context_.video = video_.get(); @@ -35,8 +38,8 @@ Director::~Director() { auto Director::iterate() -> int { while (scene_) { scene_->render(); - switch (scene_->update()) { - case Scenes::CONTINUE: + switch (scene_->update(timer_->getDelta())) { + case Scenes::ACTION_CONTINUE: break; case Scenes::LOGO: break; @@ -47,7 +50,7 @@ auto Director::iterate() -> int { case Scenes::TEST: scene_ = std::make_unique(context_); break; - case Scenes::QUIT: + case Scenes::ACTION_QUIT: scene_.reset(); break; } diff --git a/source/game/director.hpp b/source/game/director.hpp index 6fb8e94..ef5ac7c 100644 --- a/source/game/director.hpp +++ b/source/game/director.hpp @@ -5,6 +5,7 @@ #include #include "core/rendering/video.hpp" +#include "core/timer/timer.hpp" #include "game/scenes/scene.hpp" #include "gamecontext.hpp" @@ -20,6 +21,7 @@ class Director { // Core std::unique_ptr