Voilà une adaptation de la classe du même nom en C++ avec quelques fonctionnalités en extra.
NOTE : J'ai aussi réalisé une classe comme celle-ci, avec l'héritage. Mais Laurent m'a fait remarquer que ce n'était pas un bon choix (cf cette discussion). Je propose une autre version, sur le wiki anglais, ou sur mon wiki. — Hiura 2009/03/14 12:42
#ifndef PAUSABLECLOCK_H #define PAUSABLECLOCK_H #include <SFML/System.hpp> class PausableClock : public sf::Clock { public: //!Initialise le timer et le start PausableClock(); //!Met en pause le timer void Pause(); //!Met en marche le timer void Play(); //!Change l'état du timer (pause<->marche) bool Toggle(); //!Arrete le timer et le remet à zéro void Stop(); //!Remet le timer à zéro et le met en marche void Reset(); //!Retourne le temps écouler depuis la dernière fois qu'il à été mis en marche (avec Reset ou Play). float GetElapsedTime(); private: float m_elapsedTime; bool m_pause; };
#include <core/PausableClock.h> using namespace core; PausableClock::PausableClock() : m_elapsedTime(0.f), m_pause(false) { } void PausableClock::Pause() { if(!m_pause) { m_pause=true; m_elapsedTime+=sf::Clock::GetElapsedTime(); } } void PausableClock::Play() { if(m_pause) { m_pause=false; sf::Clock::Reset(); } } bool PausableClock::Toggle() { if(m_pause) { Play(); return true; } Pause(); return false; } void PausableClock::Stop() { Reset(); m_pause=true; m_elapsedTime=0; } void PausableClock::Reset() { m_elapsedTime=0; sf::Clock::Reset(); m_pause=false; Play(); } float PausableClock::GetElapsedTime() { if(m_pause) return m_elapsedTime; return sf::Clock::GetElapsedTime() + m_elapsedTime; }