diff --git a/src/engine/renderer.py b/src/engine/renderer.py index 1d26119..cc0ba34 100644 --- a/src/engine/renderer.py +++ b/src/engine/renderer.py @@ -17,7 +17,7 @@ class Renderer: def __init__(self, core: 'engine.Engine'): self.engine = core - self.time = 0 # Heure locale depuis le début des appels de la fonction update + self.timer = 0 # Timer local self.window_type = RESIZABLE self.window_size = (display.Info().current_w, display.Info().current_h) if self.window_type == FULLSCREEN else ( 600, 600) @@ -90,41 +90,26 @@ class Renderer: def update(self, delta: float): """Fait le rendu du jeu.""" - self.time += delta - - self.fadeout_is_fading = True - - if self.fadeout_is_fading: - self.fadeout_fade_color - self.fadeout_fade_opacity - self.fadeout_fade_callback - self.fadeout_fade_in_s - - - - - surf = surface.Surface(display.get_window_size(), SRCALPHA) # On dessine sur toute la fenêtre - surf.fill((100, 100, 100, 50)) - self.window.blit(surf, (0, 0)) - print(surf.get_colorkey()) - - - - - + self.timer -= delta + if self.timer < 0: + if self.fadeout_is_fading: + self.fadeout_is_fading = False + if self.fadeout_fade_callback is not None: + self.fadeout_fade_callback() + self.window.fill((255, 255, 255)) + # 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)) + if self.engine.game_state == GameState.NORMAL: # On crée une surface temporaire qui nous permettra de faire le rendu à l'échelle 1:1 rendered_surface_size = (display.get_window_size()[0] / self.engine.camera.zoom, display.get_window_size()[1] / self.engine.camera.zoom) 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.render_layer(0, rendered_surface) self.render_layer(1, rendered_surface) self.render_entities(rendered_surface, gui_surface, delta) @@ -138,7 +123,6 @@ class Renderer: math.ceil(rendered_surface_size[1] * self.engine.camera.zoom))), (0, 0)) - self.window.blit(gui_surface, (0, 0)) elif self.engine.game_state == GameState.BOSS_FIGHT: self.window.fill((255, 230, 230)) @@ -148,6 +132,14 @@ class Renderer: # Rend les menus self.render_menus() + if self.fadeout_is_fading: + r, g, b = self.fadeout_fade_color + a = (1 - self.timer / self.fadeout_fade_in_s) * self.fadeout_fade_opacity + gui_surface.fill((r,g,b,a)) + + + self.window.blit(gui_surface, (0, 0)) + # Conteur de FPS en mode DEBUG if self.engine.DEBUG_MODE: self.window.blit(font.SysFont("Arial", 20).render(f"FPS: {round(self.engine.clock.get_fps())}", True, (255, 0, 0)), @@ -522,11 +514,12 @@ class Renderer: math.floor(y * self.tile_size - self.engine.camera.y + y_middle_offset), self.tile_size, self.tile_size), width=1) - def fadeout(self, fade_s: float, fade_color: tuple[int, int, int] = (255, 255, 255), fade_opacity: int = 100, callback: FunctionType = None): + def fadeout(self, fade_s: float, fade_color: tuple[int, int, int] = (0, 0, 0), fade_opacity: int = 100, callback: FunctionType = None): """Fait un fondu vers la couleur (255, 255, 255) et a l'opacité max spécifié, et dans le temps spécifié, appelle la fonction callback une fois le fadout terminé""" - self.fadeout_is_fading = True + self.timer = fade_s self.fadeout_fade_in_s = fade_s + self.fadeout_is_fading = True self.fadeout_fade_color = fade_color - self.fadeout_fade_opacity = fade_opacity + self.fadeout_fade_opacity = round(fade_opacity * 255 / 100) self.fadeout_fade_callback = callback \ No newline at end of file