summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/level.cpp15
-rw-r--r--src/level.h10
-rw-r--r--src/main.cpp4
3 files changed, 16 insertions, 13 deletions
diff --git a/src/level.cpp b/src/level.cpp
index e09f74a..22f861b 100644
--- a/src/level.cpp
+++ b/src/level.cpp
@@ -1,6 +1,7 @@
#include "level.h"
#include <algorithm>
+#include <cstring>
#include <fstream>
#include <iostream>
@@ -33,8 +34,8 @@ void Level::set(int x, int y, uint8_t tile)
void Level::update()
{
- for (auto& vehicle : m_vehicles) {
- vehicle.update();
+ for (const auto& vehicle : m_vehicles) {
+ vehicle->update();
}
}
@@ -77,12 +78,12 @@ void Level::draw(Bitmap& bitmap, int xo, int yo)
for (int y = 0; y < m_height; ++y) {
for (int x = 0; x < m_width; ++x) {
auto isInTile = [x, y](const auto& vehicle) {
- return vehicle.getSpritePosition().x == x && vehicle.getSpritePosition().y == y;
+ return vehicle->getSpritePosition().x == x && vehicle->getSpritePosition().y == y;
};
auto vehiclesInTile = std::find_if(m_vehicles.begin(), m_vehicles.end(), isInTile);
while (vehiclesInTile != m_vehicles.end()) {
- vehiclesInTile->draw(bitmap, xo, yo);
+ vehiclesInTile->get()->draw(bitmap, xo, yo);
vehiclesInTile = std::find_if(++vehiclesInTile, m_vehicles.end(), isInTile);
}
@@ -97,9 +98,11 @@ void Level::draw(Bitmap& bitmap, int xo, int yo)
}
}
-Train& Level::addVehicle()
+void Level::addVehicle(int x, int y)
{
- return m_vehicles.emplace_back(*this);
+ auto& ptr = m_vehicles.emplace_back(std::make_unique<Train>(*this));
+ ptr->setPosition(x, y);
+ ptr->setSpeed(0.2f);
}
void Level::toggleTile(int x, int y)
diff --git a/src/level.h b/src/level.h
index 7bd52e2..fa6376d 100644
--- a/src/level.h
+++ b/src/level.h
@@ -1,10 +1,11 @@
#pragma once
-#include "bitmap.h"
#include <cstdint>
-#include <cstring>
+#include <memory>
#include <vector>
+#include "bitmap.h"
+
#define TILE_TYPE(x) ((x)&0xf)
#define TILE_DATA(x) (x >> 4 & 0xf)
#define MAKE_TILE(t, d) ((((d)&0xf) << 4) + ((t)&0xf))
@@ -38,17 +39,18 @@ public:
void update();
void draw(Bitmap& bitmap, int xo, int yo);
- Train& addVehicle();
+ void addVehicle(int x, int y);
void toggleTile(int x, int y);
void save() const;
void load();
+
private:
Bitmap& m_tileSprites;
int m_width, m_height;
uint8_t* m_tiles;
- std::vector<Train> m_vehicles;
+ std::vector<std::unique_ptr<Train>> m_vehicles;
};
TrackDirection ChooseDirection(Level& level, int x, int y);
diff --git a/src/main.cpp b/src/main.cpp
index dcd5975..25e6fea 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -46,9 +46,7 @@ int main(int argc, char** argv)
int my = y / Scale + yOffs;
auto pos = ScreenToTile({ mx, my });
- Train& train = level.addVehicle();
- train.setPosition(pos.x, pos.y);
- train.setSpeed(0.2f);
+ level.addVehicle(pos.x, pos.y);
}
});