summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/level.cpp17
-rw-r--r--src/level.h8
-rw-r--r--src/main.cpp10
3 files changed, 30 insertions, 5 deletions
diff --git a/src/level.cpp b/src/level.cpp
index 54cf7f0..92ec208 100644
--- a/src/level.cpp
+++ b/src/level.cpp
@@ -1,4 +1,5 @@
#include "level.h"
+#include "train.h"
#include "util.h"
Level::Level(int width, int height, Bitmap& tileSprites)
@@ -23,6 +24,13 @@ void Level::set(int x, int y, uint8_t tile)
m_tiles[x + y * m_width] = tile;
}
+void Level::update()
+{
+ for (Train* vehicle : m_vehicles) {
+ if (vehicle) vehicle->update();
+ }
+}
+
void Level::draw(Bitmap& bitmap, int xo, int yo)
{
for (int y = 0; y < 32; ++y) {
@@ -58,6 +66,15 @@ void Level::draw(Bitmap& bitmap, int xo, int yo)
bitmap.blit(m_tileSprites, xx, yy, tx * TileSize, ty * TileSize, TileSize, TileSize);
}
}
+
+ for (Train* vehicle : m_vehicles) {
+ if (vehicle) vehicle->draw(bitmap, xo, yo);
+ }
+}
+
+void Level::addVehicle(Train& vehicle)
+{
+ m_vehicles.emplace_back(&vehicle);
}
void Level::toggleTile(int x, int y)
diff --git a/src/level.h b/src/level.h
index 897daa5..e915da3 100644
--- a/src/level.h
+++ b/src/level.h
@@ -3,6 +3,9 @@
#include "bitmap.h"
#include <cstdint>
#include <cstring>
+#include <vector>
+
+class Train;
class Level {
public:
@@ -13,13 +16,18 @@ 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 draw(Bitmap& bitmap, int xo, int yo);
+
+ void addVehicle(Train&);
void toggleTile(int x, int y);
private:
Bitmap& m_tileSprites;
int m_width, m_height;
uint8_t* m_tiles;
+
+ std::vector<Train*> m_vehicles;
};
enum RailDirection {
diff --git a/src/main.cpp b/src/main.cpp
index 0dd2dea..9281b2c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -15,11 +15,15 @@ int main(int argc, char** argv)
Level level(32, 32, tiles);
Bitmap bitmap(Width, Height);
+
Train engine(level);
Train wagon(level);
engine.addVehicle(&wagon);
+ level.addVehicle(engine);
+ level.addVehicle(wagon);
+
int xOffs = 0, yOffs = 0;
int xDrag, yDrag;
Point2D hoveredTile = { 0, 0 };
@@ -65,12 +69,8 @@ int main(int argc, char** argv)
window.update();
bitmap.clear(0xff224466);
+ level.update();
level.draw(bitmap, xOffs, yOffs);
- engine.update(level);
- engine.draw(bitmap, xOffs, yOffs);
-
- wagon.update(level);
- wagon.draw(bitmap, xOffs, yOffs);
int xx = (hoveredTile.x - hoveredTile.y) * (TileSize / 2) - xOffs;
int yy = (hoveredTile.x + hoveredTile.y) * (TileSize / 4) - yOffs;