implemented fadeout

This commit is contained in:
Adastram 2024-01-11 15:03:07 +01:00
parent 777b6adde4
commit d81a3e0452

View file

@ -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