From d047eeebddf29d2951097dbbdda9ffafa6895c6a Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Sat, 17 Dec 2011 22:10:08 +0000 Subject: [PATCH] [Add] Added an FPS class. --- Unuk-QT/Makefile | 15 +++++++++++---- Unuk-QT/Unuk-QT.pro | 6 ++++-- src/Unuk/Game.h | 2 +- src/libUnuk/FPS.cpp | 35 +++++++++++++++++++++++++++++++++++ src/libUnuk/FPS.h | 28 ++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 src/libUnuk/FPS.cpp create mode 100644 src/libUnuk/FPS.h diff --git a/Unuk-QT/Makefile b/Unuk-QT/Makefile index bdb4df8..63c794f 100644 --- a/Unuk-QT/Makefile +++ b/Unuk-QT/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: Unuk-QT -# Generated by qmake (2.01a) (Qt 4.7.3) on: Fri Dec 16 01:33:02 2011 +# Generated by qmake (2.01a) (Qt 4.7.3) on: Sat Dec 17 22:09:14 2011 # Project: Unuk-QT.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile Unuk-QT.pro @@ -67,7 +67,8 @@ SOURCES = ../src/libUnuk/Debug.cpp \ ../src/Unuk/Player.cpp \ ../src/Unuk/Game.cpp \ ../src/libUnuk/MapElement.cpp \ - ../src/libUnuk/MapEntities.cpp + ../src/libUnuk/MapEntities.cpp \ + ../src/libUnuk/FPS.cpp OBJECTS = Debug.o \ main.o \ Input.o \ @@ -92,7 +93,8 @@ OBJECTS = Debug.o \ Player.o \ Game.o \ MapElement.o \ - MapEntities.o + MapEntities.o \ + FPS.o DIST = /usr/share/qt4/mkspecs/common/g++.conf \ /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/common/linux.conf \ @@ -192,7 +194,7 @@ qmake: FORCE dist: @$(CHK_DIR_EXISTS) .tmp/Unuk-QT1.0.0 || $(MKDIR) .tmp/Unuk-QT1.0.0 - $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h ../src/libUnuk/ApplySurface.h ../src/Unuk/Globals.h ../src/libUnuk/ImageLoader.h ../src/libUnuk/TextureManager.h ../src/libUnuk/Texture.h ../src/libUnuk/Text.h ../src/libUnuk/MapTile.h ../src/libUnuk/Map.h ../src/libUnuk/Button.h ../src/libUnuk/ButtonToggle.h ../src/libUnuk/Menu.h ../src/libUnuk/MainMenu.h ../src/libUnuk/ParticleEmitter.h ../src/libUnuk/IngameMenu.h ../src/libUnuk/Collision.h ../src/libUnuk/Character.h ../src/libUnuk/NPC.h ../src/Unuk/Player.h ../src/Unuk/Game.h ../src/libUnuk/MapElement.h ../src/libUnuk/MapEntities.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp ../src/libUnuk/ApplySurface.cpp ../src/Unuk/Globals.cpp ../src/libUnuk/Rect.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/TextureManager.cpp ../src/libUnuk/Texture.cpp ../src/libUnuk/Text.cpp ../src/libUnuk/Map.cpp ../src/libUnuk/Button.cpp ../src/libUnuk/ButtonToggle.cpp ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/MainMenu.cpp ../src/libUnuk/IngameMenu.cpp ../src/libUnuk/Collision.cpp ../src/libUnuk/Character.cpp ../src/libUnuk/NPC.cpp ../src/Unuk/Player.cpp ../src/Unuk/Game.cpp ../src/libUnuk/MapElement.cpp ../src/libUnuk/MapEntities.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h ../src/libUnuk/ApplySurface.h ../src/Unuk/Globals.h ../src/libUnuk/ImageLoader.h ../src/libUnuk/TextureManager.h ../src/libUnuk/Texture.h ../src/libUnuk/Text.h ../src/libUnuk/MapTile.h ../src/libUnuk/Map.h ../src/libUnuk/Button.h ../src/libUnuk/ButtonToggle.h ../src/libUnuk/Menu.h ../src/libUnuk/MainMenu.h ../src/libUnuk/ParticleEmitter.h ../src/libUnuk/IngameMenu.h ../src/libUnuk/Collision.h ../src/libUnuk/Character.h ../src/libUnuk/NPC.h ../src/Unuk/Player.h ../src/Unuk/Game.h ../src/libUnuk/MapElement.h ../src/libUnuk/MapEntities.h ../src/libUnuk/FPS.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp ../src/libUnuk/ApplySurface.cpp ../src/Unuk/Globals.cpp ../src/libUnuk/Rect.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/TextureManager.cpp ../src/libUnuk/Texture.cpp ../src/libUnuk/Text.cpp ../src/libUnuk/Map.cpp ../src/libUnuk/Button.cpp ../src/libUnuk/ButtonToggle.cpp ../src/libUnuk/ParticleEmitter.cpp ../src/libUnuk/MainMenu.cpp ../src/libUnuk/IngameMenu.cpp ../src/libUnuk/Collision.cpp ../src/libUnuk/Character.cpp ../src/libUnuk/NPC.cpp ../src/Unuk/Player.cpp ../src/Unuk/Game.cpp ../src/libUnuk/MapElement.cpp ../src/libUnuk/MapEntities.cpp ../src/libUnuk/FPS.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0 clean:compiler_clean @@ -481,6 +483,11 @@ MapEntities.o: ../src/libUnuk/MapEntities.cpp ../src/libUnuk/MapEntities.h \ ../src/libUnuk/ImageLoader.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o MapEntities.o ../src/libUnuk/MapEntities.cpp +FPS.o: ../src/libUnuk/FPS.cpp ../src/libUnuk/FPS.h \ + ../src/Unuk/Globals.h \ + ../src/libUnuk/Timer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o FPS.o ../src/libUnuk/FPS.cpp + ####### Install install: FORCE diff --git a/Unuk-QT/Unuk-QT.pro b/Unuk-QT/Unuk-QT.pro index ede7d73..8654bfe 100644 --- a/Unuk-QT/Unuk-QT.pro +++ b/Unuk-QT/Unuk-QT.pro @@ -36,7 +36,8 @@ HEADERS += ../src/libUnuk/Debug.h \ ../src/Unuk/Player.h \ ../src/Unuk/Game.h \ ../src/libUnuk/MapElement.h \ - ../src/libUnuk/MapEntities.h + ../src/libUnuk/MapEntities.h \ + ../src/libUnuk/FPS.h SOURCES += ../src/libUnuk/Debug.cpp \ ../src/Unuk/main.cpp \ ../src/libUnuk/Input.cpp \ @@ -61,4 +62,5 @@ SOURCES += ../src/libUnuk/Debug.cpp \ ../src/Unuk/Player.cpp \ ../src/Unuk/Game.cpp \ ../src/libUnuk/MapElement.cpp \ - ../src/libUnuk/MapEntities.cpp + ../src/libUnuk/MapEntities.cpp \ + ../src/libUnuk/FPS.cpp diff --git a/src/Unuk/Game.h b/src/Unuk/Game.h index 3d84c28..19df5ec 100644 --- a/src/Unuk/Game.h +++ b/src/Unuk/Game.h @@ -36,7 +36,7 @@ private: void LoadSavegame(const string savegameIDArg); void SaveSavegame(void); - static const int MAX_FPS = 6000; + static const int MAX_FPS = 200; static const int GAME_UPDATES_PER_SECOND = 60; static const int SKIP_TICKS = 1000 / GAME_UPDATES_PER_SECOND; diff --git a/src/libUnuk/FPS.cpp b/src/libUnuk/FPS.cpp new file mode 100644 index 0000000..155da68 --- /dev/null +++ b/src/libUnuk/FPS.cpp @@ -0,0 +1,35 @@ +#include "FPS.h" + +FPS::FPS(void) { + +} + +FPS::~FPS(void) { + +} + +void FPS::LimitFPS(void) { + // Calculate the FPS. + if(_fpsCalc.GetTicks() > 1000) { + + _fps = _frame / (_fpsCalc.GetTicks() / 1000); + + _fpsCalc.Start(); + _frame = 0; + } + + // Put a limitation on the FPS. + if(1000 / _maxFPS > _frameTimer.GetTicks()) { + // SDL_Delay does not accept a float so for higher framerate + // limits there's an innacuracy. This is as much as 3fps + // at a limit of 60fps. + SDL_Delay((1000 / _maxFPS) - _frameTimer.GetTicks()); + } + + _frameTimer.Start(); + _frame++; +} + +void FPS::SetMaxFPS(int maxFPSArg) { + _maxFPS = maxFPSArg; +} diff --git a/src/libUnuk/FPS.h b/src/libUnuk/FPS.h new file mode 100644 index 0000000..61249f5 --- /dev/null +++ b/src/libUnuk/FPS.h @@ -0,0 +1,28 @@ +#ifndef _FPS_H_ +#define _FPS_H_ +#include "../Unuk/Globals.h" +#include "Timer.h" + + +class FPS { +public: + FPS(void); + ~FPS(void); + + void LimitFPS(void); + + void SetMaxFPS(int maxFPSArg); + int GetMaxFPS(void) { return _maxFPS; } + + int GetCurrentFPS(void) { return _fps; } + +private: + int _fps; + int _frame; + int _maxFPS; + + Timer _frameTimer; + Timer _fpsCalc; +}; + +#endif