Game.gd 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. extends Node2D
  2. onready var cam = $MainCamera
  3. export var dist_max = 900
  4. export var zoom_rate = 0.001
  5. var level
  6. var playerScene = preload("res://Player.tscn")
  7. func _ready():
  8. var player
  9. # Load level
  10. level = preload("res://Levels/Lab.tscn").instance()
  11. add_child(level)
  12. # Player 1
  13. player = playerScene.instance()
  14. player.grid = level
  15. player.turn_left_action = "player_1_turn_left"
  16. player.turn_right_action = "player_1_turn_right"
  17. player.position = Vector2(4 * 64 + 32, 8 * 64 + 32)
  18. add_child(player)
  19. # Player 2
  20. player = playerScene.instance()
  21. player.grid = level
  22. player.turn_left_action = "player_2_turn_left"
  23. player.turn_right_action = "player_2_turn_right"
  24. player.position = Vector2(6 * 64 + 32, 8 * 64 + 32)
  25. add_child(player)
  26. # TODO Timer
  27. get_tree().call_group("players", "_on_game_start")
  28. func _process(_d):
  29. move_camera()
  30. func move_camera():
  31. var living = get_tree().get_nodes_in_group("living")
  32. if living.size() == 0:
  33. # Show every players
  34. var players = get_tree().get_nodes_in_group("players")
  35. center_on(players)
  36. else:
  37. # Show remaining players only
  38. center_on(living)
  39. func center_on(players):
  40. var position_accumulator = Vector2(0.0, 0.0)
  41. for p in players:
  42. position_accumulator += p.position
  43. cam.position = position_accumulator / players.size()
  44. var dist = 0
  45. for i in range(players.size() - 1):
  46. for j in range(i + 1, players.size()):
  47. dist = max(dist, players[i].position.distance_to(players[j].position))
  48. # Extend camera zoom if liners are far from each other
  49. var zoom = 1.0
  50. if dist > dist_max:
  51. zoom += (dist - dist_max) * zoom_rate
  52. cam.zoom = Vector2(zoom, zoom)