From b15cc1304d4ec8c08183a7fd142c7d502a208239 Mon Sep 17 00:00:00 2001 From: Andreas Ortmann Date: Thu, 29 Sep 2016 09:32:56 +0200 Subject: [PATCH] adding nice trace-fadeout. --- .../renderer_polygon_3d.cpp | 8 +++++-- game/state/state.cpp | 20 ++++++++++++++++++ game/state/state.hpp | 1 + game/state/trace.cpp | 21 ++++++++++--------- game/state/trace.hpp | 5 ++++- 5 files changed, 42 insertions(+), 13 deletions(-) diff --git a/game/renderer_polygon_3d/renderer_polygon_3d.cpp b/game/renderer_polygon_3d/renderer_polygon_3d.cpp index 4b8e066..86e650c 100644 --- a/game/renderer_polygon_3d/renderer_polygon_3d.cpp +++ b/game/renderer_polygon_3d/renderer_polygon_3d.cpp @@ -263,9 +263,13 @@ namespace endofthejedi { glUseProgram(0); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glColor3f(0.0, 0.0, 1.0); - for (const game::Trace *trace : m_state->traces) { + float fade_out = 1.0; + if (trace->missile == nullptr) { + fade_out = 1.0 - (trace->age / trace->maxAge); + } + + glColor3f(0.0, 0.3/fade_out, 1.0/fade_out); glBegin(GL_LINE_STRIP); for (const game::Trace::TracePoint &tp : trace->points) { glVertex2f(tp.position.x, tp.position.y); diff --git a/game/state/state.cpp b/game/state/state.cpp index d34915f..12edaa6 100644 --- a/game/state/state.cpp +++ b/game/state/state.cpp @@ -262,6 +262,8 @@ namespace game { advanceExplosions(dt); + advanceTraceAges(dt); + advancePlayerCommands(dt); advancePlayerMissiles(dt); @@ -356,4 +358,22 @@ namespace game { explosions.push_back(new Explosion(evt->position, evt->hit)); } + + void State::advanceTraceAges(float dt) + { + std::vector rm; + for (Trace *trace : traces) { + if (trace->missile == nullptr) { + trace->age += dt; + if (trace->age >= trace->maxAge) { + rm.push_back(trace); + } + } + } + + for (Trace *trace : rm) { + traces.remove(trace); + delete(trace); + } + } } diff --git a/game/state/state.hpp b/game/state/state.hpp index d952cca..eef029e 100644 --- a/game/state/state.hpp +++ b/game/state/state.hpp @@ -101,6 +101,7 @@ namespace game { void addExplosionFromHit(const Missile::Event *evt); + void advanceTraceAges(float dt); void advanceExplosions(float dt); void advancePlayerShipSpawns(float dt); void advancePlayerCommands(float dt); diff --git a/game/state/trace.cpp b/game/state/trace.cpp index 0b51695..3739cdf 100644 --- a/game/state/trace.cpp +++ b/game/state/trace.cpp @@ -13,24 +13,25 @@ namespace game { { } + Trace::Trace(Missile *missile, float maxAge) + : missile(missile) + , player(missile->player) + , fidelityCounter(0) + , age(0.0) + , maxAge(maxAge) + { + points.push_back(TracePoint(missile)); + } + Trace::~Trace() { //std::cout<<"~Trace()" << std::endl; } - Trace::Trace(Missile *missile) - : missile(missile) - , player(missile->player) - , fidelityCounter(0) - , age(0.0) - { - points.push_back(TracePoint(missile)); - } - void Trace::addPointFromMissile(bool forceAdd) { fidelityCounter++; - if (forceAdd || fidelityCounter >= 10) { + if (forceAdd || fidelityCounter >= 20) { fidelityCounter = 0; points.push_back(TracePoint(missile)); } diff --git a/game/state/trace.hpp b/game/state/trace.hpp index 2b4f4f0..7edfbaf 100644 --- a/game/state/trace.hpp +++ b/game/state/trace.hpp @@ -13,7 +13,7 @@ namespace game { */ class Trace { public: - Trace(Missile *missile); + Trace(Missile *missile, float maxAge=5.0); ~Trace(); // Add the current position of the missile as a new point on the @@ -51,6 +51,9 @@ namespace game { // 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; }; }