À la demande de l'utilisateur (validation de la refonte visuelle du widget Personnage), deux ajustements : - Bibliothèque de sprites Forge étendue aux 6 personnages du pack Kenney "Toon Characters" (aventurier/aventurière, personnage homme/femme, robot, zombie), avec TOUTES leurs poses (45 par personnage) plutôt que 3 — regroupées en 31 animations nommées par personnage (poses numérotées type walk0..walk7 fusionnées en un seul cycle "walk", les autres restant des poses figées à une image). ~1,2 Mo au total, toujours un sous-ensemble curé du pack source (assets/characters/, non versionné) — HD/Parts/Tilesheet/Vector toujours exclus. - Import de sprites personnalisés retiré pour le moment : plus de tuile "➕ Sprite personnalisé" dans la galerie d'ajout, plus de section d'import dans les propriétés d'un personnage — seuls les personnages Forge restent proposés. La résolution serveur de _personnage_data garde son support générique de la source "custom" (aucune migration requise si cette possibilité revient plus tard), mais plus aucune UI ne permet de la créer. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
36 lines
1.9 KiB
Python
36 lines
1.9 KiB
Python
from flask import request, redirect, url_for
|
|
|
|
import screens
|
|
|
|
from core.flask_app import app
|
|
|
|
|
|
@app.route("/game/<slug>/screens/<int:screen_id>/elements/add", methods=["POST"])
|
|
def element_add(slug, screen_id):
|
|
widget = request.form.get("widget", "conteneur")
|
|
from_catalogue = widget == "__catalogue__"
|
|
element_type_id = request.form.get("element_type_id") or None if from_catalogue else None
|
|
if from_catalogue and not element_type_id:
|
|
return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id))
|
|
if from_catalogue:
|
|
types = {t["id"]: t for t in screens.list_element_types(slug)}
|
|
et = types.get(int(element_type_id))
|
|
widget = et["default_widget"] if et else "conteneur"
|
|
new_id = screens.add_element(slug, screen_id, widget, element_type_id)
|
|
icon_slug = request.form.get("icon_class")
|
|
if widget == "icone" and icon_slug in screens.FONTAWESOME_ICONS:
|
|
# Posé depuis la galerie d'icônes (voir le panneau de propriétés,
|
|
# section "Icônes") : l'icône choisie remplace celle posée par
|
|
# défaut à la création plutôt que de repartir d'une icône neutre que
|
|
# l'utilisateur devrait ensuite changer manuellement.
|
|
screens.save_element_controls(slug, new_id, {"ctrl_icon_class": icon_slug})
|
|
if widget == "personnage":
|
|
# Posé depuis la galerie "🎭 Personnages" (voir addPersonnageElement()
|
|
# dans tree-panels.js) : remplace le personnage Forge par défaut
|
|
# (male-adventurer, voir default_style_for_widget.py) par celui
|
|
# réellement cliqué.
|
|
forge_character = request.form.get("forge_character")
|
|
if forge_character and forge_character in screens.SPRITE_LIBRARY:
|
|
screens.set_personnage_data(slug, new_id, {"source": "forge", "forge_character": forge_character})
|
|
return redirect(url_for("screen_edit", slug=slug, screen_id=screen_id, selected=new_id))
|