aboutsummaryrefslogtreecommitdiff
path: root/timing
diff options
context:
space:
mode:
Diffstat (limited to 'timing')
-rw-r--r--timing/timing.cpp44
-rw-r--r--timing/timing.h24
2 files changed, 68 insertions, 0 deletions
diff --git a/timing/timing.cpp b/timing/timing.cpp
new file mode 100644
index 0000000..37c5f40
--- /dev/null
+++ b/timing/timing.cpp
@@ -0,0 +1,44 @@
+#include "timing.h"
+
+timing_sdl::timing_sdl (double fps) {
+ frame_time = 1/fps;
+ last_time = SDL_GetTicks();
+ frame_counter = 0;
+ tot_time = 0;
+ unprocessed_time = 0;
+ frames = 0;
+ render = false;
+}
+
+void timing_sdl::process () {
+ render = false;
+
+ double startTime = SDL_GetTicks();
+ double passedTime = (startTime - last_time)/1000;
+ last_time = startTime;
+
+ unprocessed_time += passedTime;
+ frame_counter += passedTime;
+ tot_time += passedTime;
+
+ if (frame_counter >= 1.0) {
+ //printf("FPS: %i | %f ms\n", frames, 1000.0 / ((double)frames));
+ frames = 0;
+ frame_counter = 0;
+ }
+}
+
+bool timing_sdl::check_process () {
+ if (unprocessed_time > frame_time) {
+ render = true;
+ unprocessed_time -= frame_time;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool timing_sdl::check_render () {
+ if (render) { frames ++; }
+ return render;
+} \ No newline at end of file
diff --git a/timing/timing.h b/timing/timing.h
new file mode 100644
index 0000000..f420582
--- /dev/null
+++ b/timing/timing.h
@@ -0,0 +1,24 @@
+#ifndef TIMING_H
+#define TIMING_H
+
+#define SDL_MAIN_HANDLED
+#include <SDL2/SDL.h>
+
+class timing_sdl {
+ public:
+ timing_sdl(double fps);
+ void process();
+ bool check_process();
+ bool check_render();
+
+ private:
+ double frame_time;
+ double last_time;
+ double frame_counter;
+ double tot_time;
+ double unprocessed_time;
+ int frames;
+ bool render;
+};
+
+#endif \ No newline at end of file