Réimplémentation du rendu des ombres

This commit is contained in:
Yannis 2023-12-29 22:49:55 +01:00
parent a182529442
commit 646d705cf6
5 changed files with 24 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

View file

@ -36,6 +36,8 @@ class Entity:
self.animation_name = None self.animation_name = None
self.shadow = None
def set_default_life(self, life: int): def set_default_life(self, life: int):
"""Définit le nombre de PV de l'entité. Mettre -1 pour rendre l'entité immortelle.""" """Définit le nombre de PV de l'entité. Mettre -1 pour rendre l'entité immortelle."""
self.life_points = life self.life_points = life

View file

@ -28,6 +28,9 @@ class Renderer:
# Variables utilisées par le menu principal # Variables utilisées par le menu principal
self.main_menu_assets: dict[str: Anim] = {} self.main_menu_assets: dict[str: Anim] = {}
# Ombres d'entités
self.shadows = {}
def load_main_menu_assets(self, path: str): def load_main_menu_assets(self, path: str):
"""Charge les assets du menu principal depuis le dossier donné.""" """Charge les assets du menu principal depuis le dossier donné."""
@ -78,6 +81,11 @@ class Renderer:
# Apres avoir tout rendu, on met à jour l'écran # Apres avoir tout rendu, on met à jour l'écran
display.update() display.update()
def register_shadow(self, file_path: str, name: str):
"""Enregistre une image d'ombre utilisée pour le rendu des entités."""
shadow = image.load(file_path).convert_alpha()
self.shadows[name] = shadow
def register_animation(self, animation: Anim, name: str): def register_animation(self, animation: Anim, name: str):
"""Enregistre une animation.""" """Enregistre une animation."""
self.animations[name] = animation self.animations[name] = animation
@ -131,10 +139,6 @@ class Renderer:
anim: Anim = self.animations[entity.animation_name] anim: Anim = self.animations[entity.animation_name]
frame = anim.get_frame(delta) frame = anim.get_frame(delta)
# On flip l'image horizontalement si l'entité est retournée
if entity.direction == 1:
frame = transform.flip(frame, True, False)
# Si l'entité n'apparait pas à l'écran, on passe son rendu # Si l'entité n'apparait pas à l'écran, on passe son rendu
if (entity.x - self.engine.camera.x + x_middle_offset + frame.get_width() < 0 or if (entity.x - self.engine.camera.x + x_middle_offset + frame.get_width() < 0 or
entity.x - self.engine.camera.x - x_middle_offset - frame.get_width() > 0 or entity.x - self.engine.camera.x - x_middle_offset - frame.get_width() > 0 or
@ -142,10 +146,21 @@ class Renderer:
entity.y - self.engine.camera.y - y_middle_offset - frame.get_height() > 0): entity.y - self.engine.camera.y - y_middle_offset - frame.get_height() > 0):
continue continue
# On flip l'image horizontalement si l'entité est retournée
if entity.direction == 1:
frame = transform.flip(frame, True, False)
# On calcule les coordonnées de rendu de l'entité # On calcule les coordonnées de rendu de l'entité
entity_dest = (math.floor(entity.x - self.engine.camera.x + x_middle_offset - frame.get_width() / 2), entity_dest = (math.floor(entity.x - self.engine.camera.x + x_middle_offset - frame.get_width() / 2),
math.floor(entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2)) math.floor(entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2))
# On récupert l'ombre de l'entité
if entity.shadow is not None:
shadow_image = self.shadows[entity.shadow]
# On rend l'ombre
rendered_surface.blit(shadow_image, entity_dest)
# On affiche l'image # On affiche l'image
rendered_surface.blit(frame, entity_dest) rendered_surface.blit(frame, entity_dest)

View file

@ -38,6 +38,9 @@ class Game(Engine):
self.entity_manager.set_player_entity("player") self.entity_manager.set_player_entity("player")
player.shadow = "player_shadow"
self.renderer.register_shadow("assets/textures/entities/player/shadow.png", "player_shadow")
self.camera.follow_entity(player) self.camera.follow_entity(player)
def load_boss_fight_assets(self): def load_boss_fight_assets(self):