initial starter deck added. the turn rotation works sometimes

This commit is contained in:
2023-06-11 02:08:09 +10:00
parent f2028527b5
commit 8bc39d9d74
24 changed files with 391 additions and 135 deletions

View File

@ -8,6 +8,7 @@ signal chat_message_submitted(String)
@onready var ready_label = $CanvasLayer/UI/HBoxContainer/LobbyReadyLabel
@onready var canvas = $CanvasLayer
@onready var chat_box = $CanvasLayer/UI/VBoxContainer/RichTextLabel
var game_started = false
func _ready() -> void:
@ -17,12 +18,12 @@ func _ready() -> void:
$Camera2D.make_current()
@rpc("call_local")
@rpc("call_local", "reliable")
func ready_self():
ready_button_pressed.emit(player_info["id"])
@rpc("any_peer", "call_local")
@rpc("any_peer", "call_local", "reliable")
func update_ready_label(readied_players, total_players):
if readied_players == total_players:
ready_label.visible = false
@ -32,6 +33,7 @@ func update_ready_label(readied_players, total_players):
func _on_lobby_ready_button_pressed() -> void:
rpc("ready_self")
ready_button.visible = false
rpc("end_turn")
func add_chat_line(line: String) -> void:
@ -55,3 +57,18 @@ func select_card(card):
func _on_confirm_pressed() -> void:
$CanvasLayer/UI/Confirm.visible = false
rpc("confirm_draft")
func start_turn():
super()
func select_workspace(workspace):
super(workspace)
ready_button.visible = true
@rpc("call_local", "reliable")
func confirm_draft():
super()
ready_button.visible = true

View File

@ -3,12 +3,18 @@ extends Node
signal workers_discarded
signal workers_kept
signal turn_finished
signal round_finished
var player_info
@export var hand_position: Node2D
@export var client_position: Vector2
var hand = []
var draft_picked = []
var draft_pick_amount = 0
var reputation_points = 0
var board: PlayerBoard
var current_client: Client
func draft(cards, pick):
@ -32,7 +38,15 @@ func select_card(card):
card.slide_to_position(card.position.x, card.position.y + 50.0, 0.0, 0.1)
@rpc("call_local")
func select_workspace(workspace):
if current_client == null:
return
workspace.add_client(current_client)
current_client = null
rpc("end_turn")
@rpc("call_local", "reliable")
func confirm_draft():
var discarded_cards = []
var kept_cards = []
@ -41,5 +55,23 @@ func confirm_draft():
discarded_cards.append(card.get_path())
else:
kept_cards.append(card.get_path())
card.card_clicked.disconnect(select_card)
workers_discarded.emit(discarded_cards)
workers_kept.emit(kept_cards)
draft_picked = []
hand = []
draft_pick_amount = 0
func start_turn():
current_client = board.shift_deck.draw_card()
if current_client == null:
round_finished.emit()
return
current_client.slide_to_position(board.global_position.x, board.global_position.y, 0.0, 0.3)
current_client.turn_front()
@rpc("call_local", "reliable")
func end_turn():
turn_finished.emit()

View File

@ -1,6 +1,8 @@
class_name Client
extends Card
signal time_slots_selected
enum difficulties {EASY, MEDIUM, HARD}
var icon_prefab = preload("res://Scenes/bonus_icon.tscn")
@ -11,10 +13,12 @@ var turns_left = 4
var time_slots = [true, true, false, true]
var icon_list = []
func _process(delta):
if sliding:
slide(delta)
func setup(_title, _initial_stress, _time_slots, _services):
if _title != "":
title = _title
@ -38,20 +42,20 @@ func setup(_title, _initial_stress, _time_slots, _services):
difficulty = difficulties.MEDIUM
6, 7:
difficulty = difficulties.HARD
$Background/Slice1.visible = false
$Background/Slice2.visible = false
$Background/Slice3.visible = false
$Background/Slice4.visible = false
$front/Slice1.visible = false
$front/Slice2.visible = false
$front/Slice3.visible = false
$front/Slice4.visible = false
if time_slots[0] == true:
$Background/Slice1.visible = true
$front/Slice1.visible = true
if time_slots[1] == true:
$Background/Slice2.visible = true
$front/Slice2.visible = true
if time_slots[2] == true:
$Background/Slice3.visible = true
$front/Slice3.visible = true
if time_slots[3] == true:
$Background/Slice4.visible = true
$Background/Title.text = str(title)
$"Background/Initial Stress".text = str(initial_stress)
$front/Slice4.visible = true
$front/Title.text = str(title)
$"front/Initial Stress".text = str(initial_stress)
for x in icon_list:
x.queue_free()
icon_list = []
@ -97,18 +101,28 @@ func setup(_title, _initial_stress, _time_slots, _services):
icon_list[x].set_service(services[x])
else:
icon_list[x].visible = false
func show_time_selector():
$Control.visible = true
func update_counter():
$"Background/Turns Left Counter".text = str(turns_left)
signal time_slots_selected
func _on_turn_pressed(num):
turns_left = num
update_counter()
$Control.visible = false
time_slots_selected.emit()
func turn_front():
$back.visible = false
$front.visible = true
func turn_back():
$back.visible = true
$front.visible = false

View File

@ -37,6 +37,8 @@ func _on_area_2d_mouse_exited() -> void:
func draw_card() -> Card:
if cards.size() == 0:
return null
return cards.pop_back()

View File

@ -23,7 +23,10 @@ const CLIENT_DECK_SAVE_PATH = "user://client_deck.json"
var networked_controllers: Array[HumanController] = []
var current_player := 0
var players: Array[PlayerController] = []
var player_boards: Array[PlayerBoard] = []
var readied_players: Array[int] = []
var round_number := 0
var turn_number := 0
var _worker_scene = preload("res://Scenes/worker_card.tscn")
var _client_scene = preload("res://Scenes/client_card.tscn")
@ -75,7 +78,7 @@ func _load_clients():
client_deck.shuffle()
@rpc #Called by the network lobby code
@rpc("reliable") #Called by the network lobby code
func add_player(id: int, username: String, type: PlayerType) -> void:
if players.size() > 4:
return
@ -105,17 +108,26 @@ func add_player(id: int, username: String, type: PlayerType) -> void:
player_info["id"] = id
player_info["username"] = username
controller.player_info = player_info
board.player_info = player_info
PlayerType.BOT:
controller = _bot_scene.instantiate()
controller.name = str(id)
controller.set_multiplayer_authority(id)
board.add_child(controller)
controller.client_position = board.position
controller.board = board
board.slots[0].clicked.connect(controller.select_workspace)
board.slots[1].clicked.connect(controller.select_workspace)
board.slots[2].clicked.connect(controller.select_workspace)
board.slots[3].clicked.connect(controller.select_workspace)
board.name = "board " + str(player_boards.size())
player_boards.append(board)
players.append(controller)
for player in networked_controllers:
player.rpc("update_ready_label", readied_players.size(), players.size())
@rpc("call_local", "any_peer") #called from message() by player signals
@rpc("call_local", "any_peer", "reliable") #called from message() by player signals
func relay_chat_message(msg):
for player in networked_controllers:
player.add_chat_line(msg)
@ -128,14 +140,20 @@ func message(msg):
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", readied_players.size(), players.size())
if readied_players.size() == players.size() and is_multiplayer_authority():
if round_number == 0:
rpc("start_game")
else:
rpc("start_round")
@rpc("call_local", "reliable")
func start_game():
#Only the host should shuffle the decks
readied_players = []
round_number += 1
if is_multiplayer_authority():
randomize()
var deck_order = []
@ -148,19 +166,40 @@ func start_game():
rpc("send_client_order", deck_order)
for player in players:
rpc("draft_workers", player.player_info["username"], 4, 2)
rpc("draft_clients", player.player_info["username"])
@rpc
@rpc("call_local", "reliable")
func start_round():
readied_players = []
round_number += 1
turn_number = 0
if is_multiplayer_authority():
rpc("start_turn")
@rpc("call_local", "reliable")
func start_turn():
turn_number += 1
for x in players.size():
#players[x].rpc("start_turn")
players[x].start_turn()
await players[x].turn_finished
if is_multiplayer_authority():
rpc("start_turn")
@rpc("reliable")
func send_worker_order(node_paths):
worker_deck.order(node_paths)
@rpc
@rpc("reliable")
func send_client_order(node_paths):
client_deck.order(node_paths)
@rpc("call_local")
@rpc("call_local", "reliable")
func draft_workers(player, draw_amount, pick_amount):
var cards = []
for x in draw_amount:
@ -170,8 +209,24 @@ func draft_workers(player, draw_amount, pick_amount):
x.draft(cards, pick_amount)
@rpc("call_local")
@rpc("call_local", "reliable")
func discard_workers(node_paths):
for path in node_paths:
var card = get_node(path)
worker_discard.place(card)
@rpc("call_local", "reliable")
func draft_clients(player):
var cards = []
for x in 2 + (2 * round_number):
cards.append(client_deck.draw_card())
for x in player_boards:
if x.player_info["username"] == player:
for card in cards:
x.shift_deck.place(card)
@rpc("call_local", "reliable")
func discard_clients(_node_paths):
pass

View File

@ -13,19 +13,23 @@ var enet_peer = ENetMultiplayerPeer.new()
var game : Game
var players_connected = 0
@export var username_field: LineEdit
@export var IP_field: LineEdit
@export var Port_field: LineEdit
func _ready() -> void:
game = game_scene.instantiate() as Game
func host_server() -> void:
if $UI/Username.text == "":
if username_field.text == "":
return
$UI.visible = false
$CanvasLayer/Control/UI.visible = false
enet_peer.create_server(SERVER_PORT, MAX_PLAYERS)
multiplayer.multiplayer_peer = enet_peer
add_child(game)
player_info[1] = $UI/Username.text
player_info[1] = username_field.text
add_player(1, player_info[1])
multiplayer.peer_connected.connect(
@ -35,15 +39,15 @@ func host_server() -> void:
func connect_to_server() -> void:
if $UI/Username.text == "":
if username_field.text == "":
return
$UI.visible = false
var ip = $UI/IPField.text if $UI/IPField.text != "" else $UI/IPField.placeholder_text
var port = $UI/PortField.text if $UI/PortField.text != "" else $UI/PortField.placeholder_text
$CanvasLayer/Control/UI.visible = false
var ip = IP_field.text if IP_field.text != "" else IP_field.placeholder_text
var port = Port_field.text if Port_field.text != "" else Port_field.placeholder_text
enet_peer.create_client(ip, int(port))
multiplayer.multiplayer_peer = enet_peer
add_child(game)
player_info[multiplayer.get_unique_id()] = $UI/Username.text
player_info[multiplayer.get_unique_id()] = username_field.text
func add_player(peer_id, username):
@ -51,12 +55,12 @@ func add_player(peer_id, username):
game.add_player(peer_id, username, game.PlayerType.HUMAN)
@rpc("any_peer")
@rpc("any_peer", "reliable")
func add_new_player(peer_id, username):
add_player(peer_id, username)
@rpc
@rpc("reliable")
func add_previous_players(players):
for key in players:
if players[key] == player_info[multiplayer.get_unique_id()]:

View File

@ -1,5 +1,8 @@
class_name Workspace
extends Node2D
signal clicked(Workspace)
var worker: Worker
var client: Client
@ -20,3 +23,8 @@ func add_client(card: Client) -> bool:
client = card
client.slide_to_position(_c_pos.x, _c_pos.y, 0, 0.2)
return true
func _on_area2d_input_event(_viewport: Node, event: InputEvent, _shape_idx: int) -> void:
if event is InputEventMouseButton and event.pressed and worker != null:
emit_signal("clicked", self)