about summary refs log tree commit diff stats
path: root/src/main.c
diff options
context:
space:
mode:
authorCharadon <dev@iotib.net>2022-06-14 16:41:52 -0400
committerCharadon <dev@iotib.net>2022-06-14 16:41:52 -0400
commit6fd50edff5e3de70366680814e0cfb5dabcd2e5e (patch)
treee7b592af77df4ab294cdb52b5b056ad6ed36be08 /src/main.c
parent15621c41d2d38aa6023439ccd96416c66bf9345b (diff)
downloadPong-C-6fd50edff5e3de70366680814e0cfb5dabcd2e5e.tar.gz
Possibly fixed internal clock, needs testing
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/main.c b/src/main.c
index 6f2e96e..8eaba43 100644
--- a/src/main.c
+++ b/src/main.c
@@ -46,16 +46,27 @@ void set_screen_mode() {
 	}
 	return;
 }
-
+double Started;
 static int internal_clock() {
-	const struct timespec Delay = {
-		0, 16666666
+	static const double Framerate = 1.0/60.0f;
+	double OldTime = GetTime();
+	double DeltaTime = 0;
+	double NewTime = 0;
+	Started = GetTime();
+	struct timespec SleepFor = {
+		0, 99999
 	};
-	struct timespec Remaining;
 	while(GameGoing == true) {
-		SDL_AtomicAdd(&Ticks, 1);
-		nanosleep(&Delay, &Remaining);
+		nanosleep(&SleepFor, NULL); //Reduces CPU usage
+		NewTime = GetTime();
+		DeltaTime += (NewTime - OldTime)/Framerate;
+		OldTime = NewTime;
+		while(DeltaTime >= 1.0) {
+			SDL_AtomicAdd(&Ticks, 1);
+			DeltaTime--;
+		}
 	}
+
 	return(0);
 }
 
@@ -136,6 +147,9 @@ bool play_audio(int SoundEffect) {
 int main(int argc, char *argv[]) {
 	//Raylib Init
 	InitWindow(1280, 720, "Pong");
+	SDL_Init(SDL_INIT_AUDIO);
+	SDL_AtomicSet(&Ticks, 0);
+	SDL_Thread *InternalClock = SDL_CreateThread(internal_clock, "Internal Clock", NULL);
 	SetTargetFPS(60);
 	SetExitKey(KEY_NULL);
 	Image Icon = LoadImage("resources/ball.png");
@@ -149,9 +163,6 @@ int main(int argc, char *argv[]) {
 	GlobalSettings.SoundVolume = 0;
 	GlobalSettings.MusicVolume = 0;
 
-	//SDL Init
-	SDL_Init(SDL_INIT_AUDIO);
-
 	//Init Variables
 	strncpy(VersionString, "Version 0.3 - Charon", sizeof(VersionString));
 	
@@ -162,8 +173,6 @@ int main(int argc, char *argv[]) {
 
 	//Threading
 	AudioQueueBeingModified = SDL_CreateMutex();
-	SDL_AtomicSet(&Ticks, 0);
-	SDL_Thread *InternalClock = SDL_CreateThread(internal_clock, "Internal Clock", NULL);
 	SDL_Thread *AudioThread = SDL_CreateThread(audio, "Audio", NULL);
 	SDL_AtomicSet(&AudioInitializing, 0);