Remplace le système de quêtes par des déclencheurs, ajoute l'action variable et le chaînage
Supprime le concept de "quête" au profit d'un onglet unique "Déclencheurs"
portant toute la logique (dialogue, condition, marquage terminé) directement
sur l'objet de scène. Ajoute une nouvelle action "Modifier une variable"
(réutilisant le vocabulaire du graphe de flow) utilisable après une
collision, une interaction ou une branche de condition, ainsi qu'un
chaînage d'actions ("then") permettant d'enchaîner plusieurs actions à la
suite et d'étendre un déclencheur déjà posé sans le recréer.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
c504ace167
commit
d664ed5637
+13
-10
@@ -1,11 +1,11 @@
|
||||
"""Widget d'interface "🖥️ Interface -> 💬 Boîte de dialogue" (voir
|
||||
screens/rendering/dialogue_box_style.py, screens/scenes/add_scene_object.py
|
||||
kind="dialogue_box") : affiche automatiquement, en jeu, la réplique en
|
||||
cours d'une quête déclenchée par une règle de collision "quete" (voir
|
||||
cours d'un dialogue déclenché par une règle de collision "dialogue" (voir
|
||||
static/js/play/dialogue-box-controller.js) — header/body/footer
|
||||
stylisables. Et le nom d'un personnage ("ℹ️ Informations",
|
||||
screens/scenes/set_scene_object_name.py), utilisé comme "qui parle" dans
|
||||
l'éditeur de dialogue de quête (screens/rendering/scene_object_names.py)."""
|
||||
l'éditeur de dialogue d'un déclencheur (screens/rendering/scene_object_names.py)."""
|
||||
import db
|
||||
import screens
|
||||
|
||||
@@ -44,10 +44,8 @@ def test_render_dialogue_box_has_header_body_footer(tmp_game_slug_cleanup):
|
||||
assert f'data-object-id="{obj_id}"' in html
|
||||
# Bug corrigé : le footer n'avait PAS data-dialogue-role="footer" (seul
|
||||
# son bouton "Suivant" interne l'avait, sous "next-btn") — le JS
|
||||
# (forgeShowQuestOffer, static/js/play/dialogue-box-controller.js) le
|
||||
# cherche par ce sélecteur pour y injecter Accepter/Refuser en fin de
|
||||
# dialogue d'une quête "nouvelle" ; sans lui, l'écran d'offre gardait
|
||||
# silencieusement le bouton "Suivant" au lieu des deux nouveaux boutons.
|
||||
# (forgeResetDialogueBoxFooter, static/js/play/dialogue-box-controller.js)
|
||||
# le cherche par ce sélecteur pour y (re)poser le bouton "Suivant".
|
||||
assert 'data-dialogue-role="header"' in html
|
||||
assert 'data-dialogue-role="body"' in html
|
||||
assert 'data-dialogue-role="footer"' in html
|
||||
@@ -95,11 +93,16 @@ def test_dialogue_box_excluded_from_collision_rules_payload(tmp_game_slug_cleanu
|
||||
assert box["dialogue_box_style"] == screens.DEFAULT_DIALOGUE_BOX_STYLE
|
||||
|
||||
|
||||
def test_full_game_payload_exposes_quests_game_wide(tmp_game_slug_cleanup):
|
||||
def test_full_game_payload_exposes_completable_dialogue_ids_game_wide(tmp_game_slug_cleanup):
|
||||
slug, screen_id = _create_jeu2d_game(tmp_game_slug_cleanup)
|
||||
db.create_quest(slug, "Trouver la clé")
|
||||
obj_id = screens.add_scene_object(slug, screen_id, kind="personnage")
|
||||
rules = [{
|
||||
"trigger": "collision",
|
||||
"action": {"type": "dialogue", "dialogue": {"id": "d_1", "lines": []}, "mark_completed": True},
|
||||
}]
|
||||
screens.set_scene_object_collision_rules(slug, obj_id, screens.sanitize_collision_rules(rules))
|
||||
payload = screens.full_game_payload(slug)
|
||||
assert [q["title"] for q in payload["quests"]] == ["Trouver la clé"]
|
||||
assert payload["completable_dialogue_ids"] == ["d_1"]
|
||||
|
||||
|
||||
# ---------- Nom d'un personnage ("ℹ️ Informations") ----------
|
||||
@@ -179,7 +182,7 @@ def test_render_quiz_box_has_header_and_choices(tmp_game_slug_cleanup):
|
||||
obj_id = screens.add_scene_object(slug, screen_id, kind="quiz_box")
|
||||
obj = screens.get_scene_object(slug, obj_id)
|
||||
html = screens.render_scene_object(obj)
|
||||
assert 'data-quiz-role="header"' in html # "Quête : <titre>", rempli en jeu
|
||||
assert 'data-quiz-role="header"' in html # nom de l'objet déclencheur, rempli en jeu
|
||||
assert 'data-quiz-role="question"' in html # le texte de la question, dans le corps
|
||||
assert 'data-quiz-role="choices"' in html
|
||||
assert f'data-object-id="{obj_id}"' in html
|
||||
|
||||
Reference in New Issue
Block a user