class_name PlayerHand extends Node3D ## Distance cards will be apart when there is a small amount of them 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 ## How many test cards to add @export_range(0, 20) var test_card_count: int = 0 @export var card_scene: PackedScene @export_range(0, 20, 0.1, "radians_as_degrees") var card_angle: float 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 add_card(card: PlayingCard) -> void: self.add_child(card) _arrange_cards() func add_cards(card_ids: Array[int], client_id: String) -> void: card_ids.sort() for card_id in card_ids: var card: PlayingCard = card_scene.instantiate() if true: # if client_id == ... 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.queue_free() _arrange_cards() func _arrange_cards() -> void: var cards = self.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: card.move_to(card_position) card_position += card_distance 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))) func _on_card_clicked(playing_card: PlayingCard) -> void: if _selected_card: _selected_card.unselect() if _selected_card == playing_card: _selected_card = null else: _selected_card = playing_card playing_card.select() if _selected_card: card_selected.emit(_selected_card.card_details.card_id) else: card_selected.emit(-1) func _on_play_card_button_pressed() -> void: if not _selected_card: return card_played.emit(_selected_card.card_details.card_id) remove_card(_selected_card) #_selected_card.unselect() _selected_card = null card_selected.emit(-1)