update
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user