From b498d0fd5b0eb597c64362e312538c94fb37caaf Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 13 Oct 2026 21:37:22 +0200 Subject: [PATCH] =?UTF-8?q?Zweih=C3=A4nder:=20Griffspanne=20virtuell=2022c?= =?UTF-8?q?m,=20Griff-raten=2020cm=20mit=205cm=20Pommel-Offset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../toolset/content/GripEditorController.java | 14 ++++++++------ .../game/control/NpcWeaponAttachmentControl.java | 5 +++++ .../game/control/WeaponAttachmentControl.java | 7 +++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/blight-editor/src/main/java/de/blight/editor/toolset/content/GripEditorController.java b/blight-editor/src/main/java/de/blight/editor/toolset/content/GripEditorController.java index 910324d..b58844b 100644 --- a/blight-editor/src/main/java/de/blight/editor/toolset/content/GripEditorController.java +++ b/blight-editor/src/main/java/de/blight/editor/toolset/content/GripEditorController.java @@ -37,20 +37,22 @@ public class GripEditorController implements ItemEditorView.GripEditorLauncher { public void applyGripGuess(float gX, float gY, float gZ) { if (posXSpin == null) return; suppressSpinnerEvents = true; + float bladeDirZ = ctx.input().gripEditorBladeDirZ; // -1 = Klinge bei -Z, +1 = Klinge bei +Z + // 5cm Richtung Pommel von der erkannten Parierstange + float posZ = gZ + bladeDirZ * 0.05f; posXSpin.getValueFactory().setValue((double) gX); posYSpin.getValueFactory().setValue((double) gY); - posZSpin.getValueFactory().setValue((double) gZ); + posZSpin.getValueFactory().setValue((double) posZ); // Rotation zurücksetzen: Schaft zeigt zur Klinge, gelber Stab nach oben rotXSpin.getValueFactory().setValue(0.0); rotYSpin.getValueFactory().setValue(0.0); rotZSpin.getValueFactory().setValue(0.0); - // 2. Griff (linke Hand): direkt angrenzend an den 1. Griff, 5cm weiter Richtung Pommel. + // 2. Griff (linke Hand): 20cm Richtung Pommel vom 1. Griff (Zweihänder-Grifflänge). // Grip2-Spinner = Modell-Koordinaten direkt (kein HAND_GRIP_OFFSET), deshalb JSON-Pos von Grip1 verwenden. - float bladeDirZ = ctx.input().gripEditorBladeDirZ; // -1 = Klinge bei -Z, +1 = Klinge bei +Z - float grip1JsonZ = gZ + ItemGrip.HAND_GRIP_OFFSET_Z; + float grip1JsonZ = posZ + ItemGrip.HAND_GRIP_OFFSET_Z; grip2XSpin.getValueFactory().setValue((double) gX); grip2YSpin.getValueFactory().setValue((double) gY); - grip2ZSpin.getValueFactory().setValue((double)(grip1JsonZ - bladeDirZ * 0.05f)); + grip2ZSpin.getValueFactory().setValue((double)(grip1JsonZ - bladeDirZ * 0.20f)); suppressSpinnerEvents = false; onSpinnerChanged(); } @@ -220,7 +222,7 @@ public class GripEditorController implements ItemEditorView.GripEditorLauncher { row("Z:", rotZSpin), new Separator(), styledTitle("2. Griff – Linke Hand (m)"), - styledHint("Zweiter Griffpunkt (blaues Gizmo) für Zweihänder.\nDirekt angrenzend an den 1. Griff, Richtung Knauf."), + styledHint("Zweiter Griffpunkt (blaues Gizmo) für Zweihänder.\n~20cm Richtung Knauf vom 1. Griff."), row("X:", grip2XSpin), row("Y:", grip2YSpin), row("Z:", grip2ZSpin), diff --git a/blight-game/src/main/java/de/blight/game/control/NpcWeaponAttachmentControl.java b/blight-game/src/main/java/de/blight/game/control/NpcWeaponAttachmentControl.java index 2e9cc16..7f344da 100644 --- a/blight-game/src/main/java/de/blight/game/control/NpcWeaponAttachmentControl.java +++ b/blight-game/src/main/java/de/blight/game/control/NpcWeaponAttachmentControl.java @@ -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) diff --git a/blight-game/src/main/java/de/blight/game/control/WeaponAttachmentControl.java b/blight-game/src/main/java/de/blight/game/control/WeaponAttachmentControl.java index 98f3565..e9b8211 100644 --- a/blight-game/src/main/java/de/blight/game/control/WeaponAttachmentControl.java +++ b/blight-game/src/main/java/de/blight/game/control/WeaponAttachmentControl.java @@ -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());