Files
Forge-Engine/routes/scenes/scene_object_geometry.py
T
williamandClaude Sonnet 5 559331f9cf
Build and deploy / test-python (push) Successful in 10m59s
Build and deploy / test-js (push) Successful in 1m27s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Enrichit les declencheurs/actions de scene (clic/survol/affichage, surbrillance/video/son/visibilite/indication/attendre) et fiabilise la pose d'un fond/decor importe
- 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>
2026-09-12 00:28:46 +02:00

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})