From ffedb16d8a68be1815530a8d8a968fa7cac63527 Mon Sep 17 00:00:00 2001 From: william Date: Thu, 27 Aug 2026 08:42:20 +0200 Subject: [PATCH] =?UTF-8?q?Inclut=20les=20=C3=A9crans-mod=C3=A8les=20dans?= =?UTF-8?q?=20gameData.flows/animations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cause du "la logique posée sur le modèle ne s'applique pas dans la scène" (persistant malgré les 2 commits précédents) : full_game_payload() appelait list_screens(slug) SANS include_templates=True — un écran-modèle (ex. "Modèle : mail content") n'apparaissait donc jamais dans gameData.flows ni gameData.animations côté client. findTriggerNode() cherche pourtant bien un déclencheur dans TOUTES les clés de gameData.flows — mais si l'écran-modèle n'y a même pas d'entrée, il n'y a rien à trouver, quelle que soit la justesse de cette recherche. Fix : les nœuds/fils de logique et les clips d'animation sont désormais lus pour TOUS les écrans (list_screens(slug, include_templates=True)), dans une boucle séparée de celle qui construit payload_screens — celle- ci continue de ne lister que les vrais écrans, pour ne jamais rendre un écran-modèle comme un
à part entière (il n'est jamais affiché tel quel, seulement rechargé en direct à l'intérieur d'un élément qui l'utilise). Vérifié sur les vraies données du jeu de test : gameData.flows contient désormais bien l'écran 3 (le modèle "mail content"), avec son déclencheur "Au survol" et son action "Rendre visible" ; payload_screens ne contient toujours que l'écran réel (1). Co-Authored-By: Claude Sonnet 5 --- screens/payload/full_game_payload.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/screens/payload/full_game_payload.py b/screens/payload/full_game_payload.py index 8be22e47..69fd2894 100644 --- a/screens/payload/full_game_payload.py +++ b/screens/payload/full_game_payload.py @@ -24,6 +24,21 @@ def full_game_payload(slug): for s in screens_: elements = list_elements(slug, s["id"], enforce_visibility=True) payload_screens.append({**s, "elements": elements}) + + # Le graphe de logique et les animations sont, eux, lus pour TOUS les + # écrans, écrans-modèles compris (include_templates=True) — pas + # seulement les "vrais" écrans ci-dessus. Un élément de jeu réutilisable + # (ex. "mail content") peut avoir son propre déclencheur/sa propre + # animation posée dans l'éditeur de SON écran-modèle (voir + # screen_edit.html) : sans ses entrées ici, gameData.flows/ + # gameData.animations n'auraient jamais contenu cet écran-modèle côté + # client, et findTriggerNode()/collectAnimationClips() (templates/ + # play.html) — pourtant déjà écrits pour les chercher — n'auraient + # jamais rien trouvé. On ne les ajoute PAS à payload_screens : un + # écran-modèle ne doit jamais être rendu comme un vrai
(il n'est jamais affiché tel quel, seulement + # rechargé en direct à l'intérieur d'un élément qui l'utilise). + for s in list_screens(slug, include_templates=True): flows[str(s["id"])] = { "nodes": list_flow_nodes(slug, s["id"]), "edges": list_flow_edges(slug, s["id"]),