Files
acrion-rog-client/scripts/camera_controller.gd
Redsandy 7980e0add8 init
2026-01-18 20:56:24 +03:00

47 lines
1.6 KiB
GDScript

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)