From f2b113351c4e90bcdb0e0fb64f967cd441b07cb5 Mon Sep 17 00:00:00 2001 From: Caleb Date: Tue, 3 Mar 2026 08:16:24 -0500 Subject: [PATCH] made it use sectors --- build/main | Bin 297184 -> 307992 bytes level.cpp | 142 ++++++++++++++++++++ level.hpp | 0 main.cpp | 369 ++++++++++++++++++++++++++++++++++------------------ map.txt | 34 +++++ physics.hpp | 0 6 files changed, 417 insertions(+), 128 deletions(-) create mode 100644 level.cpp create mode 100644 level.hpp create mode 100644 map.txt create mode 100644 physics.hpp diff --git a/build/main b/build/main index 85722bbe5f6f2b0db6a25999df59618c936a01cd..33d3add5164f9fd4dea471e2c9b0489fff40f0a5 100755 GIT binary patch delta 91836 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 diff --git a/level.cpp b/level.cpp new file mode 100644 index 0000000..36886e8 --- /dev/null +++ b/level.cpp @@ -0,0 +1,142 @@ +int load_sectors(const char *path) { + // Sector 0 is usually reserved/null + state.sectors.n = 1; + state.walls.n = 0; + + FILE *f = fopen(path, "r"); + if (!f) { + printf("Could not open file: %s\n", path); + return -1; + } + + enum { SCAN_SECTOR, SCAN_WALL, SCAN_NONE } ss = SCAN_NONE; + char line[1024]; + + while (fgets(line, sizeof(line), f)) { + char *p = line; + // Trim leading whitespace + while (isspace(*p)) + p++; + + // Skip comments and empty lines + if (!*p || *p == '#') + continue; + + // Check for section headers like [SECTOR] + if (*p == '[') { + if (strstr(p, "[SECTOR]")) + ss = SCAN_SECTOR; + else if (strstr(p, "[WALL]")) + ss = SCAN_WALL; + continue; + } + + // Parse data based on current section + if (ss == SCAN_SECTOR) { + struct Sector *s = &state.sectors.arr[state.sectors.n++]; + // Format: ID, FirstWallIndex, NumWalls, FloorZ, CeilZ + if (sscanf(p, "%d %zu %zu %f %f", &s->id, &s->firstwall, &s->nwalls, + &s->floor, &s->ceil) != 5) { + fclose(f); + return -5; + } + } else if (ss == SCAN_WALL) { + struct Wall *w = &state.walls.arr[state.walls.n++]; + // Format: x1, y1, x2, y2, PortalID + if (sscanf(p, "%f %f %f %f %d", &w->v1.x, &w->v1.y, &w->v2.x, &w->v2.y, + &w->portalID) != 5) { + fclose(f); + return -4; + } + } + } + + fclose(f); + return 0; // Success +} +void build_sector_flats(struct Sector *s) { + // We need at least 3 walls to make a floor (a triangle) + if (s->nwalls < 3) + return; + + // 1. Pick a pivot point (the start of the first wall) + struct Wall *first_w = &state.walls.arr[s->firstwall]; + glm::vec3 pivot_floor = + glm::vec3((float)first_w->v1.x, s->floor, (float)first_w->v1.y); + glm::vec3 pivot_ceil = + glm::vec3((float)first_w->v1.x, s->ceil, (float)first_w->v1.y); + + // 2. Loop through the rest of the walls to create a "fan" of triangles + for (size_t i = 1; i < s->nwalls - 1; i++) { + struct Wall *w1 = &state.walls.arr[s->firstwall + i]; + struct Wall *w2 = &state.walls.arr[s->firstwall + i + 1]; + + glm::vec3 p1_f = glm::vec3((float)w1->v1.x, s->floor, (float)w1->v1.y); + glm::vec3 p2_f = glm::vec3((float)w2->v1.x, s->floor, (float)w2->v1.y); + + glm::vec3 p1_c = glm::vec3((float)w1->v1.x, s->ceil, (float)w1->v1.y); + glm::vec3 p2_c = glm::vec3((float)w2->v1.x, s->ceil, (float)w2->v1.y); + + // FLOOR TRIANGLE (Facing Up) + // Winding: Pivot -> P1 -> P2 (Counter-Clockwise) + map_mesh.push_back({pivot_floor, {pivot_floor.x, pivot_floor.z}}); + map_mesh.push_back({p1_f, {p1_f.x, p1_f.z}}); + map_mesh.push_back({p2_f, {p2_f.x, p2_f.z}}); + + // CEILING TRIANGLE (Facing Down) + // Winding: Pivot -> P2 -> P1 (Clockwise from top, CCW from bottom) + map_mesh.push_back({pivot_ceil, {pivot_ceil.x, pivot_ceil.z}}); + map_mesh.push_back({p2_c, {p2_c.x, p2_c.z}}); + map_mesh.push_back({p1_c, {p1_c.x, p1_c.z}}); + } +} +void push_wall_quad(glm::vec2 a, glm::vec2 b, float y_low, float y_high) { + float length = glm::distance(a, b); + float height = y_high - y_low; + + // Vertex data: Position(x, y, z), TexCoords(u, v) + // Triangle 1 + map_mesh.push_back({{a.x, y_low, a.y}, {0.0f, 0.0f}}); + map_mesh.push_back({{b.x, y_low, b.y}, {length, 0.0f}}); + map_mesh.push_back({{b.x, y_high, b.y}, {length, height}}); + + // Triangle 2 + map_mesh.push_back({{a.x, y_low, a.y}, {0.0f, 0.0f}}); + map_mesh.push_back({{b.x, y_high, b.y}, {length, height}}); + map_mesh.push_back({{a.x, y_high, a.y}, {0.0f, height}}); +} +void build_map_mesh() { + map_mesh.clear(); + + // Loop through sectors starting from 1 + for (size_t i = 1; i < state.sectors.n; i++) { + struct Sector *s = &state.sectors.arr[i]; + + // Loop through the walls assigned to this sector + for (size_t j = 0; j < s->nwalls; j++) { + struct Wall *w = &state.walls.arr[s->firstwall + j]; + + // Map coordinates directly from the wall struct + // We cast to float because sscanf read them as ints + glm::vec2 pA = glm::vec2((float)w->v1.x, (float)w->v1.y); + glm::vec2 pB = glm::vec2((float)w->v2.x, (float)w->v2.y); + + if (w->portalID == 0) { + // It's a solid wall: draw from floor to ceiling + push_wall_quad(pA, pB, s->floor, s->ceil); + } else { + // It's a portal: draw the upper/lower differences + struct Sector *neighbor = &state.sectors.arr[w->portalID]; + + // Draw lower "step" if neighbor floor is higher + if (neighbor->floor > s->floor) + push_wall_quad(pA, pB, s->floor, neighbor->floor); + + // Draw upper "overhang" if neighbor ceiling is lower + if (neighbor->ceil < s->ceil) + push_wall_quad(pA, pB, neighbor->ceil, s->ceil); + } + } + build_sector_flats(s); + } +} diff --git a/level.hpp b/level.hpp new file mode 100644 index 0000000..e69de29 diff --git a/main.cpp b/main.cpp index 2abe0f7..c94f872 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -21,53 +22,180 @@ float deltaTime = 0.0f; // Time between current frame and last frame float lastFrame = 0.0f; // Time of last frame float lastX = 600 / 2.0f; float lastY = 800 / 2.0f; -Camera camera(glm::vec3(1.0f, 0.0f, 1.0f)); +Camera camera(glm::vec3(1.0f, 1.0f, 1.0f)); bool firstMouse = true; -const int MAP_WIDTH = 20; -const int MAP_HEIGHT = 20; -int worldMap[MAP_WIDTH][MAP_HEIGHT] = { - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, - {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - {1, 0, 2, 2, 2, 0, 1, 0, 2, 2, 2, 2, 0, 1, 0, 2, 2, 2, 0, 1}, - {1, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 1}, - {1, 0, 2, 2, 2, 0, 1, 0, 2, 2, 2, 2, 0, 1, 0, 2, 2, 2, 0, 1}, - {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - {1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, - {1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1}, - {1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1}, - {1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 0, 2, 2, 2, 2, 2, 2, 0, 1, 1, 0, 2, 2, 2, 2, 2, 2, 0, 1}, - {1, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 1}, - {1, 0, 2, 0, 0, 0, 0, 2, 0, 1, 1, 0, 2, 0, 0, 0, 0, 2, 0, 1}, - {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}}; +struct Sector { + int id; + float floor, ceil; + size_t firstwall, nwalls; +}; -bool collision_check(float newX, float newZ) { - float playerRadius = 0.2f; - // We check the four corners of the player's "hitbox" - for (float offset_x = -playerRadius; offset_x <= playerRadius; - offset_x += playerRadius * 2) { - for (float offset_z = -playerRadius; offset_z <= playerRadius; - offset_z += playerRadius * 2) { - int gridX = (int)(newX + offset_x); - int gridZ = (int)(newZ + offset_z); +struct Wall { + glm::vec2 v1, v2; // Index of the vertices + int portalID; // -1 if solid, else the ID of the sector on the other side +}; - // 1. Check map boundaries - if (gridX < 0 || gridX >= MAP_WIDTH || gridZ < 0 || gridZ >= MAP_HEIGHT) - return false; +struct { + struct { + struct Sector arr[32]; + size_t n; + } sectors; + struct { + struct Wall arr[128]; + size_t n; + } walls; - // 2. Check if the tile is a wall - if (worldMap[gridX][gridZ] > 0) - return false; +} state; + +struct MapVertex { + glm::vec3 pos; + glm::vec2 tex; +}; + +std::vector map_mesh; + +static int load_sectors(const char *path) { + // Sector 0 is usually reserved/null + state.sectors.n = 1; + state.walls.n = 0; + + FILE *f = fopen(path, "r"); + if (!f) { + printf("Could not open file: %s\n", path); + return -1; + } + + enum { SCAN_SECTOR, SCAN_WALL, SCAN_NONE } ss = SCAN_NONE; + char line[1024]; + + while (fgets(line, sizeof(line), f)) { + char *p = line; + // Trim leading whitespace + while (isspace(*p)) + p++; + + // Skip comments and empty lines + if (!*p || *p == '#') + continue; + + // Check for section headers like [SECTOR] + if (*p == '[') { + if (strstr(p, "[SECTOR]")) + ss = SCAN_SECTOR; + else if (strstr(p, "[WALL]")) + ss = SCAN_WALL; + continue; + } + + // Parse data based on current section + if (ss == SCAN_SECTOR) { + struct Sector *s = &state.sectors.arr[state.sectors.n++]; + // Format: ID, FirstWallIndex, NumWalls, FloorZ, CeilZ + if (sscanf(p, "%d %zu %zu %f %f", &s->id, &s->firstwall, &s->nwalls, + &s->floor, &s->ceil) != 5) { + fclose(f); + return -5; + } + } else if (ss == SCAN_WALL) { + struct Wall *w = &state.walls.arr[state.walls.n++]; + // Format: x1, y1, x2, y2, PortalID + if (sscanf(p, "%f %f %f %f %d", &w->v1.x, &w->v1.y, &w->v2.x, &w->v2.y, + &w->portalID) != 5) { + fclose(f); + return -4; + } } } - return true; + + fclose(f); + return 0; // Success +} +void build_sector_flats(struct Sector *s) { + // We need at least 3 walls to make a floor (a triangle) + if (s->nwalls < 3) + return; + + // 1. Pick a pivot point (the start of the first wall) + struct Wall *first_w = &state.walls.arr[s->firstwall]; + glm::vec3 pivot_floor = + glm::vec3((float)first_w->v1.x, s->floor, (float)first_w->v1.y); + glm::vec3 pivot_ceil = + glm::vec3((float)first_w->v1.x, s->ceil, (float)first_w->v1.y); + + // 2. Loop through the rest of the walls to create a "fan" of triangles + for (size_t i = 1; i < s->nwalls - 1; i++) { + struct Wall *w1 = &state.walls.arr[s->firstwall + i]; + struct Wall *w2 = &state.walls.arr[s->firstwall + i + 1]; + + glm::vec3 p1_f = glm::vec3((float)w1->v1.x, s->floor, (float)w1->v1.y); + glm::vec3 p2_f = glm::vec3((float)w2->v1.x, s->floor, (float)w2->v1.y); + + glm::vec3 p1_c = glm::vec3((float)w1->v1.x, s->ceil, (float)w1->v1.y); + glm::vec3 p2_c = glm::vec3((float)w2->v1.x, s->ceil, (float)w2->v1.y); + + // FLOOR TRIANGLE (Facing Up) + // Winding: Pivot -> P1 -> P2 (Counter-Clockwise) + map_mesh.push_back({pivot_floor, {pivot_floor.x, pivot_floor.z}}); + map_mesh.push_back({p1_f, {p1_f.x, p1_f.z}}); + map_mesh.push_back({p2_f, {p2_f.x, p2_f.z}}); + + // CEILING TRIANGLE (Facing Down) + // Winding: Pivot -> P2 -> P1 (Clockwise from top, CCW from bottom) + map_mesh.push_back({pivot_ceil, {pivot_ceil.x, pivot_ceil.z}}); + map_mesh.push_back({p2_c, {p2_c.x, p2_c.z}}); + map_mesh.push_back({p1_c, {p1_c.x, p1_c.z}}); + } +} +void push_wall_quad(glm::vec2 a, glm::vec2 b, float y_low, float y_high) { + float length = glm::distance(a, b); + float height = y_high - y_low; + + // Vertex data: Position(x, y, z), TexCoords(u, v) + // Triangle 1 + map_mesh.push_back({{a.x, y_low, a.y}, {0.0f, 0.0f}}); + map_mesh.push_back({{b.x, y_low, b.y}, {length, 0.0f}}); + map_mesh.push_back({{b.x, y_high, b.y}, {length, height}}); + + // Triangle 2 + map_mesh.push_back({{a.x, y_low, a.y}, {0.0f, 0.0f}}); + map_mesh.push_back({{b.x, y_high, b.y}, {length, height}}); + map_mesh.push_back({{a.x, y_high, a.y}, {0.0f, height}}); +} +void build_map_mesh() { + map_mesh.clear(); + + // Loop through sectors starting from 1 + for (size_t i = 1; i < state.sectors.n; i++) { + struct Sector *s = &state.sectors.arr[i]; + + // Loop through the walls assigned to this sector + for (size_t j = 0; j < s->nwalls; j++) { + struct Wall *w = &state.walls.arr[s->firstwall + j]; + + // Map coordinates directly from the wall struct + // We cast to float because sscanf read them as ints + glm::vec2 pA = glm::vec2((float)w->v1.x, (float)w->v1.y); + glm::vec2 pB = glm::vec2((float)w->v2.x, (float)w->v2.y); + + if (w->portalID == 0) { + // It's a solid wall: draw from floor to ceiling + push_wall_quad(pA, pB, s->floor, s->ceil); + } else { + // It's a portal: draw the upper/lower differences + struct Sector *neighbor = &state.sectors.arr[w->portalID]; + + // Draw lower "step" if neighbor floor is higher + if (neighbor->floor > s->floor) + push_wall_quad(pA, pB, s->floor, neighbor->floor); + + // Draw upper "overhang" if neighbor ceiling is lower + if (neighbor->ceil < s->ceil) + push_wall_quad(pA, pB, neighbor->ceil, s->ceil); + } + } + build_sector_flats(s); + } } void scroll_callback(GLFWwindow *window, double xoffset, double yoffset) { @@ -99,7 +227,7 @@ void mouse_callback(GLFWwindow *window, double xpos, double ypos) { camera.ProcessMouseMovement(xoffset, yoffset); } -void updatePhysics(float deltaTime) { +void updatePhysics(float deltaTime, float floor) { // 1. Apply gravity to velocity (Velocity = Acceleration * Time) if (!camera.isGrounded) { camera.verticalVelocity += camera.gravity * deltaTime; @@ -110,8 +238,8 @@ void updatePhysics(float deltaTime) { // 3. Ground Collision (The Floor) // If the floor is at y = 0 - if (camera.Position.y <= 0.0f) { - camera.Position.y = 0.0f; + if (camera.Position.y <= floor) { + camera.Position.y = floor; camera.verticalVelocity = 0.0f; camera.isGrounded = true; } @@ -136,11 +264,33 @@ void processInput(GLFWwindow *window) { camera.ProcessKeyboard(LEFT, deltaTime); if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) camera.ProcessKeyboard(RIGHT, deltaTime); - if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS) { + if (glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS && camera.isGrounded) { camera.verticalVelocity = camera.jumpForce; camera.isGrounded = false; } } +int get_sector_at(float x, float z) { + // Start from 1 (skipping null sector) + for (size_t i = 1; i < state.sectors.n; i++) { + struct Sector *s = &state.sectors.arr[i]; + int inside = 0; + + for (size_t j = 0; j < s->nwalls; j++) { + struct Wall *w = &state.walls.arr[s->firstwall + j]; + + // Check if player position is between the Y-bounds of the wall + if (((w->v1.y > z) != (w->v2.y > z)) && + (x < (float)(w->v2.x - w->v1.x) * (z - (float)w->v1.y) / + (float)(w->v2.y - w->v1.y) + + (float)w->v1.x)) { + inside = !inside; + } + } + if (inside) + return (int)i; + } + return -1; // Outside the map +} int main() { @@ -164,9 +314,10 @@ int main() { glfwWindowHint(GLFW_FLOATING, GLFW_TRUE); // This makes the window float glfwWindowHint(GLFW_VISIBLE, GLFW_TRUE); glfwWindowHint(GLFW_FOCUS_ON_SHOW, GLFW_TRUE); + glfwWindowHintString(GLFW_WAYLAND_APP_ID, "opengl"); GLFWwindow *window = - glfwCreateWindow(800, 600, "testing open gl", NULL, NULL); + glfwCreateWindow(1000, 600, "testing open gl", NULL, NULL); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); glfwSetCursorPosCallback(window, mouse_callback); @@ -231,20 +382,29 @@ int main() { -0.5f, 0.5f, 0.5f, 0.0f, 0.0f, // cube one -0.5f, 0.5f, -0.5f, 0.0f, 1.0f // cube one }; - glm::vec3 cubePositions[] = { + if (load_sectors("../map.txt") != 0) { + printf("loaded %zu sectors and %zu walls", state.sectors.n, state.walls.n); + printf("Failed to parse map file!\n"); + return -1; + } + build_map_mesh(); - glm::vec3(0.0f, 0.0f, 0.0f), - glm::vec3(2.0f, 5.0f, -15.0f), - glm::vec3(-1.5f, -2.2f, -2.5f), - glm::vec3(-3.8f, -2.0f, -12.3f), - glm::vec3(2.4f, -0.4f, -3.5f), - glm::vec3(-1.7f, 3.0f, -7.5f), - glm::vec3(1.3f, -2.0f, -2.5f), - glm::vec3(1.5f, 2.0f, -2.5f), - glm::vec3(1.5f, 0.2f, -1.5f), - glm::vec3(-1.3f, 1.0f, -1.5f) + unsigned int mapVAO, mapVBO; + glGenVertexArrays(1, &mapVAO); + glGenBuffers(1, &mapVBO); - }; + glBindVertexArray(mapVAO); + glBindBuffer(GL_ARRAY_BUFFER, mapVBO); + glBufferData(GL_ARRAY_BUFFER, map_mesh.size() * sizeof(MapVertex), + map_mesh.data(), GL_STATIC_DRAW); + + // Position attribute + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(MapVertex), (void *)0); + glEnableVertexAttribArray(0); + // TexCoord attribute + glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(MapVertex), + (void *)offsetof(MapVertex, tex)); + glEnableVertexAttribArray(2); unsigned int EBO; glGenBuffers(1, &EBO); @@ -388,9 +548,27 @@ int main() { float gravity = -9.81f; while (!glfwWindowShouldClose(window)) { float currentFrame = glfwGetTime(); + float ground = 1.0f; deltaTime = currentFrame - lastFrame; lastFrame = currentFrame; - updatePhysics(deltaTime); + int current_sector_id = get_sector_at(camera.Position.x, camera.Position.z); + + if (current_sector_id != -1) { + struct Sector *s = &state.sectors.arr[current_sector_id]; + + // The "target" height is floor + player height (e.g., 2.0 units) + float target_y = s->floor + 1.0f; + ground = target_y; + + // Smoothly interpolate (lerp) to the target height so you don't + // "teleport" up stairs + if (camera.isGrounded) { + float lerpSpeed = 10.0f; // Adjust this for "snappiness" + camera.Position.y = + glm::mix(camera.Position.y, target_y, lerpSpeed * deltaTime); + } + } + updatePhysics(deltaTime, ground); processInput(window); ballVelocity.y += gravity * deltaTime; @@ -425,7 +603,7 @@ int main() { ourshader.use(); glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, texture2); + glBindTexture(GL_TEXTURE_2D, texture1); // model = glm::translate( // model, glm::vec3(0.0f, sin(glfwGetTime() * 2) * 10e-4f, 0.0f)); @@ -444,75 +622,10 @@ int main() { glBindVertexArray(sphereVAO); glDrawElements(GL_TRIANGLES, sphereIndices.size(), GL_UNSIGNED_INT, 0); - glBindVertexArray(wallVAO); - - for (int x = 0; x < MAP_WIDTH; x++) { - for (int y = 0; y < MAP_HEIGHT; y++) { - if (worldMap[x][y] > 0) { - // Set Texture - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, texture2); - if (y + 1 < MAP_HEIGHT && worldMap[x][y + 1] == 0) { - glm::mat4 model = glm::mat4(1.0f); - model = glm::translate( - model, glm::vec3(x, 0.0f, y + 0.5f)); // Move to edge - // No rotation needed if the plane naturally faces Z - ourshader.setMat4("mvp", projection * view * model); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - } - - // Check East neighbor: if it's empty, draw the East face - if (x + 1 < MAP_WIDTH && worldMap[x + 1][y] == 0) { - glm::mat4 model = glm::mat4(1.0f); - model = glm::translate(model, glm::vec3(x + 0.5f, 0.0f, y)); - model = glm::rotate(model, glm::radians(90.0f), - glm::vec3(0.0f, 1.0f, 0.0f)); - ourshader.setMat4("mvp", projection * view * model); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - } - - if (y - 1 < MAP_HEIGHT && worldMap[x][y - 1] == 0) { - glm::mat4 model = glm::mat4(1.0f); - model = glm::translate( - model, glm::vec3(x, 0.0f, y - 0.5f)); // Move to edge - // No rotation needed if the plane naturally faces Z - ourshader.setMat4("mvp", projection * view * model); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - } - - if (x - 1 < MAP_WIDTH && worldMap[x - 1][y] == 0) { - glm::mat4 model = glm::mat4(1.0f); - model = glm::translate(model, glm::vec3(x - 0.5f, 0.0f, y)); - model = glm::rotate(model, glm::radians(90.0f), - glm::vec3(0.0f, 1.0f, 0.0f)); - ourshader.setMat4("mvp", projection * view * model); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - } - - } else { - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, texture1); - // Draw Floor - glm::mat4 floorModel = glm::mat4(1.0f); - floorModel = - glm::translate(floorModel, glm::vec3((float)x, -0.5f, (float)y)); - floorModel = glm::rotate(floorModel, glm::radians(90.0f), - glm::vec3(1.0f, 0.0f, 0.0)); - ourshader.setMat4("mvp", projection * view * floorModel); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - - // Draw Ceiling - glm::mat4 cielModel = glm::mat4(1.0f); - cielModel = - glm::translate(cielModel, glm::vec3((float)x, 0.5f, (float)y)); - cielModel = glm::rotate(cielModel, glm::radians(90.0f), - glm::vec3(1.0f, 0.0f, 0.0)); - ourshader.setMat4("mvp", projection * view * cielModel); - glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); - } - } - } + glBindTexture(GL_TEXTURE_2D, texture2); + ourshader.setMat4("mvp", projection * view * glm::mat4(1.0f)); + glBindVertexArray(mapVAO); + glDrawArrays(GL_TRIANGLES, 0, map_mesh.size()); glBindVertexArray(0); diff --git a/map.txt b/map.txt new file mode 100644 index 0000000..1d35029 --- /dev/null +++ b/map.txt @@ -0,0 +1,34 @@ +[SECTOR] +1 0 8 0.0 5.0 +2 8 3 1.0 4.0 +3 11 4 0.2 6.0 +4 15 5 0.0 3.0 + +[WALL] +# SECTOR 1: 0..7 +4 1 2 1 0 +5 2 4 1 0 +5 3 5 2 0 +4 4 5 3 3 +2 4 4 4 0 +1 3 2 4 2 +1 2 1 3 0 +2 1 1 2 0 + +# SECTOR 2: 8..10 +2 4 1 3 1 +1 5 2 4 0 +1 3 1 5 0 + +# SECTOR 3: 11..14 +5 3 4 4 1 +6 5 5 3 0 +6 7 6 5 4 +4 4 6 7 0 + +# SECTOR 4: 15..19 +7 4 6 5 0 +8 5 7 4 0 +8 7 8 5 0 +6 7 8 7 0 +6 5 6 7 3 diff --git a/physics.hpp b/physics.hpp new file mode 100644 index 0000000..e69de29