Dialogues de quête : bulles illimitées, n'importe quel objet, timeline reliée
- "qui parle" n'est plus réservé au personnage : N'IMPORTE QUEL objet de scène nommé (personnage, décor, fond — voir "ℹ️ Informations", screens/rendering/scene_object_names.py, ex-personnage_names.py) peut parler dans un dialogue. - Confirmé/documenté : aucune limite au nombre de répliques par colonne (bouton "+ Réplique" reste toujours disponible). - Bulle = header (menu déroulant du "qui parle") + body (le texte), centrée dans sa colonne à 70% de largeur, alignée verticalement et reliée à la suivante par un trait — remplace l'ancien alignement gauche/droite façon chat. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
2347a70c45
commit
521792fe00
@@ -5,7 +5,7 @@ cours d'une quête déclenchée par une règle de collision "quete" (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/personnage_names.py)."""
|
||||
l'éditeur de dialogue de quête (screens/rendering/scene_object_names.py)."""
|
||||
import db
|
||||
import screens
|
||||
|
||||
@@ -125,8 +125,11 @@ def test_scene_object_name_route_persists(client, tmp_game_slug_cleanup):
|
||||
assert screens.get_scene_object(slug, obj_id)["name"] == "Le Sorcier"
|
||||
|
||||
|
||||
def test_list_personnage_names_is_alphabetical_and_deduped_across_scenes(tmp_game_slug_cleanup):
|
||||
slug = tmp_game_slug_cleanup(db.create_game("pytest_personnage_names"))
|
||||
def test_list_named_scene_object_names_is_alphabetical_deduped_and_includes_any_kind(tmp_game_slug_cleanup):
|
||||
""""il peut sélectionner le nom du personnage qui parle" -> étendu à
|
||||
N'IMPORTE QUEL objet de scène nommé (pas seulement un personnage),
|
||||
voir screens/rendering/scene_object_names.py."""
|
||||
slug = tmp_game_slug_cleanup(db.create_game("pytest_scene_object_names"))
|
||||
scene_a = screens.create_screen(slug, "Scène A", kind="jeu_2d")
|
||||
scene_b = screens.create_screen(slug, "Scène B", kind="jeu_2d")
|
||||
zed_id = screens.add_scene_object(slug, scene_a, kind="personnage")
|
||||
@@ -134,7 +137,9 @@ def test_list_personnage_names_is_alphabetical_and_deduped_across_scenes(tmp_gam
|
||||
anna_id = screens.add_scene_object(slug, scene_b, kind="personnage")
|
||||
screens.set_scene_object_name(slug, anna_id, "Anna")
|
||||
unnamed_id = screens.add_scene_object(slug, scene_a, kind="personnage") # sans nom, ignoré
|
||||
decor_id = screens.add_scene_object(slug, scene_a, kind="decor") # pas un personnage, ignoré
|
||||
screens.set_scene_object_name(slug, decor_id, "Un décor nommé")
|
||||
decor_id = screens.add_scene_object(slug, scene_a, kind="decor") # nommé -> INCLUS (pas réservé au personnage)
|
||||
screens.set_scene_object_name(slug, decor_id, "Un coffre")
|
||||
dialogue_box_id = screens.add_scene_object(slug, scene_a, kind="dialogue_box") # widget d'UI, jamais un "qui parle"
|
||||
screens.set_scene_object_name(slug, dialogue_box_id, "Boîte nommée par erreur")
|
||||
|
||||
assert screens.list_personnage_names(slug) == ["Anna", "Zed le forgeron"]
|
||||
assert screens.list_named_scene_object_names(slug) == ["Anna", "Un coffre", "Zed le forgeron"]
|
||||
|
||||
@@ -75,7 +75,7 @@ def test_delete_quest_removes_it(tmp_game_slug_cleanup):
|
||||
|
||||
def test_sanitize_quest_dialogues_keeps_only_valid_lines_per_status():
|
||||
"""speaker est un nom de PERSONNAGE libre (voir "ℹ️ Informations",
|
||||
screens/rendering/personnage_names.py) — "Le Sorcier" est donc un nom
|
||||
screens/rendering/scene_object_names.py) — "Le Sorcier" est donc un nom
|
||||
valide comme n'importe quel autre, seul un speaker/texte VIDE ou un
|
||||
élément mal formé est rejeté."""
|
||||
raw = {
|
||||
|
||||
Reference in New Issue
Block a user