- Ajoute clic/survol/affichage-ecran comme declencheurs, et surbrillance, video, son, visibilite, indication, attendre comme actions, utilisables aussi bien par l'editeur manuel (menu lateral Objets/Ecran) que par Ruby (IA), avec blocs deplacables/supprimables dans une chaine. - Corrige plusieurs variantes du bug "impossible de poser un objet hors du champ de la camera" (troncature du chainage d'actions a 4 maillons, fond importe pose a 128x128 au lieu de sa taille reelle, decalage du fond au vrai glisser-depose, redimensionnement manuel jamais propage au monde). - Ajoute un vrai glisser-depose depuis la galerie vers la scene, la gestion complete de "Mes assets" (sous-sections Fonds/Decors/Sons/ Videos, suppression, reclassement fond<->decor sans re-upload). - Ajoute l'upload de son (limite 3 min) et de video (MP4 uniquement, limite 5 min), avec validation de la duree reelle du fichier, et une replique audio optionnelle dans une bulle de dialogue. - Fixe la taille de pose d'un objet/decor importe a 200x200 avec une boite de collision de 150x150. - Filtre le selecteur de fichier des actions son/video par type reel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
import os
|
|
|
|
# "image"/"audio"/"video"/"other" d'après l'EXTENSION du fichier (voir
|
|
# _user_assets.filename, auth/save_user_asset.py) — pas de colonne dédiée
|
|
# en base : l'extension suffit, jamais ambiguë ici (tout upload passe par
|
|
# routes/assets/upload_user_asset.py, qui valide déjà le contenu pour un
|
|
# son, voir MAX_AUDIO_SECONDS). Utilisé pour organiser "Mes assets" en
|
|
# sous-sections (demande explicite : "voir, utiliser ou supprimer des
|
|
# son, image et vidéo", voir templates/scene_edit.html) — le sélecteur de
|
|
# fichier des actions "son"/"vidéo" (user_assets_options_json,
|
|
# routes/scenes/scene_edit_view.py), lui, liste TOUT sans distinction.
|
|
_IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".bmp"}
|
|
_AUDIO_EXTENSIONS = {".mp3", ".wav", ".ogg", ".m4a", ".aac", ".flac"}
|
|
_VIDEO_EXTENSIONS = {".mp4", ".webm", ".mov", ".avi", ".ogv"}
|
|
|
|
|
|
def user_asset_kind(filename):
|
|
ext = os.path.splitext(filename)[1].lower()
|
|
if ext in _IMAGE_EXTENSIONS:
|
|
return "image"
|
|
if ext in _AUDIO_EXTENSIONS:
|
|
return "audio"
|
|
if ext in _VIDEO_EXTENSIONS:
|
|
return "video"
|
|
return "other"
|