shuffle and team control

This commit is contained in:
Rendo 2025-12-12 17:20:19 +05:00
commit 13cfa692ce
4 changed files with 59 additions and 10 deletions

View file

@ -78,7 +78,7 @@ func set_teams(attack: Array[int],defence: Array[int],spectators: Array[int]):
set_teams.rpc(attack,defence,spectators)
func switch_team(team: int) -> void:
team_switch_notification.rpc(multiplayer.get_unique_id(),team)
team_switch_notification.rpc_id(1,team)
func swap_teams() -> void:
if not is_multiplayer_authority():
@ -86,10 +86,41 @@ func swap_teams() -> void:
set_teams(defence_team,attack_team,specators_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):
func shuffle_teams() -> void:
if not is_multiplayer_authority():
return
var peers: Array = Array(multiplayer.get_peers())
peers.append(1)
var new_attack_team: Array[int] = []
var new_defence_team: Array[int] = []
var new_spectator_team: Array[int] = []
while len(new_attack_team) < 5 and len(new_defence_team) < 5:
if len(peers) == 0:
break
var picked_peer = peers.pop_at(randi_range(0,len(peers)-1))
var picked_team = randi_range(0,1)
match picked_team:
Session.TEAMS.DEFENCE:
if len(new_defence_team) < 5:
new_defence_team.append(picked_peer)
else:
new_attack_team.append(picked_peer)
Session.TEAMS.ATTACK:
if len(new_attack_team) < 5:
new_attack_team.append(picked_peer)
else:
new_defence_team.append(picked_peer)
new_spectator_team.append_array(peers)
set_teams(new_attack_team,new_defence_team,new_spectator_team)
@rpc("any_peer","call_local","reliable")
func team_switch_notification(team: int) -> void:
if not is_multiplayer_authority() or (team == Session.TEAMS.DEFENCE and len(defence_team) > 4) or (team == Session.TEAMS.ATTACK and len(attack_team) > 4) or not LobbySettings.allow_team_switch:
return
var id: int = multiplayer.get_remote_sender_id()
if team == Session.TEAMS.DEFENCE:
if attack_team.has(id):
attack_team.erase(id)
@ -110,8 +141,9 @@ func team_switch_notification(id: int, team: int) -> void:
elif defence_team.has(id):
defence_team.erase(id)
specators_team.append(id)
update_teams_state.emit()
set_teams.rpc(attack_team,defence_team,specators_team)
func start_game() -> void:
if not multiplayer.is_server():
@ -129,7 +161,3 @@ func get_team() -> Session.TEAMS:
if specators_team.has(id):
return Session.TEAMS.SPECTATE
return Session.TEAMS.UNASSIGNED
@rpc("authority","call_local","reliable")
func update_peers():
update_teams_state.emit()

View file

@ -6,3 +6,4 @@ var bomb_time: float = 45.0
var buy_time: float = 15.0
var round_time: float = 150.0
var allow_multiple_abilities: bool = false
var allow_team_switch: bool = true