MainCamera.gd 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. extends Camera2D
  2. export var dist_max = 900
  3. export var zoom_rate = 0.001
  4. var view
  5. func _ready():
  6. view = get_tree().root
  7. view.connect("size_changed", self, "_on_size_changed")
  8. func _process(_d):
  9. move()
  10. func move():
  11. if !get_tree().has_group("players"):
  12. return
  13. var running
  14. if get_tree().has_group("running"):
  15. running = get_tree().get_nodes_in_group("running")
  16. if !running or running.size() == 0:
  17. # Show every players
  18. var players = get_tree().get_nodes_in_group("players")
  19. center_on(players)
  20. else:
  21. # Show remaining players only
  22. center_on(running)
  23. func center_on(players):
  24. var position_accumulator = Vector2(0.0, 0.0)
  25. for p in players:
  26. position_accumulator += p.position
  27. position = position_accumulator / players.size()
  28. var dist = 0
  29. for i in range(players.size() - 1):
  30. for j in range(i + 1, players.size()):
  31. dist = max(dist, players[i].position.distance_to(players[j].position))
  32. # Extend camera zoom if liners are far from each other
  33. var new_zoom = 1.0
  34. if dist > dist_max:
  35. new_zoom += (dist - dist_max) * zoom_rate
  36. zoom = Vector2(new_zoom, new_zoom)
  37. func _on_size_changed():
  38. print("New size :", view.size)