Personnages : toutes les animations, tous les personnages ; retrait de l'import de sprites personnalisés
À 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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
9e076f8cf9
commit
5ead091c75
+10
-37
@@ -53,11 +53,6 @@
|
||||
<img src="/static/characters/{{ char_slug }}/idle.png" alt="{{ character.label }}" class="personnageThumb">
|
||||
</button>
|
||||
{% endfor %}
|
||||
{% if mode == 'add' %}
|
||||
<button type="button" class="iconGalleryTile" title="Sprite personnalisé" onclick="addPersonnageElement('__custom__')">
|
||||
<span style="font-size:28px;">➕</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
@@ -159,16 +154,15 @@
|
||||
|
||||
<!-- Phase 8 — galerie de personnages Forge (widget "personnage" dédié,
|
||||
voir screens/widgets/registry.py) : cliquer une tuile pose un
|
||||
personnage DÉJÀ configuré (Kenney CC0), animé immédiatement dans
|
||||
le canevas (voir personnage-preview.js) — pas un élément générique
|
||||
à configurer ensuite dans la logique. "➕ Sprite personnalisé" pose
|
||||
un personnage vide dont les animations s'importent dans ses
|
||||
propriétés (panneau droit). -->
|
||||
personnage DÉJÀ configuré (Kenney CC0, toutes ses animations),
|
||||
animé immédiatement dans le canevas (voir personnage-preview.js) —
|
||||
pas un élément générique à configurer ensuite dans la logique.
|
||||
L'import de sprites personnalisés est retiré pour le moment. -->
|
||||
<details class="propGroup">
|
||||
<summary>🎭 Personnages</summary>
|
||||
<div class="propGroupBody">
|
||||
{{ render_personnage_gallery('add', 'personnageGalleryAdd') }}
|
||||
<p class="help">Personnage prêt à l'emploi (Kenney, licence libre CC0) ou "➕" pour un sprite personnalisé — importe ensuite tes propres images d'animation dans ses propriétés.</p>
|
||||
<p class="help">Personnage Kenney prêt à l'emploi (licence libre CC0), avec toutes ses animations.</p>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
@@ -899,36 +893,15 @@
|
||||
|
||||
{% if el.widget == 'personnage' %}
|
||||
<!-- Phase 8 — panneau sur-mesure (custom_panel, voir registry.py) :
|
||||
pas de controls génériques, juste la source (Forge/personnalisée)
|
||||
et son contenu. Sauvegarde en AJAX (personnage-panel.js), jamais
|
||||
via #propsForm (générique, utilisé par tous les autres widgets). -->
|
||||
pas de controls génériques, juste le personnage Forge affiché.
|
||||
Sauvegarde en AJAX (personnage-panel.js), jamais via #propsForm
|
||||
(générique, utilisé par tous les autres widgets). L'import de
|
||||
sprites personnalisés est retiré pour le moment. -->
|
||||
<details class="propGroup" open>
|
||||
<summary>🎭 Personnage</summary>
|
||||
<div class="propGroupBody" id="personnagePanelBody" data-element-id="{{ el.id }}" data-source="{{ personnage_data.source }}">
|
||||
{% if personnage_data.source == 'custom' %}
|
||||
<p class="help">Sprite personnalisé — importe les images de chaque animation ("idle" recommandée, affichée par défaut).</p>
|
||||
<div id="personnageAnimationsList">
|
||||
{% for anim_name, frames in (personnage_data.animations or {}).items() %}
|
||||
<div class="personnageAnimRow box" data-anim-name="{{ anim_name }}" style="margin-bottom:8px; padding:8px;">
|
||||
<div class="fieldRow" style="align-items:center; gap:6px;">
|
||||
<input type="text" class="input is-small personnageAnimName" value="{{ anim_name }}" placeholder="ex. idle, marche, saut" style="flex:1;">
|
||||
<button type="button" class="button is-small is-danger" onclick="removePersonnageAnimation(this)">🗑</button>
|
||||
</div>
|
||||
<div class="personnageAnimFrames" style="display:flex; flex-wrap:wrap; gap:4px; margin-top:6px;">
|
||||
{% for url in frames %}
|
||||
<img src="{{ url }}" alt="" class="personnageFrameThumb" style="width:32px; height:32px; object-fit:contain; background:var(--panel2); border-radius:4px;">
|
||||
{% endfor %}
|
||||
</div>
|
||||
<input type="file" class="personnageFrameUpload input is-small" accept="image/*" multiple style="margin-top:6px;">
|
||||
<span class="uploadStatus" style="font-size:12px; color:var(--text-dim);"></span>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<button type="button" class="button is-small is-fullwidth" onclick="addPersonnageAnimation()">+ Ajouter une animation</button>
|
||||
{% else %}
|
||||
<div class="propGroupBody" id="personnagePanelBody" data-element-id="{{ el.id }}">
|
||||
<p class="help">Personnage Forge — clique un autre pour en changer.</p>
|
||||
{{ render_personnage_gallery('swap', 'personnageGallerySwap', personnage_data.forge_character) }}
|
||||
{% endif %}
|
||||
</div>
|
||||
</details>
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user