Zweihänder: g1 an rechter Hand anpinnen, Swing auf linken Handballen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -13,13 +13,13 @@
|
|||||||
"grip": {
|
"grip": {
|
||||||
"posX": 0.10248406,
|
"posX": 0.10248406,
|
||||||
"posY": 0.104730606,
|
"posY": 0.104730606,
|
||||||
"posZ": 0.5130257,
|
"posZ": 0.4630257,
|
||||||
"rotX": 0.0,
|
"rotX": 0.0,
|
||||||
"rotY": 0.0,
|
"rotY": 0.0,
|
||||||
"rotZ": 0.0,
|
"rotZ": 0.0,
|
||||||
"grip2PosX": 0.0024840608,
|
"grip2PosX": 0.0024840608,
|
||||||
"grip2PosY": 0.104730606,
|
"grip2PosY": 0.104730606,
|
||||||
"grip2PosZ": 0.5630257,
|
"grip2PosZ": 0.6630257,
|
||||||
"handOffsetX": 0.0,
|
"handOffsetX": 0.0,
|
||||||
"handOffsetY": 0.0,
|
"handOffsetY": 0.0,
|
||||||
"handOffsetZ": 0.0
|
"handOffsetZ": 0.0
|
||||||
|
|||||||
@@ -246,17 +246,18 @@ public class NpcWeaponAttachmentControl extends AbstractControl {
|
|||||||
Vector3f leftHandballen = (palmOffsetLocal != null)
|
Vector3f leftHandballen = (palmOffsetLocal != null)
|
||||||
? leftHandInChar.subtract(leftBoneRotInChar.mult(palmOffsetLocal.mult(0.5f)))
|
? leftHandInChar.subtract(leftBoneRotInChar.mult(palmOffsetLocal.mult(0.5f)))
|
||||||
: leftHandInChar;
|
: leftHandInChar;
|
||||||
|
leftHandballen.addLocal(0.10f, 0f, 0f);
|
||||||
|
|
||||||
|
// Swing: Griffachse auf linken Handballen ausrichten (inkl. X-Korrektur)
|
||||||
Vector3f currentGripDir = weaponRot.mult(g2.subtract(g1).normalizeLocal());
|
Vector3f currentGripDir = weaponRot.mult(g2.subtract(g1).normalizeLocal());
|
||||||
Vector3f targetDir = leftHandInChar.subtract(bonePosInChar).normalizeLocal();
|
Vector3f targetDir = leftHandballen.subtract(bonePosInChar).normalizeLocal();
|
||||||
float dot = currentGripDir.dot(targetDir);
|
float dot = currentGripDir.dot(targetDir);
|
||||||
if (dot > 0f) {
|
if (dot > 0f) {
|
||||||
weaponRot = swingFromTo(currentGripDir, targetDir).mult(weaponRot);
|
weaponRot = swingFromTo(currentGripDir, targetDir).mult(weaponRot);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3f midGrip = g1.add(g2).multLocal(0.5f);
|
// g1 exakt an der rechten Hand anpinnen — linke-Hand-Korrekturen beeinflussen rechte nicht
|
||||||
Vector3f midTarget = bonePosInChar.add(leftHandballen).multLocal(0.5f);
|
Vector3f weaponPos = bonePosInChar.subtract(weaponRot.mult(g1));
|
||||||
Vector3f weaponPos = midTarget.subtract(weaponRot.mult(midGrip));
|
|
||||||
s.setLocalRotation(weaponRot);
|
s.setLocalRotation(weaponRot);
|
||||||
s.setLocalTranslation(weaponPos);
|
s.setLocalTranslation(weaponPos);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -297,19 +297,18 @@ public class WeaponAttachmentControl extends AbstractControl {
|
|||||||
Vector3f leftHandballen = (palmOffsetLocal != null)
|
Vector3f leftHandballen = (palmOffsetLocal != null)
|
||||||
? leftHandInChar.subtract(leftBoneRotInChar.mult(palmOffsetLocal.mult(0.5f)))
|
? leftHandInChar.subtract(leftBoneRotInChar.mult(palmOffsetLocal.mult(0.5f)))
|
||||||
: leftHandInChar;
|
: leftHandInChar;
|
||||||
|
leftHandballen.addLocal(0.10f, 0f, 0f);
|
||||||
|
|
||||||
Vector3f currentGripDir = weaponRot.mult(g2.subtract(g1).normalizeLocal());
|
// Swing: Griffachse auf linken Handballen ausrichten (inkl. X-Korrektur)
|
||||||
Vector3f targetDir = leftHandInChar.subtract(bonePosInChar).normalizeLocal();
|
Vector3f currentGripDir = weaponRot.mult(g2.subtract(g1).normalizeLocal());
|
||||||
float dot = currentGripDir.dot(targetDir);
|
Vector3f targetDir = leftHandballen.subtract(bonePosInChar).normalizeLocal();
|
||||||
|
float dot = currentGripDir.dot(targetDir);
|
||||||
if (dot > 0f) {
|
if (dot > 0f) {
|
||||||
weaponRot = swingFromTo(currentGripDir, targetDir).mult(weaponRot);
|
weaponRot = swingFromTo(currentGripDir, targetDir).mult(weaponRot);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Midpoint-Anker: Mitte von g1–g2 auf Mitte beider Handballen legen
|
// g1 exakt an der rechten Hand anpinnen — linke-Hand-Korrekturen beeinflussen rechte nicht
|
||||||
Vector3f midGrip = g1.add(g2).multLocal(0.5f);
|
Vector3f weaponPos = bonePosInChar.subtract(weaponRot.mult(g1));
|
||||||
Vector3f midTarget = bonePosInChar.add(leftHandballen).multLocal(0.5f);
|
|
||||||
Vector3f weaponPos = midTarget.subtract(weaponRot.mult(midGrip));
|
|
||||||
weaponSpatial.setLocalRotation(weaponRot);
|
weaponSpatial.setLocalRotation(weaponRot);
|
||||||
weaponSpatial.setLocalTranslation(weaponPos);
|
weaponSpatial.setLocalTranslation(weaponPos);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user