summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcflip <cflip@cflip.net>2022-03-03 20:30:10 -0700
committercflip <cflip@cflip.net>2022-03-03 20:30:10 -0700
commitd198dd25af201aaacc7782f4bd36d2cfa5f0c05b (patch)
tree541fec3336c5090d8be8390ddae8fb47002df3b1
parent4ccfcb2c394b1e2b9e0e521c713444c952b91edf (diff)
Keep list of all vehicles in Level class
Newly created vehicles are now to be added to the Level, which automatically updates and renders them. This infrastructure will be needed for depth sorting and eventually level saving.
-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;