// starfield_parallax.hpp - Capa més profunda del fons: estrelles 2D amb parallax // © 2026 JailDesigner // // Estrelles 2D distribuïdes en 3 capes de profunditat. Cada capa té el seu // factor parallax: el "món" es desplaça amb world_velocity i les estrelles // d'una capa es mouen amb world_velocity * parallax_factor. Les més // properes es mouen més (factor alt) → sensació de profunditat. // Quan una estrella surt de PLAYAREA, reapareix per la banda oposada // (wraparound). #pragma once #include #include #include "core/defaults/starfield_parallax.hpp" #include "core/rendering/render_context.hpp" #include "core/types.hpp" namespace Graphics { class StarfieldParallax { public: explicit StarfieldParallax(Rendering::Renderer* renderer); // Avança el desplaçament de les estrelles segons world_velocity (vector // del moviment del món en px/s; típicament = -ship_velocity). // world_velocity == {0, 0} → estrelles quietes. void update(float delta_time, Vec2 world_velocity); void draw() const; private: struct Star { float x{0.0F}; float y{0.0F}; int layer{0}; // 0=Far, 1=Mid, 2=Near SDL_Color color{}; // tint precomputat entre blanc i cyan }; void buildStars(); static auto layerBrightness(int layer) -> float; static auto layerParallax(int layer) -> float; static auto layerSize(int layer) -> int; Rendering::Renderer* renderer_; std::array stars_{}; }; } // namespace Graphics