141 lines
3.9 KiB
GDScript3
141 lines
3.9 KiB
GDScript3
|
extends Control
|
||
|
|
||
|
var ServerCreateGameMenu = preload("res://scenes/menus/ServerCreateGameMenu.tscn")
|
||
|
var LobbyMenu = preload("res://scenes/menus/LobbyMenu.tscn")
|
||
|
var DirectHostMenu = preload("res://scenes/menus/DirectHostMenu.tscn")
|
||
|
var DirectJoinMenu = preload("res://scenes/menus/DirectJoinMenu.tscn")
|
||
|
|
||
|
onready var games_list = get_node("menu/games")
|
||
|
var games = []
|
||
|
var selected_game = {}
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
get_node("menu/back").connect("pressed",self,"_on_back_pressed")
|
||
|
client.connect("connection_succeeded", self, "_connection_succeeded")
|
||
|
client.connect("connection_failed", self, "_connection_failed")
|
||
|
client.connect("server_disconnected", self, "_server_disconnected")
|
||
|
|
||
|
|
||
|
func _draw():
|
||
|
find_node("refresh").grab_focus()
|
||
|
|
||
|
|
||
|
func _on_multiplayer_menu_draw():
|
||
|
get_games(find_node("open").is_pressed())
|
||
|
get_node("refresh_timer").start()
|
||
|
|
||
|
|
||
|
func _on_multiplayer_menu_hide():
|
||
|
get_node("refresh_timer").stop()
|
||
|
|
||
|
|
||
|
func _on_back_pressed():
|
||
|
queue_free()
|
||
|
get_tree().get_root().get_node("main_menu").show()
|
||
|
|
||
|
|
||
|
func _on_direct_host_pressed():
|
||
|
var direct_host_menu = DirectHostMenu.instance()
|
||
|
get_tree().get_root().add_child(direct_host_menu)
|
||
|
get_tree().get_root().get_node("main_menu").hide()
|
||
|
|
||
|
|
||
|
func _on_direct_join_pressed():
|
||
|
var direct_join_menu = DirectJoinMenu.instance()
|
||
|
get_tree().get_root().add_child(direct_join_menu)
|
||
|
get_tree().get_root().get_node("main_menu").hide()
|
||
|
|
||
|
|
||
|
func _on_open_toggled(button_pressed):
|
||
|
get_games(button_pressed)
|
||
|
|
||
|
|
||
|
func _on_refresh_pressed():
|
||
|
if get_node("refresh_timer").is_stopped():
|
||
|
get_node("refresh_timer").start()
|
||
|
get_games(find_node("open").is_pressed())
|
||
|
|
||
|
|
||
|
func _on_refresh_timer_timeout():
|
||
|
get_games(find_node("open").is_pressed())
|
||
|
|
||
|
|
||
|
func _server_disconnected():
|
||
|
show_error_dialog(tr("SERVER_DISCONNECTED"))
|
||
|
|
||
|
|
||
|
func show_error_dialog(text:String):
|
||
|
var dialog = get_node("error_dialog")
|
||
|
dialog.set_text(text)
|
||
|
dialog.popup_centered()
|
||
|
|
||
|
|
||
|
func get_games(only_open:bool):
|
||
|
var req = game_server.http()
|
||
|
req.connect_http(self,"_on_get_games")
|
||
|
if only_open:
|
||
|
req.get_request('client/games?open')
|
||
|
else:
|
||
|
req.get_request('client/games')
|
||
|
|
||
|
|
||
|
func _on_get_games(result, response_code, headers, body):
|
||
|
if result == OK && response_code == HTTPClient.RESPONSE_OK:
|
||
|
find_node("create").set_disabled(false)
|
||
|
find_node("open").set_disabled(false)
|
||
|
var json = JSON.parse(body.get_string_from_utf8())
|
||
|
games_list.clear()
|
||
|
games = json.result
|
||
|
for game in games:
|
||
|
var name = game.name
|
||
|
name += " ("
|
||
|
name += str(game.player_count)
|
||
|
name += "/4)"
|
||
|
if game.bots:
|
||
|
name += " [with Bots]"
|
||
|
games_list.add_item(name)
|
||
|
if game.running:
|
||
|
games_list.set_item_icon(games_list.get_item_count()-1, games_list.get_node("running_icon").get_button_icon())
|
||
|
elif game.has('private') && game.private:
|
||
|
games_list.set_item_icon(games_list.get_item_count()-1, games_list.get_node("private_icon").get_button_icon())
|
||
|
else:
|
||
|
games_list.set_item_icon(games_list.get_item_count()-1, games_list.get_node("open_icon").get_button_icon())
|
||
|
else:
|
||
|
find_node("create").set_disabled(true)
|
||
|
find_node("join").set_disabled(true)
|
||
|
find_node("open").set_disabled(true)
|
||
|
show_error_dialog(tr("SERVER_NO_CONNECTION"))
|
||
|
get_node("refresh_timer").stop()
|
||
|
|
||
|
|
||
|
func _on_create_pressed():
|
||
|
var server_create_game_menu = ServerCreateGameMenu.instance()
|
||
|
get_tree().get_root().add_child(server_create_game_menu)
|
||
|
get_tree().get_root().get_node("main_menu").hide()
|
||
|
|
||
|
|
||
|
func _on_join_pressed():
|
||
|
client.join_game(game_server.SERVER_ADDR, int(selected_game['port']))
|
||
|
|
||
|
|
||
|
func _connection_succeeded():
|
||
|
var lobby_menu = LobbyMenu.instance()
|
||
|
if selected_game && selected_game.has('name'):
|
||
|
gamestate.game_name = selected_game.name
|
||
|
get_tree().get_root().add_child(lobby_menu)
|
||
|
get_node("refresh_timer").stop()
|
||
|
hide()
|
||
|
|
||
|
|
||
|
func _connection_failed():
|
||
|
show_error_dialog(tr("CONNECTION_FAILED"))
|
||
|
|
||
|
|
||
|
func _on_games_item_selected(index):
|
||
|
selected_game = games[index]
|
||
|
find_node("join").set_disabled(false)
|
||
|
|
||
|
|
||
|
func _on_games_nothing_selected():
|
||
|
find_node("join").set_disabled(true)
|