Ajoute l'assistant IA "Ruby" (Claude + Scenario) et corrige plusieurs bugs de la scène
Intègre un chat IA capable de manipuler la scène via les mêmes fonctions que l'éditeur manuel (objets, variables, déclencheurs, images générées), avec conversations multiples par écran façon Claude. Corrige au passage le rafraîchissement pjax hors-ordre, l'onglet IA/déclencheurs vide après sélection d'un objet, la comparaison de booléens dans les conditions, et le blocage du glisser-déposer hors du cadre caméra après un redimensionnement de fond par l'IA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
ab6635eee0
commit
b07b231a61
@@ -1,4 +1,4 @@
|
||||
from flask import request, redirect, url_for
|
||||
from flask import request, redirect, render_template, url_for, jsonify
|
||||
|
||||
import db
|
||||
|
||||
@@ -9,7 +9,10 @@ from core.flask_app import app
|
||||
def create_global_var(slug):
|
||||
"""Depuis l'onglet "Variables" de l'éditeur de scène (screen_edit.html)
|
||||
— idempotent par nom (voir db.create_global_variable), donc sans
|
||||
risque en cas de double soumission."""
|
||||
risque en cas de double soumission. Réponse AJAX (voir
|
||||
static/js/scenes/global-variables.js) : renvoie le HTML de la LIGNE
|
||||
créée (templates/_global_variable_row.html, partagé avec le rendu
|
||||
initial de la page — jamais dupliqué), que le JS insère sans recharger."""
|
||||
name = (request.form.get("name") or "").strip()
|
||||
var_type = request.form.get("type") or "texte"
|
||||
default_value = request.form.get("default_value") or ""
|
||||
@@ -21,6 +24,14 @@ def create_global_var(slug):
|
||||
per_player = request.form.get("per_player", "1") == "1"
|
||||
if name:
|
||||
db.create_global_variable(slug, name, var_type, default_value, per_player=per_player)
|
||||
if request.headers.get("X-Requested-With") == "fetch":
|
||||
row_html = ""
|
||||
if name:
|
||||
variable = db.get_global_variable(slug, name)
|
||||
row_html = render_template(
|
||||
"_global_variable_row.html", v=variable, global_variable_types=db.GLOBAL_VARIABLE_TYPES,
|
||||
)
|
||||
return jsonify({"ok": True, "row_html": row_html})
|
||||
if screen_id:
|
||||
return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, tab="variables"))
|
||||
return redirect(url_for("game_dashboard", slug=slug))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from flask import request, redirect, url_for
|
||||
from flask import request, redirect, url_for, jsonify
|
||||
|
||||
import db
|
||||
|
||||
@@ -7,8 +7,13 @@ from core.flask_app import app
|
||||
|
||||
@app.route("/game/<slug>/variables/<int:var_id>/delete", methods=["POST"])
|
||||
def global_var_delete(slug, var_id):
|
||||
"""Suppression en AJAX (voir static/js/scenes/global-variables.js) —
|
||||
même raison que global_var_edit.py. Redirection classique conservée
|
||||
en secours pour tout appelant non-JS."""
|
||||
screen_id = request.form.get("screen_id", type=int)
|
||||
db.delete_global_variable_by_id(slug, var_id)
|
||||
if request.headers.get("X-Requested-With") == "fetch":
|
||||
return jsonify({"ok": True})
|
||||
if screen_id:
|
||||
return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, tab="variables"))
|
||||
return redirect(url_for("game_dashboard", slug=slug))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from flask import request, redirect, url_for
|
||||
from flask import request, redirect, url_for, jsonify
|
||||
|
||||
import db
|
||||
|
||||
@@ -7,10 +7,16 @@ from core.flask_app import app
|
||||
|
||||
@app.route("/game/<slug>/variables/<int:var_id>/edit", methods=["POST"])
|
||||
def global_var_edit(slug, var_id):
|
||||
"""Enregistrement en AJAX (voir static/js/scenes/global-variables.js) —
|
||||
demande explicite : modifier/supprimer une variable ne doit plus
|
||||
recharger toute la page. Redirection classique conservée en secours
|
||||
pour tout appelant non-JS (même patron que scene_object_add.py)."""
|
||||
var_type = request.form.get("type") or "texte"
|
||||
value = request.form.get("value") or ""
|
||||
screen_id = request.form.get("screen_id", type=int)
|
||||
db.update_global_variable(slug, var_id, var_type, value)
|
||||
if request.headers.get("X-Requested-With") == "fetch":
|
||||
return jsonify({"ok": True})
|
||||
if screen_id:
|
||||
return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, tab="variables"))
|
||||
return redirect(url_for("game_dashboard", slug=slug))
|
||||
|
||||
Reference in New Issue
Block a user