Première brique du plan "Fondations d'une plateforme multi-éditeurs" — l'utilisateur veut un éditeur dédié aux jeux 2D/serious games (scène à coordonnées pixel fixes, objets en couches, collision, personnages animés), distinct de l'éditeur générique actuel, sans dupliquer ce qui peut être partagé (comptes, objets de données, moteur de logique de flow, hébergement/publication). - db/games/get_game_type.py (nouveau) : "document" (défaut, éditeur actuel) ou "jeu_2d" (nouveau), stocké dans _meta comme is_public_played — aucune migration pour les jeux déjà créés (retombent sur "document"). Choisi obligatoirement à la création (templates/index.html), jamais modifiable ensuite. - screens/scenes/ (nouveau sous-module) : table _scene_objects (une scène = des objets en pixels fixes, pas les % fluides de _screen_elements — indispensable pour la collision/l'animation), CRUD complet, rendu HTML. kind="personnage" réutilise TELLE QUELLE la structure _personnage_data et les fonctions resolve_personnage_* déjà écrites pour le widget "personnage" de l'éditeur document (Phase 8) — même bibliothèque Forge, même moteur d'animation, juste une autre table de stockage. - screens/flow/ensure_flow_schema.py : += trigger_object_id/ target_object_id (ALTER TABLE sans contrainte FK, même patron que cond_element_a) — le moteur de logique de flow (_flow_nodes/_flow_edges, flow-engine.js) reste EXACTEMENT le même pour les deux éditeurs, seule la palette de nœuds change (screens/scenes/flow_palette.py, nouveau : sous-ensemble direct des triggers/actions existants, déjà génériques). - screens/screens_repo/ensure_schema.py : += scene_width/scene_height sur _screens (taille de scène fixe en pixels, sans effet sur un écran "document"). Reste à faire (prochains commits) : route + template de l'éditeur de scène, puis le rendu en mode jouable. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
62 lines
2.7 KiB
HTML
62 lines
2.7 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Forge Engine — Mes jeux{% endblock %}
|
|
{% block content_class %}content-wide content-objectEdit{% endblock %}
|
|
{% block body_class %}objectEditBody{% endblock %}
|
|
{% block content %}
|
|
<div class="dashPanelHeader">
|
|
<h2 class="title is-4 mb-0">Mes jeux</h2>
|
|
<span class="forge-badge">{{ games|length }} jeu{{ 's' if games|length != 1 else '' }}</span>
|
|
</div>
|
|
|
|
<div class="twoCol">
|
|
<div class="colLeft">
|
|
<h2>Créer un jeu</h2>
|
|
<form method="post" action="{{ url_for('games_new') }}" class="card">
|
|
<div class="formField">
|
|
<label for="name">Nom du nouveau jeu</label>
|
|
<input type="text" id="name" name="name" placeholder="ex. CyberQuest RGPD" required>
|
|
</div>
|
|
<!-- Fondations multi-éditeurs : le type choisi ici gate quel éditeur
|
|
(générique ou scène 2D) et quel rendu jouable ce jeu utilisera,
|
|
voir db/games/get_game_type.py — non modifiable ensuite. -->
|
|
<div class="formField">
|
|
<label for="game_type">Type de jeu</label>
|
|
<select id="game_type" name="game_type">
|
|
<option value="document">Document — quiz, formulaire, contenu (éditeur actuel)</option>
|
|
<option value="jeu_2d">Jeu 2D — RPG/serious game (scène, personnages, collision)</option>
|
|
</select>
|
|
</div>
|
|
<div class="actionsRow"><button type="submit" class="primary">+ Créer le jeu</button></div>
|
|
<p class="hint" style="margin-top:6px;">Crée un dossier avec index.html / index.css / index.js reliés entre eux, et une base de données dédiée à ce jeu.</p>
|
|
</form>
|
|
</div>
|
|
|
|
<div class="colRight">
|
|
<h2>Jeux existants</h2>
|
|
{% if games %}
|
|
<div class="fieldsTableWrap">
|
|
<table class="table is-fullwidth is-hoverable fieldsTable">
|
|
<thead><tr><th>Nom</th><th>Dossier</th><th></th></tr></thead>
|
|
<tbody>
|
|
{% for g in games %}
|
|
<tr>
|
|
<td><a href="{{ url_for('game_dashboard', slug=g.slug) }}">{{ g.name }}</a></td>
|
|
<td class="has-text-grey">projects/{{ g.slug }}/</td>
|
|
<td class="fieldsTableActions">
|
|
<form method="post" action="{{ url_for('game_delete', slug=g.slug) }}"
|
|
onsubmit="return confirm('Supprimer définitivement le jeu « {{ g.name }} » et tout son contenu (dossier + base de données) ?');">
|
|
<button type="submit" class="button is-small is-danger" title="Supprimer ce jeu">🗑️</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% else %}
|
|
<p class="hint">Aucun jeu pour l'instant — crée le premier à gauche.</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|