Ajoute la fonctionnalite quiz autonome/plein ecran a la boite a quiz
Build and deploy / test-python (push) Successful in 12m10s
Build and deploy / test-js (push) Successful in 1m27s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

Introduit la double categorie de modeles (boite de dialogue / page de
quiz plein ecran) avec plein ecran, minuteur, score integre et ecran de
resultat pour les modeles page ; ajoute les modeles "Manga" (boite et
page) et "Classique" (page), pilotables aussi par l'assistant IA Ruby.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-13 15:07:23 +02:00
co-authored by Claude Sonnet 5
parent 559331f9cf
commit 7db4803b93
26 changed files with 3173 additions and 60 deletions
+21
View File
@@ -11,6 +11,7 @@ from ..rendering.collision_settings import resolve_collision_settings
from ..rendering.collision_rules import resolve_collision_rules
from ..rendering.screen_triggers import resolve_screen_triggers
from ..rendering.dialogue_box_style import resolve_dialogue_box_style
from ..rendering.quiz_box_config import resolve_quiz_box_config
from ..rendering.trigger_graph import list_completable_dialogue_ids
from ..scenes.list_scene_objects import list_scene_objects
from ..scenes.render_scene_object import render_scene_object
@@ -62,6 +63,13 @@ def full_game_payload(slug, player_id=db.PLAYER_SHARED):
# collision, ni cible/source de règle — juste leur
# style, lu par static/js/play/dialogue-box-controller.js.
o["dialogue_box_style"] = resolve_dialogue_box_style(o)
if o["kind"] == "quiz_box":
# Plein écran/minuteur/modèle (voir screens/rendering/
# quiz_box_config.py) — même convention que
# dialogue_box_style ci-dessus (cohérence de contrat),
# même si le JS runtime lit en pratique les data-*
# déjà posés sur rendered_html.
o["quiz_config"] = resolve_quiz_box_config(o)
continue
# Boîte de collision (voir static/js/play/conditions.js::
# elementsOverlap) : posée sur TOUT objet de scène, pas
@@ -83,6 +91,19 @@ def full_game_payload(slug, player_id=db.PLAYER_SHARED):
# colonne brute _screen_triggers (laissée telle quelle par ailleurs
# dans `s`, comme le reste des colonnes _screens).
s["screen_triggers"] = resolve_screen_triggers(s)
# "La notion de caméra disparaît" quand un quiz plein écran existe
# sur cet écran (demande explicite) — pas seulement le widget lui-
# même : ".playScreen.playScene" (templates/play.html), dont la
# taille EST la "caméra" (scene_width/scene_height) et qui reste
# centré via un `transform`, casse `position:fixed` pour tout
# descendant (voir static/js/play/dialogue-box-controller.js::
# forgeEscapeCameraForFullscreen). Exposé ici pour que play.html
# rende directement CET écran en plein viewport, sans transform ni
# taille caméra — le réglage "Caméra (px)" ne s'applique alors plus
# du tout tant que ce quiz reste plein écran.
s["any_quiz_box_fullscreen"] = any(
o["kind"] == "quiz_box" and o.get("quiz_config", {}).get("fullscreen") for o in objects
)
payload_screens.append({**s, "elements": objects})
# Le graphe de logique et les animations sont, eux, lus pour TOUS les