#ifndef BIOMECOLLECTION_H #define BIOMECOLLECTION_H #include #include #include #include "Biome.h" #include "Block.h" #include "Chunk.h" #include "Maths/Vec2.h" class BiomeCollection { public: inline BiomeCollection() { m_collection.emplace("grassland", std::make_unique( static_cast(BlockType::Stone), // underground block 20, // water level static_cast(BlockType::Water), // Block to place at water level static_cast(BlockType::Dirt), // intermediary block std::map>>{ {17, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Dirt}}}, // place a dirt block at surface is height <= 17 {23, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Sand}}}, // place a sand block at surface if height > 17 && <= 23 {125, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Grass}}}, {132, std::pair>{BlockPlacementType::PseudoRandom, std::vector{BlockType::SnowyGrass, BlockType::Grass}}}, // Place randomly one of the two blocks at the surface {140, std::pair>{BlockPlacementType::PseudoRandom, std::vector{BlockType::Snow, BlockType::SnowyGrass}}}, {255, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Snow}}} // ALWAYS put a block to 255 } )); m_collection.emplace("tundra", std::make_unique( static_cast(BlockType::Stone), 20, static_cast(BlockType::Water), static_cast(BlockType::Stone), std::map>>{ {17, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Dirt}}}, {20, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Ice}}}, {23, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Snow}}}, {120, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::SnowyGrass}}}, {140, std::pair>{BlockPlacementType::PseudoRandom, std::vector{BlockType::Snow, BlockType::SnowyGrass}}}, {255, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Snow}}} } )); m_collection.emplace("desert", std::make_unique( static_cast(BlockType::Stone), 20, static_cast(BlockType::Water), static_cast(BlockType::SandStone), std::map>>{ {120, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Sand}}}, {140, std::pair>{BlockPlacementType::PseudoRandom, std::vector{BlockType::Sand, BlockType::SandStone}}}, {255, std::pair>{BlockPlacementType::Simple, std::vector{BlockType::Sand}}} } )); }; const std::array GetBiomeBlocks(std::string biome, std::uint32_t height, Scop::Vec2i pos) const; ~BiomeCollection() = default; private: std::unordered_map> m_collection; }; #endif