www.pudn.com > zfxcengine-0.1.0.zip > ceTimer.cpp


// $Id: ceTimer.cpp,v 1.8 2005/06/23 19:38:19 kimmi Exp $  
//////////////////////////////////////////////////////////////////////////////// 
//  Module:    Core                                                           
//! \file      ceTime.cpp 
//! \brief     Implemetierung des Timers 
//! \author    Sebastian Witziok 
//                                                                             
// Diese Datei steht unter der LGPL-Lizenz, welche   
// im Hauptordner(ZFXC-Engine) unter LICENSE         
// nachlesbar ist.                                   
//////////////////////////////////////////////////////////////////////////////// 
#include "Core/ceCore.h" 
#include "Core/ceTimer.h" 
#include "Core/ceMemManager.h" 
 
namespace ZFXCE { 
	/////////////////////////////////////////////////////////////////////////////////// 
	ceTimer::ceTimer() 
	{ 
		Init();	 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	ceTimer::~ceTimer() 
	{ 
		Release(); 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceTimer::Release() 
	{ 
		if(m_pDayTime != 0) 
			delete m_pDayTime; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceTimer::Init() 
	{ 
		m_uiStartTime = SDL_GetTicks(); 
		UpdateTimeOfDay(); 
		m_pDayTime = 0; 
		m_fFrameTime = GetTime() * 0.001; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	UINT ceTimer::GetTime() 
	{ 
		m_uiCurrentTime = SDL_GetTicks()/* - m_uiStartTime*/; 
		return m_uiCurrentTime; 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceTimer::GetFPS(UINT* pFPS) 
	{ 
		// Speichert die Zeit, die seit dem letzten Frame vergangen ist 
		static DOUBLE fLastTime = 0.0; 
		 
		// Die Zeit, die das letzte Frame gebraucht hat 
		static DOUBLE fFrameTime = 0.0;		 
 
		// Die aktuelle Zeit als Float 
		DOUBLE fCurrentTime = (this->GetTime() * 0.001); 
 
		m_fFrameInterval = fCurrentTime - fFrameTime; 
 
		fFrameTime = fCurrentTime; 
 
		// Frame Zähler erhöhen 
		++m_uiFPS; 
 
		// Jede Sekunde die FPS Zahl aktualisieren 
		if( (fCurrentTime - fLastTime) > 1.0f) { 
			fLastTime = fCurrentTime; 
			if(pFPS) 
				*pFPS = m_uiFPS; 
 
			// FPS Zähler zurücksetzen 
			m_uiFPS = 0; 
		} 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	DOUBLE ceTimer::GetFrameInterval() 
	{  
		const DOUBLE fCurrentTime = (GetTime() * 0.001); 
		m_fFrameInterval = m_fFrameTime - fCurrentTime; 
		m_fFrameTime = fCurrentTime; 
		 
		return m_fFrameInterval;  
	} 
	//////////////////////////////////////////////////////////////////////////////// 
	void ceTimer::UpdateTimeOfDay() 
	{	 
		// Get time as long int by standard tools 
		time(&m_lTime);  
 
		// Convert into local time 
		m_pDayTime = localtime( &m_lTime); 
	} 
	//////////////////////////////////////////////////////////////////////////////// 
 
} // Namespace ZFXCE