Files
Forge-Engine/screens/scenes/set_scene_object_commands.py
T
williamandClaude Sonnet 5 74f7ca396f
Build and deploy / test-python (push) Successful in 6m25s
Build and deploy / test-js (push) Successful in 55s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Déplacement/animation automatiques d'un personnage (scène 2D)
Simplification demandée pour l'éditeur de jeu RPG : un personnage posé
sur une scène 2D se déplace et s'anime TOUT SEUL avec ZQSD (+ E pour
interagir) dès qu'il est posé — plus besoin de poser le moindre nœud de
flow pour un mouvement de base. Le panneau "🕹️ Commandes" du personnage
permet de remapper les 4 touches de déplacement et la touche
d'interaction, et de bloquer un axe (horizontal/vertical seulement).

Entièrement client (static/js/play/personnage-controller.js), réutilise
heldKeys (triggers.js) et applyObjectProperty/clampSceneObjectPosition/
runSpriteAnimation (actions.js) — aucune logique dupliquée, et ça
fonctionne aussi bien en ligne que dans l'export Web/SCORM (aucune
requête serveur). "walk"/"idle"/"interact" (poses déjà présentes pour
tout personnage Forge/CraftPix) sont utilisées telles quelles ; une pose
absente dégrade silencieusement (déplacement sans animation) plutôt que
de planter.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-02 11:26:37 +02:00

27 lines
1.1 KiB
Python

import json
import db
from .ensure_scene_schema import ensure_scene_schema
def set_scene_object_commands(slug, object_id, commands):
"""Enregistre les touches de déplacement/interaction et le blocage
d'axe d'un objet de scène kind="personnage" (voir
screens/rendering/personnage_commands.py pour les valeurs par défaut,
et static/js/play/personnage-controller.js pour leur usage au jeu) —
même patron que set_scene_object_personnage_data.py, mais un attribut
JSON DISTINCT (_personnage_commandes) pour ne jamais entrer en
conflit avec _personnage_data (choix du personnage/de ses animations)."""
ensure_scene_schema(slug)
conn = db.connect(slug)
row = conn.execute("SELECT attributes FROM _scene_objects WHERE id = ?", (object_id,)).fetchone()
if not row:
conn.close()
return
attributes = json.loads(row["attributes"] or "{}")
attributes["_personnage_commandes"] = json.dumps(commands)
conn.execute("UPDATE _scene_objects SET attributes = ? WHERE id = ?", (json.dumps(attributes), object_id))
conn.commit()
conn.close()