54 lines
1.6 KiB
GDScript
54 lines
1.6 KiB
GDScript
class_name PlayerHand
|
|||
|
|
extends Node3D
|
||
|
|
|
||
|
|
@export var card_width: float = 2.35
|
||
|
|
|
||
|
|
## Distance cards will be apart when there is a small amount of them
|
||
|
|
@export var card_distance_max: float = 0.8
|
||
|
|
|
||
|
|
## Distance cards will be apart when there is a large amount of them
|
||
|
|
@export var card_distance_min: float = 0.32
|
||
|
|
|
||
|
|
## 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
|
||
|
|
|
||
|
|
func _ready() -> void:
|
||
|
|
_arrange_cards()
|
||
|
|
for i in test_card_count:
|
||
|
|
var card: PlayingCard = card_scene.instantiate()
|
||
|
|
card.card_clicked.connect(_on_card_clicked)
|
||
|
|
add_card(card)
|
||
|
|
await get_tree().create_timer(0.24).timeout
|
||
|
|
|
||
|
|
func add_card(card: PlayingCard) -> void:
|
||
|
|
self.add_child(card)
|
||
|
|
_arrange_cards()
|
||
|
|
|
||
|
|
func remove_card(card: PlayingCard) -> void:
|
||
|
|
self.remove_child(card)
|
||
|
|
_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.position.x = card_position
|
||
|
|
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:
|
||
|
|
pass
|