summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/level.cpp4
-rw-r--r--src/level.h2
-rw-r--r--src/main.cpp8
-rw-r--r--src/train.cpp4
-rw-r--r--src/train.h2
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);