nsi-rpg/src/engine/entity_manager.py
2024-01-03 19:46:00 +01:00

52 lines
1.9 KiB
Python

from src.engine.entity import Entity
from src.engine.map_manager import MapManager
class EntityManager:
"""Classe chargée de gérer les entités."""
def __init__(self, map_manager: MapManager):
self.entities: dict[str:Entity] = {}
self.player_entity_name = ""
self.map_manager = map_manager
def register_entity(self, name: str) -> Entity:
"""Crée une entité et l'enregistre dans un dictionnaire."""
entity = Entity(name)
self.entities[name] = entity
return entity
def set_player_entity(self, name: str):
"""Définit l'entité donnée comme le joueur. Elle peut donc être controlée."""
self.player_entity_name = name
def move_player_controls(self, x: float, y: float):
"""Bouge le joueur. X et y doivent être compris entre 0 et 1"""
player: Entity = self.get_by_name(self.player_entity_name)
player.move(x, y, self.map_manager)
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.update(delta)
if entity.life_points == 0:
self.entities.pop(entity_name)
if entity.brain is not None:
entity.brain.update(delta)
if self.player_entity_name:
player: Entity = self.get_by_name(self.player_entity_name)
if player.mouvements[0] != 0. or player.mouvements[1] != 0.:
player.link_animation("player_walking")
else:
player.link_animation("player_none")
def get_all_entities(self) -> list[Entity]:
"""Donne la liste de toutes les entités enregistrées."""
return list(self.entities.values())
def get_by_name(self, name: str) -> Entity:
"""Donne l'entité avec le nom donné."""
return self.entities[name]