Browse Source

Refactor: Extract shared minimap constants and utility functions

Co-authored-by: djeada <[email protected]>
copilot-swe-agent[bot] 5 days ago
parent
commit
3fc48c9c42

+ 5 - 9
game/map/minimap/camera_viewport_layer.cpp

@@ -1,4 +1,5 @@
 #include "camera_viewport_layer.h"
+#include "minimap_utils.h"
 
 #include <QPainter>
 #include <QPen>
@@ -7,11 +8,6 @@
 
 namespace Game::Map::Minimap {
 
-namespace {
-constexpr float k_camera_yaw_cos = -0.70710678118F;
-constexpr float k_camera_yaw_sin = -0.70710678118F;
-} // namespace
-
 void CameraViewportLayer::init(int width, int height, float world_width,
                                float world_height) {
   m_width = width;
@@ -31,10 +27,10 @@ void CameraViewportLayer::init(int width, int height, float world_width,
 auto CameraViewportLayer::world_to_pixel(float world_x, float world_z) const
     -> std::pair<float, float> {
 
-  const float rotated_x =
-      world_x * k_camera_yaw_cos - world_z * k_camera_yaw_sin;
-  const float rotated_z =
-      world_x * k_camera_yaw_sin + world_z * k_camera_yaw_cos;
+  const float rotated_x = world_x * Constants::k_camera_yaw_cos -
+                          world_z * Constants::k_camera_yaw_sin;
+  const float rotated_z = world_x * Constants::k_camera_yaw_sin +
+                          world_z * Constants::k_camera_yaw_cos;
 
   const float px = (rotated_x + m_offset_x) * m_scale_x;
   const float py = (rotated_z + m_offset_y) * m_scale_y;

+ 7 - 16
game/map/minimap/map_preview_generator.cpp

@@ -2,6 +2,7 @@
 #include "../../units/spawn_type.h"
 #include "../map_loader.h"
 #include "minimap_generator.h"
+#include "minimap_utils.h"
 #include <QColor>
 #include <QFile>
 #include <QJsonDocument>
@@ -15,9 +16,6 @@ namespace Game::Map::Minimap {
 
 namespace {
 
-constexpr float k_camera_yaw_cos = -0.70710678118F;
-constexpr float k_camera_yaw_sin = -0.70710678118F;
-
 constexpr float BASE_SIZE = 16.0F;
 constexpr float INNER_SIZE_RATIO = 0.35F;
 constexpr float INNER_OFFSET_RATIO = 0.3F;
@@ -112,15 +110,8 @@ void MapPreviewGenerator::draw_player_bases(
       continue;
     }
 
-    // Transform grid coordinates to world coordinates (centered at origin)
-    float world_x = spawn.x;
-    float world_z = spawn.z;
-    if (map_def.coordSystem == CoordSystem::Grid) {
-      const float tile = std::max(0.0001F, map_def.grid.tile_size);
-      world_x = (spawn.x - (map_def.grid.width * 0.5F - 0.5F)) * tile;
-      world_z = (spawn.z - (map_def.grid.height * 0.5F - 0.5F)) * tile;
-    }
-
+    const auto [world_x, world_z] =
+        grid_to_world_coords(spawn.x, spawn.z, map_def);
     const auto [px, py] =
         world_to_pixel(world_x, world_z, map_def.grid, pixels_per_tile);
 
@@ -145,10 +136,10 @@ auto MapPreviewGenerator::world_to_pixel(
     float world_x, float world_z, const GridDefinition &grid,
     float pixels_per_tile) const -> std::pair<float, float> {
 
-  const float rotated_x =
-      world_x * k_camera_yaw_cos - world_z * k_camera_yaw_sin;
-  const float rotated_z =
-      world_x * k_camera_yaw_sin + world_z * k_camera_yaw_cos;
+  const float rotated_x = world_x * Constants::k_camera_yaw_cos -
+                          world_z * Constants::k_camera_yaw_sin;
+  const float rotated_z = world_x * Constants::k_camera_yaw_sin +
+                          world_z * Constants::k_camera_yaw_cos;
 
   const float world_width = grid.width * grid.tile_size;
   const float world_height = grid.height * grid.tile_size;

+ 7 - 16
game/map/minimap/minimap_generator.cpp

@@ -1,4 +1,5 @@
 #include "minimap_generator.h"
+#include "minimap_utils.h"
 #include <QColor>
 #include <QLinearGradient>
 #include <QPainter>
@@ -13,9 +14,6 @@ namespace Game::Map::Minimap {
 
 namespace {
 
-constexpr float k_camera_yaw_cos = -0.70710678118F;
-constexpr float k_camera_yaw_sin = -0.70710678118F;
-
 namespace Palette {
 
 constexpr QColor PARCHMENT_BASE{235, 220, 190};
@@ -91,10 +89,10 @@ auto MinimapGenerator::world_to_pixel(float world_x, float world_z,
                                       const GridDefinition &grid) const
     -> std::pair<float, float> {
 
-  const float rotated_x =
-      world_x * k_camera_yaw_cos - world_z * k_camera_yaw_sin;
-  const float rotated_z =
-      world_x * k_camera_yaw_sin + world_z * k_camera_yaw_cos;
+  const float rotated_x = world_x * Constants::k_camera_yaw_cos -
+                          world_z * Constants::k_camera_yaw_sin;
+  const float rotated_z = world_x * Constants::k_camera_yaw_sin +
+                          world_z * Constants::k_camera_yaw_cos;
 
   const float world_width = grid.width * grid.tile_size;
   const float world_height = grid.height * grid.tile_size;
@@ -459,15 +457,8 @@ void MinimapGenerator::render_structures(QImage &image,
       continue;
     }
 
-    // Transform grid coordinates to world coordinates (centered at origin)
-    float world_x = spawn.x;
-    float world_z = spawn.z;
-    if (map_def.coordSystem == CoordSystem::Grid) {
-      const float tile = std::max(0.0001F, map_def.grid.tile_size);
-      world_x = (spawn.x - (map_def.grid.width * 0.5F - 0.5F)) * tile;
-      world_z = (spawn.z - (map_def.grid.height * 0.5F - 0.5F)) * tile;
-    }
-
+    const auto [world_x, world_z] =
+        grid_to_world_coords(spawn.x, spawn.z, map_def);
     const auto [px, py] = world_to_pixel(world_x, world_z, map_def.grid);
 
     QColor fill_color = Palette::STRUCTURE_STONE;

+ 32 - 0
game/map/minimap/minimap_utils.h

@@ -0,0 +1,32 @@
+#pragma once
+
+#include "../map_definition.h"
+#include <algorithm>
+#include <cmath>
+#include <utility>
+
+namespace Game::Map::Minimap {
+
+namespace Constants {
+
+constexpr float k_camera_yaw_cos = -0.70710678118F;
+constexpr float k_camera_yaw_sin = -0.70710678118F;
+
+} // namespace Constants
+
+inline auto grid_to_world_coords(float grid_x, float grid_z,
+                                 const MapDefinition &map_def)
+    -> std::pair<float, float> {
+  float world_x = grid_x;
+  float world_z = grid_z;
+
+  if (map_def.coordSystem == CoordSystem::Grid) {
+    const float tile = std::max(0.0001F, map_def.grid.tile_size);
+    world_x = (grid_x - (map_def.grid.width * 0.5F - 0.5F)) * tile;
+    world_z = (grid_z - (map_def.grid.height * 0.5F - 0.5F)) * tile;
+  }
+
+  return {world_x, world_z};
+}
+
+} // namespace Game::Map::Minimap

+ 5 - 9
game/map/minimap/unit_layer.cpp

@@ -1,4 +1,5 @@
 #include "unit_layer.h"
+#include "minimap_utils.h"
 
 #include <QPainter>
 #include <algorithm>
@@ -6,11 +7,6 @@
 
 namespace Game::Map::Minimap {
 
-namespace {
-constexpr float k_camera_yaw_cos = -0.70710678118F;
-constexpr float k_camera_yaw_sin = -0.70710678118F;
-} // namespace
-
 void UnitLayer::init(int width, int height, float world_width,
                      float world_height) {
   m_width = width;
@@ -30,10 +26,10 @@ void UnitLayer::init(int width, int height, float world_width,
 auto UnitLayer::world_to_pixel(float world_x,
                                float world_z) const -> std::pair<float, float> {
 
-  const float rotated_x =
-      world_x * k_camera_yaw_cos - world_z * k_camera_yaw_sin;
-  const float rotated_z =
-      world_x * k_camera_yaw_sin + world_z * k_camera_yaw_cos;
+  const float rotated_x = world_x * Constants::k_camera_yaw_cos -
+                          world_z * Constants::k_camera_yaw_sin;
+  const float rotated_z = world_x * Constants::k_camera_yaw_sin +
+                          world_z * Constants::k_camera_yaw_cos;
 
   const float px = (rotated_x + m_offset_x) * m_scale_x;
   const float py = (rotated_z + m_offset_y) * m_scale_y;