diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/level.cpp | 15 | ||||
| -rw-r--r-- | src/level.h | 10 | ||||
| -rw-r--r-- | src/main.cpp | 4 | 
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);  		}  	}); | 
