diff --git a/overworld/camera/OverworldCamera.gd b/overworld/camera/OverworldCamera.gd index d5e8e6d..6a51bc3 100644 --- a/overworld/camera/OverworldCamera.gd +++ b/overworld/camera/OverworldCamera.gd @@ -24,8 +24,9 @@ const COLLISION_MARGIN:float = 0 @export_category("Auto-center") @export var centeredDelay:float = 1.0 @export var centeredFollowRate:float = 0.75 -@export var centeredMaxFollowRate:float = 1.0 +@export var centeredMaxFollowRate:float = 1.5 @export var centeredPitch:float = 30.0 +@export var centeredMaxYawDiff:float = 120.0 @export_category("Collision") @export_flags_3d_physics var collisionMask:int = 1 @@ -105,12 +106,15 @@ func _process(delta:float) -> void: targetNode.global_transform.basis.z.x, targetNode.global_transform.basis.z.z )) + var centerYawDiff:float = fposmod(behindYaw - _yaw + 180.0, 360.0) - 180.0 - var totalAngle:float = abs(centerYawDiff) + abs(centeredPitch - _pitch) - var dynamicRate:float = minf(centeredFollowRate * (1.0 + totalAngle / 90.0), centeredMaxFollowRate) - var t:float = minf(dynamicRate * delta, 1.0) - _pitch = lerpf(_pitch, centeredPitch, t) - _yaw += centerYawDiff * t + if abs(centerYawDiff) <= centeredMaxYawDiff: + var totalAngle:float = abs(centerYawDiff) + abs(centeredPitch - _pitch) + var dynamicRate:float = minf(centeredFollowRate * (1.0 + totalAngle / 90.0), centeredMaxFollowRate) + var tYaw:float = minf(dynamicRate * delta, 1.0) + var tPitch:float = minf(dynamicRate * 3.0 * delta, 1.0) + _pitch = lerpf(_pitch, centeredPitch, tPitch) + _yaw += centerYawDiff * tYaw _pitch = clamp(_pitch, pitchMin, pitchMax)