main.gd 2.8 KB

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