PCG Lib
Library for procedural content generation
Room.h
Go to the documentation of this file.
1 #ifndef SKR_PCG_ROOM
2 #define SKR_PCG_ROOM
3 
4 #include <array>
5 #include <random>
6 #include <vector>
7 
8 #include "Definitions.h"
9 #include "rng.h"
10 #include "Target.h"
11 
12 namespace skr
13 {
14  namespace pcg
15  {
19 
24 
29 
31  enum struct RoomType
32  {
33  Room,
34  Hallway,
35  Start,
36  Finish
37  };
38 
40  enum struct FaceType
41  {
42  Wall,
43  Ceiling,
44  Floor
45  };
46 
49  class __declspec(dllexport) Room
50  {
51  public:
53  float _width;
54  float _length;
55  float _height;
56 
58 #pragma warning(disable:4251) // only using types from standard library, warning can be ignored. Source: https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4251
59  std::vector<DoorDirection> _doors;
60  std::vector<Room> _adjecentRooms;
61  std::vector<Target> _targets;
62 #pragma warning(default:4251)
63 
64  public:
67  Room();
68 
75  Room(RoomType rt, Point3d center, float width, float length, float height = PCG_DEFAULT_ROOM_HEIGHT);
76 
77  public:
78  // Bottom Side
79  inline Point3d LLB();
80  inline Point3d URB();
81  inline Point3d ULB();
82  inline Point3d LRB();
83 
84  // Top Side
85  inline Point3d LLT();
86  inline Point3d URT();
87  inline Point3d ULT();
88  inline Point3d LRT();
89 
93  std::string PrintRoomMeasurements(bool extensive = false);
94 
98  std::vector<Face> GenerateGeometry3D();
99 
102  std::vector<Face> GenerateGeometry3DIndexed();
103 
106  void GenerateTargets(RNG* rng);
107 
111  static std::vector<DoorDirection> DetermineClosedWalls(std::vector<DoorDirection> doors);
112 
113  private:
117  std::vector<uint32_t> GenerateClosedWallIndices3D(std::vector<DoorDirection> closedWalls);
118 
122  std::vector<Face> GenerateClosedWallFaces3D(std::vector<DoorDirection> closedWalls, Vec3 maxTextureCoordinates = Vec3{1.0f, 1.0f, 1.0f});
123 
127  void SetRoomTexture(Face& face, FaceType ft);
128 
133  std::vector<Target> GenerateTargets2(RNG* rng);
134 
135  };
136  }
137 }
138 
139 #endif // !SKR_PCG_ROOM
skr::pcg::RoomType
RoomType
enum for types of rooms
Definition: Room.h:32
skr::pcg::RoomType::Start
@ Start
place player starts in
skr::pcg::Room::GenerateTargets2
std::vector< Target > GenerateTargets2(RNG *rng)
Definition: Room.cpp:918
skr::pcg::RNG
random number generator helper class
Definition: rng.h:15
skr::pcg::RoomType::Finish
@ Finish
place to finished the game
skr::pcg::Room::_roomType
RoomType _roomType
type of room
Definition: Room.h:57
skr::pcg::DoorDirection::TOP_RIGHT
@ TOP_RIGHT
skr::pcg::Room::_targets
std::vector< Target > _targets
list of targets in room
Definition: Room.h:61
skr::pcg::Room::_height
float _height
height rom room
Definition: Room.h:55
Definitions.h
skr::pcg::Room::DetermineClosedWalls
static std::vector< DoorDirection > DetermineClosedWalls(std::vector< DoorDirection > doors)
Definition: Room.cpp:1259
Target.h
skr::pcg::Room::_doors
std::vector< DoorDirection > _doors
doors leading to hallways or special rooms
Definition: Room.h:59
skr::pcg::Room::ULB
Point3d ULB()
Point: UpperLeftBottom.
Definition: Room.cpp:44
skr::pcg::Room::SetRoomTexture
void SetRoomTexture(Face &face, FaceType ft)
Definition: Room.cpp:1199
skr::pcg::FaceType::Wall
@ Wall
Wall, with or wihout door.
skr::pcg::Room::LRT
Point3d LRT()
Point: LowerRightTop.
Definition: Room.cpp:69
skr::pcg::Room::_center
Point3d _center
center of room
Definition: Room.h:52
skr::pcg::Room::LLB
Point3d LLB()
Point: LowerLeftBottom.
Definition: Room.cpp:34
skr::pcg::Room::GenerateTargets
void GenerateTargets(RNG *rng)
Definition: Room.cpp:913
skr::pcg::DoorDirection::BOTTOM_RIGHT
@ BOTTOM_RIGHT
skr::pcg::FaceType
FaceType
enum for types of faces
Definition: Room.h:41
skr::pcg::Room
specifies position, extends and relations to neighboring rooms
Definition: Room.h:50
skr::pcg::Room::GenerateClosedWallFaces3D
std::vector< Face > GenerateClosedWallFaces3D(std::vector< DoorDirection > closedWalls, Vec3 maxTextureCoordinates=Vec3{1.0f, 1.0f, 1.0f})
Definition: Room.cpp:1026
skr::pcg::DoorDirection::TOP_LEFT
@ TOP_LEFT
skr::pcg::FaceType::Floor
@ Floor
ceilling
skr::pcg::Point3d
std::array< float, 3 > Point3d
c 2d vector
Definition: Definitions.h:16
rng.h
skr::pcg::RoomType::Hallway
@ Hallway
connecting rooms, no targets or lights
skr::pcg::RoomType::Room
@ Room
regular room filled with targest and light sources
skr::pcg::DoorDirection::TOP
@ TOP
skr::pcg::DoorDirection::LEFT
@ LEFT
skr::pcg::DoorDirection::RIGHT
@ RIGHT
skr::pcg::Room::URT
Point3d URT()
Point: UpperRightTop.
Definition: Room.cpp:59
skr::pcg::Room::_adjecentRooms
std::vector< Room > _adjecentRooms
list of adjecent rooms
Definition: Room.h:60
skr::pcg::Room::URB
Point3d URB()
Point: UpperRightBottom.
Definition: Room.cpp:39
skr::pcg::GetReadbleDoorDirection
std::string GetReadbleDoorDirection(DoorDirection d)
Definition: Room.cpp:1300
skr::pcg::Room::GenerateClosedWallIndices3D
std::vector< uint32_t > GenerateClosedWallIndices3D(std::vector< DoorDirection > closedWalls)
Definition: Room.cpp:982
skr::pcg::Room::LRB
Point3d LRB()
Point: LowerRightBottom.
Definition: Room.cpp:49
skr::pcg::Room::LLT
Point3d LLT()
Point: LowerLeftTop.
Definition: Room.cpp:54
skr::pcg::Room::_width
float _width
width of room
Definition: Room.h:53
skr::pcg::Face
strcut describing a face
Definition: Definitions.h:42
skr::pcg::Room::Room
Room()
Definition: Room.cpp:17
skr::pcg::Room::PrintRoomMeasurements
std::string PrintRoomMeasurements(bool extensive=false)
Definition: Room.cpp:75
skr::pcg::PCG_DEFAULT_ROOM_HEIGHT
constexpr float PCG_DEFAULT_ROOM_HEIGHT
default value for height of a room
Definition: Definitions.h:58
skr
Definition: Definitions.h:7
skr::pcg::InvertRoomDir
DoorDirection InvertRoomDir(DoorDirection dir)
Definition: Room.cpp:1334
skr::pcg::Room::_length
float _length
length of room
Definition: Room.h:54
skr::pcg::DoorDirection::BOTTOM_LEFT
@ BOTTOM_LEFT
skr::pcg::Room::GenerateGeometry3DIndexed
std::vector< Face > GenerateGeometry3DIndexed()
Definition: Room.cpp:542
skr::pcg::Room::GenerateGeometry3D
std::vector< Face > GenerateGeometry3D()
Definition: Room.cpp:149
skr::pcg::Room::ULT
Point3d ULT()
Point: UpperLeftTop.
Definition: Room.cpp:64
skr::pcg::Vec3
Point3d Vec3
Definition: Definitions.h:17
skr::pcg::DoorDirection::BOTTOM
@ BOTTOM
skr::pcg::DoorDirection
DoorDirection
Definition: Room.h:18
skr::pcg::FaceType::Ceiling
@ Ceiling