PCG Lib
Library for procedural content generation
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
skr::pcg::FloorGenerator Class Reference

Generates a level consisting of rooms. More...

#include <FloorGenerator.h>

Public Member Functions

 FloorGenerator ()
 default constrcutor usess default parameter, does not print seed and sets a random seed More...
 
 FloorGenerator (FloorGeneratorParameter &param)
 constructor using parameter struct uses the specified parameter struct More...
 
std::vector< RoomGetAllGeometry ()
 returns all room in a single list More...
 

Public Attributes

std::vector< Room_floor
 list of regular rooms More...
 
std::vector< Room_hallways
 list of hallways More...
 
Room _startBox
 special room for start More...
 
Room _finishBox
 special room for finish More...
 

Private Member Functions

void StartGeneration ()
 starts generation More...
 
Point3d GenerateCenterRandomPlacement (float minCoord=0.0f, float maxCoord=100.0f)
 randomly places center for a room More...
 
void GenerateRoomsRandomPlacement ()
 place room randomly More...
 
bool IsOverlapping (Room r, Room r2)
 checks if the two rooms are overlapping More...
 
bool IsInside (Room r, Room r2)
 checks if center of second room is inside first room More...
 
bool IsInside (Room r, Point3d p)
 checks if specified point is inside room More...
 
void GenerateRoomsStacking ()
 generate a room layout using the stacking-strategy More...
 
DoorDirection GetRandomDirection ()
 gets a random direction for a door More...
 
DoorDirection GetRandomDirection (std::vector< DoorDirection > dirs)
 gets a random direction from a list of directions More...
 
Room PlaceNewRoom (DoorDirection dir, Room prev, float offX=PCG_DEFAULT_ROOM_STACKING_OFFSET, float offY=PCG_DEFAULT_ROOM_STACKING_OFFSET, float offZ=PCG_DEFAULT_ROOM_STACKING_OFFSET)
 
Room PlaceHallwayBetweenTwoRooms (Room curr, Room prev, float offX=PCG_DEFAULT_ROOM_STACKING_OFFSET, float offY=PCG_DEFAULT_ROOM_STACKING_OFFSET, float offZ=PCG_DEFAULT_ROOM_STACKING_OFFSET)
 place hallway in the middle of two rooms only works with quadratic rooms More...
 
Room PlaceHallwayBetweenTwoRooms (Room prev, DoorDirection dir, float offX=PCG_DEFAULT_ROOM_STACKING_OFFSET, float offY=PCG_DEFAULT_ROOM_STACKING_OFFSET, float offZ=PCG_DEFAULT_ROOM_STACKING_OFFSET)
 place hallway between two rooms uses size and direction to place between rectangular rooms correctly More...
 
Room PlaceSpecialRoom (Room &prev, RoomType rt, DoorDirection dir)
 place special room More...
 

Private Attributes

FloorGeneratorParameter _param
 parameter struct used for generation More...
 
RNG _rng
 random number generator used for generation More...
 

Detailed Description

Generates a level consisting of rooms.

Constructor & Destructor Documentation

◆ FloorGenerator() [1/2]

skr::pcg::FloorGenerator::FloorGenerator ( )

default constrcutor usess default parameter, does not print seed and sets a random seed

◆ FloorGenerator() [2/2]

skr::pcg::FloorGenerator::FloorGenerator ( FloorGeneratorParameter param)

constructor using parameter struct uses the specified parameter struct

Parameters
paramreference to parameter struct

Member Function Documentation

◆ GenerateCenterRandomPlacement()

std::array< float, 3 > skr::pcg::FloorGenerator::GenerateCenterRandomPlacement ( float  minCoord = 0.0f,
float  maxCoord = 100.0f 
)
private

randomly places center for a room

Parameters
minCoordminimum coordinate, default 0.0f
maxCoordmaximum coordinate, default 100.0f
Returns
coordinate

◆ GenerateRoomsRandomPlacement()

void skr::pcg::FloorGenerator::GenerateRoomsRandomPlacement ( )
private

place room randomly

◆ GenerateRoomsStacking()

void skr::pcg::FloorGenerator::GenerateRoomsStacking ( )
private

generate a room layout using the stacking-strategy

◆ GetAllGeometry()

std::vector< skr::pcg::Room > skr::pcg::FloorGenerator::GetAllGeometry ( )

returns all room in a single list

Returns
list of all rooms: regular, hallways and special (start and finish)

◆ GetRandomDirection() [1/2]

skr::pcg::DoorDirection skr::pcg::FloorGenerator::GetRandomDirection ( )
private

gets a random direction for a door

Returns
random DoorDirection

◆ GetRandomDirection() [2/2]

skr::pcg::DoorDirection skr::pcg::FloorGenerator::GetRandomDirection ( std::vector< DoorDirection dirs)
private

gets a random direction from a list of directions

Parameters
dirslist of DoorDirections to choose from
Returns
random DoorDirection

◆ IsInside() [1/2]

bool skr::pcg::FloorGenerator::IsInside ( Room  r,
Point3d  p 
)
private

checks if specified point is inside room

Parameters
rroom
ppoint
Returns
true if point inside room, otherwise false

◆ IsInside() [2/2]

bool skr::pcg::FloorGenerator::IsInside ( Room  r,
Room  r2 
)
private

checks if center of second room is inside first room

Parameters
rfirst room
r2second room
Returns
true if center of second room inside first room, otherwise false

◆ IsOverlapping()

bool skr::pcg::FloorGenerator::IsOverlapping ( Room  r,
Room  r2 
)
private

checks if the two rooms are overlapping

Parameters
rfirst room
r2second room
Returns
true if rooms overlap, otherwise false

◆ PlaceHallwayBetweenTwoRooms() [1/2]

skr::pcg::Room skr::pcg::FloorGenerator::PlaceHallwayBetweenTwoRooms ( Room  curr,
Room  prev,
float  offX = PCG_DEFAULT_ROOM_STACKING_OFFSET,
float  offY = PCG_DEFAULT_ROOM_STACKING_OFFSET,
float  offZ = PCG_DEFAULT_ROOM_STACKING_OFFSET 
)
private

place hallway in the middle of two rooms only works with quadratic rooms

Parameters
currcurrent room
prevprevious room
offXoffset in x-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
offYoffset in y-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
offZoffset in z-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
Returns
new room

◆ PlaceHallwayBetweenTwoRooms() [2/2]

skr::pcg::Room skr::pcg::FloorGenerator::PlaceHallwayBetweenTwoRooms ( Room  prev,
DoorDirection  dir,
float  offX = PCG_DEFAULT_ROOM_STACKING_OFFSET,
float  offY = PCG_DEFAULT_ROOM_STACKING_OFFSET,
float  offZ = PCG_DEFAULT_ROOM_STACKING_OFFSET 
)
private

place hallway between two rooms uses size and direction to place between rectangular rooms correctly

Parameters
prevprevious room
dirdirection hallways is placed in relation to previous room
offXoffset in x-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
offYoffset in y-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
offZoffset in z-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
Returns
new room

◆ PlaceNewRoom()

skr::pcg::Room skr::pcg::FloorGenerator::PlaceNewRoom ( DoorDirection  dir,
Room  prev,
float  offX = PCG_DEFAULT_ROOM_STACKING_OFFSET,
float  offY = PCG_DEFAULT_ROOM_STACKING_OFFSET,
float  offZ = PCG_DEFAULT_ROOM_STACKING_OFFSET 
)
private

\brief places a new room

Parameters
dirdirection in which new room is placed
prevprevious room to place new room off
offXoffset in x-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
offYoffset in y-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
offZoffset in z-axis, default PCG_DEFAULT_ROOM_STACKING_OFFSET
Returns
new room

◆ PlaceSpecialRoom()

skr::pcg::Room skr::pcg::FloorGenerator::PlaceSpecialRoom ( Room prev,
RoomType  rt,
DoorDirection  dir 
)
private

place special room

Parameters
prevreference to previous room
rttype of new special room
dirdirection special room is placed in relation to previous room
Returns
special room

◆ StartGeneration()

void skr::pcg::FloorGenerator::StartGeneration ( )
private

starts generation

Member Data Documentation

◆ _finishBox

Room skr::pcg::FloorGenerator::_finishBox

special room for finish

◆ _floor

std::vector<Room> skr::pcg::FloorGenerator::_floor

list of regular rooms

◆ _hallways

std::vector<Room> skr::pcg::FloorGenerator::_hallways

list of hallways

◆ _param

FloorGeneratorParameter skr::pcg::FloorGenerator::_param
private

parameter struct used for generation

◆ _rng

RNG skr::pcg::FloorGenerator::_rng
private

random number generator used for generation

◆ _startBox

Room skr::pcg::FloorGenerator::_startBox

special room for start


The documentation for this class was generated from the following files: