#pragma once #include #include 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 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; }; }