Files
LearningOpenGL/LevelMap.h
2025-08-15 20:35:29 -04:00

96 lines
2.0 KiB
C++

#pragma once
#include <vector>
#include <sstream>
#include <random>
#include <glm/glm.hpp>
#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<Wall> 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<MeshRenderer*> GetMeshes();
std::vector<Sector>& GetSectors();
private:
std::vector<Sector> sectors;
std::vector<float> wall_vertices;
std::vector<float> wall_normals;
std::vector<float> wall_colors;
std::vector<unsigned int> wall_indices;
MeshRenderer wall_renderer;
Shader wall_shader;
std::vector<float> floor_vertices;
std::vector<float> floor_normals;
std::vector<float> floor_colors;
std::vector<unsigned int> floor_indices;
MeshRenderer floor_renderer;
Shader floor_shader;
std::vector<float> ceiling_vertices;
std::vector<float> ceiling_normals;
std::vector<float> ceiling_colors;
std::vector<unsigned int> 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<glm::vec3> vertices);
void AddCeiling(Sector& sector, std::vector<glm::vec3> vertices);
void AddVertices(std::vector<glm::vec3> vertices, std::vector<float>& target_vertices);
void AddNormals(std::vector<glm::vec3> normals, std::vector<float>& target_normals);
void AddColors(std::vector<glm::vec3> colors, std::vector<float>& target_colors);
void AddIndices(std::vector<unsigned int> indices, std::vector<unsigned int>& target_indices);
};