diff --git a/components/web_client_tcp.gd b/components/web_client_tcp.gd index 4057356..75a3cb3 100644 --- a/components/web_client_tcp.gd +++ b/components/web_client_tcp.gd @@ -98,6 +98,7 @@ func _handle_response(response: String) -> void: if data["status"] == "ok": _lobby_id = data["lobby_id"] _client_id = data["client_id"] + received_client_id.emit.call_deferred(_client_id) connected_to_lobby.emit.call_deferred(_lobby_id) connection_status_changed.emit.call_deferred(ConnectionStatus.JOINED) "join_lobby_response": diff --git a/environment_manager.gd b/environment_manager.gd index dae9a66..8af4f1c 100644 --- a/environment_manager.gd +++ b/environment_manager.gd @@ -1,16 +1,66 @@ class_name EnvironmentManager extends Node3D -var player_hands: Dictionary[int, PlayerHandAssociation] +# In gameplay order +var hand_associations: Dictionary[int, PlayerHandAssociation] var _own_client_id: String @export var own_player_hand: PlayerHand +## Positions for hands in 3-player game (starting from player 2). +@export var hand_markers_3: Array[Marker3D] + +## Positions for hands in 4-player game (starting from player 2). +@export var hand_markers_4: Array[Marker3D] + +## Positions for hands in 5-player game (starting from player 2). +@export var hand_markers_5: Array[Marker3D] + +## Positions for hands in 6-player game (starting from player 2). +@export var hand_markers_6: Array[Marker3D] + @export var player_hand_scene: PackedScene func _on_web_client_tcp_client_order_received(client_ids: Array[String]) -> void: + var marker_positions: Array[Marker3D] + match client_ids.size(): + 3: + marker_positions = hand_markers_3 + 4: + marker_positions = hand_markers_4 + 5: + marker_positions = hand_markers_5 + 6: + marker_positions = hand_markers_6 + + var own_index: int = client_ids.find(_own_client_id) + + var new_ids: Array[String] + if own_index == 0: + print("ïndex was 0 " + _own_client_id) + # no change necessary! + new_ids = client_ids + elif own_index == client_ids.size() - 1: + print("index was last " + _own_client_id) + # you are at the end of the array + new_ids = client_ids + # take away own client id + new_ids.erase(_own_client_id) + # add it to the start of the array + new_ids.insert(0, _own_client_id) + else: + print("index was middle " + _own_client_id) + # you are somewhere in the middle of the array + # create array with you at the start + new_ids = client_ids.slice(own_index) + # add the rest of the original array + new_ids.append_array(client_ids.slice(0, own_index)) + + print("playing order! -- !") + print(new_ids) + for index in client_ids.size(): if client_ids[index] == _own_client_id: - player_hands[index] = PlayerHandAssociation.new( + hand_associations[index] = PlayerHandAssociation.new( _own_client_id, own_player_hand.get_path(), ) @@ -19,7 +69,7 @@ func _on_web_client_tcp_client_order_received(client_ids: Array[String]) -> void # TODO self.add_child(hand) # needs position! - player_hands[index] = PlayerHandAssociation.new( + hand_associations[index] = PlayerHandAssociation.new( client_ids[index], hand.get_path(), ) diff --git a/game.tscn b/game.tscn index dbca99e..f4ebf84 100644 --- a/game.tscn +++ b/game.tscn @@ -196,9 +196,13 @@ layout_mode = 2 layout_mode = 2 text = "submit bet" -[node name="EnvironmentManager" type="Node3D" parent="." node_paths=PackedStringArray("own_player_hand")] +[node name="EnvironmentManager" type="Node3D" parent="." node_paths=PackedStringArray("own_player_hand", "hand_markers_3", "hand_markers_4", "hand_markers_5", "hand_markers_6")] script = ExtResource("4_7jktm") -own_player_hand = NodePath("PlayerHand") +own_player_hand = NodePath("PlayerHand0") +hand_markers_3 = [NodePath("HandMarker1"), NodePath("HandMarker2")] +hand_markers_4 = [NodePath("HandMarker1"), NodePath("HandMarker3"), NodePath("HandMarker2")] +hand_markers_5 = [NodePath("HandMarker4"), NodePath("HandMarker1"), NodePath("HandMarker3"), NodePath("HandMarker2")] +hand_markers_6 = [NodePath("HandMarker4"), NodePath("HandMarker1"), NodePath("HandMarker3"), NodePath("HandMarker2"), NodePath("HandMarker5")] player_hand_scene = ExtResource("4_fc0e3") [node name="Camera3D" type="Camera3D" parent="EnvironmentManager"] @@ -211,26 +215,26 @@ transform = Transform3D(0.970511, 0, 0.241058, -0.137972, 0.820002, 0.555482, -0 [node name="WorldEnvironment" type="WorldEnvironment" parent="EnvironmentManager"] environment = SubResource("Environment_fc0e3") -[node name="PlayerHand" 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) -[node name="Table" parent="EnvironmentManager" instance=ExtResource("7_eow3j")] - -[node name="PlayerHand2" parent="EnvironmentManager" instance=ExtResource("4_fc0e3")] -transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.4, -2.40681) - -[node name="PlayerHand3" parent="EnvironmentManager" instance=ExtResource("4_fc0e3")] +[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) -[node name="PlayerHand4" parent="EnvironmentManager" instance=ExtResource("4_fc0e3")] +[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) -[node name="PlayerHand5" parent="EnvironmentManager" instance=ExtResource("4_fc0e3")] +[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) + +[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) -[node name="PlayerHand6" parent="EnvironmentManager" instance=ExtResource("4_fc0e3")] +[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) +[node name="Table" parent="EnvironmentManager" instance=ExtResource("7_eow3j")] + [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/GameUI" method="_on_web_client_tcp_client_joined_lobby"] [connection signal="client_left_lobby" from="WebClientTCP" to="HBoxContainer/ClientInterface" method="_on_web_client_tcp_client_left_lobby"] @@ -253,11 +257,6 @@ transform = Transform3D(-0.5, 0, 0.866025, 0, 1, 0, -0.866025, 0, -0.5, 3.2, 0.4 [connection signal="pressed" from="HBoxContainer/ClientInterface/MarginContainer/VBoxContainer/ServerInputs/LeaveLobbyButton" to="HBoxContainer/ClientInterface" method="_on_disconnect_lobby_button_pressed"] [connection signal="pressed" from="HBoxContainer/ClientInterface/MarginContainer/VBoxContainer/ChatContainer/SendMessageButton" to="HBoxContainer/ClientInterface" method="_on_send_message_button_pressed"] [connection signal="pressed" from="HBoxContainer/GameUI/StartGameButton" to="HBoxContainer/GameUI" method="_on_start_game_button_pressed"] -[connection signal="pressed" from="HBoxContainer/GameUI/PlayCardButton" to="EnvironmentManager/PlayerHand" method="_on_play_card_button_pressed"] +[connection signal="pressed" from="HBoxContainer/GameUI/PlayCardButton" to="EnvironmentManager/PlayerHand0" method="_on_play_card_button_pressed"] [connection signal="pressed" from="HBoxContainer/GameUI/BetContainer/SubmitBetButton" to="HBoxContainer/GameUI" method="_on_submit_bet_button_pressed"] -[connection signal="card_selected" from="EnvironmentManager/PlayerHand" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"] -[connection signal="card_selected" from="EnvironmentManager/PlayerHand2" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"] -[connection signal="card_selected" from="EnvironmentManager/PlayerHand3" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"] -[connection signal="card_selected" from="EnvironmentManager/PlayerHand4" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"] -[connection signal="card_selected" from="EnvironmentManager/PlayerHand5" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"] -[connection signal="card_selected" from="EnvironmentManager/PlayerHand6" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"] +[connection signal="card_selected" from="EnvironmentManager/PlayerHand0" to="HBoxContainer/GameUI" method="_on_player_hand_card_selected"]