Ouvre les onglets Logique/Animation dans l'éditeur d'un modèle réutilisable
Ces onglets ("Logique de la scène", "Timeline d'animation") étaient
masqués sur l'écran-modèle d'un élément de jeu réutilisable, avec un
commentaire expliquant pourquoi : à l'époque, ses enfants étaient COPIÉS
en base avec un NOUVEL id à chaque exemplaire posé
(instantiate_template_tree) — une logique/animation posée dans le
modèle référencerait donc des ids qui n'existent plus une fois
l'élément utilisé ailleurs.
Ce mécanisme a depuis été retiré (voir le commentaire dans
list_elements.py) : le contenu d'un élément de jeu réutilisable est
désormais TOUJOURS rechargé EN DIRECT depuis son écran-modèle à chaque
affichage, avec les MÊMES ids à chaque exemplaire. Combiné au commit
précédent (findTriggerNode/runFlowFrom/collectAnimationClips côté
play.html, qui exécutent maintenant correctement un déclencheur/une
animation posé dans un modèle, où qu'il soit utilisé), la restriction
de cette page n'avait donc plus lieu d'être — elle bloquait justement la
fonctionnalité que le commit précédent venait de rendre possible.
Les données nécessaires (flow_nodes/flow_edges/elements du modèle,
etc.) étaient déjà calculées sans condition par la route
(routes/screens/screen_edit.py) ; seul le template masquait les deux
onglets et leur contenu derrière {% if not screen.is_template %}.
switchBuilderTab() détecte déjà la présence des panneaux via
HAS_FLOW_PANEL/HAS_ANIM_PANEL (document.getElementById), donc aucun
changement JS n'était nécessaire.
Vérifié en rendant réellement /game/test/screens/3/edit (l'écran-modèle
"mail content") via le client de test Flask : les deux onglets sont
maintenant bien présents, et l'écran normal (id=1) n'est pas affecté.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
17c5e93d8d
commit
e653f95d37
@@ -160,20 +160,23 @@
|
|||||||
<!-- Centre : l'écran (onglet "Écran"), ou la logique de la scène / la
|
<!-- Centre : l'écran (onglet "Écran"), ou la logique de la scène / la
|
||||||
timeline d'animation quand leur onglet est actif — un seul onglet
|
timeline d'animation quand leur onglet est actif — un seul onglet
|
||||||
visible à la fois, chacun occupant tout l'espace disponible (voir
|
visible à la fois, chacun occupant tout l'espace disponible (voir
|
||||||
switchBuilderTab() plus bas). Absents sur un écran-modèle (élément
|
switchBuilderTab() plus bas). Présents aussi sur un écran-modèle
|
||||||
de jeu) : ses déclencheurs référenceraient des éléments dont l'id
|
(élément de jeu réutilisable, ex. "mail content") : ses enfants
|
||||||
change à chaque copie (voir instantiate_template_tree), donc une
|
gardent désormais TOUJOURS le même id, à chaque exemplaire posé sur
|
||||||
logique/animation posée ici ne fonctionnerait plus une fois
|
n'importe quelle scène (rechargés en direct depuis ce modèle à
|
||||||
l'élément réutilisé — seul l'onglet "Écran" a alors un sens. -->
|
chaque affichage, voir _render_element_type_children côté serveur —
|
||||||
|
l'ancien mécanisme qui les copiait avec un nouvel id à chaque pose,
|
||||||
|
instantiate_template_tree, a été retiré). Un déclencheur/une
|
||||||
|
animation posé ici, sur un enfant du modèle, s'exécute donc bien
|
||||||
|
partout où ce modèle est utilisé (voir findTriggerNode/
|
||||||
|
collectAnimationClips dans templates/play.html). -->
|
||||||
<div class="builderCanvasArea">
|
<div class="builderCanvasArea">
|
||||||
{% set current_aspect = screen.preview_aspect or '9/16' %}
|
{% set current_aspect = screen.preview_aspect or '9/16' %}
|
||||||
{% if not screen.is_template %}
|
|
||||||
<div class="builderTabs" id="builderTabs">
|
<div class="builderTabs" id="builderTabs">
|
||||||
<button type="button" class="builderTabBtn active" data-tab="screen" onclick="switchBuilderTab('screen')">🖥️ Écran</button>
|
<button type="button" class="builderTabBtn active" data-tab="screen" onclick="switchBuilderTab('screen')">🖥️ Écran</button>
|
||||||
<button type="button" class="builderTabBtn" data-tab="flow" onclick="switchBuilderTab('flow')">🔀 Logique de la scène</button>
|
<button type="button" class="builderTabBtn" data-tab="flow" onclick="switchBuilderTab('flow')">🔀 Logique de la scène</button>
|
||||||
<button type="button" class="builderTabBtn" data-tab="anim" onclick="switchBuilderTab('anim')">🎬 Timeline d'animation</button>
|
<button type="button" class="builderTabBtn" data-tab="anim" onclick="switchBuilderTab('anim')">🎬 Timeline d'animation</button>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<div class="builderTabPanel active" data-tab-panel="screen">
|
<div class="builderTabPanel active" data-tab-panel="screen">
|
||||||
<div class="canvasFrame">
|
<div class="canvasFrame">
|
||||||
@@ -190,7 +193,6 @@
|
|||||||
<p class="hint" style="text-align:center;">Glisse pour déplacer, tire le coin pour redimensionner, clique pour sélectionner.</p>
|
<p class="hint" style="text-align:center;">Glisse pour déplacer, tire le coin pour redimensionner, clique pour sélectionner.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if not screen.is_template %}
|
|
||||||
<div class="builderTabPanel" id="flowTabPanel" data-tab-panel="flow">
|
<div class="builderTabPanel" id="flowTabPanel" data-tab-panel="flow">
|
||||||
<div class="flowToolbar">
|
<div class="flowToolbar">
|
||||||
<button type="button" class="smallBtn button is-small" onclick="openNodeForm('trigger')">➕ Déclencheur</button>
|
<button type="button" class="smallBtn button is-small" onclick="openNodeForm('trigger')">➕ Déclencheur</button>
|
||||||
@@ -449,7 +451,6 @@
|
|||||||
<div id="animTracks" class="animTracks"></div>
|
<div id="animTracks" class="animTracks"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Panneau droit : propriétés de l'élément sélectionné — flottant,
|
<!-- Panneau droit : propriétés de l'élément sélectionné — flottant,
|
||||||
|
|||||||
Reference in New Issue
Block a user