Bibliothèque de sprites animaux CraftPix (2/3) : export .zip sélectif
Build and deploy / test-python (push) Failing after 1m50s
Build and deploy / test-js (push) Successful in 7s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

Corrige aussi un import cassé du commit précédent : screens/__init__.py
importe déjà screens.rendering.list_used_forge_characters (nécessaire à
screens.ADMIN_ONLY_CHARACTER_SLUGS/la galerie filtrée), mais ce fichier
n'avait pas été inclus dans ce commit — screens/ ne s'importait plus en
l'état. Corrigé ici, dans le même commit que sa seule vraie utilisation.

publish/build_package.py copiait jusqu'ici static/characters/ dans SON
INTÉGRALITÉ pour CHAQUE jeu exporté (.zip), sans filtrage — avec la
bibliothèque d'animaux (~2,1 Go), ça aurait gonflé chaque export du poids
de toute la bibliothèque, même un jeu qui n'utilise aucun animal.

screens.list_used_forge_characters(slug) (nouveau) parcourt tous les
écrans du jeu (écrans-modèles compris, même patron que
full_game_payload.py) et renvoie l'ensemble des personnages Forge
réellement référencés. _copy_engine_sources()/_copy_characters()
copient désormais : le rangement plat Kenney (petit, comme avant) +
toujours static/characters/animals/manifest.json (nécessaire à l'IMPORT
de screens/labels/animal_sprite_library.py dans le paquet exporté,
sinon le jeu exporté ne démarre plus) + UNIQUEMENT les dossiers
animal/variante réellement utilisés par CE jeu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-08-31 21:52:13 +02:00
co-authored by Claude Sonnet 5
parent 449c36fd5d
commit a27d08c6b0
2 changed files with 82 additions and 2 deletions
@@ -0,0 +1,28 @@
from ..screens_repo.list_screens import list_screens
from ..elements.list_elements import list_elements
from ..scenes.list_scene_objects import list_scene_objects
from .personnage_data import resolve_personnage_data
def list_used_forge_characters(slug):
"""Ensemble des slugs SPRITE_LIBRARY (screens.SPRITE_LIBRARY)
réellement référencés par CE jeu — tous écrans, écrans-modèles compris
(même patron que full_game_payload.py : un personnage peut vivre dans
un écran-modèle d'élément réutilisable). Utilisé par
publish/build_package.py pour ne copier dans le .zip exporté que les
dossiers static/characters/animals/<animal>/<NN>/ réellement utilisés
par CE jeu, plutôt que les ~52 000 fichiers de toute la bibliothèque
(voir le plan "Bibliothèque de sprites animaux CraftPix")."""
used = set()
for s in list_screens(slug, include_templates=True):
for el in list_elements(slug, s["id"]):
if el.get("widget") == "personnage":
data = resolve_personnage_data(el)
if data.get("source") == "forge" and data.get("forge_character"):
used.add(data["forge_character"])
for o in list_scene_objects(slug, s["id"]):
if o.get("kind") == "personnage":
data = resolve_personnage_data(o)
if data.get("source") == "forge" and data.get("forge_character"):
used.add(data["forge_character"])
return used