Commandes personnage : détection de touche au clavier + touches d'animation supplémentaires
Build and deploy / test-python (push) Successful in 6m17s
Build and deploy / test-js (push) Successful in 53s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

Deux retours utilisateur sur le panneau "Commandes" (déplacement/
animation automatiques, voir précédent commit) :
- Les champs de touche (haut/bas/gauche/droite/interagir) capturent
  maintenant la touche au clavier (clic puis appui — event.key, même
  valeur que heldKeys/triggers.js) au lieu d'être tapés à la main,
  source d'erreurs ("Espace" vs " ", "flèche haut" vs "ArrowUp"...).
- Nouvelle section "Animations supplémentaires" : un nombre illimité de
  touches, chacune liée à UNE pose au choix parmi celles réellement
  disponibles pour ce personnage (sauter, attaquer, courir...) — pas
  seulement les 4 touches de déplacement + interagir.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-02 11:50:29 +02:00
co-authored by Claude Sonnet 5
parent 74f7ca396f
commit 5891c82c62
8 changed files with 209 additions and 22 deletions
@@ -15,7 +15,7 @@ const actionsMod = require('../actions.js');
Object.assign(global, actionsMod);
const {
forgePersonnageAnimExists, forgePersonnageMovementAnim, forgePersonnageIdleAnim,
forgePersonnageAnimExists, forgePersonnageMovementAnim, forgePersonnageIdleAnim, forgePersonnageActionAnim,
forgeRunPersonnageControllerTick,
} = require('../personnage-controller.js');
@@ -121,3 +121,19 @@ test('tick — ignore tout objet qui n\'est pas kind="personnage" ou sans comman
assert.doesNotThrow(() => forgeRunPersonnageControllerTick({ elements: [decor] }));
});
});
// Touches supplémentaires (sauter, attaquer...) — bug remonté par
// l'utilisateur : au-delà des 4 touches de déplacement et de "interagir",
// il manquait un moyen de lier une touche à N'IMPORTE QUELLE autre pose du
// personnage (voir "Animations supplémentaires", templates/scene_edit.html).
test('forgePersonnageActionAnim — "interagir" prioritaire, sinon la touche supplémentaire correspondante', () => {
const cmd = { interagir: 'e', extra: [{ touche: 'j', animation: 'jump' }, { touche: 'a', animation: 'attack' }] };
assert.equal(forgePersonnageActionAnim(cmd, 'e'), 'interact');
assert.equal(forgePersonnageActionAnim(cmd, 'j'), 'jump');
assert.equal(forgePersonnageActionAnim(cmd, 'a'), 'attack');
assert.equal(forgePersonnageActionAnim(cmd, 'x'), null); // touche non liée
});
test('forgePersonnageActionAnim — commandes sans "extra" (personnage posé avant l\'ajout du réglage)', () => {
assert.equal(forgePersonnageActionAnim({ interagir: 'e' }, 'j'), null);
});