67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
# Classe animation adaptée depuis ESG Engine :
|
|
# https://github.com/yannis300307/ESG_Engine/blob/main/ESG_Engine/client/animation.py
|
|
import os
|
|
|
|
import pygame
|
|
|
|
|
|
class Anim:
|
|
"""Une animation contenant les images pygame et le temps entre chaque frames."""
|
|
def __init__(self, change_frame_time: float):
|
|
self.frames = []
|
|
self.change_frame_time = change_frame_time # Delay entre chaque frames
|
|
self.current_frame = 0
|
|
self.time = 0
|
|
|
|
def add_frame(self, frame: pygame.Surface):
|
|
"""Enregistre une nouvelle image dans la liste des frames."""
|
|
self.frames.append(frame.convert_alpha())
|
|
|
|
def get_frame_nbr(self):
|
|
"""Renvoie le nombre d'images enregistrées."""
|
|
return len(self.frames)
|
|
|
|
def get_frame(self, delta: float):
|
|
"""Donne l'image courante de l'animation."""
|
|
# Avant de retourner l'image, on met à jour le delay
|
|
self.update_current_frame(delta)
|
|
|
|
# Si le delay entre deux images est écoulé, on incrémente le numéro de l'image et on remet le temps à 0
|
|
if self.time >= self.change_frame_time:
|
|
self.current_frame += 1
|
|
self.time = 0
|
|
|
|
# Si on sort de la liste d'images, on revient au début
|
|
if self.current_frame >= len(self.frames):
|
|
self.current_frame = 0
|
|
|
|
return self.frames[self.current_frame]
|
|
|
|
def update_current_frame(self, delta: float):
|
|
"""Met à jour le delay de l'image courante avec le delta time."""
|
|
self.time += delta
|
|
|
|
def get_specific_frame(self, base: int):
|
|
"""Donne la {base} ème image apres l'image courante."""
|
|
# Si le delay entre deux images est écoulé, on incrémente le numéro de l'image et on remet le temps à 0
|
|
if self.time >= self.change_frame_time:
|
|
self.current_frame += 1
|
|
self.time = 0
|
|
|
|
# Si on sort de la liste d'images, on revient au début
|
|
if self.current_frame >= len(self.frames):
|
|
self.current_frame = 0
|
|
|
|
return self.frames[(self.current_frame + base) % len(self.frames)]
|
|
|
|
def load_animation_from_directory(self, path: str):
|
|
"""Récupère toutes les images au format png dans un dossier et les enregistre comme frames de l'animation."""
|
|
|
|
# On récupère tous les fichiers dans le dossier donné
|
|
files = os.listdir(path)
|
|
|
|
# Si ils sont bien en PNG, on les enregistre
|
|
for file in files:
|
|
if file.endswith(".png"):
|
|
self.add_frame(pygame.image.load(path + os.sep + file))
|