Nouvel onglet "🧩 Collision" dans l'éditeur de scène 2D : chaque objet (hors joueur et fond) peut porter des règles "à la collision" ou "dans un périmètre (px)" déclenchant une action (quête, attaque, événement, ou interagir - qui affiche "Appuie sur [touche]" puis exécute une sous-action à l'appui, un seul niveau d'imbrication). Backend (sanitisation, route de persistance, exposition dans full_game_payload) + assistant modal en cartes empilées côté client. Ajoute le moteur d'exécution runtime (collision-rules-controller.js) : détecte l'entrée en collision/périmètre avec le joueur à chaque tick, déclenche l'action une seule fois par entrée, pur JS client sans appel serveur (fonctionne à l'identique en ligne et en export SCORM). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
22 lines
912 B
Python
22 lines
912 B
Python
from flask import request, jsonify
|
|
|
|
import screens
|
|
|
|
from core.flask_app import app
|
|
|
|
|
|
@app.route("/game/<slug>/scene-objects/<int:object_id>/collision-rules", methods=["POST"])
|
|
def scene_object_collision_rules(slug, object_id):
|
|
"""Liste complète des règles "déclencheur -> action" d'un objet (voir
|
|
"🧩 Collision" dans templates/scene_edit.html) — le client poste
|
|
toujours la liste ENTIÈRE (ajout/suppression déjà appliqués côté
|
|
client), jamais une règle isolée, même patron que
|
|
scene_object_commands.py pour "extra"."""
|
|
body = request.get_json(silent=True) or {}
|
|
obj = screens.get_scene_object(slug, object_id)
|
|
if not obj:
|
|
return jsonify({"error": "objet introuvable"}), 404
|
|
rules = screens.sanitize_collision_rules(body.get("rules"))
|
|
screens.set_scene_object_collision_rules(slug, object_id, rules)
|
|
return jsonify({"ok": True, "rules": rules})
|