from typing import Any from flask import render_template import db import game_engine from core.flask_app import app @app.route("/game/") def game_dashboard(slug: str) -> str: """Vue d'ensemble du jeu : juste ses écrans, en cartes avec un aperçu de leur contenu, plus un bouton "+ Ajouter un écran" qui ne demande pas de type (un seul moteur d'écran : jeu_2d — voir routes/game/screens/screens_new.py).""" game = db.game_meta(slug) return _render_simple_dashboard(slug, game) def _render_simple_dashboard(slug: str, game: dict[str, Any]) -> str: screen_list = game_engine.list_screens(slug) previews: dict[int, dict[str, Any]] = {} for s in screen_list: if s["kind"] == "jeu_2d": objects = game_engine.list_scene_objects(slug, s["id"]) for o in objects: o["rendered_html"] = game_engine.render_scene_object(o) # Taille du MONDE (voir game_engine.resolve_scene_world_size, # même calcul que l'éditeur, routes/game/scenes/scene_edit_view.py) # plutôt que scene_width/scene_height (la caméra nominale) : # un "fond" plus grand que la caméra dépassait alors le cadre # de la miniature (game_dashboard_simple.html), qui n'en # montrait que le coin haut-gauche au lieu de la scène entière. world_width, world_height = game_engine.resolve_scene_world_size(s, objects) previews[s["id"]] = { "kind": "jeu_2d", "objects": objects, "world_width": world_width, "world_height": world_height, } return render_template( "game_dashboard_simple.html", game=game, screen_list=screen_list, previews=previews, )