feat(trail): estela daurada de partícules quan la nau accelera
This commit is contained in:
1 parent
a9593a0fd9
commit
74d855357d
6 files changed
+288
No files matched your search
@@ -0,0 +1,57 @@
|
||||
// trail_manager.hpp - Estela de partícules daurades darrere la nau
|
||||
// © 2026 JailDesigner
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
#include <array>
|
||||
#include <memory>
|
||||
|
||||
#include "core/defaults/trail.hpp"
|
||||
#include "core/graphics/shape.hpp"
|
||||
#include "core/rendering/render_context.hpp"
|
||||
#include "core/types.hpp"
|
||||
#include "game/entities/ship.hpp"
|
||||
|
||||
namespace Effects {
|
||||
|
||||
// Manté un pool fixe de partícules amb forma d'estrella (star.shp) que
|
||||
// pulsen entre groc i daurat, oscil·len al voltant del seu naixement i
|
||||
// encongeixen fins a desaparèixer. Les naus actives emeten quan superen
|
||||
// SPEED_THRESHOLD_PX_S.
|
||||
class TrailManager {
|
||||
public:
|
||||
explicit TrailManager(Rendering::Renderer* renderer);
|
||||
|
||||
void update(float delta_time, const std::array<Ship, 2>& ships);
|
||||
void draw() const;
|
||||
void reset();
|
||||
|
||||
[[nodiscard]] auto getActiveCount() const -> int;
|
||||
|
||||
private:
|
||||
struct Particle {
|
||||
bool active{false};
|
||||
Vec2 origin{}; // punt de naixement (no es desplaça)
|
||||
float phase_x{0.0F}; // fase oscil·lació horitzontal
|
||||
float phase_y{0.0F};
|
||||
float phase_pulse{0.0F};
|
||||
float age{0.0F};
|
||||
float lifetime{0.0F};
|
||||
float scale{1.0F};
|
||||
};
|
||||
|
||||
void tryEmitFromShip(const Ship& ship, std::size_t player_id, float delta_time);
|
||||
void emitAt(Vec2 pos);
|
||||
auto findFreeSlot() -> int;
|
||||
void drawParticle(const Particle& particle) const;
|
||||
|
||||
Rendering::Renderer* renderer_;
|
||||
std::shared_ptr<Graphics::Shape> star_shape_;
|
||||
std::array<Particle, Defaults::Trail::POOL_SIZE> pool_{};
|
||||
std::array<float, 2> emit_cooldown_{0.0F, 0.0F};
|
||||
float time_accumulator_{0.0F};
|
||||
};
|
||||
|
||||
} // namespace Effects
|
||||
Reference in new issue
Block a user