ready buttons work

This commit is contained in:
2023-06-07 01:24:11 +10:00
parent 1fe252cc01
commit ef6f8497e2
7 changed files with 90 additions and 36 deletions

View File

@ -1,3 +1,25 @@
class_name HumanController
extends PlayerController
func _ready() -> void:
if not is_multiplayer_authority():
return
$Camera2D.make_current()
$UI.visible = true
@rpc("call_local")
func ready_player():
game.ready_player(own_id)
@rpc("any_peer")
func update_ready_label():
$UI/LobbyReadyLabel.text = str(game.readied_players.size()) + "/" + str(game.players.size())
func _on_lobby_ready_button_pressed() -> void:
rpc("ready_player")
$UI/LobbyReadyButton.visible = false
update_ready_label()

View File

@ -1,2 +1,6 @@
class_name PlayerController
extends Node
var game: Game
var board: PlayerBoard
var own_id: int

View File

@ -20,7 +20,9 @@ const CLIENT_DECK_SAVE_PATH = "user://client_deck.json"
@export var seat3: Node2D
@export var seat4: Node2D
var players = 0
var networked_controllers: Array[HumanController] = []
var players = []
var readied_players = []
var _worker_scene = preload("res://Scenes/worker_card.tscn")
var _client_scene = preload("res://Scenes/client_card.tscn")
@ -72,32 +74,49 @@ func _load_clients():
client_deck.shuffle()
@rpc
@rpc #Called by the network lobby code
func add_player(id: int, username: String, type: PlayerType) -> void:
if players >= 4:
if players.size() > 4:
return
if type == null:
type = PlayerType.HUMAN
var board = _player_scene.instantiate()
match players:
match players.size():
0:
board.position = seat1.position
board.global_position = seat1.position
1:
board.position = seat2.position
board.global_position = seat2.position
2:
board.position = seat3.position
board.global_position = seat3.position
3:
board.position = seat4.position
board.global_position = seat4.position
$Players.add_child(board)
var controller
match type:
PlayerType.HUMAN:
controller = _human_scene.instantiate()
networked_controllers.append(controller)
PlayerType.BOT:
controller = _bot_scene.instantiate()
controller.name = str(id)
controller.set_multiplayer_authority(id)
controller.get_node("UI/Label").text = str(username)
controller.own_id = id
controller.game = self as Game
controller.board = board as PlayerBoard
board.add_child(controller)
players += 1
players.append(id)
for player in networked_controllers:
player.rpc("update_ready_label")
func ready_player(id):
if not readied_players.has(id):
readied_players.append(id)
if readied_players.size() == players.size():
start_game()
for player in networked_controllers:
player.rpc("update_ready_label")
func start_game():
print("Game started!")