Game.gd 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. extends Node2D
  2. onready var cam = $MainCamera
  3. onready var timer = $StartTimer
  4. var levelNames = ["res://Levels/Focus.tscn", "res://Levels/Lab.tscn", "res://Levels/Square.tscn"]
  5. var levelScenes = []
  6. var levelCurrentNode
  7. var levelIndex = -1
  8. # Used to test a level in creation
  9. export (String) var levelToLoop
  10. var levelSceneToLoop
  11. var playerScene = preload("res://Player.tscn")
  12. var playerActionsLeft = ["p1_left", "p2_left", "p3_left"]
  13. var playerActionsRight = ["p1_right", "p2_right", "p3_right"]
  14. func _ready():
  15. for k in range(levelNames.size()):
  16. levelScenes.append(null)
  17. if levelToLoop:
  18. levelSceneToLoop = load("res://Levels/" + levelToLoop + ".tscn")
  19. if !levelSceneToLoop:
  20. push_error("Cant't load level " + levelToLoop)
  21. func _unhandled_input(event):
  22. if event.is_action("ui_accept") and event.is_pressed():
  23. if get_tree().has_group("living"):
  24. var living = get_tree().get_nodes_in_group("living")
  25. if !living.empty():
  26. return
  27. create_game()
  28. func create_game():
  29. # Clear if required
  30. if get_tree().has_group("players"):
  31. var players = get_tree().get_nodes_in_group("players")
  32. for p in players:
  33. p.queue_free()
  34. if levelCurrentNode:
  35. remove_child(levelCurrentNode)
  36. levelCurrentNode.queue_free()
  37. if levelToLoop:
  38. levelCurrentNode = levelSceneToLoop.instance()
  39. else:
  40. # Select next level
  41. levelIndex += 1
  42. if (levelIndex >= levelScenes.size()):
  43. levelIndex = 0
  44. if !levelScenes[levelIndex]:
  45. levelScenes[levelIndex] = load(levelNames[levelIndex])
  46. levelCurrentNode = levelScenes[levelIndex].instance()
  47. add_child(levelCurrentNode)
  48. # Retrieve player spawn points
  49. var spawners = get_tree().get_nodes_in_group("spawn")
  50. # Create players
  51. var player
  52. for k in 2:
  53. player = playerScene.instance()
  54. player.grid = levelCurrentNode
  55. player.turn_left_action = playerActionsLeft[k]
  56. player.turn_right_action = playerActionsRight[k]
  57. player.position = spawners[k].position
  58. player.rotation = spawners[k].rotation
  59. add_child(player)
  60. # Delay start
  61. timer.start()
  62. func _on_game_start():
  63. get_tree().call_group("players", "_on_game_start")