From 9dd925dd9f918195cfeb0bdea7060a4c8c73d9bd Mon Sep 17 00:00:00 2001 From: Tipragot Date: Fri, 3 Nov 2023 08:54:03 +0100 Subject: [PATCH] =?UTF-8?q?Chargement=20instantan=C3=A9e=20quand=20il=20y?= =?UTF-8?q?=20a=20moins=20de=2030=20assets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/assets.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/plugins/assets.py b/src/plugins/assets.py index ed17c92..835fd9e 100644 --- a/src/plugins/assets.py +++ b/src/plugins/assets.py @@ -3,6 +3,7 @@ Un plugin qui gère les assets du jeu. """ import glob +import random import pygame from engine import CurrentScene, GlobalPlugin, KeepAlive, Scene from engine.ecs import World @@ -177,6 +178,7 @@ def loading_scene(target: Scene, name: str, clear_cache: bool = True): def __init__(self): self.files = glob.glob(f"assets/{name}/**/*", recursive=True) + random.shuffle(self.files) self.total = len(self.files) @staticmethod @@ -188,18 +190,23 @@ def loading_scene(target: Scene, name: str, clear_cache: bool = True): assets = world[Assets] if clear_cache: assets.clear_cache() + asset_iterator = AssetIterator() world.set(AssetIterator()) - world.new_entity().set( - render.Sprite(assets.unloaded_texture, order=1000000000) - ) - world.new_entity().set( - ProgessBar(), - render.Sprite( - assets.loaded_texture, - order=1000000001, - area=(0, 0, 0, render.HEIGHT), - ), - ) + if asset_iterator.total <= 30: + for _ in range(asset_iterator.total): + asset_iterator.load_next(world) + else: + world.new_entity().set( + render.Sprite(assets.unloaded_texture, order=1000000000) + ) + world.new_entity().set( + ProgessBar(), + render.Sprite( + assets.loaded_texture, + order=1000000001, + area=(0, 0, 0, render.HEIGHT), + ), + ) @staticmethod def load_next(world: World): @@ -240,8 +247,8 @@ def loading_scene(target: Scene, name: str, clear_cache: bool = True): progress = file_loaded / asset_iterator.total # Affichage de la barre de progression - progress_bar = world.query(ProgessBar).pop() - progress_bar[render.Sprite].area = (0, 0, progress, 1.0) + for progress_bar in world.query(ProgessBar): + progress_bar[render.Sprite].area = (0, 0, progress, 1.0) return Scene( [AssetIterator.prepare_world],