/*! * \file include/Room.h * \brief World Room Mesh * * \author xythobuz */ #ifndef _ROOM_H_ #define _ROOM_H_ #include #include #include #include #include "Sprite.h" #include "RoomData.h" #include "RoomMesh.h" enum RoomFlags { RoomFlagUnderWater = (1 << 0) }; class Room { public: Room(glm::vec3 _pos, BoundingBox* _bbox, RoomMesh* _mesh, unsigned int f, int a, int x, int z) : pos(_pos), bbox(_bbox), mesh(_mesh), flags(f), alternateRoom(a), numXSectors(x), numZSectors(z) { } void prepare() { mesh->prepare(); } void display(glm::mat4 view, glm::mat4 projection); bool isWall(unsigned long sector); long getSector(float x, float z, float* floor, float* ceiling); long getSector(float x, float z); void getHeightAtPosition(float x, float* y, float z); int getAdjoiningRoom(float x, float y, float z, float x2, float y2, float z2); BoundingBox& getBoundingBox() { return *bbox; } RoomMesh& getMesh() { return *mesh; } unsigned int getNumXSectors() { return numXSectors; } unsigned int getNumZSectors() { return numZSectors; } unsigned int getFlags() { return flags; } unsigned long sizePortals(); Portal& getPortal(unsigned long index); void addPortal(Portal* p); unsigned long sizeSectors(); Sector& getSector(unsigned long index); void addSector(Sector* s); unsigned long sizeModels(); StaticModel& getModel(unsigned long index); void addModel(StaticModel* s); unsigned long sizeLights(); Light& getLight(unsigned long index); void addLight(Light* l); unsigned long sizeSprites(); Sprite& getSprite(unsigned long index); void addSprite(Sprite* s); private: glm::vec3 pos; std::unique_ptr bbox; std::unique_ptr mesh; unsigned int flags; int numXSectors; int numZSectors; int alternateRoom; std::vector> sprites; std::vector> models; std::vector> portals; std::vector> sectors; std::vector> lights; // Was used for "depth sorting" render list, but never assigned...?! //float dist; // Distance to near plane, move to room? }; #endif