Decouverte importante via dumpWeaponFrames : le rocket launcher a 14 frames
dans son vectobj (vs 2-9 pour les autres armes). Jouer toutes les frames en
bloc donne un resultat visuel incoherent (mix de plusieurs anims).
Solution : plage de frames configurable
Nouvelle methode playFireAnimationRange(start, end, idle, dur) dans
VectObjFrameAnimControl qui ne joue qu’une plage et revient a l’idle a la
fin (au lieu de toujours frame 0).
WeaponDisplayConfig expose deja les champs fireFrameStart, fireFrameEnd,
idleFrame (depuis l’etape A). On les utilise maintenant : si
hasFireAnimation() retourne true, le renderer appelle la version range,
sinon fallback sur playFireAnimation() qui joue tout.
Calibration initiale
| Arme | Frames | Config |
|---|---|---|
| shotgun | 9 | tout (0..8) |
| plasmagun | 2 | tout (0..1) |
| grenadelauncher | 4 | tout (0..3) |
| rifle | 4 | tout (0..3) |
| blaster | 4 | tout (0..3) |
| rocketlauncher | 14 | fireFrames(0, 5) + idle=0 |
| laser | 2 | tout (0..1) |
Les 8 frames restantes du rocket launcher (6-13) sont probablement une autre
anim (raise/reload) qu’on traitera plus tard a l’etape C.
Fichiers modifies
world/VectObjFrameAnimControl.java: ajoute moderangeMode+ champs
rangeStartFrame/EndFrame/IdleFrame, methodeplayFireAnimationRange(),
branche danscontrolUpdate()etcloneForSpatial().weapon/WeaponViewAppState.java:playFireAnimation()lit la config et
delegue aplayFireAnimationRange()quand definie. Renomme
resetAnimationsToFrame0enresetAnimationsToFrame(int)pour positionner
sur la frame idle de la config (le rocket launcher pourrait avoir une idle
!= 0 dans le futur).weapon/WeaponType.java: config rocket launcher avecfireFrames(0, 5).tools/diagnose/WeaponFrameDump.java: retire plink (= modele bullet, pas
une arme).