108 lines
3 KiB
GDScript
108 lines
3 KiB
GDScript
extends Control
|
|
|
|
onready var is_loaded = false
|
|
|
|
onready var lobbies_grid = $v/body/p/lobbies
|
|
onready var zero_state = $v/body/p/lobbies/zero_state
|
|
onready var lobbies_label = $v/subhead/label
|
|
onready var display_name_edit = $v/subhead/display_name
|
|
|
|
onready var lobbies = {}
|
|
|
|
onready var lobby = preload("res://objects/lobby.tscn")
|
|
|
|
func _ready():
|
|
display_name_edit.text = Global.client.display_name
|
|
Global.client.connect("lobby_data", self, "_lobby_data")
|
|
Global.client.connect("lobby_delete", self, "_lobby_delete")
|
|
Global.client.connect("lobby_begin_join", self, "_lobby_begin_join")
|
|
Global.client.connect("lobby_left", self, "_lobby_left")
|
|
Global.client.connect("signaller_connected", self, "_signaller_connected")
|
|
Global.client.connect("signaller_disconnected", self, "_signaller_disconnected")
|
|
if Global.client.is_signaller_connected():
|
|
_signaller_connected()
|
|
else:
|
|
Global.client.connect_to_signaller()
|
|
|
|
# TODO: add search
|
|
func _input(ev):
|
|
pass
|
|
# if ev is InputEventKey and ev.pressed:
|
|
# if ev.scancode == KEY_T:
|
|
# var ls = []
|
|
# for n in range(5):
|
|
# var j = n + lobbies.size()
|
|
# ls.push_back({id = j, name = j, currentPlayers = j, maxPlayers = j, locked = false})
|
|
# call_deferred("_lobby_new", ls)
|
|
|
|
func _signaller_disconnected():
|
|
Global.main_menu()
|
|
|
|
func _signaller_connected():
|
|
print("Lobby Browser: Signaller Connected")
|
|
if Global.check_onetime_flag("create-lobby"):
|
|
call_deferred("_on_create_lobby_pressed")
|
|
else:
|
|
Global.client.request_lobby_list()
|
|
|
|
func _lobby_begin_join(data):
|
|
print("Joining Lobby: %s" % data)
|
|
Global.lobby()
|
|
|
|
func _lobby_left(_uuid):
|
|
Global.lobby_browser()
|
|
|
|
func _on_back_pressed():
|
|
Global.main_menu()
|
|
|
|
func _on_create_lobby_pressed():
|
|
Global.lobby()
|
|
Global.client.create_lobby()
|
|
|
|
func _lobby_data(new_lobbies: Array):
|
|
for l in new_lobbies:
|
|
if lobbies.has(l.uuid): _update_lobby(l.uuid, l)
|
|
else: _add_lobby(l.uuid, l)
|
|
|
|
if Global.check_onetime_flag("join-first-available-lobby"):
|
|
Global.client.join_lobby(l.uuid)
|
|
|
|
func _lobby_delete(uuid: String):
|
|
print("Lobby Deleted: %s" % uuid)
|
|
_delete_lobby(uuid)
|
|
|
|
func _add_lobby(uuid, lobby_data):
|
|
call_deferred("_update_lobbies_text")
|
|
print("New Lobby ", lobby_data)
|
|
# if lobby_data.currentPlayers > 0:
|
|
var new_lobby = lobby.instance()
|
|
new_lobby.set_with_dict(lobby_data)
|
|
lobbies_grid.add_child(new_lobby)
|
|
lobbies[uuid] = new_lobby
|
|
|
|
func _update_lobby(uuid, lobby_data):
|
|
call_deferred("_update_lobbies_text")
|
|
print("Updated Lobby ", lobby_data)
|
|
lobbies[uuid].set_with_dict(lobby_data)
|
|
|
|
func _delete_lobby(uuid):
|
|
call_deferred("_update_lobbies_text")
|
|
if lobbies.has(uuid):
|
|
print("Removing lobby...")
|
|
lobbies_grid.remove_child(lobbies[uuid])
|
|
lobbies[uuid].queue_free()
|
|
lobbies.erase(uuid)
|
|
|
|
func _update_lobbies_text():
|
|
var n = lobbies.size()
|
|
lobbies_label.text = "Active Lobbies: %d" % n
|
|
if n < 1:
|
|
if !lobbies_grid.is_a_parent_of(zero_state):
|
|
lobbies_grid.add_child(zero_state)
|
|
if n > 0:
|
|
if lobbies_grid.is_a_parent_of(zero_state):
|
|
lobbies_grid.remove_child(zero_state)
|
|
|
|
func _on_display_name_text_changed(new_text):
|
|
Global.client.display_name = new_text
|