diff --git a/sources/Map/Map.cpp b/sources/Map/Map.cpp index 464e0cb3..c90609f4 100644 --- a/sources/Map/Map.cpp +++ b/sources/Map/Map.cpp @@ -11,8 +11,8 @@ namespace BBM { void MapGenerator::generateUnbreakableBlock(int width, int height, std::shared_ptr scene) { - std::string UnbreakableObj = "assets/wall/unbreakable_wall.obj"; - std::string UnbreakablePnj = "assets/wall/unbreakable_wall.png"; + std::string unbreakableObj = "assets/wall/unbreakable_wall.obj"; + std::string unbreakablePnj = "assets/wall/unbreakable_wall.png"; for (int i = 0; i < width + 1; i++) { for (int j = 0; j < height + 1; j++) { @@ -20,7 +20,7 @@ namespace BBM scene->addEntity("Unbreakable Wall") .addComponent(Vector3f(i, 0, j)) //.addComponent(1) - .addComponent>(UnbreakableObj, std::make_pair(MAP_DIFFUSE, UnbreakablePnj)); + .addComponent>(unbreakableObj, std::make_pair(MAP_DIFFUSE, unbreakablePnj)); } } } @@ -28,25 +28,25 @@ namespace BBM void MapGenerator::generateWall(int width, int height, std::shared_ptr scene) { - std::string UnbreakableObj = "assets/wall/unbreakable_wall.obj"; - std::string UnbreakablePnj = "assets/wall/unbreakable_wall.png"; + std::string unbreakableObj = "assets/wall/unbreakable_wall.obj"; + std::string unbreakablePnj = "assets/wall/unbreakable_wall.png"; scene->addEntity("Bottom Wall") .addComponent(Vector3f((width + 1) / 2, 0, -1)) //.addComponent(1) - .addComponent>(UnbreakableObj, std::make_pair(MAP_DIFFUSE, UnbreakablePnj), RAY::Vector3(width + 3, 1, 1)); + .addComponent>(unbreakableObj, std::make_pair(MAP_DIFFUSE, unbreakablePnj), RAY::Vector3(width + 3, 1, 1)); scene->addEntity("Upper Wall") .addComponent(Vector3f((width + 1) / 2, 0, height + 1)) //.addComponent(1) - .addComponent>(UnbreakableObj, std::make_pair(MAP_DIFFUSE, UnbreakablePnj), RAY::Vector3(width + 3, 1, 1)); + .addComponent>(unbreakableObj, std::make_pair(MAP_DIFFUSE, unbreakablePnj), RAY::Vector3(width + 3, 1, 1)); scene->addEntity("Left Wall") .addComponent(Vector3f(width + 1, 0, (height + 1) / 2)) //.addComponent(1) - .addComponent>(UnbreakableObj, std::make_pair(MAP_DIFFUSE, UnbreakablePnj), RAY::Vector3(1, 1, height + 3)); + .addComponent>(unbreakableObj, std::make_pair(MAP_DIFFUSE, unbreakablePnj), RAY::Vector3(1, 1, height + 3)); scene->addEntity("Right Wall") .addComponent(Vector3f(-1, 0, (height + 1) / 2)) //.addComponent(1) - .addComponent>(UnbreakableObj, std::make_pair(MAP_DIFFUSE, UnbreakablePnj), RAY::Vector3(1, 1, height + 3)); + .addComponent>(unbreakableObj, std::make_pair(MAP_DIFFUSE, unbreakablePnj), RAY::Vector3(1, 1, height + 3)); } void MapGenerator::generateFloor(int width, int height, std::shared_ptr scene) @@ -145,35 +145,37 @@ namespace BBM MapGenerator::BlockType MapGenerator::getRandomBlockType() { - double rnd = static_cast(std::rand())/RAND_MAX; + double rnd = static_cast(std::rand())/RAND_MAX; if (rnd > 0.95) return HOLE; if (rnd > 0.10) return BREAKABLE; - return NOTHING; + return NOTHING; } MapGenerator::MapBlock MapGenerator::createHeight(MapBlock map, int width, int height) { double rnd = static_cast(std::rand())/RAND_MAX; - if (rnd > 0.60) + if (rnd > 0.60) { for (int i = 0; i < width; i++) { map[std::make_tuple(i, 1, height)] = map[std::make_tuple(i, 0, height)]; - map[std::make_tuple(i, 0, height)] = NOTHING; + map[std::make_tuple(i, 0, height)] = FLOOR; } for (int j = 0; j < height; j++) { map[std::make_tuple(width, 1, j)] = map[std::make_tuple(width, 0, j)]; - map[std::make_tuple(width, 0, j)] = NOTHING; + map[std::make_tuple(width, 0, j)] = FLOOR; } - if (rnd > 0.30) + } + if (rnd > 0.30) { for (int i = width - width/4; i < width + width/4 + 1; i++) { for (int j = height - height/4; j < height + height/4 + 1; j++) { map[std::make_tuple(i, 1, j)] = map[std::make_tuple(i, 0, j)]; - map[std::make_tuple(i, 0, j)] = NOTHING; + map[std::make_tuple(i, 0, j)] = FLOOR; } } + } return map; } @@ -193,39 +195,44 @@ namespace BBM width = width % 2 ? width + 1 : width; height = height % 2 ? height + 1 : height; - for (int i = 0; i < width; i++) + for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) map[std::make_tuple(i, 0, j)] = NOTHING; + } map = createSpawner(map, width, height); for (int i = 0; i < width + 1; i++) { for (int j = 0; j < height + 1; j++) { if (map[std::make_tuple(i, 0, j)] == SPAWNER) continue; - if (isCloseToBlockType(map, i , 0, j, SPAWNER)) { + if (isCloseToBlockType(map, i , 0, j, SPAWNER)) map[std::make_tuple(i, 0, j)] = NOTHING; - } else { + else map[std::make_tuple(i, 0, j)] = getRandomBlockType(); - } if (map[std::make_tuple(i, 0, j)] == UNBREAKABLE && isCloseToBlockType(map, i, 0, j, UNBREAKABLE)) map[std::make_tuple(i, 0, j)] = BREAKABLE; } } - for (int i = 0; i < width + 1; i++) - for (int j = 0; j < height + 1; j++) + for (int i = 0; i < width + 1; i++) { + for (int j = 0; j < height + 1; j++) { if (!((i + 1) % 2) && !((j + 1) % 2)) map[std::make_tuple(i, 0, j)] = UNBREAKABLE; + } + } + map = createHeight(map, width, height); return (map); } - void MapGenerator::loadMap(int width, int height, std::map, \ -BlockType> map, std::shared_ptr scene) - { + void MapGenerator::loadMap(int width, int height, std::map, + BlockType> map, std::shared_ptr scene) + { generateWall(width, height, scene); generateFloor(width, height, scene); - for (int x = 0; x < width + 1; x++) - for (int z = 0; z < height + 1; z++) + for (int x = 0; x < width + 1; x++) { + for (int z = 0; z < height + 1; z++) { for (int y = 0; y < 1 + 1; y++) createElement(Vector3f(x, y, z), scene, map[std::make_tuple(x, y, z)]); + } + } } } // namespace BBM \ No newline at end of file diff --git a/sources/Map/Map.hpp b/sources/Map/Map.hpp index d8e977e7..962ce7ce 100644 --- a/sources/Map/Map.hpp +++ b/sources/Map/Map.hpp @@ -28,7 +28,6 @@ namespace BBM class MapGenerator { private: - using MapElem = std::function scene)>; //! @brief Enum of the block available. enum BlockType { NOTHING, @@ -41,6 +40,7 @@ namespace BBM UNBREAKABLE }; + using MapElem = std::function scene)>; using MapBlock = std::map, BlockType>; //! @brief Generate random block type