From d0c98925e27aa312d239221dfc14b2836b257ba3 Mon Sep 17 00:00:00 2001 From: adastram Date: Mon, 15 Jan 2024 14:56:34 +0100 Subject: [PATCH] Fixed fps cap and latency system --- src/engine/engine.py | 23 ++++++++++------------- src/engine/entity_manager.py | 2 +- src/engine/settings_manager.py | 2 +- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/engine/engine.py b/src/engine/engine.py index d685207..e5ab69f 100644 --- a/src/engine/engine.py +++ b/src/engine/engine.py @@ -53,18 +53,11 @@ class Engine: Attend jusqu'à la fin du jeu.""" self.running = True - self.start_time = time.time() - self.frames = 0 # Initialisation ddes valeurs de delta et de last_time delta = 1. # Le delta est le temps depuis la dernière image last_time = time.time() - - latency = 0 - - - while self.running: refresh_rate = self.settings_manager.get_refresh_rate() if refresh_rate == -1: # Pas de limite, vers l'infini et l'au-delà !!! @@ -84,9 +77,17 @@ class Engine: self.update(delta) + + new_refresh_rate = self.settings_manager.get_refresh_rate() + if refresh_rate != new_refresh_rate: + refresh_rate = new_refresh_rate + self.global_latency = 0 + self.last_latency = [] + latency = 0 latency = delta - 1/refresh_rate - if not latency > self.global_latency * 100 or self.global_latency == 0 or self.settings_manager.get_refresh_rate() != refresh_rate: # Impossible que le jeu prenne autant de retard, on skip cette latence dans le calcul, l'utilisateur a surement cliquer hors de la fenêtre + + if not latency > self.global_latency * 100 or self.global_latency == 0: # Impossible que le jeu prenne autant de retard, on skip cette latence dans le calcul, l'utilisateur a surement cliquer hors de la fenêtre if len(self.last_latency) < self.latency_precision: self.last_latency.append(latency) else: @@ -100,10 +101,6 @@ class Engine: self.global_latency = n/len(self.last_latency) def update(self, delta: float): - self.frames += 1 - if time.time() > 50 + self.start_time: - print(self.frames/50) - exit() """Fonction qui regroupe toutes les updates des composants. Elle permet de mettre à jour le jeu quand on l'appelle.""" self.camera.update(delta, self.settings_manager.get_zoom()) @@ -119,4 +116,4 @@ class Engine: def stop(self): """Arrête le programme.""" self.running = False - pygame.quit() + pygame.quit() \ No newline at end of file diff --git a/src/engine/entity_manager.py b/src/engine/entity_manager.py index f7ac98c..f942534 100644 --- a/src/engine/entity_manager.py +++ b/src/engine/entity_manager.py @@ -29,7 +29,7 @@ class EntityManager: def update(self, delta: float): """Met à jour toutes les entités enregistrées.""" for entity_name in list(self.entities.keys()): - entity = self.entities[entity_name] + entity: Entity = self.entities[entity_name] entity.update(delta) if entity.life_points == 0: self.entities.pop(entity_name) diff --git a/src/engine/settings_manager.py b/src/engine/settings_manager.py index 78643e6..7bad0d5 100644 --- a/src/engine/settings_manager.py +++ b/src/engine/settings_manager.py @@ -1,6 +1,6 @@ class SettingsManager: def __init__(self, default_master_volume: float, default_zoom: float) -> None: - self.refresh_rate = 200 + self.refresh_rate = 30 self.latency_precision = 100 # Nombre de valeurs de latence stocké (Pour faire la moyenne) self.master_volume = default_master_volume self.sound_master_volume = 100