File BiomeGenerator.hpp
File List > source > Worlds > BiomeGenerator.hpp
Go to the documentation of this file
#pragma once
#include <queue>
#include <functional>
#include <vector>
#include "PerlinNoise.hpp"
#include "../core/WorldBase.hpp"
#include "../core/WorldGrid.hpp"
#include "../core/Data.hpp"
namespace group6 {
using siv::PerlinNoise;
using cse491::WorldGrid, cse491::WorldBase, cse491::GridPosition;
enum class BiomeType {
Maze,
Grasslands,
Ocean
};
class BiomeGenerator {
private:
const double frequency = 8.0;
// const int octaves = 8; ///< [1, 16]
PerlinNoise perlinNoise;
BiomeType biome;
unsigned int width;
unsigned int height;
WorldGrid grid;
WorldBase *worldPtr = nullptr;
unsigned int seed;
GridPosition keyLocation;
std::vector<size_t> tiles;
size_t floor_id = 0;
size_t wall_id = 1;
size_t spike_id = 2;
size_t tar_id = 3;
size_t key_id = 4;
size_t door_id = 5;
size_t grass_id = 6;
size_t dirt_id = 7;
size_t tree_id = 8;
size_t sand_id = 11;
size_t water_id = 10;
size_t hole_id = 9;
public:
BiomeGenerator(BiomeType biome, unsigned int width, unsigned int height, unsigned int seed);
~BiomeGenerator() = default;
void setWorld(WorldBase *world);
void generate();
void saveToFile(const std::string &filename) const;
void placeSpecialTiles(const size_t &genericTile, const size_t &specialTile, double percentage);
[[nodiscard]] unsigned int getSeed() const { return seed; }
void setTiles(const size_t &firstTile, const size_t &secondTile);
[[nodiscard]] BiomeType getBiome() const { return biome; }
void placeDoorTile(const size_t &doorTile);
void placeTileRandom(const size_t& tile, const size_t& spawnTile);
[[nodiscard]] std::vector<GridPosition> clearPath() const;
void applyPathToGrid(const std::vector<GridPosition>& path);
void placeTrees();
void oceanHandler();
};
}