- 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>
30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
from flask import request, jsonify
|
|
|
|
import screens
|
|
|
|
from core.flask_app import app
|
|
|
|
|
|
@app.route("/game/<slug>/scene-objects/<int:object_id>/geometry", methods=["POST"])
|
|
def scene_object_geometry(slug, object_id):
|
|
"""Mirror exact de routes/elements/element_geometry.py, mais en pixels
|
|
(voir screens/scenes/update_scene_object_geometry.py) — appelé en AJAX
|
|
pendant/à la fin d'un glisser-déposer sur la scène."""
|
|
data = request.get_json(force=True)
|
|
screens.update_scene_object_geometry(
|
|
slug, object_id,
|
|
x=float(data["x"]), y=float(data["y"]),
|
|
width=float(data["width"]), height=float(data["height"]),
|
|
)
|
|
# Un "fond" agrandi manuellement au-delà du champ de la caméra doit
|
|
# élargir le "monde" tout de suite (voir screens.resolve_scene_world_size)
|
|
# — sans ça, rien ne rafraîchissait window.SCENE_WIDTH/SCENE_HEIGHT côté
|
|
# JS après un redimensionnement manuel (contrairement au tour de Ruby,
|
|
# voir iaChatRefreshAfterTurn() dans static/js/ia/ia-chat.js), rendant
|
|
# injoignable à la souris tout ce qui dépassait la scène nominale.
|
|
obj = screens.get_scene_object(slug, object_id)
|
|
screen = screens.get_screen(slug, obj["scene_id"])
|
|
objects = screens.list_scene_objects(slug, obj["scene_id"])
|
|
world_width, world_height = screens.resolve_scene_world_size(screen, objects)
|
|
return jsonify({"ok": True, "world_width": world_width, "world_height": world_height})
|