main.gd 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. extends Control
  2. const DEF_PORT = 8080
  3. const PROTO_NAME = "ludus"
  4. var peer = null
  5. onready var _host_btn = $Panel/VBoxContainer/HBoxContainer2/HBoxContainer/Host
  6. onready var _connect_btn = $Panel/VBoxContainer/HBoxContainer2/HBoxContainer/Connect
  7. onready var _disconnect_btn = $Panel/VBoxContainer/HBoxContainer2/HBoxContainer/Disconnect
  8. onready var _name_edit = $Panel/VBoxContainer/HBoxContainer/NameEdit
  9. onready var _host_edit = $Panel/VBoxContainer/HBoxContainer2/Hostname
  10. onready var _game = $Panel/VBoxContainer/Game
  11. func _ready():
  12. #warning-ignore-all:return_value_discarded
  13. get_tree().connect("network_peer_disconnected", self, "_peer_disconnected")
  14. get_tree().connect("network_peer_connected", self, "_peer_connected")
  15. $AcceptDialog.get_label().align = Label.ALIGN_CENTER
  16. $AcceptDialog.get_label().valign = Label.VALIGN_CENTER
  17. # Set the player name according to the system username. Fallback to the path.
  18. if OS.has_environment("USERNAME"):
  19. _name_edit.text = OS.get_environment("USERNAME")
  20. else:
  21. var desktop_path = OS.get_system_dir(0).replace("\\", "/").split("/")
  22. _name_edit.text = desktop_path[desktop_path.size() - 2]
  23. func start_game():
  24. _host_btn.disabled = true
  25. _name_edit.editable = false
  26. _host_edit.editable = false
  27. _connect_btn.hide()
  28. _disconnect_btn.show()
  29. _game.start()
  30. func stop_game():
  31. _host_btn.disabled = false
  32. _name_edit.editable = true
  33. _host_edit.editable = true
  34. _disconnect_btn.hide()
  35. _connect_btn.show()
  36. _game.stop()
  37. func _close_network():
  38. if get_tree().is_connected("server_disconnected", self, "_close_network"):
  39. get_tree().disconnect("server_disconnected", self, "_close_network")
  40. if get_tree().is_connected("connection_failed", self, "_close_network"):
  41. get_tree().disconnect("connection_failed", self, "_close_network")
  42. if get_tree().is_connected("connected_to_server", self, "_connected"):
  43. get_tree().disconnect("connected_to_server", self, "_connected")
  44. stop_game()
  45. $AcceptDialog.show_modal()
  46. $AcceptDialog.get_close_button().grab_focus()
  47. get_tree().set_network_peer(null)
  48. func _connected():
  49. _game.rpc("set_player_name", _name_edit.text)
  50. func _peer_connected(id):
  51. _game.on_peer_add(id)
  52. func _peer_disconnected(id):
  53. _game.on_peer_del(id)
  54. func _on_Host_pressed():
  55. peer = WebSocketServer.new()
  56. peer.listen(DEF_PORT, PoolStringArray(["ludus"]), true)
  57. get_tree().connect("server_disconnected", self, "_close_network")
  58. get_tree().set_network_peer(peer)
  59. _game.add_player(1, _name_edit.text)
  60. start_game()
  61. func _on_Disconnect_pressed():
  62. if peer is WebSocketServer:
  63. peer.stop()
  64. elif peer is WebSocketClient:
  65. peer.disconnect_from_host()
  66. _close_network()
  67. func _on_Connect_pressed():
  68. peer = WebSocketClient.new()
  69. peer.connect_to_url("ws://" + _host_edit.text + ":" + str(DEF_PORT), PoolStringArray([PROTO_NAME]), true)
  70. get_tree().connect("connection_failed", self, "_close_network")
  71. get_tree().connect("connected_to_server", self, "_connected")
  72. get_tree().set_network_peer(peer)
  73. start_game()