adjusted camera angle

This commit is contained in:
2025-07-16 09:35:32 +02:00
parent e0cea82394
commit 92ea8807c8
6 changed files with 58 additions and 43 deletions
+4 -2
View File
@@ -8,9 +8,10 @@ enum CardStyle {
} }
func _ready() -> void: 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], -1) == 59)
assert(get_winning_card([1, 2, 3, 59], 3) == 59) assert(get_winning_card([1, 2, 3, 59], 3) == 59)
assert(get_winning_card([57, 2, 3, 59], 3) == 57)
# trump wins # trump wins
assert(get_winning_card([1, 14, 2, 3], 4) == 3) assert(get_winning_card([1, 14, 2, 3], 4) == 3)
assert(get_winning_card([29, 14, 27, 31], 15) == 14) assert(get_winning_card([29, 14, 27, 31], 15) == 14)
@@ -20,6 +21,8 @@ func _ready() -> void:
# other wins # other wins
assert(get_winning_card([14, 15, 18, 13], 16) == 18) assert(get_winning_card([14, 15, 18, 13], 16) == 18)
assert(get_winning_card([14, 15, 18, 13], 46) == 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]] func get_shuffled_cards(client_ids: Array[String], cards_to_pick: int) -> Dictionary: # Dictionary[String, Array[int]]
var dict: Dictionary = {} var dict: Dictionary = {}
@@ -71,7 +74,6 @@ func get_winning_card(card_ids: Array[int], trump: int) -> int:
return largest_trump_card_id return largest_trump_card_id
# no trump played; determine from highest played card # no trump played; determine from highest played card
# TODO check for white cards here!
return _get_largest_non_trump_card(card_ids) return _get_largest_non_trump_card(card_ids)
else: else:
# no trump exists # no trump exists
+22 -15
View File
@@ -7,49 +7,54 @@ var card_distance_max: float = 0.18
## Distance cards will be apart when there is a large amount of them ## Distance cards will be apart when there is a large amount of them
var card_distance_min: float = 0.09 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 ## How many test cards to add
@export_range(0, 20) var test_card_count: int = 0
@export var card_scene: PackedScene @export var card_scene: PackedScene
@export var card_container: Node3D
@export_range(0, 20, 0.1, "radians_as_degrees") var card_angle: float @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 var _selected_card: PlayingCard = null
signal card_selected(card_id: int) signal card_selected(card_id: int)
signal card_played(card_id: int) signal card_played(card_id: int)
#func _ready() -> void: func _ready() -> void:
#_arrange_cards() if hide_client_name:
#var test_array: Array[int] name_label.hide()
#for i in range(10):
#test_array.append(randi_range(0, 59))
#
#add_cards(test_array, "")
func add_card(card: PlayingCard) -> void: func add_card(card: PlayingCard) -> void:
self.add_child(card) card_container.add_child(card)
_arrange_cards() _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() card_ids.sort()
for card_id in card_ids: for card_id in card_ids:
var card: PlayingCard = card_scene.instantiate() var card: PlayingCard = card_scene.instantiate()
if true: # if client_id == ... if is_owned:
card.card_clicked.connect(_on_card_clicked) card.card_clicked.connect(_on_card_clicked)
card.setup_card_details(card_id) card.setup_card_details(card_id)
add_card(card) add_card(card)
await get_tree().create_timer(0.16).timeout await get_tree().create_timer(0.16).timeout
func remove_card(card: PlayingCard) -> void: func remove_card(card: PlayingCard) -> void:
self.remove_child(card) card_container.remove_child(card)
card.queue_free() card.queue_free()
_arrange_cards() _arrange_cards()
func _arrange_cards() -> void: func _arrange_cards() -> void:
var cards = self.get_children() var cards = card_container.get_children()
# Only arrange cards if there are any! # Only arrange cards if there are any!
if cards.size() > 0: if cards.size() > 0:
var card_distance: float = _get_card_distance(cards.size() - 1) var card_distance: float = _get_card_distance(cards.size() - 1)
print(card_distance)
var desired_width: float = (card_distance * (cards.size() - 1)) var desired_width: float = (card_distance * (cards.size() - 1))
var card_position = -desired_width / 2.0 var card_position = -desired_width / 2.0
for card in cards: for card in cards:
@@ -58,7 +63,10 @@ func _arrange_cards() -> void:
card.rotation.y = card_angle card.rotation.y = card_angle
func _get_card_distance(card_count: int) -> float: func _get_card_distance(card_count: int) -> float:
if _is_owned:
return card_distance_min + ((card_distance_max - card_distance_min) * (1.0 - (float(card_count) / 19.0))) 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: func _on_card_clicked(playing_card: PlayingCard) -> void:
if _selected_card: if _selected_card:
@@ -80,6 +88,5 @@ func _on_play_card_button_pressed() -> void:
card_played.emit(_selected_card.card_details.card_id) card_played.emit(_selected_card.card_details.card_id)
remove_card(_selected_card) remove_card(_selected_card)
#_selected_card.unselect()
_selected_card = null _selected_card = null
card_selected.emit(-1) card_selected.emit(-1)
+11 -2
View File
@@ -3,8 +3,17 @@
[ext_resource type="Script" uid="uid://b5b5cl2qlhywv" path="res://elements/player_hand.gd" id="1_ank64"] [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"] [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") script = ExtResource("1_ank64")
test_card_count = 5
card_scene = ExtResource("2_11xsc") card_scene = ExtResource("2_11xsc")
card_container = NodePath("CardContainer")
card_angle = 0.125664 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="."]
+2 -10
View File
@@ -69,26 +69,18 @@ func _on_web_client_tcp_client_order_received(client_ids: Array[String]) -> void
hand = own_player_hand hand = own_player_hand
else: else:
hand = player_hand_scene.instantiate() hand = player_hand_scene.instantiate()
self.add_child(hand) marker_positions[index - 1].add_child(hand)
var reference_marker = marker_positions[index - 1]
hand.global_position = reference_marker.global_position
hand.global_rotation = reference_marker.global_rotation
#hand_associations[index] = PlayerHandAssociation.new(
#client_ids[index],
#hand.get_path(),
#)
hand_associations[client_ids[index]] = hand hand_associations[client_ids[index]] = hand
func _on_web_client_tcp_received_client_id(client_id: String) -> void: func _on_web_client_tcp_received_client_id(client_id: String) -> void:
_own_client_id = client_id _own_client_id = client_id
func _on_web_client_tcp_cards_received(cards: Dictionary) -> void: func _on_web_client_tcp_cards_received(cards: Dictionary) -> void:
for client_id in cards.keys(): for client_id in cards.keys():
var card_ids: Array[int] var card_ids: Array[int]
card_ids.assign(cards[client_id]) 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: func _on_web_client_tcp_received_played_card(client_id: String, card_id: int) -> void:
print(client_id + " played card " + str(card_id)) print(client_id + " played card " + str(card_id))
+11 -9
View File
@@ -241,8 +241,8 @@ player_hand_scene = ExtResource("4_fc0e3")
card_scene = ExtResource("6_eow3j") card_scene = ExtResource("6_eow3j")
[node name="Camera3D" type="Camera3D" parent="EnvironmentManager"] [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) transform = Transform3D(1, 0, 0, 0, 0.415964, 0.909381, 0, -0.909381, 0.415964, 0, 2.96865, 2.32901)
fov = 72.0 fov = 62.0
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="EnvironmentManager"] [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) 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") environment = SubResource("Environment_fc0e3")
[node name="PlayerHand0" parent="EnvironmentManager" instance=ExtResource("4_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"] [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"] [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"] [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"] [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"] [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")] [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"] [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="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"] [connection signal="client_joined_lobby" from="WebClientTCP" to="HBoxContainer/ClientInterface" method="_on_web_client_tcp_client_joined_lobby"]
+4 -1
View File
@@ -18,13 +18,16 @@ func _set_host(is_host: bool) -> void:
func _start_next_play() -> void: func _start_next_play() -> void:
_cards_left -= 1 _cards_left -= 1
print("cards left: " + str(_cards_left))
if _cards_left == 0: if _cards_left == 0:
_start_next_round() _start_next_round()
else: else:
web_client.start_next_play() web_client.start_next_play()
func _start_next_round() -> void: func _start_next_round() -> void:
if _current_round == _max_rounds:
pass
# end game
else:
_current_round += 1 _current_round += 1
_cards_left = _current_round _cards_left = _current_round
web_client.start_next_round(_current_round) web_client.start_next_round(_current_round)