This repository has been archived on 2019-12-07. You can view files and clone it, but cannot push or open issues or pull requests.
dungeon-gunner/source/generator/Generator.h

60 lines
1.7 KiB
C++

/*
* Generator.h
*
* Created on: 07.04.2013
* Author: Felix
*/
#ifndef DG_GENERATOR_H_
#define DG_GENERATOR_H_
#include <SFML/Graphics.hpp>
#include "../sprites/Tile.h"
#include "SimplexNoise.h"
#include "../util/Vector.h"
class World;
class Pathfinder;
/**
* Procedurally generates tiles, chooses player and enemy spawn positions.
*/
class Generator : public sf::Drawable {
public:
explicit Generator(World& world, Pathfinder& pathfinder);
void generateCurrentAreaIfNeeded(const Vector2f& position);
Vector2f getPlayerSpawn() const;
std::vector<Vector2f> getEnemySpawns(const sf::IntRect& area);
private:
typedef std::map<int, std::map<int, Tile::Type> > array;
private:
void generateAreas(const sf::IntRect& area);
void generateTiles(const sf::IntRect& area);
Vector2i findClosestFloor(const Vector2i& start) const;
std::vector<Vector2i> createMinimalSpanningTree(
const Vector2i& start, const float limit);
void connectRooms(const Vector2i& start, float limit);
void draw(sf::RenderTarget& target, sf::RenderStates states) const;
private:
static const int GENERATE_AREA_SIZE;
static const float GENERATE_AREA_RANGE;
World& mWorld;
Pathfinder& mPathfinder;
/// Contains values of all tiles that have yet been generated.
array mTiles;
/// Stores where tiles have already been generated.
std::map<int, std::map<int, bool> > mGenerated;
/// Perlin noise used for tile generation.
SimplexNoise mTileNoise;
/// Perlin noise used for character placement.
SimplexNoise mCharacterNoise;
/// Used only for debug drawing.
std::vector<std::vector<Vector2i> > mPaths;
};
#endif /* DG_GENERATOR_H_ */