Fondations multi-éditeurs (1/3) : game_type + schéma/CRUD des objets de scène
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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
70c2b8df05
commit
efa7d1d9b0
@@ -0,0 +1,30 @@
|
||||
import db
|
||||
|
||||
|
||||
def ensure_scene_schema(slug):
|
||||
"""Crée _scene_objects si nécessaire — le contenu d'une scène pour un
|
||||
jeu "jeu_2d" (voir db/games/get_game_type.py), équivalent de
|
||||
_screen_elements pour un jeu "document" mais en coordonnées PIXEL
|
||||
fixes (pas des % fluides — indispensable pour la collision/
|
||||
l'animation), sans arbre de nesting (pas de conteneurs imbriqués dans
|
||||
une scène de jeu 2D)."""
|
||||
conn = db.connect(slug)
|
||||
conn.executescript(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS _scene_objects (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
scene_id INTEGER NOT NULL REFERENCES _screens(id) ON DELETE CASCADE,
|
||||
kind TEXT NOT NULL DEFAULT 'personnage',
|
||||
name TEXT,
|
||||
x REAL NOT NULL DEFAULT 100,
|
||||
y REAL NOT NULL DEFAULT 100,
|
||||
width REAL NOT NULL DEFAULT 64,
|
||||
height REAL NOT NULL DEFAULT 64,
|
||||
z_index INTEGER NOT NULL DEFAULT 1,
|
||||
attributes TEXT NOT NULL DEFAULT '{}',
|
||||
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
"""
|
||||
)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user