diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index 672ce26..d4c1cb8 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp @@ -150,8 +150,7 @@ Game::Game() { } Game::~Game() { - std::string data2save = sago::tiled::tilemap2string(data->gameRegion.world.tm); - sago::WriteFileContent("maps/sample1.tmx", data2save); + data->gameRegion.SaveRegion(); } bool Game::IsActive() { diff --git a/src/saland/GameRegion.cpp b/src/saland/GameRegion.cpp index 251a637..0ab547a 100644 --- a/src/saland/GameRegion.cpp +++ b/src/saland/GameRegion.cpp @@ -24,13 +24,25 @@ https://github.com/sago007/saland #include "GameRegion.hpp" GameRegion::GameRegion() { - Init(); + Init(0, 0); } -void GameRegion::Init() { +static std::string createFileName(int x, int y) { + std::string ret = std::string("maps/m")+std::to_string(x)+"x"+std::to_string(y)+".tmx" ; + return ret; +} + +void GameRegion::Init(int x, int y) { + region_x = x; + region_y = y; + mapFileName = createFileName(region_x, region_y); + std::string loadMap = mapFileName; + if (!sago::FileExists(loadMap.c_str())) { + loadMap = "maps/sample1.tmx"; + } b2Vec2 gravity(0.0f, 0.0f); physicsBox.reset(new b2World(gravity)); - world.init(physicsBox); + world.init(physicsBox, loadMap); std::shared_ptr barrel = std::make_shared(); barrel.get()->Radius = 16.0f; @@ -74,5 +86,8 @@ void GameRegion::Init() { } - +void GameRegion::SaveRegion() { + std::string data2save = sago::tiled::tilemap2string(world.tm); + sago::WriteFileContent(mapFileName.c_str(), data2save); +} diff --git a/src/saland/GameRegion.hpp b/src/saland/GameRegion.hpp index 4a7e6e9..476754a 100644 --- a/src/saland/GameRegion.hpp +++ b/src/saland/GameRegion.hpp @@ -31,12 +31,15 @@ https://github.com/sago007/saland class GameRegion { public: GameRegion(); - void Init(); + void Init(int x, int y); std::vector > placeables; std::shared_ptr physicsBox; + void SaveRegion(); World world; private: - + int region_x = 0; + int region_y = 0; + std::string mapFileName = "maps/sample1.tmx"; }; #endif /* GAMEREGION_HPP */ diff --git a/src/saland/model/World.cpp b/src/saland/model/World.cpp index 5217200..91a02a0 100644 --- a/src/saland/model/World.cpp +++ b/src/saland/model/World.cpp @@ -142,13 +142,17 @@ void World::init_physics(std::shared_ptr& world) { } } -void World::init(std::shared_ptr& world) { +void World::init(std::shared_ptr& world, const std::string& mapFileName) { this->physicsWorld = world; std::string tsx_file = sago::GetFileContent("maps/terrain.tsx"); - std::string tmx_file = sago::GetFileContent("maps/sample1.tmx"); + std::string tmx_file = sago::GetFileContent(mapFileName); ts = sago::tiled::string2tileset(tsx_file); tm = sago::tiled::string2tilemap(tmx_file); tm.tileset.alternativeSource = &ts; init_physics(world); } +void World::init(std::shared_ptr& world) { + init(world, "maps/sample1.tmx"); +} + diff --git a/src/saland/model/World.hpp b/src/saland/model/World.hpp index 47a53e7..0567ca6 100644 --- a/src/saland/model/World.hpp +++ b/src/saland/model/World.hpp @@ -32,6 +32,7 @@ class World { public: World(); void init(std::shared_ptr& world); + void init(std::shared_ptr& world, const std::string& mapFileName); void init_physics(std::shared_ptr& world); //private: sago::tiled::TileSet ts;