diff options
-rw-r--r-- | src/level.cpp | 17 | ||||
-rw-r--r-- | src/level.h | 8 | ||||
-rw-r--r-- | src/main.cpp | 10 |
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; |