diff --git a/src/engine/entity.py b/src/engine/entity.py index 86a2f0a..5babe4a 100644 --- a/src/engine/entity.py +++ b/src/engine/entity.py @@ -1,5 +1,6 @@ import math +from src.engine.enums import EntityDeathResult from src.engine.map_manager import MapManager from src.engine.mobs_AI import MobAI @@ -42,6 +43,9 @@ class Entity: self.shadow = None + self.death_callback = None + self.death_result = EntityDeathResult.REMOVED + def set_default_life(self, life: int): """Définit le nombre de PV de l'entité. Mettre -1 pour rendre l'entité immortelle.""" self.life_points = life diff --git a/src/engine/entity_manager.py b/src/engine/entity_manager.py index f7ac98c..8f17f50 100644 --- a/src/engine/entity_manager.py +++ b/src/engine/entity_manager.py @@ -1,4 +1,5 @@ from src.engine.entity import Entity +from src.engine.enums import EntityDeathResult from src.engine.map_manager import MapManager @@ -32,7 +33,13 @@ class EntityManager: entity = self.entities[entity_name] entity.update(delta) if entity.life_points == 0: - self.entities.pop(entity_name) + if entity.death_callback is not None: + entity.death_callback() + if entity.death_result == EntityDeathResult.REMOVED: + self.entities.pop(entity_name) + elif entity.death_result == EntityDeathResult.RESET_LIFE: + entity.life_points = entity.max_life_points + if entity.brain is not None and not self.paused: entity.brain.update(delta) diff --git a/src/engine/enums.py b/src/engine/enums.py index ceeddeb..a4187fc 100644 --- a/src/engine/enums.py +++ b/src/engine/enums.py @@ -8,3 +8,8 @@ class GameState(Enum): BOSS_FIGHT = 2 MAIN_MENU = 3 # AJouter si besoin, mais à utiliser de préférence avec parsimony + + +class EntityDeathResult(Enum): + REMOVED = 0 # The entity is removed + RESET_LIFE = 1 diff --git a/src/main.py b/src/main.py index 70024a1..5efeb33 100644 --- a/src/main.py +++ b/src/main.py @@ -3,7 +3,7 @@ import pygame.image from src.custom_AI import WolfAI from src.engine.animation import Anim from src.engine.engine import Engine -from src.engine.enums import GameState +from src.engine.enums import GameState, EntityDeathResult from src.engine.menu_manager import Menu, Label, Button @@ -85,6 +85,8 @@ class Game(Engine): player = self.entity_manager.register_entity("player") player.link_animation("player_none") player.collision_rect = [-6, -7, 6, 16] + player.death_result = EntityDeathResult.RESET_LIFE + player.death_callback = self.create_player_entity self.entity_manager.set_player_entity("player") @@ -93,7 +95,7 @@ class Game(Engine): # On définit ses attributs player.set_default_life(15) - player.max_speed = 64.0 + player.max_speed = 264.0 player.x = 220. player.y = 767.