extends Node3D class_name CameraController # Контроллер камеры в стиле Path of Exile 2 # Изометрическая камера, которая следует за игроком @export var target: Node3D = null @export var camera_distance: float = 20.0 @export var camera_height: float = 15.0 @export var camera_angle: float = 45.0 # Угол наклона камеры @export var follow_speed: float = 5.0 var camera: Camera3D func _ready(): camera = get_node_or_null("Camera3D") if not camera: camera = Camera3D.new() add_child(camera) # Находим игрока если цель не установлена if not target: var players = get_tree().get_nodes_in_group("player") if players.size() > 0: target = players[0] func _process(delta): if not target or not is_instance_valid(target): return # Вычисляем позицию камеры var target_pos = target.global_position var angle_rad = deg_to_rad(camera_angle) # Изометрическая позиция камеры (диагональный вид сверху, как в POE 2) # Камера находится под углом 45 градусов по диагонали var offset_x = camera_distance * 0.707 # cos(45) = 0.707 var offset_z = camera_distance * 0.707 # sin(45) = 0.707 var offset_y = camera_height # Плавное следование за игроком var desired_pos = target_pos + Vector3(offset_x, offset_y, offset_z) global_position = global_position.lerp(desired_pos, follow_speed * delta) # Камера всегда смотрит на игрока camera.look_at(target_pos, Vector3.UP)