Première brique du plan "Fondations d'une plateforme multi-éditeurs" — l'utilisateur veut un éditeur dédié aux jeux 2D/serious games (scène à coordonnées pixel fixes, objets en couches, collision, personnages animés), distinct de l'éditeur générique actuel, sans dupliquer ce qui peut être partagé (comptes, objets de données, moteur de logique de flow, hébergement/publication). - db/games/get_game_type.py (nouveau) : "document" (défaut, éditeur actuel) ou "jeu_2d" (nouveau), stocké dans _meta comme is_public_played — aucune migration pour les jeux déjà créés (retombent sur "document"). Choisi obligatoirement à la création (templates/index.html), jamais modifiable ensuite. - screens/scenes/ (nouveau sous-module) : table _scene_objects (une scène = des objets en pixels fixes, pas les % fluides de _screen_elements — indispensable pour la collision/l'animation), CRUD complet, rendu HTML. kind="personnage" réutilise TELLE QUELLE la structure _personnage_data et les fonctions resolve_personnage_* déjà écrites pour le widget "personnage" de l'éditeur document (Phase 8) — même bibliothèque Forge, même moteur d'animation, juste une autre table de stockage. - screens/flow/ensure_flow_schema.py : += trigger_object_id/ target_object_id (ALTER TABLE sans contrainte FK, même patron que cond_element_a) — le moteur de logique de flow (_flow_nodes/_flow_edges, flow-engine.js) reste EXACTEMENT le même pour les deux éditeurs, seule la palette de nœuds change (screens/scenes/flow_palette.py, nouveau : sous-ensemble direct des triggers/actions existants, déjà génériques). - screens/screens_repo/ensure_schema.py : += scene_width/scene_height sur _screens (taille de scène fixe en pixels, sans effet sur un écran "document"). Reste à faire (prochains commits) : route + template de l'éditeur de scène, puis le rendu en mode jouable. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
2.1 KiB
Python
43 lines
2.1 KiB
Python
# ---------- Palette de logique réduite pour l'éditeur de scène 2D ----------
|
|
#
|
|
# Réutilise le MÊME moteur de flow (_flow_nodes/_flow_edges, flow-engine.js,
|
|
# flow-editor.js, tabs-and-blocks.js) que l'éditeur document — seule la
|
|
# palette de nœuds proposée diffère (voir décision d'architecture du plan
|
|
# "Fondations d'une plateforme multi-éditeurs"). Sous-ensembles directs de
|
|
# screens/flow/constants.py et screens/labels/action_type_labels.py : pas
|
|
# de notion de clic/soumission/survol DOM (pas d'élément HTML dans une
|
|
# scène), tout le reste est déjà générique et fonctionne tel quel sur un
|
|
# objet de scène.
|
|
from ..flow.constants import TRIGGER_EVENTS as _ALL_TRIGGER_EVENTS
|
|
|
|
_SCENE_TRIGGER_KEYS = {"affichage", "evenement", "clavier", "minuteur"}
|
|
TRIGGER_EVENTS_2D = [(k, label) for k, label in _ALL_TRIGGER_EVENTS if k in _SCENE_TRIGGER_KEYS]
|
|
|
|
ACTION_TYPE_LABELS_2D = {
|
|
"aller_a": "Aller à un écran précis",
|
|
"ecran_suivant": "Afficher l'écran suivant",
|
|
"ecran_precedent": "Afficher l'écran précédent",
|
|
"modifier_objet_scene": "Modifier un objet de scène",
|
|
"modifier_variable": "Modifier une variable globale",
|
|
"modifier_donnee": "Modifier une donnée d'un objet",
|
|
"jouer_animation_sprite": "Jouer une animation de sprites",
|
|
"jouer_son": "Jouer un son",
|
|
"declencher_evenement": "Déclencher un événement",
|
|
"attendre": "Attendre quelques secondes avant de continuer",
|
|
"rien": "Ne rien faire",
|
|
}
|
|
|
|
# Sous-palette de "modifier_objet_scene" — équivalent scène de
|
|
# ELEMENT_ACTION_PROPERTIES (screens/labels/element_action_properties.py),
|
|
# mais en pixels absolus/relatifs (pas des %) : une scène a une taille
|
|
# FIXE (voir scene_width/scene_height, ensure_schema.py), donc les
|
|
# déplacements s'expriment naturellement en pixels.
|
|
OBJECT_ACTION_PROPERTIES = [
|
|
("visibilite", "Visibilité"),
|
|
("pos_x", "Position horizontale en pixels (absolue)"),
|
|
("pos_y", "Position verticale en pixels (absolue)"),
|
|
("pos_x_relatif", "Déplacer horizontalement de... px (relatif)"),
|
|
("pos_y_relatif", "Déplacer verticalement de... px (relatif)"),
|
|
("orientation", "Orientation — sens du personnage"),
|
|
]
|