diff --git a/cards/card_manager.gd b/cards/card_manager.gd index b137669..340f58f 100644 --- a/cards/card_manager.gd +++ b/cards/card_manager.gd @@ -8,9 +8,10 @@ enum CardStyle { } func _ready() -> void: - # wizard wins + # magician wins assert(get_winning_card([1, 2, 3, 59], -1) == 59) assert(get_winning_card([1, 2, 3, 59], 3) == 59) + assert(get_winning_card([57, 2, 3, 59], 3) == 57) # trump wins assert(get_winning_card([1, 14, 2, 3], 4) == 3) assert(get_winning_card([29, 14, 27, 31], 15) == 14) @@ -20,6 +21,8 @@ func _ready() -> void: # other wins assert(get_winning_card([14, 15, 18, 13], 16) == 18) assert(get_winning_card([14, 15, 18, 13], 46) == 18) + # trumpless win + assert(get_winning_card([28, 12, 31, 13], -1) == 31) func get_shuffled_cards(client_ids: Array[String], cards_to_pick: int) -> Dictionary: # Dictionary[String, Array[int]] var dict: Dictionary = {} @@ -71,7 +74,6 @@ func get_winning_card(card_ids: Array[int], trump: int) -> int: return largest_trump_card_id # no trump played; determine from highest played card - # TODO check for white cards here! return _get_largest_non_trump_card(card_ids) else: # no trump exists diff --git a/elements/player_hand.gd b/elements/player_hand.gd index 5210425..526f82e 100644 --- a/elements/player_hand.gd +++ b/elements/player_hand.gd @@ -7,49 +7,54 @@ var card_distance_max: float = 0.18 ## Distance cards will be apart when there is a large amount of them var card_distance_min: float = 0.09 +# Card distances for hands of other players +var _card_distance_max_others: float = 0.03 +var _card_distance_min_others: float = 0.01 + +var _is_owned: bool + ## How many test cards to add -@export_range(0, 20) var test_card_count: int = 0 @export var card_scene: PackedScene +@export var card_container: Node3D @export_range(0, 20, 0.1, "radians_as_degrees") var card_angle: float +@export var name_label: Label3D +@export var hide_client_name: bool = false + var _selected_card: PlayingCard = null signal card_selected(card_id: int) signal card_played(card_id: int) -#func _ready() -> void: - #_arrange_cards() - #var test_array: Array[int] - #for i in range(10): - #test_array.append(randi_range(0, 59)) - # - #add_cards(test_array, "") +func _ready() -> void: + if hide_client_name: + name_label.hide() func add_card(card: PlayingCard) -> void: - self.add_child(card) + card_container.add_child(card) _arrange_cards() -func add_cards(card_ids: Array[int], client_id: String) -> void: +func add_cards(card_ids: Array[int], is_owned: bool) -> void: + _is_owned = is_owned card_ids.sort() for card_id in card_ids: var card: PlayingCard = card_scene.instantiate() - if true: # if client_id == ... + if is_owned: card.card_clicked.connect(_on_card_clicked) card.setup_card_details(card_id) add_card(card) await get_tree().create_timer(0.16).timeout func remove_card(card: PlayingCard) -> void: - self.remove_child(card) + card_container.remove_child(card) card.queue_free() _arrange_cards() func _arrange_cards() -> void: - var cards = self.get_children() + var cards = card_container.get_children() # Only arrange cards if there are any! if cards.size() > 0: var card_distance: float = _get_card_distance(cards.size() - 1) - print(card_distance) var desired_width: float = (card_distance * (cards.size() - 1)) var card_position = -desired_width / 2.0 for card in cards: @@ -58,7 +63,10 @@ func _arrange_cards() -> void: card.rotation.y = card_angle func _get_card_distance(card_count: int) -> float: - return card_distance_min + ((card_distance_max - card_distance_min) * (1.0 - (float(card_count) / 19.0))) + if _is_owned: + return card_distance_min + ((card_distance_max - card_distance_min) * (1.0 - (float(card_count) / 19.0))) + else: + return _card_distance_min_others + ((_card_distance_max_others - _card_distance_min_others) * (1.0 - (float(card_count) / 19.0))) func _on_card_clicked(playing_card: PlayingCard) -> void: if _selected_card: @@ -80,6 +88,5 @@ func _on_play_card_button_pressed() -> void: card_played.emit(_selected_card.card_details.card_id) remove_card(_selected_card) - #_selected_card.unselect() _selected_card = null card_selected.emit(-1) diff --git a/elements/player_hand.tscn b/elements/player_hand.tscn index ba29ad7..550fbbe 100644 --- a/elements/player_hand.tscn +++ b/elements/player_hand.tscn @@ -3,8 +3,17 @@ [ext_resource type="Script" uid="uid://b5b5cl2qlhywv" path="res://elements/player_hand.gd" id="1_ank64"] [ext_resource type="PackedScene" uid="uid://b55xpcxk7g5ph" path="res://cards/playing_card.tscn" id="2_11xsc"] -[node name="PlayerHand" type="Node3D"] +[node name="PlayerHand" type="Node3D" node_paths=PackedStringArray("card_container", "name_label")] script = ExtResource("1_ank64") -test_card_count = 5 card_scene = ExtResource("2_11xsc") +card_container = NodePath("CardContainer") card_angle = 0.125664 +name_label = NodePath("NameLabel") + +[node name="NameLabel" type="Label3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.513717, 0) +billboard = 1 +double_sided = false +text = "name goes here" + +[node name="CardContainer" type="Node3D" parent="."] diff --git a/environment_manager.gd b/environment_manager.gd index 0e92478..3018205 100644 --- a/environment_manager.gd +++ b/environment_manager.gd @@ -69,26 +69,18 @@ func _on_web_client_tcp_client_order_received(client_ids: Array[String]) -> void hand = own_player_hand else: hand = player_hand_scene.instantiate() - self.add_child(hand) - var reference_marker = marker_positions[index - 1] - hand.global_position = reference_marker.global_position - hand.global_rotation = reference_marker.global_rotation + marker_positions[index - 1].add_child(hand) - #hand_associations[index] = PlayerHandAssociation.new( - #client_ids[index], - #hand.get_path(), - #) hand_associations[client_ids[index]] = hand func _on_web_client_tcp_received_client_id(client_id: String) -> void: _own_client_id = client_id - func _on_web_client_tcp_cards_received(cards: Dictionary) -> void: for client_id in cards.keys(): var card_ids: Array[int] card_ids.assign(cards[client_id]) - hand_associations[client_id].add_cards(card_ids, client_id) + hand_associations[client_id].add_cards(card_ids, client_id == _own_client_id) func _on_web_client_tcp_received_played_card(client_id: String, card_id: int) -> void: print(client_id + " played card " + str(card_id)) diff --git a/game.tscn b/game.tscn index f266a4b..588b57f 100644 --- a/game.tscn +++ b/game.tscn @@ -241,8 +241,8 @@ player_hand_scene = ExtResource("4_fc0e3") card_scene = ExtResource("6_eow3j") [node name="Camera3D" type="Camera3D" parent="EnvironmentManager"] -transform = Transform3D(1, 0, 0, 0, 0.992546, 0.121869, 0, -0.121869, 0.992546, 0, 1.128, 3.933) -fov = 72.0 +transform = Transform3D(1, 0, 0, 0, 0.415964, 0.909381, 0, -0.909381, 0.415964, 0, 2.96865, 2.32901) +fov = 62.0 [node name="DirectionalLight3D" type="DirectionalLight3D" parent="EnvironmentManager"] transform = Transform3D(0.970511, 0, 0.241058, -0.137972, 0.820002, 0.555482, -0.197668, -0.572361, 0.795821, 2.41581, 2.80426, 0) @@ -251,27 +251,29 @@ transform = Transform3D(0.970511, 0, 0.241058, -0.137972, 0.820002, 0.555482, -0 environment = SubResource("Environment_fc0e3") [node name="PlayerHand0" parent="EnvironmentManager" instance=ExtResource("4_fc0e3")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, 2.6) +transform = Transform3D(1, 0, 0, 0, 0.403769, 0.914861, 0, -0.914861, 0.403769, 0, 0.490593, 2.17793) +hide_client_name = true [node name="HandMarker1" type="Marker3D" parent="EnvironmentManager"] -transform = Transform3D(-0.906308, 0, -0.422618, 0, 1, 0, 0.422618, 0, -0.906308, -1.8, 0.4, -1.861) +transform = Transform3D(-0.906308, -0.408218, -0.109382, 0, 0.258819, -0.965926, 0.422618, -0.875426, -0.23457, -1.25, 0.4, -0.387) [node name="HandMarker2" type="Marker3D" parent="EnvironmentManager"] -transform = Transform3D(-0.906308, 0, 0.422618, 0, 1, 0, -0.422618, 0, -0.906308, 1.8, 0.4, -1.861) +transform = Transform3D(-0.906308, 0.408218, 0.109382, 0, 0.258819, -0.965926, -0.422618, -0.875426, -0.23457, 1.25, 0.4, -0.387) [node name="HandMarker3" type="Marker3D" parent="EnvironmentManager"] -transform = Transform3D(-1, 0, -1.50996e-07, 0, 1, 0, 1.50996e-07, 0, -1, 0, 0.4, -2.40681) +transform = Transform3D(-1, 8.44439e-08, 2.26267e-08, 0, 0.258819, -0.965926, -8.74228e-08, -0.965926, -0.258819, 0, 0.4, -0.810801) [node name="HandMarker4" type="Marker3D" parent="EnvironmentManager"] -transform = Transform3D(-0.5, 0, -0.866025, 0, 1, 0, 0.866025, 0, -0.5, -3.2, 0.4, -0.406) +transform = Transform3D(-0.5, -0.836516, -0.224144, 0, 0.258819, -0.965925, 0.866025, -0.482963, -0.129409, -2.4, 0.4, 0.507) [node name="HandMarker5" type="Marker3D" parent="EnvironmentManager"] -transform = Transform3D(-0.5, 0, 0.866025, 0, 1, 0, -0.866025, 0, -0.5, 3.2, 0.4, -0.406) +transform = Transform3D(-0.5, 0.836516, 0.224144, 0, 0.258819, -0.965925, -0.866025, -0.482963, -0.129409, 2.4, 0.4, 0.507) [node name="Table" parent="EnvironmentManager" instance=ExtResource("7_eow3j")] +transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0, 0.704226) [node name="TrumpPosition" type="Marker3D" parent="EnvironmentManager"] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.167186, 0) +transform = Transform3D(0.957037, -0.289967, -1.26749e-08, 1.48302e-15, -4.37114e-08, 1, -0.289967, -0.957036, -4.18334e-08, -0.0775449, 0.372575, 0.973012) [connection signal="cards_received" from="WebClientTCP" to="EnvironmentManager" method="_on_web_client_tcp_cards_received"] [connection signal="client_joined_lobby" from="WebClientTCP" to="HBoxContainer/ClientInterface" method="_on_web_client_tcp_client_joined_lobby"] diff --git a/game_client.gd b/game_client.gd index 23d4cc9..f61fbc0 100644 --- a/game_client.gd +++ b/game_client.gd @@ -18,16 +18,19 @@ func _set_host(is_host: bool) -> void: func _start_next_play() -> void: _cards_left -= 1 - print("cards left: " + str(_cards_left)) if _cards_left == 0: _start_next_round() else: web_client.start_next_play() func _start_next_round() -> void: - _current_round += 1 - _cards_left = _current_round - web_client.start_next_round(_current_round) + if _current_round == _max_rounds: + pass + # end game + else: + _current_round += 1 + _cards_left = _current_round + web_client.start_next_round(_current_round) func _get_max_rounds(player_count: int) -> int: match player_count: