- "ℹ️ Informations" (propriétés d'un personnage) : nom éditable, réutilisé comme "qui parle" dans l'éditeur de dialogue de quête (menu déroulant, plus "Joueur" toujours disponible) — remplace l'ancien choix binaire joueur/pnj. db.sanitize_quest_dialogues accepte maintenant un nom libre. - Nouveau menu "🖥️ Interface" (palette d'objets) avec le premier widget : "💬 Boîte de dialogue" (kind="dialogue_box", screens/rendering/ dialogue_box_style.py) — position/taille comme tout objet de scène, panneau "🎨 Style" dédié (police, taille, épaisseur, couleur du texte, couleur header/body/footer). Rendu en <div> à 3 zones, jamais soumis à la collision ni à l'éditeur de collision (exclu partout : obstacles, liste des règles, payload). Rendu côté jeu dans .sceneUI, une couche FIXE au viewport (jamais .sceneWorld, qui défile avec la caméra). - static/js/play/dialogue-box-controller.js : fait le lien moteur entre l'action "quete" de l'éditeur de collision et ce widget — affiche la réplique en cours du dialogue correspondant au STATUT ACTUEL de la quête (gameData.quests, désormais exposé game-wide par full_game_payload.py), avance au clic sur "Suivant" (header = qui parle, body = texte, footer = bouton), se masque à la dernière réplique. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
20 lines
811 B
Python
20 lines
811 B
Python
from ..screens_repo.list_screens import list_screens
|
||
from ..scenes.list_scene_objects import list_scene_objects
|
||
|
||
|
||
def list_personnage_names(slug):
|
||
"""Noms distincts de tous les personnages nommés (voir "ℹ️
|
||
Informations", templates/scene_edit.html), toutes scènes 2D du jeu
|
||
confondues — une quête (voir db/quests/) est GAME-WIDE, son dialogue
|
||
peut donc mettre en scène un PNJ posé sur une autre scène que celle
|
||
où la règle de collision se déclenche. Ordre alphabétique, jamais de
|
||
doublon."""
|
||
names = set()
|
||
for s in list_screens(slug):
|
||
if s["kind"] != "jeu_2d":
|
||
continue
|
||
for o in list_scene_objects(slug, s["id"]):
|
||
if o["kind"] == "personnage" and o.get("name"):
|
||
names.add(o["name"])
|
||
return sorted(names)
|