Trois correctifs remontés en test manuel sur l'éditeur de scène :
1. Personnage écrasé/déformé dans sa boîte de sélection : les frames
CraftPix (screens/labels/animal_sprite_library.py) sont de grands
canevas très paddés (~788×504 px), très différents des sprites Kenney
déjà recadrés serré (~96×128 px) — sans object-fit, l'image remplissait
quand même sa boîte (width/height:100%, voir la règle
.canvasElementInner > img de scene_edit.html) mais DÉFORMÉE. Nouvelle
classe .sceneObjectSprite (object-fit:contain) posée sur le <img> rendu
par render_scene_object.py, éditeur ET jeu jouable.
2. Aucun clip de Timeline (sprite, Animate.css ou personnalisé) ne se
jouait jamais sur un objet de scène : applyAnimationClip()
(static/js/play/screens.js) et animation-timeline.js sélectionnent
TOUJOURS leur cible via l'attribut data-anim-target (posé sur
.canvasElement/.playElement pour le DOM), jamais data-element-id/
data-object-id — cet attribut n'était simplement jamais posé sur les
objets de scène. Ajouté sur le <img> rendu (render_scene_object.py).
3. Boîte par défaut d'un nouvel objet de scène trop petite (64×64 px sur
une scène de 960×540) pour bien voir le personnage ou saisir la
poignée de redimensionnement confortablement — portée à 128×128
(ensure_scene_schema.py ; n'affecte que les NOUVEAUX objets, les
objets déjà posés gardent leur taille actuelle).
Au passage : galerie de personnages ~3x plus grande (2 colonnes au lieu
de 6 dans .iconGallery.personnageGallery) — les tuiles étaient trop
petites pour bien distinguer les personnages.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>