Le document de cadrage produit cible des formateurs non techniques créant des serious games/quiz gamifiés — l'éditeur générique "document" (blocs de logique en nœuds, timeline d'animation, définitions d'objets/relations, templates réutilisables) est une complexité hors cible que l'effort d'ingénierie récent avait déjà abandonnée au profit du jeu_2d. - Onboarding : ne garde que le parcours "RPG" (jeu_2d), retire Quiz/Embranchement/Créer mon jeu de A à Z (tous document-only) - Suppression en bloc des modules exclusifs au document : routes/elements, routes/element_types, routes/objects, routes/legacy_actions, screens/elements, screens/element_types, screens/widgets, screens/legacy_actions, le rendu render_element_html.py et son cluster, templates/screen_edit.html, templates/game_dashboard.html, flow-editor.js/tabs-and-blocks.js/animation-timeline.js - Dashboard toujours simplifié (un seul mode possible désormais) - Tests document-only supprimés, tests de logique partagée (flow, événements personnalisés, animations) retargetés sur des écrans jeu_2d - Aucune régression jeu_2d : 299 tests passent Carte d'onboarding retravaillée : argumentaire RH non technique (liste à coche, badge "Compatible LMS"), taille et interaction de retournement ajustées.
52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
"""Position/déplacement d'objet de scène — Phase 5 du plan d'extension du
|
|
moteur, porté sur jeu_2d (voir OBJECT_ACTION_PROPERTIES, screens/scenes/
|
|
flow_palette.py) depuis l'éditeur document d'origine (retiré). Comme le
|
|
reste du graphe de logique côté client, le comportement RÉEL (déplacement
|
|
CSS effectif, chevauchement de rectangles via getBoundingClientRect) n'est
|
|
pas testable sans navigateur (voir play_js_bundle() — on vérifie que la
|
|
logique existe dans le JS livré et que les nœuds persistent leurs champs,
|
|
pas qu'ils s'exécutent). Le nœud de condition de collision entre deux
|
|
objets de scène (cond_element_a/cond_element_b) est déjà couvert par
|
|
test_scene_edit_view.py::test_flow_node_collision_condition_targets_scene_objects."""
|
|
from conftest import play_js_bundle
|
|
|
|
import screens
|
|
|
|
|
|
def _create_screen_and_object(slug):
|
|
screen_id = screens.create_screen(slug, "Accueil", kind="jeu_2d")
|
|
obj_id = screens.add_scene_object(slug, screen_id)
|
|
return screen_id, obj_id
|
|
|
|
|
|
def test_position_action_node_persists_absolute_property(game):
|
|
screen_id, obj_id = _create_screen_and_object(game)
|
|
node_id = screens.add_flow_node(
|
|
game, screen_id, node_type="action", action_type="modifier_objet_scene",
|
|
target_object_id=obj_id, element_property="pos_x", element_value="42",
|
|
)
|
|
node = screens.get_flow_node(game, node_id)
|
|
assert node["element_property"] == "pos_x"
|
|
assert node["element_value"] == "42"
|
|
assert node["target_object_id"] == obj_id
|
|
|
|
|
|
def test_position_action_node_persists_relative_property(game):
|
|
screen_id, obj_id = _create_screen_and_object(game)
|
|
node_id = screens.add_flow_node(
|
|
game, screen_id, node_type="action", action_type="modifier_objet_scene",
|
|
target_object_id=obj_id, element_property="pos_y_relatif", element_value="-5",
|
|
)
|
|
node = screens.get_flow_node(game, node_id)
|
|
assert node["element_property"] == "pos_y_relatif"
|
|
assert node["element_value"] == "-5"
|
|
|
|
|
|
def test_play_page_exposes_position_and_collision_runtime(client, game):
|
|
js = play_js_bundle()
|
|
assert "pos_x" in js
|
|
assert "pos_y" in js
|
|
assert "elementsOverlap" in js
|
|
assert "getBoundingClientRect" in js
|
|
assert "'collision'" in js
|