É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
@@ -11,6 +11,7 @@ from ..rendering.personnage_data import resolve_personnage_animations
|
||||
from ..rendering.personnage_commands import resolve_personnage_commands
|
||||
from ..rendering.personnage_role import resolve_personnage_role
|
||||
from ..rendering.collision_settings import resolve_collision_settings
|
||||
from ..rendering.collision_rules import resolve_collision_rules
|
||||
from ..scenes.list_scene_objects import list_scene_objects
|
||||
from ..scenes.render_scene_object import render_scene_object
|
||||
|
||||
@@ -61,6 +62,15 @@ def full_game_payload(slug, player_id=db.PLAYER_SHARED):
|
||||
# seulement "personnage" — un décor/fond peut aussi servir
|
||||
# d'obstacle.
|
||||
o["collision"] = resolve_collision_settings(o)
|
||||
# Règles "à la collision/dans un périmètre -> action" (voir
|
||||
# "🧩 Collision", templates/scene_edit.html, et
|
||||
# static/js/play/collision-rules-controller.js pour leur
|
||||
# exécution) — jamais sur "fond" (jamais une cible), ni sur
|
||||
# le personnage "joueur" lui-même (ce sont TOUJOURS les
|
||||
# AUTRES objets qui réagissent à SA présence, jamais
|
||||
# l'inverse).
|
||||
if o["kind"] != "fond" and not (o["kind"] == "personnage" and o.get("personnage_role") == "joueur"):
|
||||
o["collision_rules"] = resolve_collision_rules(o)
|
||||
payload_screens.append({**s, "elements": objects})
|
||||
else:
|
||||
elements = list_elements(slug, s["id"], enforce_visibility=True, player_id=player_id)
|
||||
|
||||
Reference in New Issue
Block a user