Zweihänder: Griffspanne virtuell 22cm, Griff-raten 20cm mit 5cm Pommel-Offset

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-10-13 21:37:22 +02:00
parent 911b512208
commit b498d0fd5b
3 changed files with 18 additions and 8 deletions

View File

@@ -236,6 +236,11 @@ public class NpcWeaponAttachmentControl extends AbstractControl {
Vector3f g1 = new Vector3f(grip.getPosX(), grip.getPosY(), grip.getPosZ());
Vector3f g2 = new Vector3f(grip.getGrip2PosX(), grip.getGrip2PosY(), grip.getGrip2PosZ());
// Griffspanne virtuell auf 22cm; g1 (rechte Hand) 10cm weiter Richtung Klinge
Vector3f gripAxis = g1.subtract(g2).normalizeLocal();
Vector3f gripCenter = g1.add(g2).multLocal(0.5f);
g1 = gripCenter.add(gripAxis.mult(0.21f));
g2 = gripCenter.subtract(gripAxis.mult(0.11f));
Vector3f leftHandInChar = charWorldRotInv.mult(leftForeArmNode.getWorldTranslation().subtract(charWorldPos));
Quaternion leftBoneRotInChar = charWorldRotInv.mult(leftForeArmNode.getWorldRotation());
Vector3f leftHandballen = (palmOffsetLocal != null)

View File

@@ -71,7 +71,6 @@ public class WeaponAttachmentControl extends AbstractControl {
private boolean lastDrawnState = false;
private Spatial weaponSpatial;
private boolean gripDiagLogged = false;
private int twoHandDiagFrame = 0;
private Item lastEquippedShield;
private Spatial shieldSpatial;
@@ -285,9 +284,13 @@ public class WeaponAttachmentControl extends AbstractControl {
: new Quaternion();
Quaternion weaponRot = animDelta.mult(bladeFlip).mult(gripRot.inverse());
// Griff-Achse g1→g2 in CharSpace; Ziel = rechteHand→linkeHand
Vector3f g1 = new Vector3f(grip.getPosX(), grip.getPosY(), grip.getPosZ());
Vector3f g2 = new Vector3f(grip.getGrip2PosX(), grip.getGrip2PosY(), grip.getGrip2PosZ());
// Griffspanne virtuell auf 22cm; g1 (rechte Hand) 10cm weiter Richtung Klinge
Vector3f gripAxis = g1.subtract(g2).normalizeLocal();
Vector3f gripCenter = g1.add(g2).multLocal(0.5f);
g1 = gripCenter.add(gripAxis.mult(0.21f));
g2 = gripCenter.subtract(gripAxis.mult(0.11f));
Vector3f leftHandInChar = charWorldRotInv.mult(leftForeArmNode.getWorldTranslation().subtract(charWorldPos));
// Linke Hand: Handballen-Korrektur (Palm-Offset entgegen Fingerrichtung) – nur für midTarget, nicht für targetDir
Quaternion leftBoneRotInChar = charWorldRotInv.mult(leftForeArmNode.getWorldRotation());