This commit is contained in:
Team3
2026-09-04 00:06:51 +02:00
parent 8c7da42e64
commit 8b60164592
8 changed files with 690 additions and 73 deletions

View File

@@ -10,11 +10,14 @@ const SPEED_GEIST := 11.0
const GRAVITY := 24.0
const JUMP := 9.0
const MAUS := 0.0026
const FOLGE_ABSTAND := 3.0
const FOLGE_SPIEL := 1.5
var mode: int = Mode.TRAUM
var yaw := 0.0
var pitch := -0.25
var look_enabled := true
var folgt: Node3D = null # Mensch, an den sich der Geist gehängt hat
var pivot: Node3D
var arm: SpringArm3D
@@ -67,6 +70,7 @@ func _ready() -> void:
func set_mode(m: int) -> void:
mode = m
folgt = null
if m == Mode.GEIST:
collision_layer = 0
collision_mask = 0
@@ -118,6 +122,23 @@ func _physics_process(delta: float) -> void:
var basis_yaw := Basis(Vector3.UP, yaw)
dir = (basis_yaw * Vector3(input.x, 0, input.y)).normalized()
if mode == Mode.GEIST and folgt != null:
if not is_instance_valid(folgt):
folgt = null
elif dir.length() > 0.01:
folgt = null # eigene Bewegung löst die Verfolgung
else:
var schulter := folgt.global_position + Vector3(0, 1.6, 0) \
- blickrichtung() * FOLGE_ABSTAND
global_position = global_position.lerp(schulter, 1.0 - pow(0.004, delta))
# weich nachziehen, aber an der Leine: sonst reißt der Faden beim Gehen
var ab := global_position - schulter
if ab.length() > FOLGE_SPIEL:
global_position = schulter + ab.normalized() * FOLGE_SPIEL
velocity = Vector3.ZERO
body.rotation.y = lerp_angle(body.rotation.y, yaw, 1.0 - pow(0.001, delta))
return
if mode == Mode.GEIST:
var v := dir * SPEED_GEIST
if look_enabled: