extends Camera2D export var dist_max = 900 export var zoom_rate = 0.001 func _process(_d): move() func move(): if !get_tree().has_group("players"): return var living if get_tree().has_group("living"): living = get_tree().get_nodes_in_group("living") if !living or living.size() == 0: # Show every players var players = get_tree().get_nodes_in_group("players") center_on(players) else: # Show remaining players only center_on(living) func center_on(players): var position_accumulator = Vector2(0.0, 0.0) for p in players: position_accumulator += p.position position = position_accumulator / players.size() var dist = 0 for i in range(players.size() - 1): for j in range(i + 1, players.size()): dist = max(dist, players[i].position.distance_to(players[j].position)) # Extend camera zoom if liners are far from each other var new_zoom = 1.0 if dist > dist_max: new_zoom += (dist - dist_max) * zoom_rate zoom = Vector2(new_zoom, new_zoom)