2021-12-06 21:56:37 -06:00
|
|
|
extends MarginContainer
|
2021-11-15 16:25:13 -06:00
|
|
|
|
2021-12-06 21:56:37 -06:00
|
|
|
onready var peers = $v/body/peers/peers
|
|
|
|
onready var lobby_info_label = $v/head/lobby_info
|
2021-12-07 09:32:20 -06:00
|
|
|
onready var peers_list_label = $v/body/peers/label
|
2021-12-02 15:13:12 -06:00
|
|
|
onready var cursors = {}
|
2021-12-07 09:32:20 -06:00
|
|
|
onready var chat = $v/body/v/messages
|
|
|
|
onready var chat_edit = $v/body/v/h/chat
|
2021-11-17 13:57:45 -06:00
|
|
|
|
2021-11-15 16:25:13 -06:00
|
|
|
func _ready():
|
2021-11-17 13:57:45 -06:00
|
|
|
Global.client.signaller.connect("peer_joined", self, "_peer_joined")
|
|
|
|
Global.client.signaller.connect("peer_left", self, "_peer_left")
|
2021-12-07 09:32:20 -06:00
|
|
|
Global.client.connect("peer_disconnected", self, "_peer_left")
|
2021-11-17 13:57:45 -06:00
|
|
|
Global.client.signaller.connect("lobby_left", self, "_lobby_left")
|
2021-12-07 09:32:20 -06:00
|
|
|
lobby_info_label.text = "%s%s" % [Global.client.signaller.lobby_name, _host_suffix(get_tree().get_network_unique_id())]
|
2021-11-17 16:24:00 -06:00
|
|
|
Global.client.signaller.connect("websocket_disconnected", self, "_signaller_disconnected")
|
2021-12-06 16:17:36 -06:00
|
|
|
Global.client.signaller.request_peer_list()
|
2021-12-07 09:32:20 -06:00
|
|
|
call_deferred("add_chat", "# Connected to %s" % Global.client.signaller.lobby_name)
|
|
|
|
|
|
|
|
func _host_suffix(id):
|
|
|
|
if id == 1:
|
|
|
|
return " (Host)"
|
|
|
|
else:
|
|
|
|
return ""
|
2021-12-06 16:17:36 -06:00
|
|
|
|
2021-11-17 16:24:00 -06:00
|
|
|
func _signaller_disconnected():
|
|
|
|
Global.main_menu()
|
|
|
|
|
2021-11-17 13:57:45 -06:00
|
|
|
func _peer_joined(joined_peers):
|
2021-12-07 09:32:20 -06:00
|
|
|
call_deferred("update_player_count")
|
2021-12-06 21:56:37 -06:00
|
|
|
print("Joined Peers: %s" % [joined_peers])
|
2021-11-17 13:57:45 -06:00
|
|
|
for i in range(len(joined_peers)):
|
|
|
|
var id = joined_peers[i]["id"]
|
2021-12-02 15:13:12 -06:00
|
|
|
var exists = false
|
|
|
|
for j in range(peers.get_item_count()):
|
2021-12-07 09:32:20 -06:00
|
|
|
var md = peers.get_item_metadata(j)
|
|
|
|
if md and md.has("id") and md["id"] == id:
|
2021-12-06 21:56:37 -06:00
|
|
|
print("Already have this one")
|
2021-12-02 15:13:12 -06:00
|
|
|
exists = true
|
|
|
|
break
|
2021-12-06 21:56:37 -06:00
|
|
|
if not exists:
|
2021-12-02 15:13:12 -06:00
|
|
|
var peerId = joined_peers[i]["peerId"]
|
|
|
|
var name = joined_peers[i]["name"]
|
|
|
|
print("New Lobby Peer ID: %s, Name: %s, PeerID: %s" % [id, name, peerId])
|
2021-12-07 09:32:20 -06:00
|
|
|
call_deferred("add_chat", "> %s joined the lobby" % name)
|
|
|
|
peers.add_item("%s%s" % [name, _host_suffix(peerId)])
|
|
|
|
peers.set_item_metadata(peers.get_item_count() - 1, { "id": id, "peerId": peerId, "name": name })
|
|
|
|
|
2021-12-06 16:27:16 -06:00
|
|
|
func _peer_left(ids):
|
2021-12-07 09:32:20 -06:00
|
|
|
call_deferred("update_player_count")
|
|
|
|
print("Peer(s) Leaving: %s" % ids)
|
2021-12-06 16:27:16 -06:00
|
|
|
for data in ids:
|
2021-12-07 09:32:20 -06:00
|
|
|
print(data)
|
2021-12-06 16:27:16 -06:00
|
|
|
var id = data["id"]
|
|
|
|
for i in range(peers.get_item_count()):
|
2021-12-07 09:32:20 -06:00
|
|
|
var md = peers.get_item_metadata(i)
|
|
|
|
if md and md.has("id") and md["id"] == id:
|
2021-12-06 16:27:16 -06:00
|
|
|
peers.remove_item(i)
|
2021-12-07 09:32:20 -06:00
|
|
|
call_deferred("add_chat", "< %s left the lobby" % md["name"])
|
2021-12-06 16:27:16 -06:00
|
|
|
return
|
2021-12-07 09:32:20 -06:00
|
|
|
|
|
|
|
func update_player_count():
|
|
|
|
peers_list_label.text = "Players: %d" % peers.get_item_count()
|
2021-11-15 16:25:13 -06:00
|
|
|
|
|
|
|
func _on_Button_pressed():
|
2021-12-07 09:32:20 -06:00
|
|
|
send_chat_message()
|
2021-11-17 13:57:45 -06:00
|
|
|
|
2021-12-07 09:32:20 -06:00
|
|
|
remotesync func add_chat(message):
|
|
|
|
chat.add_item(message)
|
2021-12-06 16:17:36 -06:00
|
|
|
|
2021-11-17 13:57:45 -06:00
|
|
|
func _lobby_left(_id):
|
|
|
|
Global.lobby_browser()
|
2021-12-02 15:13:12 -06:00
|
|
|
|
|
|
|
func _on_leave_button_pressed():
|
|
|
|
Global.lobby_browser()
|
2021-12-07 09:32:20 -06:00
|
|
|
|
|
|
|
func _on_TextEdit_text_entered(_new_text):
|
|
|
|
send_chat_message()
|
|
|
|
|
|
|
|
func send_chat_message():
|
|
|
|
rpc("add_chat", "%s: %s" % [Global.client.signaller.display_name, chat_edit.text])
|
|
|
|
chat_edit.text = ""
|