From 0a882eec78e4f9d363c55a690140b5e20b06edd9 Mon Sep 17 00:00:00 2001 From: caiowakamatsu Date: Fri, 10 Apr 2026 17:24:08 -0300 Subject: [PATCH] create more details for rendering boxes properly --- source/game/engine.cpp | 49 +++++++++++++++++++++++++++++++++++++++++- source/game/engine.hpp | 5 +++++ source/game/level.cpp | 1 + 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/source/game/engine.cpp b/source/game/engine.cpp index e71a8bb..a39cf37 100644 --- a/source/game/engine.cpp +++ b/source/game/engine.cpp @@ -224,6 +224,41 @@ engine::add_playing_bounds_to_render_request(render::request request) const { return request.add_lines(lines); } +render::request +engine::add_tiles_to_render_request(render::request request) const { + auto lines = std::vector(); + + const auto full_dimensions = area_size * 2.0f; + const auto cell_size = full_dimensions.x / 22.0f; + + const auto start = area_origin - area_size; + + for (int x = 0; x < 22; x++) { + for (int y = 0; y < 16; y++) { + const auto min_x = start.x + (static_cast(x) * cell_size); + const auto min_y = start.z + (static_cast(y) * cell_size); + const auto max_x = start.x + (static_cast(x + 1) * cell_size); + const auto max_y = start.z + (static_cast(y + 1) * cell_size); + + const auto p1 = glm::vec3(min_x, 0.0f, min_y); + const auto p2 = glm::vec3(max_x, 0.0f, min_y); + const auto p3 = glm::vec3(max_x, 0.0f, max_y); + const auto p4 = glm::vec3(min_x, 0.0f, max_y); + + lines.push_back(p1); + lines.push_back(p2); + lines.push_back(p2); + lines.push_back(p3); + lines.push_back(p3); + lines.push_back(p4); + lines.push_back(p4); + lines.push_back(p1); + } + } + + return request.add_lines(lines); +} + engine::mesh_bounds engine::compute_size_of_mesh(const mesh_node &mesh) { auto bounds = mesh_bounds(); @@ -261,6 +296,11 @@ void engine::calculate_game_plane_size() { area_origin = min + (max - min) * 0.5f; area_size = (max - min) * 0.5f; area_size *= 0.85f; + tile_size = area_size / glm::vec3(22.0f, 1.0f, 16.0f); + auto normalized_ts = tile_size / glm::vec3(tile_size.x, 1.0f, tile_size.x); + area_size.z /= normalized_ts.z; + tile_size = area_size / glm::vec3(22.0f, 1.0f, 16.0f); + tile_size.y = 1.0f; } void engine::calculate_box_size() { @@ -289,6 +329,9 @@ void engine::calculate_box_size() { full_box_size = full_size; half_box_size = half_size; + const auto scale_required = (tile_size * 1.8f) / full_box_size; + const auto s = glm::vec3(scale_required.x, 1.0f, scale_required.z); + box_transform = glm::scale(glm::mat4(1.0f), s); } render::request engine::add_level_to_render_request(render::request request, @@ -328,7 +371,7 @@ render::request engine::add_level_to_render_request(render::request request, request = request.add_mesh(static_cast(wall_tile_render_id)) - .with_transform(coord_transform * height) + .with_transform(coord_transform * height * box_transform) .commit(); current_height += @@ -414,6 +457,10 @@ void engine::run() { request = add_playing_bounds_to_render_request(request); } + if (debug_drawing.individual_tiles) { + request = add_tiles_to_render_request(request); + } + renderer.render(request, view, projection); } catch (const vuk::VkException &ex) { if (ex.what() != std::string("Out of date.")) { diff --git a/source/game/engine.hpp b/source/game/engine.hpp index 294065f..6018111 100644 --- a/source/game/engine.hpp +++ b/source/game/engine.hpp @@ -29,10 +29,12 @@ private: glm::vec3 area_origin; glm::vec3 area_size; + glm::vec3 tile_size; std::vector level_border_entity_ids = {}; glm::vec3 full_box_size; glm::vec3 half_box_size; + glm::mat4 box_transform; struct map_boxes { std::uint32_t solid_full; @@ -69,6 +71,9 @@ private: [[nodiscard]] render::request add_playing_bounds_to_render_request(render::request request) const; + [[nodiscard]] render::request + add_tiles_to_render_request(render::request request) const; + struct mesh_bounds { glm::vec3 min; glm::vec3 max; diff --git a/source/game/level.cpp b/source/game/level.cpp index a38374d..dd1db2a 100644 --- a/source/game/level.cpp +++ b/source/game/level.cpp @@ -35,6 +35,7 @@ level::level() { // for (int x = 0; x < 22; x++) { // for (int y = 0; y < 16; y++) { create_wall_at({0, 0}); + create_wall_at({11, 8}); //} //} }