Quiz jouable : budget de récompense, boîte à quiz, widget score
- Récompense d'une quête = budget MAXIMUM pour ses questions : la somme des points des "❓ Question" ne peut plus dépasser recompense_score (routes/quests/quest_dialogues.py à l'enregistrement des dialogues, quest_update.py si on abaisse la récompense sous ce qui est déjà réparti) — message d'erreur explicite (400) dans les deux sens, affiché via alert() côté éditeur (quest-editor.js), jamais enregistré silencieusement dans un état incohérent. - Nombre de choix par question plafonné à 4 (au lieu de 8). - Deux nouveaux widgets "🖥️ Interface" (mêmes fondations que "💬 Boîte de dialogue" — screens/rendering/dialogue_box_style.py, même panneau "🎨 Style") : - "❓ Boîte à quiz" : affiche la question et ses choix, sans pied (une question se résout au clic sur un choix, pas de "Suivant"). - "🏆 Score" : affiche en continu les points gagnés, TOUJOURS visible une fois posé (contrairement aux boîtes de dialogue/quiz, masquées par défaut). - Moteur d'exécution (static/js/play/dialogue-box-controller.js, refonte) : une conversation de quête alterne maintenant répliques (boîte de dialogue) et questions (boîte à quiz) selon le type de chaque ligne. Bonne réponse -> crédite le score (compteur runtime dédié, jamais lié au score du moteur document) et avance ; mauvaise réponse -> rien, la question reste affichée pour réessayer ; aucune boîte à quiz posée -> la question est ignorée plutôt que de bloquer la conversation. Le dialogue "en_cours" épuisé (donc, s'il contenait des questions, toutes répondues) fait passer la quête "terminee" (en mémoire seulement, comme le reste de ce système — voir accepter/ refuser une offre de quête) : le joueur peut alors quitter la scène normalement, ces widgets n'étant jamais des obstacles. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
e972acf9e6
commit
b5546df044
@@ -668,6 +668,34 @@ body.builderBody > main.content{ flex:1 1 auto; min-height:0; overflow:hidden; d
|
||||
.dialogueBoxDeclineBtn{ background:rgba(224,82,77,.25); border-color:#e0524d; }
|
||||
.dialogueBoxDeclineBtn:hover{ background:rgba(224,82,77,.4); }
|
||||
|
||||
/* Widget "❓ Boîte à quiz" (voir screens/rendering/dialogue_box_style.py,
|
||||
static/js/play/dialogue-box-controller.js) : même squelette que
|
||||
"💬 Boîte de dialogue" (header/corps, même "🎨 Style") mais pas de pied
|
||||
— la question se résout au clic sur un choix. Masquée par défaut au
|
||||
jeu, comme la boîte de dialogue. */
|
||||
.quizBoxWidget{
|
||||
display:flex; flex-direction:column; border-radius:10px; overflow:hidden;
|
||||
box-shadow:0 6px 18px rgba(0,0,0,.35); pointer-events:auto;
|
||||
}
|
||||
.playScreen .quizBoxWidget{ display:none; }
|
||||
.playScreen .quizBoxWidget.is-active{ display:flex; }
|
||||
.quizBoxHeader{ padding:8px 12px; font-weight:700; }
|
||||
.quizBoxChoices{ padding:10px 12px; flex:1; overflow-y:auto; display:flex; flex-direction:column; gap:8px; }
|
||||
.quizBoxChoiceBtn{
|
||||
background:rgba(255,255,255,.12); color:inherit; border:1px solid rgba(255,255,255,.3);
|
||||
border-radius:6px; padding:8px 10px; font:inherit; font-size:13px; text-align:left; cursor:pointer;
|
||||
transition:background .15s ease, transform .1s ease;
|
||||
}
|
||||
.quizBoxChoiceBtn:hover{ background:rgba(255,255,255,.25); transform:translateX(2px); }
|
||||
|
||||
/* Widget "🏆 Score" — TOUJOURS visible une fois posé (pas de collision/
|
||||
déclencheur, contrairement aux deux widgets ci-dessus), voir
|
||||
forgeUpdateAllScoreWidgets(). */
|
||||
.scoreWidget{
|
||||
display:flex; align-items:center; justify-content:center; gap:4px;
|
||||
border-radius:10px; box-shadow:0 6px 18px rgba(0,0,0,.35); pointer-events:none;
|
||||
}
|
||||
|
||||
/* Surbrillance de l'élément sélectionné dans l'arborescence, posée en JS sur
|
||||
sa propre balise (voir applySelectionHighlight) — seul moyen de la voir
|
||||
sur le canevas quand cet élément est imbriqué dans un conteneur/répéteur/
|
||||
|
||||
Reference in New Issue
Block a user