Fixed fps cap and latency system

This commit is contained in:
Adastram 2024-01-15 14:56:34 +01:00
parent 779ac9194b
commit d0c98925e2
3 changed files with 12 additions and 15 deletions

View file

@ -53,18 +53,11 @@ class Engine:
Attend jusqu'à la fin du jeu.""" Attend jusqu'à la fin du jeu."""
self.running = True self.running = True
self.start_time = time.time()
self.frames = 0
# Initialisation ddes valeurs de delta et de last_time # Initialisation ddes valeurs de delta et de last_time
delta = 1. # Le delta est le temps depuis la dernière image delta = 1. # Le delta est le temps depuis la dernière image
last_time = time.time() last_time = time.time()
latency = 0
while self.running: while self.running:
refresh_rate = self.settings_manager.get_refresh_rate() refresh_rate = self.settings_manager.get_refresh_rate()
if refresh_rate == -1: # Pas de limite, vers l'infini et l'au-delà !!! if refresh_rate == -1: # Pas de limite, vers l'infini et l'au-delà !!!
@ -84,9 +77,17 @@ class Engine:
self.update(delta) 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 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: if len(self.last_latency) < self.latency_precision:
self.last_latency.append(latency) self.last_latency.append(latency)
else: else:
@ -100,10 +101,6 @@ class Engine:
self.global_latency = n/len(self.last_latency) self.global_latency = n/len(self.last_latency)
def update(self, delta: float): 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 """Fonction qui regroupe toutes les updates des composants. Elle permet de mettre à jour le jeu quand on
l'appelle.""" l'appelle."""
self.camera.update(delta, self.settings_manager.get_zoom()) self.camera.update(delta, self.settings_manager.get_zoom())
@ -119,4 +116,4 @@ class Engine:
def stop(self): def stop(self):
"""Arrête le programme.""" """Arrête le programme."""
self.running = False self.running = False
pygame.quit() pygame.quit()

View file

@ -29,7 +29,7 @@ class EntityManager:
def update(self, delta: float): def update(self, delta: float):
"""Met à jour toutes les entités enregistrées.""" """Met à jour toutes les entités enregistrées."""
for entity_name in list(self.entities.keys()): for entity_name in list(self.entities.keys()):
entity = self.entities[entity_name] entity: Entity = self.entities[entity_name]
entity.update(delta) entity.update(delta)
if entity.life_points == 0: if entity.life_points == 0:
self.entities.pop(entity_name) self.entities.pop(entity_name)

View file

@ -1,6 +1,6 @@
class SettingsManager: class SettingsManager:
def __init__(self, default_master_volume: float, default_zoom: float) -> None: 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.latency_precision = 100 # Nombre de valeurs de latence stocké (Pour faire la moyenne)
self.master_volume = default_master_volume self.master_volume = default_master_volume
self.sound_master_volume = 100 self.sound_master_volume = 100