diff --git a/src/karts/abstract_kart.hpp b/src/karts/abstract_kart.hpp index 71a155178..b15d5c2a1 100644 --- a/src/karts/abstract_kart.hpp +++ b/src/karts/abstract_kart.hpp @@ -24,6 +24,7 @@ #include "karts/controller/kart_control.hpp" #include "race/race_manager.hpp" +class AbstractKartAnimation; class Attachment; class btKart; class btQuaternion; @@ -31,7 +32,6 @@ class btUprightConstraint; class Camera; class Controller; class Item; -class AbstractKartAnimation; class KartModel; class KartProperties; class Material; @@ -158,7 +158,7 @@ public: { return m_kart_animation; } // ------------------------------------------------------------------------ /** Sets a new kart animation. */ - void setKartAnimation(AbstractKartAnimation *ka); + virtual void setKartAnimation(AbstractKartAnimation *ka); // ------------------------------------------------------------------------ // ------------------------------------------------------------------------ diff --git a/src/karts/abstract_kart_animation.hpp b/src/karts/abstract_kart_animation.hpp index ccbe03ac6..35ba0c0ab 100644 --- a/src/karts/abstract_kart_animation.hpp +++ b/src/karts/abstract_kart_animation.hpp @@ -53,12 +53,12 @@ public: virtual ~AbstractKartAnimation(); virtual void update(float dt); // ------------------------------------------------------------------------ + /** Returns the current animation timer. */ virtual float getAnimationTimer() const { return m_timer; } -#ifdef DEBUG + // ------------------------------------------------------------------------ /** To easily allow printing the name of the animation being used atm. * Used in AstractKart in case of an incorrect sequence of calls. */ - virtual const std::string getName() const { return m_name; } -#endif + virtual const std::string &getName() const { return m_name; } }; // AbstractKartAnimation diff --git a/src/karts/kart_with_stats.cpp b/src/karts/kart_with_stats.cpp index d570826f3..0f03cfdea 100644 --- a/src/karts/kart_with_stats.cpp +++ b/src/karts/kart_with_stats.cpp @@ -76,12 +76,16 @@ void KartWithStats::setKartAnimation(AbstractKartAnimation *ka) // Nothing to count if it's not a new animation if(!is_new) return; - if(dynamic_cast(ka)) + // We can't use a dynamic cast here, since this function is called from + // constructor of AbstractKartAnimation, which is the base class for all + // animations. So at this stage ka is only an AbstractKartAnimation, not + // any of the derived classes. + if(ka && ka->getName()=="ExplosionAnimation") { m_explosion_count ++; m_explosion_time += ka->getAnimationTimer(); } - else if(dynamic_cast(ka)) + else if(ka && ka->getName()=="RescueAnimation") { m_rescue_count ++; m_rescue_time += ka->getAnimationTimer();