Implementation de la base de l'engine #3

Merged
yannis merged 33 commits from Engine_base into main 2023-12-26 16:36:16 +00:00
Showing only changes of commit 25cc568165 - Show all commits

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