Teams in lobby
This commit is contained in:
parent
6d34205ba2
commit
787de0ab09
6 changed files with 210 additions and 43 deletions
|
|
@ -1,28 +0,0 @@
|
|||
extends Node
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
multiplayer.peer_connected.connect(on_peer_connected)
|
||||
multiplayer.peer_disconnected.connect(on_peer_disconnected)
|
||||
Lobby.lobby_created.emit(add_self)
|
||||
Lobby.lobby_joined.emit(add_self)
|
||||
Lobby.lobby_closed.emit(clear)
|
||||
|
||||
func on_peer_connected(id: int) -> void:
|
||||
var label = Label.new()
|
||||
label.text = str(id)
|
||||
label.name = str(id)
|
||||
add_child(label,true)
|
||||
|
||||
func on_peer_disconnected(id: int) -> void:
|
||||
get_node(str(id)).queue_free()
|
||||
|
||||
func add_self() -> void:
|
||||
var label = Label.new()
|
||||
label.text = str(multiplayer.get_unique_id())
|
||||
label.name = str(multiplayer.get_unique_id())
|
||||
add_child(label,true)
|
||||
|
||||
func clear() -> void:
|
||||
for child in get_children():
|
||||
child.queue_free()
|
||||
|
|
@ -1 +0,0 @@
|
|||
uid://cl3hhmw5666sj
|
||||
|
|
@ -1,13 +1,38 @@
|
|||
extends Node
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Lobby.lobby_joined.connect(hide_host_buttons)
|
||||
Lobby.lobby_created.connect(show_host_buttons)
|
||||
Lobby.lobby_closed.connect(cleanup_lobby)
|
||||
Lobby.update_teams_state.connect(on_player_switched_team)
|
||||
|
||||
func _on_leave_button_pressed() -> void:
|
||||
Lobby.leave()
|
||||
cleanup_lobby()
|
||||
|
||||
func cleanup_lobby() -> void:
|
||||
$Lobby.hide()
|
||||
$MainMenu.show()
|
||||
%JoinAttackButton.show()
|
||||
%JoinDefenceButton.show()
|
||||
%JoinSpectatorsButton.hide()
|
||||
|
||||
|
||||
func _on_start_button_pressed() -> void:
|
||||
Lobby.start_game.rpc()
|
||||
|
||||
func hide_host_buttons() -> void:
|
||||
%StartButton.hide()
|
||||
|
||||
func show_host_buttons() -> void:
|
||||
%StartButton.show()
|
||||
|
||||
func _on_host_button_pressed() -> void:
|
||||
Lobby.host()
|
||||
$MainMenu.hide()
|
||||
$Lobby.show()
|
||||
|
||||
|
||||
func _on_connect_button_pressed() -> void:
|
||||
var ip = $MainMenu/VBoxContainer/LineEdit.text
|
||||
if ip == "":
|
||||
|
|
@ -17,3 +42,53 @@ func _on_connect_button_pressed() -> void:
|
|||
return
|
||||
$MainMenu.hide()
|
||||
$Lobby.show()
|
||||
|
||||
func on_player_switched_team():
|
||||
%JoinAttackButton.hide()
|
||||
%JoinDefenceButton.hide()
|
||||
%JoinSpectatorsButton.visible = Lobby.specators_team.has(multiplayer.get_unique_id()) == false
|
||||
if Lobby.attack_team.size() < 5 and not Lobby.attack_team.has(multiplayer.get_unique_id()):
|
||||
%JoinAttackButton.show()
|
||||
if Lobby.defence_team.size() < 5 and not Lobby.defence_team.has(multiplayer.get_unique_id()):
|
||||
%JoinDefenceButton.show()
|
||||
|
||||
for child in %AttackTeam.get_children():
|
||||
if child.name == "TeamName":
|
||||
continue
|
||||
child.queue_free()
|
||||
|
||||
for child in %DefenceTeam.get_children():
|
||||
if child.name == "TeamName":
|
||||
continue
|
||||
child.queue_free()
|
||||
|
||||
for child in %SpectatorsTeam.get_children():
|
||||
if child.name == "TeamName":
|
||||
continue
|
||||
child.queue_free()
|
||||
|
||||
for attacker in Lobby.attack_team:
|
||||
var label = Label.new()
|
||||
label.text = str(attacker)
|
||||
%AttackTeam.add_child(label)
|
||||
|
||||
for defender in Lobby.defence_team:
|
||||
var label = Label.new()
|
||||
label.text = str(defender)
|
||||
%DefenceTeam.add_child(label)
|
||||
|
||||
for spectator in Lobby.specators_team:
|
||||
var label = Label.new()
|
||||
label.text = str(spectator)
|
||||
%SpectatorsTeam.add_child(label)
|
||||
|
||||
func _on_join_attack_button_pressed() -> void:
|
||||
Lobby.switch_team(Session.TEAMS.ATTACK)
|
||||
|
||||
|
||||
func _on_join_defence_button_pressed() -> void:
|
||||
Lobby.switch_team(Session.TEAMS.DEFENCE)
|
||||
|
||||
|
||||
func _on_join_spectators_button_pressed() -> void:
|
||||
Lobby.switch_team(Session.TEAMS.SPECTATE)
|
||||
|
|
|
|||
|
|
@ -7,12 +7,35 @@ const PORT: int = 7777
|
|||
signal lobby_created
|
||||
signal lobby_joined
|
||||
signal lobby_closed
|
||||
signal update_teams_state
|
||||
|
||||
var attack_team: Array[int] = []
|
||||
var defence_team: Array[int] = []
|
||||
var specators_team: Array[int] = []
|
||||
|
||||
func _ready() -> void:
|
||||
multiplayer.peer_disconnected.connect(player_left)
|
||||
multiplayer.server_disconnected.connect(server_disconnected)
|
||||
multiplayer.peer_connected.connect(add_and_sync_peer)
|
||||
|
||||
func player_left(id: int) -> void:
|
||||
if attack_team.has(id):
|
||||
attack_team.erase(id)
|
||||
elif defence_team.has(id):
|
||||
defence_team.erase(id)
|
||||
elif specators_team.has(id):
|
||||
specators_team.erase(id)
|
||||
update_teams_state.emit()
|
||||
|
||||
func server_disconnected() -> void:
|
||||
leave()
|
||||
|
||||
func host() -> void:
|
||||
var peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
||||
peer.create_server(PORT,MAX_PLAYERS)
|
||||
multiplayer.multiplayer_peer = peer
|
||||
lobby_created.emit()
|
||||
specators_team.append(multiplayer.get_unique_id())
|
||||
|
||||
func join(ip: String) -> Error:
|
||||
var peer: ENetMultiplayerPeer = ENetMultiplayerPeer.new()
|
||||
|
|
@ -25,8 +48,55 @@ func join(ip: String) -> Error:
|
|||
|
||||
func leave() -> void:
|
||||
multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
|
||||
attack_team.clear()
|
||||
defence_team.clear()
|
||||
specators_team.clear()
|
||||
lobby_closed.emit()
|
||||
|
||||
func add_and_sync_peer(id: int) -> void:
|
||||
if multiplayer.is_server() == false:
|
||||
return
|
||||
specators_team.append(id)
|
||||
update_teams_state.emit()
|
||||
set_teams.rpc_id(id,attack_team,defence_team,specators_team)
|
||||
|
||||
@rpc("any_peer","call_remote","reliable")
|
||||
func set_teams(attack: Array[int],defence: Array[int],spectators: Array[int]):
|
||||
attack_team = attack
|
||||
defence_team = defence
|
||||
specators_team = spectators
|
||||
update_teams_state.emit()
|
||||
|
||||
func switch_team(team: int) -> void:
|
||||
team_switch_notification.rpc(multiplayer.get_unique_id(),team)
|
||||
|
||||
@rpc("any_peer","call_local","reliable")
|
||||
func team_switch_notification(id: int, team: int) -> void:
|
||||
if (team == Session.TEAMS.DEFENCE and len(defence_team) > 4) or (team == Session.TEAMS.ATTACK and len(attack_team) > 4):
|
||||
return
|
||||
if team == Session.TEAMS.DEFENCE:
|
||||
if attack_team.has(id):
|
||||
attack_team.erase(id)
|
||||
if specators_team.has(id):
|
||||
specators_team.erase(id)
|
||||
defence_team.append(id)
|
||||
|
||||
if team == Session.TEAMS.ATTACK:
|
||||
if defence_team.has(id):
|
||||
defence_team.erase(id)
|
||||
if specators_team.has(id):
|
||||
specators_team.erase(id)
|
||||
attack_team.append(id)
|
||||
|
||||
if team == Session.TEAMS.SPECTATE:
|
||||
if attack_team.has(id):
|
||||
attack_team.erase(id)
|
||||
elif defence_team.has(id):
|
||||
defence_team.erase(id)
|
||||
specators_team.append(id)
|
||||
|
||||
update_teams_state.emit()
|
||||
|
||||
@rpc("authority","call_local","reliable")
|
||||
func start_game() -> void:
|
||||
get_tree().change_scene_to_file("res://levels/prototype_scene.tscn")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue