Files
Forge-Engine/static/js/screen_edit/personnage-panel.js
T
williamandClaude Sonnet 5 5ead091c75
Build and deploy / test-python (push) Successful in 1m50s
Build and deploy / test-js (push) Successful in 6s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
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>
2026-08-31 07:38:22 +02:00

40 lines
1.8 KiB
JavaScript

// ---------- Panneau de propriétés "🎭 Personnage" (Phase 8) ----------
// Panneau sur-mesure (custom_panel, voir registry.py) : PAS de soumission
// générique via #propsForm — chaque changement s'enregistre en AJAX vers
// POST /game/<slug>/elements/<id>/personnage (element_set_personnage_data.py),
// qui renvoie les animations résolues pour relancer immédiatement l'aperçu
// animé (voir personnage-preview.js) sans recharger la page. L'import de
// sprites personnalisés est retiré pour le moment — seuls les personnages
// Forge (SPRITE_LIBRARY) sont proposés.
function _personnageElementId() {
var body = document.getElementById('personnagePanelBody');
return body ? parseInt(body.dataset.elementId, 10) : null;
}
function _savePersonnageData(data) {
var elementId = _personnageElementId();
if (!elementId) return Promise.resolve();
return fetch('/game/' + GAME_SLUG + '/elements/' + elementId + '/personnage', {
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data),
})
.then(function (r) { return r.json(); })
.then(function (json) {
if (json.animations) {
// Reste en phase avec le sélecteur d'animation du nœud de flow/clip
// de Timeline (voir flow-editor.js/animation-timeline.js), sans
// recharger la page.
ELEMENT_ANIMATIONS_MAP[elementId] = json.animations;
restartPersonnageIdlePreview(elementId, json.animations);
}
return json;
});
}
function swapPersonnageCharacter(forgeCharacter) {
document.querySelectorAll('#personnageGallerySwap .iconGalleryTile').forEach(function (tile) {
tile.classList.toggle('selected', tile.getAttribute('onclick') === "swapPersonnageCharacter('" + forgeCharacter + "')");
});
_savePersonnageData({ source: 'forge', forge_character: forgeCharacter });
}