Éditeur de collision (jeu 2D) : règles trigger -> action par objet
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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
dfaf85fac1
commit
ee270d0286
@@ -669,6 +669,37 @@ body.builderBody > main.content{ flex:1 1 auto; min-height:0; overflow:hidden; d
|
||||
background:#ff5c5c; border-radius:50%; border:2px solid #1a1d24;
|
||||
}
|
||||
|
||||
/* Éditeur de collision (voir "🧩 Collision", templates/scene_edit.html,
|
||||
static/js/scenes/collision-rules-editor.js) : une carte par objet
|
||||
éligible, chaque règle déjà posée affichée comme une CHAÎNE de petits
|
||||
maillons (déclencheur -> action -> sous-action éventuelle) — la
|
||||
métaphore "pièces qui s'emboîtent" demandée, sans un vrai graphe à
|
||||
tracer à la souris (l'assistant "+ Action" construit la chaîne pas à
|
||||
pas, voir openCollisionRuleModal). */
|
||||
.collisionRulesCards{ display:flex; flex-direction:column; gap:14px; margin-top:12px; }
|
||||
.collisionRuleCard{
|
||||
background:var(--panel); border:1px solid var(--border); border-radius:10px; padding:14px;
|
||||
}
|
||||
.collisionRuleCardHeader{ display:flex; align-items:center; gap:10px; margin-bottom:8px; }
|
||||
.collisionRuleCardThumb{
|
||||
width:36px; height:36px; border-radius:6px; overflow:hidden; background:var(--panel2);
|
||||
display:flex; align-items:center; justify-content:center; flex-shrink:0;
|
||||
}
|
||||
.collisionRuleCardThumb img{ max-width:100%; max-height:100%; object-fit:contain; }
|
||||
.collisionRuleCardTitle{ margin:0; font-size:14px; }
|
||||
.collisionRuleCardRules{ display:flex; flex-direction:column; gap:8px; margin-bottom:10px; }
|
||||
.collisionRuleChain{
|
||||
display:flex; align-items:center; justify-content:space-between; gap:8px;
|
||||
background:var(--panel2); border:1px solid var(--border); border-radius:8px; padding:6px 8px;
|
||||
}
|
||||
.collisionRuleChainLinks{ display:flex; align-items:center; flex-wrap:wrap; gap:6px; }
|
||||
.collisionRuleLink{
|
||||
background:var(--accent); color:#fff; border-radius:12px; padding:3px 10px; font-size:12px; white-space:nowrap;
|
||||
}
|
||||
.collisionRuleArrow{ color:var(--forge-text-muted, #8b95a7); font-size:12px; }
|
||||
.collisionWizardChoices{ display:flex; flex-direction:column; }
|
||||
.collisionInteractBubble{ display:none; position:absolute; left:50%; bottom:100%; transform:translateX(-50%); margin-bottom:6px; background:#111; color:#fff; border-radius:10px; padding:4px 10px; font-size:12px; white-space:nowrap; pointer-events:none; z-index:20; }
|
||||
|
||||
.listRow.selected{ border-color:var(--accent); background:var(--panel2); }
|
||||
|
||||
.childList{ display:flex; flex-direction:column; gap:6px; margin:2px 0 10px 18px; padding-left:10px; border-left:2px dashed var(--border); }
|
||||
|
||||
Reference in New Issue
Block a user