diff --git a/engine.py b/engine/__init__.py similarity index 95% rename from engine.py rename to engine/__init__.py index 9bb076b..0086664 100644 --- a/engine.py +++ b/engine/__init__.py @@ -2,6 +2,16 @@ Système de gestion d'entités, composants et ressources. """ + +__all__ = [ + "World", + "Entity", + "Plugin", + "Game", +] + + +from abc import abstractmethod from typing import Iterator, Callable, Tuple, TypeVar, Type, Optional from logging import error @@ -225,14 +235,30 @@ class Entity: return True +class Plugin: + """ + Un plugin qui ajoute des fonctionnalités a un jeu. + """ + + @abstractmethod + def apply(self, game: "Game") -> None: + """ + Applique le plugin a un jeu. + """ + pass + + class Game: """ Permet de faire une simple boucle de jeu. """ - def __init__(self) -> None: + def __init__(self, *plugins: Plugin) -> None: """ - Créer une un jeu. + Créer une un jeu avec les plugins donnés en paramètres. + + Paramètres: + *plugins: Les plugins a ajouter au jeu. """ self._running = False self._startup_tasks: list[Callable[[World], None]] = [] @@ -241,6 +267,8 @@ class Game: self._post_update_tasks: list[Callable[[World], None]] = [] self._render_tasks: list[Callable[[World], None]] = [] self._shutdown_tasks: list[Callable[[World], None]] = [] + for plugin in plugins: + plugin.apply(self) def add_startup_tasks(self, *tasks: Callable[[World], None]) -> None: """ diff --git a/main.py b/main.py index 86437f9..bf8c5f3 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,7 @@ Ceci est un exemple de comment l'on peut utiliser le moteur du jeu. """ -from engine import Game +from engine import * # Initialisation