cs381/as6/components/TrailComponent.hpp

39 lines
898 B
C++

#pragma once
#include "Component.hpp"
#include "raylib.h"
#include <cstddef>
#include <deque>
/**
* Stores and renders a fading positional trail for moving entities.
*
* Points are timestamped and retired from the front of a queue once they
* exceed `pointLifetime`, so updates avoid touching every point each frame.
*/
struct TrailComponent : public Component {
struct Point {
float x = 0.0f;
float y = 0.0f;
float createdAt = 0.0f;
};
std::deque<Point> points;
float elapsed = 0.0f;
float lastSampleAt = 0.0f;
float sampleDistance = 5.0f;
float sampleInterval = 1.0f / 30.0f;
float pointLifetime = 0.85f;
float lineWidth = 2.0f;
std::size_t maxPoints = 96;
Color color = Color{120, 210, 255, 180};
void Setup() override;
void Update(float dt) override;
void Cleanup() override;
void Draw() const;
};