client: added player hand and animation for added cards

This commit is contained in:
2025-07-08 15:58:46 +02:00
parent 4fec323639
commit a7ea8510f7
9 changed files with 137 additions and 14 deletions
+53
View File
@@ -0,0 +1,53 @@
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
+1
View File
@@ -0,0 +1 @@
uid://b5b5cl2qlhywv
+10
View File
@@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://jlovgr2iojrg"]
[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"]
script = ExtResource("1_ank64")
test_card_count = 20
card_scene = ExtResource("2_11xsc")
card_angle = 0.125664