From 646d705cf66e9273cbee16959a25d5f348139628 Mon Sep 17 00:00:00 2001 From: yannis300307 Date: Fri, 29 Dec 2023 22:49:55 +0100 Subject: [PATCH] =?UTF-8?q?R=C3=A9impl=C3=A9mentation=20du=20rendu=20des?= =?UTF-8?q?=20ombres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../textures/entities/player/none/layers.pdn | Bin 5383 -> 5383 bytes assets/textures/entities/player/shadow.png | Bin 0 -> 476 bytes src/engine/entity.py | 2 ++ src/engine/renderer.py | 23 +++++++++++++++--- src/main.py | 3 +++ 5 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 assets/textures/entities/player/shadow.png diff --git a/assets/textures/entities/player/none/layers.pdn b/assets/textures/entities/player/none/layers.pdn index 13b5a455d36e989c2ece6f5e3a804d68bf84cadc..deb5bf979a9c9e3f3e5c171a07bc8c151451d5f8 100644 GIT binary patch delta 14 VcmZqIYS-G3$H{20IiGU|HvlAZ1c?9u delta 14 VcmZqIYS-G3$H{2CIiGU|HvlAr1dIRx diff --git a/assets/textures/entities/player/shadow.png b/assets/textures/entities/player/shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..200a81e0d7ac228b1f5d129f5122784279486d2f GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!hC)vl$B+p3w^Mg}9Z3*yd;GWSR!6zORsm`4 zYHw-zQVYmw4DTlF`38jVl<%e4RV^UZEKd&Ye7NtMnnF!=R7 zYxUo4UdP@yeEXu~Y4?zO-(}+~TFh!PEu0eVb``DBI~v(9_*~|d$Y*$#AgQ*HeNWy~ z{Q@@k0#;w+ggJRLnnY)`>z(NOoPsi!FOwwo&3s(7XyII?$w_;tUWs(@n+&Za!u zDj9P&tG#LtbK!f~#;$0tscrVrYRy3<9>iJEh> zRv1~Yn!$kxTTAnpD`rf-Ss%W@1?I`K%n;rx{-@@ZFklKDM8nM0~O8tO_7jx?;Q58$z5 zs!u=kpzKsw{$a*Djjzo=Uz{qb@!oLb>+4sodGnlv?;qBj(|mZ^VwInafj1of&s^8B Q0~jL=p00i_>zopr00eZwrvLx| literal 0 HcmV?d00001 diff --git a/src/engine/entity.py b/src/engine/entity.py index 877ae3d..b03ba9d 100644 --- a/src/engine/entity.py +++ b/src/engine/entity.py @@ -36,6 +36,8 @@ class Entity: self.animation_name = None + self.shadow = None + 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/renderer.py b/src/engine/renderer.py index 3b17e40..37c72f6 100644 --- a/src/engine/renderer.py +++ b/src/engine/renderer.py @@ -28,6 +28,9 @@ class Renderer: # Variables utilisées par le menu principal self.main_menu_assets: dict[str: Anim] = {} + # Ombres d'entités + self.shadows = {} + def load_main_menu_assets(self, path: str): """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 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): """Enregistre une animation.""" self.animations[name] = animation @@ -131,10 +139,6 @@ class Renderer: anim: Anim = self.animations[entity.animation_name] 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 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 @@ -142,10 +146,21 @@ class Renderer: entity.y - self.engine.camera.y - y_middle_offset - frame.get_height() > 0): 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é 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)) + # 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 rendered_surface.blit(frame, entity_dest) diff --git a/src/main.py b/src/main.py index ddb424e..8f1ec06 100644 --- a/src/main.py +++ b/src/main.py @@ -38,6 +38,9 @@ class Game(Engine): 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) def load_boss_fight_assets(self):