#pragma once #include #include #include #include #include "MeshRenderer.h" struct Wall { glm::vec2 a, b; int portal; }; struct Sector { unsigned int index; unsigned int number_of_walls; float floor_height; float ceiling_height; bool outward_facing; glm::vec3 color; std::vector walls; }; class LevelMap { public: LevelMap(); ~LevelMap(); void Compile(std::string level_map_code); void RenderSetup ( Shader *wall_shader, Shader *floor_shader, Shader *ceiling_shader ); void Update ( glm::mat4 projection, glm::mat4 view, glm::vec3 light_position, glm::vec3 light_color, glm::vec3 view_position ); std::vector GetMeshes(); std::vector& GetSectors(); private: std::vector sectors; std::vector wall_vertices; std::vector wall_normals; std::vector wall_colors; std::vector wall_indices; MeshRenderer wall_renderer; Shader wall_shader; std::vector floor_vertices; std::vector floor_normals; std::vector floor_colors; std::vector floor_indices; MeshRenderer floor_renderer; Shader floor_shader; std::vector ceiling_vertices; std::vector ceiling_normals; std::vector ceiling_colors; std::vector ceiling_indices; MeshRenderer ceiling_renderer; Shader ceiling_shader; Sector ParseSector(std::string& line); Wall ParseWall(std::string& line); void AddWall(Sector& sector, Wall& wall, unsigned int& wall_index); void AddFloor(Sector& sector, std::vector vertices); void AddCeiling(Sector& sector, std::vector vertices); void AddVertices(std::vector vertices, std::vector& target_vertices); void AddNormals(std::vector normals, std::vector& target_normals); void AddColors(std::vector colors, std::vector& target_colors); void AddIndices(std::vector indices, std::vector& target_indices); };