diff --git a/weltenauge/game_root.gd b/weltenauge/game_root.gd index 1643dbb..b2df6e2 100644 --- a/weltenauge/game_root.gd +++ b/weltenauge/game_root.gd @@ -1,9 +1,4 @@ extends Node -## Project Fugue - Zentrale Steuerung -## Orchestriert den Übergang zwischen Menü und Spielwelt. - -@onready var main_menu = $MainMenu - func _ready(): print("--- Start: Projekt Weltenauge ---") diff --git a/weltenauge/game_root.tscn b/weltenauge/game_root.tscn index 419bf76..a425996 100644 --- a/weltenauge/game_root.tscn +++ b/weltenauge/game_root.tscn @@ -1,17 +1,17 @@ [gd_scene format=3 uid="uid://cpxxy0664jyjm"] [ext_resource type="Script" uid="uid://162cjpb4lac4" path="res://game_root.gd" id="1_xj5yv"] -[ext_resource type="PackedScene" uid="uid://bhywhrlwjox6t" path="res://ui/menus/main_menu.tscn" id="2_pjpa4"] [ext_resource type="PackedScene" uid="uid://ca2bhph2k3xpy" path="res://ui/character_select/character_select.tscn" id="3_bxsma"] [ext_resource type="PackedScene" uid="uid://lb6btb6426mi" path="res://ui/account/login.tscn" id="3_lkrbl"] +[ext_resource type="PackedScene" uid="uid://cdwkmx452hc4k" path="res://ui/character_create/character_create.tscn" id="4_lkrbl"] [node name="Game_root" type="Node2D" unique_id=1336425327] script = ExtResource("1_xj5yv") -[node name="MainMenu" parent="." unique_id=1731390780 instance=ExtResource("2_pjpa4")] -visible = false - [node name="Login" parent="." unique_id=1694671237 instance=ExtResource("3_lkrbl")] [node name="CharacterSelect" parent="." unique_id=2079351175 instance=ExtResource("3_bxsma")] visible = false + +[node name="CharacterCreate" parent="." unique_id=2056198803 instance=ExtResource("4_lkrbl")] +visible = false diff --git a/weltenauge/systems/core/game_events.gd b/weltenauge/systems/core/game_events.gd index 44f857a..3a152c6 100644 --- a/weltenauge/systems/core/game_events.gd +++ b/weltenauge/systems/core/game_events.gd @@ -14,7 +14,15 @@ extends Node # signal server_message_received(message, type) # UI-Events -signal join_requested(ip: String) +signal join_requested(ip: String, username: String, password: String) @warning_ignore("unused_signal") signal host_requested() + +signal area_join_requested() + +signal show_characters(characters:Array) + +signal character_created(character: CharacterData) + +signal create_character_screen() diff --git a/weltenauge/systems/network/chat_manager.gd b/weltenauge/systems/network/chat_manager.gd index 19260ef..ef19492 100644 --- a/weltenauge/systems/network/chat_manager.gd +++ b/weltenauge/systems/network/chat_manager.gd @@ -23,4 +23,4 @@ func send_message(message: String): @rpc("authority", "call_remote", "reliable") func receive_message(sender_name: String, message: String, channel: String): - message_received.emit(sender_name, message, channel) \ No newline at end of file + message_received.emit(sender_name, message, channel) diff --git a/weltenauge/systems/network/network_manager.gd b/weltenauge/systems/network/network_manager.gd index 84d4c1a..1cd23e8 100644 --- a/weltenauge/systems/network/network_manager.gd +++ b/weltenauge/systems/network/network_manager.gd @@ -30,15 +30,23 @@ func host_game(): multiplayer.peer_disconnected.connect(_on_player_disconnected) print("Server gestartet. id=" + str(multiplayer.get_unique_id())) -func join_game(ip = "127.0.0.1"): +func join_game(ip: String, username: String, password: String): + print("NetworkManager.join_game(", ip, "/", username, "/", password) var peer = ENetMultiplayerPeer.new() peer.create_client(ip, PORT) multiplayer.multiplayer_peer = peer + func _on_player_connected(id): print("Player connected with id:", id) - # Standardmäßig in Area 1 starten - change_player_area(id, "keuwin_grasland") + client_show_characters.rpc_id(id, []) + + +@rpc("authority", "call_remote", "reliable") +func client_show_characters(characters): + print("Got client_show_characters") + GameEvents.show_characters.emit(characters) + func _on_player_disconnected(id): if not multiplayer.is_server(): return diff --git a/weltenauge/ui/account/login.gd b/weltenauge/ui/account/login.gd index 66f5cd9..fc309a7 100644 --- a/weltenauge/ui/account/login.gd +++ b/weltenauge/ui/account/login.gd @@ -14,5 +14,5 @@ func _on_join_button_pressed(): # Hier findet später die Prüfung gegen den Server statt # Im Moment simulieren wir einfach einen erfolgreichen Login #TODO - GameEvents.join_requested.emit(ip_input.text) + GameEvents.join_requested.emit(ip_input.text, username, password) hide() diff --git a/weltenauge/ui/account/login.tscn b/weltenauge/ui/account/login.tscn index 3267515..178d07a 100644 --- a/weltenauge/ui/account/login.tscn +++ b/weltenauge/ui/account/login.tscn @@ -67,7 +67,7 @@ offset_left = 122.0 offset_top = -72.0 offset_right = 231.0 offset_bottom = -41.0 -text = "test" +text = "test_user" [node name="PasswordLineEdit" type="LineEdit" parent="." unique_id=214865529] layout_mode = 0 @@ -75,7 +75,7 @@ offset_left = 121.0 offset_top = -38.0 offset_right = 230.0 offset_bottom = -7.0 -text = "test" +text = "test_pw" [connection signal="pressed" from="Join_Button" to="." method="_on_join_button_pressed"] [connection signal="button_up" from="Host_Button" to="." method="_on_host_pressed"] diff --git a/weltenauge/ui/character_create/character_create.gd b/weltenauge/ui/character_create/character_create.gd new file mode 100644 index 0000000..0af4b6d --- /dev/null +++ b/weltenauge/ui/character_create/character_create.gd @@ -0,0 +1,21 @@ +extends Control + +@onready var name_line_edit: LineEdit = $NameLineEdit + +func _ready(): + GameEvents.create_character_screen.connect(show_creation_screen) + +func show_creation_screen(): + name_line_edit.text = "" + show() + +func _on_create_button_pressed() -> void: + var new_character = CharacterData.new() + new_character.name = name_line_edit.text + GameEvents.character_created.emit(new_character) + hide() + + +func _on_cancel_button_pressed() -> void: + get_parent().get_node("CharacterSelect").show() + hide() diff --git a/weltenauge/ui/character_create/character_create.gd.uid b/weltenauge/ui/character_create/character_create.gd.uid new file mode 100644 index 0000000..fff73b3 --- /dev/null +++ b/weltenauge/ui/character_create/character_create.gd.uid @@ -0,0 +1 @@ +uid://dx24rxnsd0eoj diff --git a/weltenauge/ui/character_create/character_create.tscn b/weltenauge/ui/character_create/character_create.tscn new file mode 100644 index 0000000..2bb1905 --- /dev/null +++ b/weltenauge/ui/character_create/character_create.tscn @@ -0,0 +1,42 @@ +[gd_scene format=3 uid="uid://cdwkmx452hc4k"] + +[ext_resource type="Script" uid="uid://dx24rxnsd0eoj" path="res://ui/character_create/character_create.gd" id="1_mdh5q"] + +[node name="CharacterCreate" type="Control" unique_id=2056198803] +layout_mode = 3 +anchors_preset = 0 +script = ExtResource("1_mdh5q") + +[node name="NameLabel" type="Label" parent="." unique_id=1413425912] +layout_mode = 0 +offset_left = 24.0 +offset_top = 32.0 +offset_right = 82.0 +offset_bottom = 61.0 +text = "Name:" + +[node name="CreateButton" type="Button" parent="." unique_id=50672893] +layout_mode = 0 +offset_left = 29.0 +offset_top = 81.0 +offset_right = 140.0 +offset_bottom = 117.0 +text = "Erstellen" + +[node name="CancelButton" type="Button" parent="." unique_id=861690836] +layout_mode = 0 +offset_left = 175.0 +offset_top = 80.0 +offset_right = 286.0 +offset_bottom = 116.0 +text = "Abbrechen" + +[node name="NameLineEdit" type="LineEdit" parent="." unique_id=2114380893] +layout_mode = 0 +offset_left = 89.0 +offset_top = 29.0 +offset_right = 288.0 +offset_bottom = 60.0 + +[connection signal="pressed" from="CreateButton" to="." method="_on_create_button_pressed"] +[connection signal="pressed" from="CancelButton" to="." method="_on_cancel_button_pressed"] diff --git a/weltenauge/ui/character_select/character_select.gd b/weltenauge/ui/character_select/character_select.gd index 528e5b3..c9599b1 100644 --- a/weltenauge/ui/character_select/character_select.gd +++ b/weltenauge/ui/character_select/character_select.gd @@ -1,33 +1,25 @@ extends Control -@onready var character_list = $ItemList # Oder Tree, je nachdem wie die Liste aussieht +@onready var character_item_list: ItemList = $CharacterItemList var characters: Array[CharacterData] = [] func _ready(): - # Vorhandene Charaktere laden - load_characters() - update_ui() + GameEvents.show_characters.connect(show_list) + GameEvents.character_created.connect(character_created) -func load_characters(): - # (Hier kommt die Logik zum Durchsuchen des "user://" Ordners nach JSON-Dateien hin) - # (Für den Anfang können wir einfach einen Standard-Charakter erstellen) - #var data = SaveLoad.load_character() - - var data = null - if data == null: - data = CharacterData.new() - data.id = "000001" # Eindeutige ID generieren (später) - characters = [data] - SaveLoad.save_character(data) - else: - characters = [data] +func character_created(character): + characters.append(character) + character_item_list.add_item(character.name) + show() +func show_list(characters: Array): + print("show_list triggered") + character_item_list.clear() + for character: CharacterData in characters: + character_item_list.add_item(character.name) + show() -func update_ui(): - character_list.clear() - for char in characters: - character_list.add_item(char.name) # Hier später: Icons, Stats etc. func _on_character_selected(index): var selected_character = characters[index] @@ -35,15 +27,9 @@ func _on_character_selected(index): # (Am Ende: StartGame.emit(selected_character)) pass -signal StartGame(character: CharacterData) # Ab hier wirds interessant. -func _on_start_game_pressed(): - if characters.size() > 0: - StartGame.emit(characters[0]) # Einfachheitshalber: Ersten Charakter nehmen - # Aufräumen und die Spielwelt laden (später) -func _on_create_character_pressed(): - var new_character = CharacterData.new() - new_character.id = characters.size() + 1 # Provisorische ID - characters.append(new_character) - SaveLoad.save_character(new_character) - update_ui() + + +func _on_create_character_button_pressed() -> void: + GameEvents.create_character_screen.emit() + hide() diff --git a/weltenauge/ui/character_select/character_select.tscn b/weltenauge/ui/character_select/character_select.tscn index 150ee7d..d6dc89c 100644 --- a/weltenauge/ui/character_select/character_select.tscn +++ b/weltenauge/ui/character_select/character_select.tscn @@ -7,7 +7,7 @@ layout_mode = 3 anchors_preset = 0 script = ExtResource("1_o7qwi") -[node name="ItemList" type="ItemList" parent="." unique_id=1442954519] +[node name="CharacterItemList" type="ItemList" parent="." unique_id=1442954519] layout_mode = 0 offset_top = 32.0 offset_right = 368.0 @@ -21,10 +21,12 @@ offset_right = 217.0 offset_bottom = 31.0 text = "Charaktere:" -[node name="Button" type="Button" parent="." unique_id=50672893] +[node name="CreateCharacterButton" type="Button" parent="." unique_id=50672893] layout_mode = 0 offset_left = 113.0 offset_top = 585.0 offset_right = 224.0 offset_bottom = 621.0 -text = "Start" +text = "Neu" + +[connection signal="pressed" from="CreateCharacterButton" to="." method="_on_create_character_button_pressed"] diff --git a/weltenauge/ui/menus/main_menu.gd b/weltenauge/ui/menus/main_menu.gd deleted file mode 100644 index fe21d7b..0000000 --- a/weltenauge/ui/menus/main_menu.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends Control - -@onready var ip_input: TextEdit = $IPInput - -func _on_host_button_pressed() -> void: - print("host pressed") - GameEvents.host_requested.emit() - hide() - -func _on_join_button_pressed(): - var username = $UsernameLineEdit.text - var password = $PasswordLineEdit.text # TODO: Handle Password - - # Hier findet später die Prüfung gegen den Server statt - # Im Moment simulieren wir einfach einen erfolgreichen Login - #TODO - GameEvents.join_requested.emit(ip_input.text) diff --git a/weltenauge/ui/menus/main_menu.gd.uid b/weltenauge/ui/menus/main_menu.gd.uid deleted file mode 100644 index ef26d6e..0000000 --- a/weltenauge/ui/menus/main_menu.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bp7b3a25eh6dh diff --git a/weltenauge/ui/menus/main_menu.tscn b/weltenauge/ui/menus/main_menu.tscn deleted file mode 100644 index b8a7892..0000000 --- a/weltenauge/ui/menus/main_menu.tscn +++ /dev/null @@ -1,36 +0,0 @@ -[gd_scene format=3 uid="uid://bhywhrlwjox6t"] - -[ext_resource type="Script" uid="uid://bp7b3a25eh6dh" path="res://ui/menus/main_menu.gd" id="1_5oih7"] - -[node name="MainMenu" type="Control" unique_id=1694671237] -layout_mode = 3 -anchors_preset = 0 -script = ExtResource("1_5oih7") - -[node name="IPInput" type="TextEdit" parent="." unique_id=1340335140] -custom_minimum_size = Vector2(150, 40) -layout_mode = 0 -offset_left = 8.0 -offset_top = 7.0 -offset_right = 158.0 -offset_bottom = 47.0 -text = "127.0.0.1" - -[node name="Join_Button" type="Button" parent="." unique_id=811892478] -layout_mode = 0 -offset_left = 13.0 -offset_top = 58.0 -offset_right = 51.0 -offset_bottom = 89.0 -text = "Join" - -[node name="Host_Button" type="Button" parent="." unique_id=1465654892] -layout_mode = 0 -offset_left = 111.0 -offset_top = 58.0 -offset_right = 155.0 -offset_bottom = 89.0 -text = "Host" - -[connection signal="button_up" from="Join_Button" to="." method="_on_join_pressed"] -[connection signal="button_up" from="Host_Button" to="." method="_on_host_pressed"]