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

PausableClock.h

#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;
};

PausableClock.cpp

#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;
}
 
fr/sources/cpp_pausable_clock.txt · Last modified: 2009/03/14 12:44 by hiura
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki