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:
# 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
+23 -16
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
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)
+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="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="."]
+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
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))
+11 -9
View File
@@ -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"]
+7 -4
View File
@@ -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: