Debut du plan A→D pour fixer les bugs des armes en main (FPS view).
Etape A : Configuration d’affichage individuelle par arme (taille, offset, rotation).
Probleme initial
- Toutes les armes utilisaient la meme rotation
(0, π, 0)→ le shotgun apparait
tourne vers la gauche car son vectobj natif a une orientation differente. - Toutes les armes etaient normalisees a la meme taille (
TARGET_WEAPON_SIZE = 0.5)
→ destruction des proportions relatives (le rocket launcher devrait etre plus
gros que le blaster, par exemple).
Solution
Nouveau record WeaponDisplayConfig qui groupe par arme :
– scaleMultiplier : multiplicateur de taille (1.0 = reference, 1.5 = +50%)
– offset : decalage local par rapport a la camera
– rotation : orientation du vectobj dans le repere camera
– + placeholders pour les anim de tir/selection (utilises etapes B et C)
Fichiers crees
weapon/WeaponDisplayConfig.java: record + builder fluent + helpers de
constantes (DEG_90,DEG_180,DEG_270).
Fichiers modifies
-
weapon/WeaponType.java: refonte. Suppression des champsrotX/rotY/rotZ
individuels, remplaces par unEnumMap<WeaponType, WeaponDisplayConfig>
static initialise viacreateConfigs(). Ajout degetDisplayConfig().
L’ancienne methodegetDisplayRotation()est gardee pour compat. -
weapon/WeaponViewAppState.java: - Suppression des constantes
WEAPON_OFFSETetWEAPON_ROTATION_BASEglobales
(deplaces dans la config per-arme). update()lit l’offset et la rotation depuiscurrentWeapon.getDisplayConfig().loadWeapon()passe lescaleMultiplieranormalizeModelVertices().normalizeModelVertices(Spatial, float): nouveau parametre scale
multiplicateur applique apres la normalisation uniforme.
Calibration initiale (a ajuster en jeu)
| Arme | scale | rotation | Note |
|---|---|---|---|
| SHOTGUN | 1.1 | (0, 270deg, 0) |
corrige l’orientation native |
| PLASMA_GUN | 1.0 | (0, 180deg, 0) |
reference |
| GRENADE_LAUNCHER | 1.1 | (0, 180deg, 0) |
gros |
| ASSAULT_RIFLE | 1.0 | (0, 180deg, 0) |
reference |
| BLASTER | 0.85 | (0, 180deg, 0) |
pistolet |
| ROCKET_LAUNCHER | 1.2 | (0, 180deg, 0) |
imposant |
| LAZER | 0.85 | (0, 180deg, 0) |
pistolet laser |
| DROP_MINE | 0.6 | (0, 180deg, 0) |
objet en main |
| PLASMA_MULTISHOT | 1.0 | (0, 180deg, 0) |
identique Plasma |
| MEGALASER | 0.95 | (0, 180deg, 0) |
version megazord |
Etapes restantes
- B : animation de tir (recoil) – hooker
playFireAnimation()+ remplir
lesfireFrameStart/Endpar arme. - C : animation de selection (raise) + correction du viseur sniper.
- D : sprite specifique mine + comportement (pose au sol, declenchement).