extends Camera3D @onready var game = get_parent() @onready var camera_zones = game.get_node("CameraZones") @onready var player = game.get_node("Player") @onready var offset = position - player.position var camera_point = null func _ready() -> void: pass func _process(delta: float) -> void: var goal_position = player.get_node("Collision").global_position + offset global_position = lerp(global_position, goal_position, min(delta * 4, 1.0)) if camera_point: var origin = camera_point.global_transform.origin var offset_from_camera_point = to_local(origin) #print(offset_from_camera_point) if (camera_point.max_distance_x.x != -INF) and (offset_from_camera_point.x < camera_point.max_distance_x.x): var distance = offset_from_camera_point.x - camera_point.max_distance_x.x global_position += camera_point.global_transform.basis * Vector3(distance, 0, 0) if (camera_point.max_distance_x.y != INF) and (offset_from_camera_point.x > camera_point.max_distance_x.y): var distance = offset_from_camera_point.x - camera_point.max_distance_x.y global_position += camera_point.global_transform.basis * Vector3(distance, 0, 0) for n in camera_zones.get_children(): if player in n.get_overlapping_bodies(): offset = n.get_node("Offset/Camera").global_position - n.get_node("Offset").global_position n.get_node("Offset/Camera").look_at(n.get_node("Offset").global_position) rotation = n.get_node("Offset/Camera").global_rotation camera_point = n.get_node("Offset/Camera")