cave-of-dreams/scripts/player_camera.gd

41 lines
1.5 KiB
GDScript3
Raw Permalink Normal View History

extends Camera3D
2026-05-14 15:57:50 +00:00
@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))
2026-05-14 15:57:50 +00:00
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)
2026-05-14 15:57:50 +00:00
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")