diff options
author | cflip <cflip@cflip.net> | 2022-04-01 21:23:01 -0600 |
---|---|---|
committer | cflip <cflip@cflip.net> | 2022-04-01 21:23:01 -0600 |
commit | 3ee74cdb1b4fd2bf9eefdf6bcd8439b27cbb7336 (patch) | |
tree | 4c58b1cae03df912d2be17b077ab1810fcb3627b | |
parent | 7803be09b7c0a133b1009408fea2fb1f1474e786 (diff) |
This adds a delta time that ensures that everything moves at the same
speed regardless of framerate or system.
-rw-r--r-- | src/level.cpp | 4 | ||||
-rw-r--r-- | src/level.h | 2 | ||||
-rw-r--r-- | src/main.cpp | 8 | ||||
-rw-r--r-- | src/train.cpp | 4 | ||||
-rw-r--r-- | src/train.h | 2 |
5 files changed, 13 insertions, 7 deletions
diff --git a/src/level.cpp b/src/level.cpp index 22f861b..43ca215 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -32,10 +32,10 @@ void Level::set(int x, int y, uint8_t tile) m_tiles[x + y * m_width] = tile; } -void Level::update() +void Level::update(float deltaTime) { for (const auto& vehicle : m_vehicles) { - vehicle->update(); + vehicle->update(deltaTime); } } diff --git a/src/level.h b/src/level.h index fa6376d..c706b06 100644 --- a/src/level.h +++ b/src/level.h @@ -36,7 +36,7 @@ public: void set(int x, int y, uint8_t tile); bool inBounds(int x, int y) const { return x >= 0 && x < m_width && y >= 0 && y < m_height; } - void update(); + void update(float deltaTime); void draw(Bitmap& bitmap, int xo, int yo); void addVehicle(int x, int y); diff --git a/src/main.cpp b/src/main.cpp index 25e6fea..b417b45 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,6 +5,7 @@ #include "window.h" #include <SDL_keycode.h> +#include <chrono> int main(int argc, char** argv) { @@ -107,7 +108,12 @@ int main(int argc, char** argv) } }); + auto lastTime = std::chrono::high_resolution_clock::now(); while (!window.shouldClose()) { + auto now = std::chrono::high_resolution_clock::now(); + float deltaTime = std::chrono::duration_cast<std::chrono::duration<float>>(now - lastTime).count() * 100; + lastTime = now; + window.update(); bitmap.clear(0xff224466); @@ -116,7 +122,7 @@ int main(int argc, char** argv) if (left) xOffs -= cameraMoveSpeed; if (right) xOffs += cameraMoveSpeed; - level.update(); + level.update(deltaTime); level.draw(bitmap, xOffs, yOffs); int xx = (hoveredTile.x - hoveredTile.y) * (TileSize / 2) - xOffs; diff --git a/src/train.cpp b/src/train.cpp index 43ebe8a..8507af0 100644 --- a/src/train.cpp +++ b/src/train.cpp @@ -7,7 +7,7 @@ static const Bitmap SPRITES("res/car.png"); -void Train::update() +void Train::update(float deltaTime) { if (m_next) { m_speed = m_next->m_speed; @@ -20,7 +20,7 @@ void Train::update() m_speed *= m_acceleration; if (m_progress < 1.f) { - m_progress += m_speed; + m_progress += m_speed * deltaTime; return; } diff --git a/src/train.h b/src/train.h index c496db8..9e064df 100644 --- a/src/train.h +++ b/src/train.h @@ -10,7 +10,7 @@ public: explicit Train(Level& level) : m_level(level) { } - void update(); + void update(float deltaTime); void draw(Bitmap&, int, int); void setPosition(int x, int y); |