From dc389037f801bb244e19033be6751d65f5ee005a Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 21 May 2026 20:21:46 +0200 Subject: [PATCH] feat(grid): sub-graella amb 5 subdivisions i ajust de brillos --- source/core/defaults/grid.hpp | 5 ++++- source/core/graphics/playfield_grid.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/source/core/defaults/grid.hpp b/source/core/defaults/grid.hpp index 4c3097e..0b2a8cd 100644 --- a/source/core/defaults/grid.hpp +++ b/source/core/defaults/grid.hpp @@ -7,6 +7,9 @@ namespace Defaults::Grid { constexpr int COLUMNS = 16; // cel·les omplen tota la PLAYAREA: cell_w = w/16 constexpr int ROWS = 8; // cel·les omplen tota la PLAYAREA: cell_h = h/8 (≈2% més altes que amples) - constexpr float BRIGHTNESS = 0.20F; // intensitat respecte al color global (border = 1.0) + constexpr float BRIGHTNESS = 0.15F; // intensitat respecte al color global (border = 1.0) + + constexpr int SUBDIVISIONS = 5; // cada cel·la principal es divideix en N subcel·les + constexpr float SUBGRID_BRIGHTNESS = 0.05F; // intensitat de la sub-graella } // namespace Defaults::Grid diff --git a/source/core/graphics/playfield_grid.cpp b/source/core/graphics/playfield_grid.cpp index cfe5c4f..abdb99a 100644 --- a/source/core/graphics/playfield_grid.cpp +++ b/source/core/graphics/playfield_grid.cpp @@ -15,19 +15,38 @@ namespace Graphics { const SDL_FRect& zona = Defaults::Zones::PLAYAREA; const float CELL_W = zona.w / static_cast(Defaults::Grid::COLUMNS); const float CELL_H = zona.h / static_cast(Defaults::Grid::ROWS); + const float SUB_W = CELL_W / static_cast(Defaults::Grid::SUBDIVISIONS); + const float SUB_H = CELL_H / static_cast(Defaults::Grid::SUBDIVISIONS); + const int SUB_VERTS = Defaults::Grid::COLUMNS * Defaults::Grid::SUBDIVISIONS; + const int SUB_HORIZ = Defaults::Grid::ROWS * Defaults::Grid::SUBDIVISIONS; const int X1 = static_cast(zona.x); const int Y1 = static_cast(zona.y); const int X2 = static_cast(zona.x + zona.w); const int Y2 = static_cast(zona.y + zona.h); - // Línies verticals interiors (i=1..COLUMNS-1: no repetim el border) + // PRIMER: sub-graella (queda per dessota — pintem primer). + // Saltem les posicions que coincideixen amb la graella principal (i % SUBDIVISIONS == 0). + for (int i = 1; i < SUB_VERTS; i++) { + if (i % Defaults::Grid::SUBDIVISIONS == 0) { + continue; + } + const int X = static_cast(zona.x + (static_cast(i) * SUB_W)); + Rendering::linea(renderer_, X, Y1, X, Y2, Defaults::Grid::SUBGRID_BRIGHTNESS); + } + for (int j = 1; j < SUB_HORIZ; j++) { + if (j % Defaults::Grid::SUBDIVISIONS == 0) { + continue; + } + const int Y = static_cast(zona.y + (static_cast(j) * SUB_H)); + Rendering::linea(renderer_, X1, Y, X2, Y, Defaults::Grid::SUBGRID_BRIGHTNESS); + } + + // SEGON: graella principal (línies interiors, no repetim el border). for (int i = 1; i < Defaults::Grid::COLUMNS; i++) { const int X = static_cast(zona.x + (static_cast(i) * CELL_W)); Rendering::linea(renderer_, X, Y1, X, Y2, Defaults::Grid::BRIGHTNESS); } - - // Línies horitzontals interiors (j=1..ROWS-1: no repetim el border) for (int j = 1; j < Defaults::Grid::ROWS; j++) { const int Y = static_cast(zona.y + (static_cast(j) * CELL_H)); Rendering::linea(renderer_, X1, Y, X2, Y, Defaults::Grid::BRIGHTNESS);