L3-Bataille-Navale/source/gui/window/GameWindow.py
2023-03-14 23:09:03 +01:00

51 lines
1.6 KiB
Python

from pathlib import Path
import pyglet.window
from source.gui.window import Window
from source.option import Option
from source.type import ColorRGBA
class GameWindow(Window): # NOQA
"""
Similaire à la classe Window, mais ajoute quelque fonctionnalités pratique pour un jeu. (Option, FPS, etc.)
"""
def __init__(self,
option_path: Path = None,
fps_color: ColorRGBA = (255, 255, 255, 200),
fps_enable: bool = False,
*args, **kwargs):
super().__init__(*args, **kwargs)
self._fps_counter = pyglet.window.FPSDisplay(self, color=fps_color)
self.fps_enable = fps_enable
self.option = None
self.option_path = option_path
# Créer un événement juste après le debut de la boucle pour charger les options.
# Puisque pyglet.app.run va limiter les FPS à 60, les options doivent être chargées juste après
# afin que les anciens paramètres de FPS soient appliqués.
pyglet.clock.schedule_once(lambda *_: self.load_option(), 0)
def load_option(self):
"""
Charge les options depuis le fichier self.option_path.
"""
try:
if self.option_path.exists():
self.option = Option.load(self, self.option_path)
except Exception: # NOQA
pass
if self.option is None: self.option = Option(window=self)
def on_draw_after(self):
# après que tous les éléments ont été dessinés, dessiner le compteur de FPS s'il est activé.
if self.fps_enable: self._fps_counter.draw()