extends Camera2D enum FollowTarget { BALL, PLAYER1, PLAYER2 } @export_range(0, 1, 0.01) var ball_weight: float = 0.6 @export_range(0, 1, 0.01) var player_weight: float = 0.2 @export var follow_speed: float = 8.0 @export var deadzone_margin: float = 100.0 @onready var ball: RigidBody2D = get_node("../Ball") @onready var player1: CharacterBody2D = get_node("../Player1") @onready var player2: CharacterBody2D = get_node("../Player2") var target_pos: Vector2 = Vector2.ZERO func _physics_process(delta: float) -> void: var total_weight: float = ball_weight + player_weight * 2.0 target_pos = ( ball.global_position * ball_weight + player1.global_position * player_weight + player2.global_position * player_weight ) / total_weight global_position = global_position.lerp(target_pos, follow_speed * delta) var spread: float = maxf( absf(player1.global_position.x - player2.global_position.x), absf(player1.global_position.y - player2.global_position.y) ) var target_zoom: Vector2 = Vector2.ONE * (600.0 / spread) zoom = target_zoom.limit_length(1.5)