extends Node2D onready var cam = $Grid/Camera1 var players = [] var dist_max = 900 var zoom_rate = 0.001 func _ready(): players.append($Grid/Player1) players.append($Grid/Player2) func _process(d): center_camera() func center_camera(): var living_players = [] var position_accumulator = Vector2(0.0, 0.0) for p in players: if (p.is_alive()): living_players.append(p) position_accumulator += p.position if living_players.size() == 0: # Keep camera in the last position return cam.position = position_accumulator / living_players.size() var dist = 0 for i in range(living_players.size() - 1): for j in range(i + 1, living_players.size()): dist = max(dist, living_players[i].position.distance_to(living_players[j].position)) # Extend camera zoom if liners are far from each other var zoom = 1.0 if dist > dist_max: zoom += (dist - dist_max) * zoom_rate cam.zoom = Vector2(zoom, zoom)