Retire l'export exécutable (.exe) et la partie publique en ligne (/jouer)
Décision produit : seul l'export Web/SCORM (LMS) est pertinent — l'export exécutable Windows autonome (publish/build_package.py, bouton "Publier") et la partie publique par joueur (/jouer/<slug>, routes/public_play/, "Publier en ligne") sont jugés redondants et retirés. Conserve le mécanisme d'état "par joueur" (db/global_vars, db/rows, per_player) : infrastructure générique déjà utilisée par Score/Progression et testée indépendamment de toute route publique (voir tests/test_player_state.py), aucune raison de la retirer. _STATIC_ITEMS/_copy_characters (copie sélective des sprites CraftPix réellement utilisés) migrent de build_package.py vers build_scorm_package.py, seul appelant restant. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
82d00b3800
commit
e82eb7ce88
+1
-3
@@ -29,8 +29,6 @@ from .connection import connect
|
||||
|
||||
from .games.list_games import list_games
|
||||
from .games.game_meta import game_meta
|
||||
from .games.is_public_played import is_public_played
|
||||
from .games.set_public_played import set_public_played
|
||||
from .games.get_game_type import get_game_type, DEFAULT_GAME_TYPE
|
||||
from .games.create_game import create_game
|
||||
from .games.update_game_name import update_game_name
|
||||
@@ -85,7 +83,7 @@ __all__ = [
|
||||
"SCORE_STATUS_CHOICES", "SCORE_STATUS_LABELS", "get_score", "set_score_value", "set_status",
|
||||
"slugify", "table_name_for", "game_dir", "db_path", "connect",
|
||||
"list_games", "game_meta", "create_game", "update_game_name", "delete_game", "move_game",
|
||||
"is_public_played", "set_public_played", "get_game_type", "DEFAULT_GAME_TYPE",
|
||||
"get_game_type", "DEFAULT_GAME_TYPE",
|
||||
"ONBOARDING_TYPES", "DEFAULT_ONBOARDING_TYPE", "get_onboarding_type",
|
||||
"get_onboarding_type_raw", "set_onboarding_type", "is_restricted",
|
||||
"list_definitions", "get_definition", "create_definition", "rename_definition",
|
||||
|
||||
+3
-7
@@ -3,13 +3,9 @@
|
||||
import os
|
||||
|
||||
# Surchargeable via FORGE_PROJECTS_DIR (même schéma que
|
||||
# auth/connection.py::FORGE_USERS_DB_PATH) — utilisé par le serveur
|
||||
# joueur autonome (publish/player_app_template.py), qui pose cette
|
||||
# variable AVANT d'importer db/ pour pointer vers son propre dossier
|
||||
# "projects/" embarqué plutôt que celui, réel, du poste de développement.
|
||||
# Résolu ici, à l'IMPORT (pas par un appel de fonction) : la variable
|
||||
# d'environnement doit donc déjà être posée avant le tout premier
|
||||
# `import db`.
|
||||
# auth/connection.py::FORGE_USERS_DB_PATH). Résolu ici, à l'IMPORT (pas
|
||||
# par un appel de fonction) : la variable d'environnement doit donc déjà
|
||||
# être posée avant le tout premier `import db`.
|
||||
PROJECTS_DIR = os.environ.get("FORGE_PROJECTS_DIR") or os.path.join(
|
||||
os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "projects"
|
||||
)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
from ..connection import connect
|
||||
from .is_public_played import is_public_played
|
||||
from .game_type_catalog import get_onboarding_type
|
||||
|
||||
|
||||
@@ -9,11 +8,6 @@ def game_meta(slug):
|
||||
conn.close()
|
||||
return {
|
||||
"slug": slug, "name": row["value"] if row else slug,
|
||||
# État par joueur (Phase 1) : disponible partout où `game` est
|
||||
# dans le contexte du template (base.html, la bascule "Publier en
|
||||
# ligne" en a besoin pour afficher son état actuel), sans avoir à
|
||||
# appeler is_public_played(slug) séparément dans chaque route.
|
||||
"is_public_played": is_public_played(slug),
|
||||
# Onboarding guidé (voir game_type_catalog.py) : utilisé par
|
||||
# templates/base.html pour cacher le lien "Tableau de bord" à un
|
||||
# compte "restreint" (quiz/embranchement/rpg).
|
||||
|
||||
@@ -10,7 +10,7 @@ accessible ensuite, ou seulement sa version simplifiée (juste les écrans
|
||||
en cartes — voir routes/games/game_dashboard.py, restricted).
|
||||
|
||||
_meta['onboarding_type'] (une ligne _meta par projet, même convention que
|
||||
is_public_played/l'ancien game_type) retient CE choix — jamais lu par le
|
||||
game_type) retient CE choix — jamais lu par le
|
||||
rendu jouable, seulement par le routage (routes/games/game_dashboard.py,
|
||||
routes/screens/screens_new.py)."""
|
||||
import db
|
||||
|
||||
@@ -8,9 +8,10 @@ def get_game_type(slug):
|
||||
(éditeur générique actuel — quiz/formulaires/contenus, écrans =
|
||||
éléments HTML positionnés en %) ou "jeu_2d" (éditeur de scène dédié —
|
||||
voir screens/scenes/, écrans = objets pixel-positionnés en couches).
|
||||
Réutilise _meta comme is_public_played — aucune nouvelle table. Un jeu
|
||||
créé avant l'existence de cette clé (absente de _meta) retombe sur
|
||||
"document", son comportement d'avant, inchangé."""
|
||||
Stocké dans _meta (une table générique clé/valeur, déjà utilisée pour
|
||||
d'autres réglages de projet) — aucune nouvelle table. Un jeu créé avant
|
||||
l'existence de cette clé (absente de _meta) retombe sur "document",
|
||||
son comportement d'avant, inchangé."""
|
||||
conn = connect(slug)
|
||||
row = conn.execute("SELECT value FROM _meta WHERE key = 'game_type'").fetchone()
|
||||
conn.close()
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
from ..connection import connect
|
||||
|
||||
|
||||
def is_public_played(slug):
|
||||
"""Un jeu n'est jouable sur la route publique /jouer/<slug> (voir
|
||||
routes/public_play/) que si le créateur l'a explicitement basculé
|
||||
"Publier en ligne" dans son tableau de bord — jamais par défaut, pour
|
||||
ne pas exposer un jeu en cours de conception. Réutilise la table
|
||||
générique _meta (voir game_meta.py, déjà utilisée pour 'name'),
|
||||
aucune nouvelle colonne/table nécessaire."""
|
||||
conn = connect(slug)
|
||||
row = conn.execute("SELECT value FROM _meta WHERE key = 'is_public_played'").fetchone()
|
||||
conn.close()
|
||||
return bool(row and row["value"] == "1")
|
||||
@@ -1,14 +0,0 @@
|
||||
from ..connection import connect
|
||||
|
||||
|
||||
def set_public_played(slug, value):
|
||||
"""Bascule "Publier en ligne" (tableau de bord) — voir
|
||||
is_public_played.py. `value` : bool."""
|
||||
conn = connect(slug)
|
||||
conn.execute(
|
||||
"INSERT INTO _meta (key, value) VALUES ('is_public_played', ?) "
|
||||
"ON CONFLICT(key) DO UPDATE SET value = excluded.value",
|
||||
("1" if value else "0",),
|
||||
)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user