extends Node2D onready var cam = $MainCamera onready var level = $Grid var dist_max = 900 var zoom_rate = 0.001 var playerScene = preload("res://Player.tscn") func _ready(): var player # Player 1 player = playerScene.instance() player.grid = level player.turn_left_action = "player_1_turn_left" player.turn_right_action = "player_1_turn_right" player.position = Vector2(4 * 64 + 32, 8 * 64 + 32) add_child(player) # Player 2 player = playerScene.instance() player.grid = level player.turn_left_action = "player_2_turn_left" player.turn_right_action = "player_2_turn_right" player.position = Vector2(6 * 64 + 32, 8 * 64 + 32) add_child(player) func _process(d): move_camera() func move_camera(): var living = get_tree().get_nodes_in_group("living") if 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 cam.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 zoom = 1.0 if dist > dist_max: zoom += (dist - dist_max) * zoom_rate cam.zoom = Vector2(zoom, zoom)