// playfield.hpp - Configuració del fons del playfield (graella, sub-graella, animació)
// © 2026 JailDesigner

#pragma once

namespace Defaults::Playfield {

    // Estructura de la graella (cel·les omplen tota la PLAYAREA)
    constexpr int COLUMNS = 16;      // cell_w = PLAYAREA.w / 16
    constexpr int ROWS = 8;          // cell_h = PLAYAREA.h / 8
    constexpr int SUBDIVISIONS = 5;  // cada cel·la principal es divideix en N subcel·les

    // Brillo respecte al color global (border = 1.0)
    constexpr float GRID_BRIGHTNESS = 0.15F;
    constexpr float SUBGRID_BRIGHTNESS = 0.05F;

    // Animació de creació amb timer intern del Playfield.
    // L'animació total cobreix tot l'INIT_HUD (3 s). Cada línia es pinta en
    // LINE_GROWTH_DURATION_S; els spawns es distribueixen amb sweep des del
    // centre perquè verticals i horitzontals propaguen cap als extrems.
    constexpr float LINE_GROWTH_DURATION_S = 0.4F;
    constexpr float TOTAL_ANIMATION_DURATION_S = 3.0F;  // = Defaults::Game::INIT_HUD_DURATION

    // Cap brillant de la línia mentre creix (extrem que avança).
    constexpr float HEAD_LENGTH_PX = 8.0F;   // longitud en píxels lògics del tram brillant
    constexpr float HEAD_BRIGHTNESS = 0.0F;  // brillo del cap (= border)

    // Orbit (oscil·lació transversal de la línia quan la nau hi passa a prop).
    constexpr float ORBIT_AMPLITUDE_MAX_PX = 3.0F;       // desplaçament transversal màxim
    constexpr float ORBIT_DECAY_PER_S = 4.0F;            // decaiment de l'amplitud (px/s)
    constexpr float ORBIT_FREQ_HZ = 8.0F;                // freqüència del sin
    constexpr float ORBIT_PROXIMITY_PX = 12.0F;          // distància max de la línia per excitar-la
    constexpr float ORBIT_SHIP_SPEED_THRESHOLD = 60.0F;  // velocitat mínima per excitar (px/s)

    // Pulse (reacció a fireworks: punt brillant que es propaga al llarg de la
    // línia a partir del punt de spawn).
    constexpr int MAX_PULSES_PER_LINE = 2;
    constexpr float PULSE_LIFETIME_S = 1.0F;      // temps total fins desaparèixer
    constexpr float PULSE_SPREAD_PER_S = 300.0F;  // px/s de propagació (cap a cada extrem)
    constexpr unsigned char PULSE_COLOR_R = 180;
    constexpr unsigned char PULSE_COLOR_G = 230;
    constexpr unsigned char PULSE_COLOR_B = 255;

}  // namespace Defaults::Playfield
