from abc import abstractmethod from enum import Enum from kennel.engine.entities.entity import EntityManager class SystemType(str, Enum): NETWORK = "NETWORK" WORLD = "WORLD" MARKOV = "MARKOV" class System: def __init__(self, system_type: SystemType): self.system_type = system_type @abstractmethod async def update(self, entity_manager: EntityManager, delta_time: float) -> None: pass class SystemManager: def __init__(self): self.systems = {} def add_system(self, system: System) -> None: self.systems[system.system_type] = system def get_system(self, system_type: SystemType) -> System: return self.systems.get(system_type) async def update(self, entity_manager: EntityManager, delta_time: float) -> None: for system in self.systems.values(): await system.update(entity_manager, delta_time)