Fix du crash lors de la mort du joueur

This commit is contained in:
Yannis 2024-01-13 23:30:27 +01:00
parent 28df17050f
commit b65fb9d127
4 changed files with 21 additions and 3 deletions

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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.