Ajout du rendu de la barre de vie

This commit is contained in:
Yannis 2023-12-26 15:48:45 +01:00
parent 906fcf0361
commit 25cc568165

View file

@ -1,7 +1,7 @@
import math import math
from pygame import display, image, surface, transform, draw from pygame import display, image, surface, transform, draw
from pygame.locals import RESIZABLE from pygame.locals import RESIZABLE, SRCALPHA
import src.engine as engine import src.engine as engine
from src.animation import Anim from src.animation import Anim
@ -40,8 +40,12 @@ class Renderer:
display.get_window_size()[1] / self.engine.camera.zoom) display.get_window_size()[1] / self.engine.camera.zoom)
rendered_surface = surface.Surface(rendered_surface_size) rendered_surface = surface.Surface(rendered_surface_size)
# On crée une surface qui sera ajoutée à la fenêtre apres rendered_surface pour pouvoir mettre des GUI
gui_surface = surface.Surface(display.get_window_size(), SRCALPHA)
gui_surface.fill((0, 0, 0, 0))
self.renderer_layer(0, rendered_surface) self.renderer_layer(0, rendered_surface)
self.render_entities(rendered_surface) self.render_entities(rendered_surface, gui_surface)
self.renderer_layer(1, rendered_surface) self.renderer_layer(1, rendered_surface)
self.renderer_layer(2, rendered_surface) self.renderer_layer(2, rendered_surface)
@ -51,6 +55,8 @@ class Renderer:
math.ceil(rendered_surface_size[1] * self.engine.camera.zoom))), math.ceil(rendered_surface_size[1] * self.engine.camera.zoom))),
(0, 0)) (0, 0))
self.window.blit(gui_surface, (0, 0))
elif self.engine.game_state == GameState.BOSS_FIGHT: elif self.engine.game_state == GameState.BOSS_FIGHT:
self.window.fill((255, 0, 0)) self.window.fill((255, 0, 0))
@ -61,7 +67,7 @@ class Renderer:
"""Enregistre une animation.""" """Enregistre une animation."""
self.animations[name] = animation self.animations[name] = animation
def render_entities(self, rendered_surface: surface.Surface): def render_entities(self, rendered_surface: surface.Surface, gui_surface: surface.Surface):
"""Rend toutes les entités.""" """Rend toutes les entités."""
# On calcule le décalage pour centrer la caméra # On calcule le décalage pour centrer la caméra
x_middle_offset = display.get_window_size()[0] / 2 / self.engine.camera.zoom x_middle_offset = display.get_window_size()[0] / 2 / self.engine.camera.zoom
@ -73,11 +79,22 @@ class Renderer:
frame = anim.get_frame(0.01666667) frame = anim.get_frame(0.01666667)
# On calcule les coordonnées de rendu de l'entité # On calcule les coordonnées de rendu de l'entité
player_dest = (entity.x - self.engine.camera.x + x_middle_offset - frame.get_width() / 2, entity_dest = (entity.x - self.engine.camera.x + x_middle_offset - frame.get_width() / 2,
entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2) entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2)
# On affiche l'image # On affiche l'image
rendered_surface.blit(frame, player_dest) rendered_surface.blit(frame, entity_dest)
# Rendu de la barre de vie des entités
life_bar_width = 50
life_bar_height = 8
life_bar_y_offset = 5
draw.rect(gui_surface, (255, 0, 0),
((entity.x - self.engine.camera.x + x_middle_offset) * self.engine.camera.zoom - life_bar_width / 2,
(entity.y - self.engine.camera.y + y_middle_offset - frame.get_height() / 2) *
self.engine.camera.zoom - life_bar_height - life_bar_y_offset,
life_bar_width, life_bar_height))
if self.engine.DEBUG_MODE: if self.engine.DEBUG_MODE:
top_let_corner_x = entity.x - self.engine.camera.x + x_middle_offset top_let_corner_x = entity.x - self.engine.camera.x + x_middle_offset