summaryrefslogtreecommitdiff
path: root/Network/Lobby.gd
blob: 15f27bae3f88487edea6a3fcc19d4f559d34800e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
extends Control


func _ready():
	Network.connect("connection_succeeded", self, "_on_connection_succeeded")
	Network.connect("connection_failed", self, "_on_connection_failed")
	Network.connect("player_list_changed", self, "refresh_lobby")
	Network.connect("game_error", self, "_on_game_error")
	Network.connect("game_ended", self, "_on_game_ended")
	
	if OS.has_environment("USERNAME"):
		$Connect/Name.text = OS.get_environment("USERNAME")
	else:
		var desktop_path = OS.get_system_dir(0).replace("\\", "/").split("/")
		$Connect/Name.text = desktop_path[desktop_path.size() - 2]
	
	# show lobby if we're already connected somewhere
	if Network.peer != null:
		self._on_connection_succeeded()
		self.set_ip()
		self.refresh_lobby()


func disable_connect_buttons(is_disabled = true):
	$Connect/Host.disabled = is_disabled
	$Connect/Join.disabled = is_disabled


func refresh_lobby():
	var players = Network.players.values()
	var player = Network.player
	
	$Players/List.clear()
	$Players/List.add_item(player.name + " (You)")
	for p in players:
		$Players/List.add_item(p.name)
	
	$Players/Start.disabled = not get_tree().is_network_server()


func set_ip():
	for ip in IP.get_local_addresses():
		if ip.begins_with("192.168"):
			$Players/IP.text = ip
			break

func _on_connection_succeeded():
	$Connect.hide()
	$Players.show()


func _on_connection_failed():
	self.disable_connect_buttons()
	$Connect/Error.set_text("Connection failed!")


func _on_game_error(error):
	$ErrorDialog.dialog_text = error
	$ErrorDialog.popup_centered_minsize()
	self.disable_connect_buttons()


func _on_game_ended():
	self.show()
	$Connect.show()
	$Players.hide()
	self.disable_connect_buttons()


func _on_Host_pressed():
	$Connect.hide()
	$Players.show()
	$Connect/Error.text = ""
	
	self.set_ip()
	
	var player_name = $Connect/Name.text
	Network.host_game(player_name)
	self.refresh_lobby()


func _on_Join_pressed():
	var ip = $Connect/IP.text
	if not ip.is_valid_ip_address():
		$Connect/Error.text = "Invalid IP address!"
		return
	
	$Connect/Error.text = ""
	self.disable_connect_buttons(false)
	
	self.set_ip()
	var player_name = $Connect/Name.text
	Network.join_game(ip, player_name)


func _on_Start_pressed():
	Global.start_game()


func _on_Back_pressed():
	$Connect.show()
	$Players.hide()
	Network.leave_game()