feat: LMB-Kameraorbit ohne Einfluss auf Bewegungsrichtung
- _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 <noreply@anthropic.com>
This commit is contained in:
parent
394b3a89b8
commit
752086bd1b
1 changed files with 12 additions and 3 deletions
15
player.gd
15
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):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue