class_name TableCamera extends Camera3D ## TableCamera - Isometric camera for the game table # Camera settings @export var camera_distance: float = 17.0 @export var camera_angle: float = 55.0 # Degrees from horizontal (higher = more top-down) @export var camera_height_offset: float = -4.0 # Offset to look slightly above center # Smooth movement @export var smooth_speed: float = 5.0 var target_position: Vector3 = Vector3.ZERO func _ready() -> void: _setup_isometric_view() func _setup_isometric_view() -> void: # Set perspective projection projection = PROJECTION_PERSPECTIVE fov = 50.0 # Calculate position - camera is positioned behind Player 1's side var angle_rad = deg_to_rad(camera_angle) # Height based on angle var height = camera_distance * sin(angle_rad) # Distance along Z axis (positive Z is toward Player 1) var z_offset = camera_distance * cos(angle_rad) # Position camera behind Player 1 (positive Z), looking toward center/opponent position = Vector3(0, height, z_offset) # Look at center of table look_at(Vector3(0, camera_height_offset, 0), Vector3.UP) target_position = position func _process(delta: float) -> void: # Smooth camera movement if needed if position.distance_to(target_position) > 0.01: position = position.lerp(target_position, smooth_speed * delta) look_at(Vector3(0, camera_height_offset, 0), Vector3.UP) ## Set camera to look at a specific point func focus_on(point: Vector3) -> void: var angle_rad = deg_to_rad(camera_angle) target_position = point + Vector3(0, camera_distance * sin(angle_rad), camera_distance * cos(angle_rad)) ## Reset to default position func reset_position() -> void: _setup_isometric_view()