Aller au contenu principal

Session 132duodecimus (suite 7 etape A) — Config d’affichage per-arme

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 champs rotX/rotY/rotZ
    individuels, remplaces par un EnumMap<WeaponType, WeaponDisplayConfig>
    static initialise via createConfigs(). Ajout de getDisplayConfig().
    L’ancienne methode getDisplayRotation() est gardee pour compat.

  • weapon/WeaponViewAppState.java :

  • Suppression des constantes WEAPON_OFFSET et WEAPON_ROTATION_BASE globales
    (deplaces dans la config per-arme).
  • update() lit l’offset et la rotation depuis currentWeapon.getDisplayConfig().
  • loadWeapon() passe le scaleMultiplier a normalizeModelVertices().
  • 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
    les fireFrameStart/End par arme.
  • C : animation de selection (raise) + correction du viseur sniper.
  • D : sprite specifique mine + comportement (pose au sol, declenchement).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *