59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <glm/vec2.hpp>
|
|
#include <vector>
|
|
|
|
namespace game {
|
|
class Missile;
|
|
class Player;
|
|
|
|
/*
|
|
* Trace of a missile through the space.
|
|
* Useful for rendering sth. like a smoke trail to follow the rocket.
|
|
*/
|
|
class Trace {
|
|
public:
|
|
Trace(Missile *missile, float maxAge=5.0);
|
|
~Trace();
|
|
|
|
// Add the current position of the missile as a new point on the
|
|
// trace.
|
|
// Parameters:
|
|
// forceAdd: set to true to add this point (good for the endpoint of
|
|
// the missile) in case the fidelityCounter would skip the current position.
|
|
void addPointFromMissile(bool forceAdd=false);
|
|
|
|
// call this to mark the trace as finish and disconnect it from the
|
|
// missile.
|
|
void finish();
|
|
|
|
// TODO: add extendLastPointToPosition() method for saving points /
|
|
// optimization later on
|
|
|
|
/*
|
|
* Trace point data to be used when rendering.
|
|
*/
|
|
struct TracePoint {
|
|
TracePoint(const Missile *missile);
|
|
|
|
glm::vec2 position;
|
|
float speed;
|
|
};
|
|
|
|
std::vector<TracePoint> points;
|
|
Missile *missile; // missile which creates this path.
|
|
Player *player;
|
|
|
|
// counter which is incremented each time addPointFromMissile() is called.
|
|
// when reaching a certain value the point is saved for
|
|
// optimization.
|
|
int fidelityCounter;
|
|
|
|
// age of the trace. if too old, it can be removed to save
|
|
// space/power
|
|
// ageing starts when the trace is finished.
|
|
float age;
|
|
|
|
float maxAge;
|
|
};
|
|
}
|