From 752086bd1b7b7ba32773060433a80eecea443d28 Mon Sep 17 00:00:00 2001 From: Andre Date: Mon, 16 Mar 2026 22:43:48 +0100 Subject: [PATCH] feat: LMB-Kameraorbit ohne Einfluss auf Bewegungsrichtung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - _movement_yaw eingeführt: wird nur aktualisiert wenn LMB NICHT gedrückt ist - dir3 und Souls-Rotation nutzen _movement_yaw statt camera_pivot.world_yaw direkt - _do_roll nutzt ebenfalls _movement_yaw als Referenz im Souls-Modus - Verhindert dass LMB-Kameraorbit die Laufrichtung oder Characterrotation ändert Co-Authored-By: Claude Sonnet 4.6 --- player.gd | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/player.gd b/player.gd index 444edc9..690d816 100644 --- a/player.gd +++ b/player.gd @@ -148,6 +148,10 @@ var is_rolling: bool = false var roll_direction: Vector3 = Vector3.ZERO var roll_cooldown: float = 0.0 const ROLL_COOLDOWN: float = 1.5 +# Eingefrорener Kamerawinkel für Bewegungsberechnung: +# wird nur aktualisiert wenn LMB NICHT gedrückt ist, damit +# LMB-Kamerarotation die Laufrichtung nicht verändert +var _movement_yaw: float = 0.0 # ═══════════════════════════════════════════════════════════════ # NODE-REFERENZEN @@ -814,7 +818,7 @@ func _do_roll(): var input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_back") var has_target = target != null and is_instance_valid(target) if input_dir.length() > 0.1: - var ref_angle = rotation.y if (has_target or is_walking) else camera_pivot.world_yaw + var ref_angle = rotation.y if (has_target or is_walking) else _movement_yaw roll_direction = Vector3(input_dir.x, 0, input_dir.y).rotated(Vector3.UP, ref_angle).normalized() # Spieler in Roll-Richtung drehen, Kamera dabei kompensieren var old_rot = rotation.y @@ -970,13 +974,18 @@ func _physics_process(delta): # ── Bewegungsrichtung ──────────────────────────────────────────── # Souls: world_yaw (stabil, dreht sich nicht mit Spieler mit) # Lock-On/Walk: rotation.y (Strafe relativ zur Spielerausrichtung) + var lmb = Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) + # Bewegungs-Referenzwinkel einfrieren wenn LMB gedrückt + if not lmb: + _movement_yaw = camera_pivot.world_yaw + var dir3: Vector3 if has_target or is_walking: dir3 = Vector3(input_dir.x, 0, input_dir.y).rotated(Vector3.UP, rotation.y) else: - dir3 = Vector3(input_dir.x, 0, input_dir.y).rotated(Vector3.UP, camera_pivot.world_yaw) + dir3 = Vector3(input_dir.x, 0, input_dir.y).rotated(Vector3.UP, _movement_yaw) - # ── Souls-Rotation: Zielwinkel aus Kamera-world_yaw berechnen ─── + # ── Souls-Rotation: Zielwinkel aus _movement_yaw berechnen ───── # Nur vorwärts/diagonal (nicht S), nicht bei RMB, nicht Lock-On/Walk if is_moving and not is_walking and not has_target and not is_rolling \ and input_dir.y < 0.1 and not Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT):