This repository has been archived on 2023-12-19. You can view files and clone it, but cannot push or open issues or pull requests.
MUR/scripts/menus/server_menu.gd

141 lines
3.9 KiB
GDScript

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.get_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)