12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- extends Control
- const DEF_PORT = 8080
- const PROTO_NAME = "ludus"
- var peer = null
- onready var _host_btn = $Panel/VBoxContainer/HBoxContainer2/HBoxContainer/Host
- onready var _connect_btn = $Panel/VBoxContainer/HBoxContainer2/HBoxContainer/Connect
- onready var _disconnect_btn = $Panel/VBoxContainer/HBoxContainer2/HBoxContainer/Disconnect
- onready var _name_edit = $Panel/VBoxContainer/HBoxContainer/NameEdit
- onready var _host_edit = $Panel/VBoxContainer/HBoxContainer2/Hostname
- onready var _game = $Panel/VBoxContainer/Game
- func _ready():
- #warning-ignore-all:return_value_discarded
- get_tree().connect("network_peer_disconnected", self, "_peer_disconnected")
- get_tree().connect("network_peer_connected", self, "_peer_connected")
- $AcceptDialog.get_label().align = Label.ALIGN_CENTER
- $AcceptDialog.get_label().valign = Label.VALIGN_CENTER
- # Set the player name according to the system username. Fallback to the path.
- if OS.has_environment("USERNAME"):
- _name_edit.text = OS.get_environment("USERNAME")
- else:
- var desktop_path = OS.get_system_dir(0).replace("\\", "/").split("/")
- _name_edit.text = desktop_path[desktop_path.size() - 2]
- func start_game():
- _host_btn.disabled = true
- _name_edit.editable = false
- _host_edit.editable = false
- _connect_btn.hide()
- _disconnect_btn.show()
- _game.start()
- func stop_game():
- _host_btn.disabled = false
- _name_edit.editable = true
- _host_edit.editable = true
- _disconnect_btn.hide()
- _connect_btn.show()
- _game.stop()
- func _close_network():
- if get_tree().is_connected("server_disconnected", self, "_close_network"):
- get_tree().disconnect("server_disconnected", self, "_close_network")
- if get_tree().is_connected("connection_failed", self, "_close_network"):
- get_tree().disconnect("connection_failed", self, "_close_network")
- if get_tree().is_connected("connected_to_server", self, "_connected"):
- get_tree().disconnect("connected_to_server", self, "_connected")
- stop_game()
- $AcceptDialog.show_modal()
- $AcceptDialog.get_close_button().grab_focus()
- get_tree().set_network_peer(null)
- func _connected():
- _game.rpc("set_player_name", _name_edit.text)
- func _peer_connected(id):
- _game.on_peer_add(id)
- func _peer_disconnected(id):
- _game.on_peer_del(id)
- func _on_Host_pressed():
- peer = WebSocketServer.new()
- peer.listen(DEF_PORT, PoolStringArray(["ludus"]), true)
- get_tree().connect("server_disconnected", self, "_close_network")
- get_tree().set_network_peer(peer)
- _game.add_player(1, _name_edit.text)
- start_game()
- func _on_Disconnect_pressed():
- if peer is WebSocketServer:
- peer.stop()
- elif peer is WebSocketClient:
- peer.disconnect_from_host()
- _close_network()
- func _on_Connect_pressed():
- peer = WebSocketClient.new()
- peer.connect_to_url("ws://" + _host_edit.text + ":" + str(DEF_PORT), PoolStringArray([PROTO_NAME]), true)
- get_tree().connect("connection_failed", self, "_close_network")
- get_tree().connect("connected_to_server", self, "_connected")
- get_tree().set_network_peer(peer)
- start_game()
|