- 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>
21 lines
888 B
Python
21 lines
888 B
Python
import os
|
|
import uuid
|
|
|
|
from .create_user_asset import create_user_asset
|
|
from .user_assets_dir import user_assets_dir
|
|
|
|
|
|
def save_user_asset(user_id, content, ext, original_name=None, source="upload", scene_kind=None):
|
|
"""Écrit `content` (bytes) sur disque + crée la ligne "Mes assets" —
|
|
factorisé pour être partagé par l'upload manuel
|
|
(routes/assets/upload_user_asset.py) ET la génération IA
|
|
(ai/tools.py::_dispatch_add_generated_image), jamais dupliqué entre
|
|
les deux. Renvoie (asset_id, filename)."""
|
|
filename = uuid.uuid4().hex + ext
|
|
asset_dir = user_assets_dir(user_id)
|
|
os.makedirs(asset_dir, exist_ok=True)
|
|
with open(os.path.join(asset_dir, filename), "wb") as f:
|
|
f.write(content)
|
|
asset_id = create_user_asset(user_id, filename, original_name=original_name, source=source, scene_kind=scene_kind)
|
|
return asset_id, filename
|