renaming Events and RPCs

This commit is contained in:
torsten 2026-02-18 20:59:17 +01:00
parent 2d85376d91
commit 04f9b570d8
7 changed files with 50 additions and 29 deletions

View file

@ -124,3 +124,31 @@ Die Konfiguration des `MultiplayerSynchronizer` für wiederverwendbare Szenen (w
- Handhabt nicht nur originäre Objekterzeugung in den Levels, sondern auch Objektaktualisierungen für "Late Joiner"
- Generischer MultiplayerSpawner in Basis Level, von dem alle Level erben, so dass die Spawnliste nur 1x bearbeitet werden muss
## Namenskonventionen
Signale:
Verwenden Sie einheitliche Präfixe, um die Quelle des Signals anzugeben (z.B. player_, ui_, network_).
Verwenden Sie Verben in der Vergangenheitsform, um anzuzeigen, dass ein Ereignis stattgefunden hat (z.B. player_moved, ui_buttonPressed, network_connected).
RPCs:
An den Server gerichtet RPCs beginnen mit src_ und an den Client gerictete RPCs beginnen mit cl_
Variablen:
- snake_case für lokale Variablen und Funktionsnamen (z.B. player_health, calculate_damage).
- PascalCase für Klassennamen und Ressourcen (z.B. CharacterData, MyCustomShader).
- Konstanten in GROSSBUCHSTABEN (z.B. MAX_HEALTH, DEFAULT_SPEED).
## 9. Reihenfolge rpc Methoden
- Programmstart: Autoload Singletons: NetworkManager, GameEvents und ChatManager werden instanziert.
-- Wenn der NetworkManager erkennt, dass er headless ist, startet er automatisch den Server
- Die Haupt Szene startet: game_root.tscn - in ihr sind alle UI Scenen eingebettet. Bis auf eine ( Login ) sind alle hidden.
-- Login beinhaltet eine UI, in der man Host oder Join anwählen kann. Zu join gehört auch noch Username und Passwort
- Es wird Join geklickt:
* GameEvents.ui_join_requested.emit(ip_input.text, username, password)
* Der NetworkManager des Clients hat das Signal abonniert und startet join_game, das den MultiplayerPeer instanziert.
* Der NetworkManager des Servers empfängt das Signal _on_player_connected aktiviert auf dem Client
=> client_show_characters.rpc_id(id, []) , was auf dem Client die Charakterliste anzeigt( die aktuell leer ist).
In der Charakterliste kann über einen Button ein neuer Charakter angelegt werden. Der Button
löst aus: GameEvents.create_character_screen.emit() , der von CharacterCreate abonniert ist, und dort die
Methode show_creation_screen auslöst.
** Wird das Formular ausgefüllt und Create angeklickt, löst dies die an den Server gerichtete rpc store_player_charakter aus.

View file

@ -1,28 +1,18 @@
extends Node
@warning_ignore("unused_signal")
# Spieler-bezogene Events
# signal player_health_changed(new_health, max_health)
# signal player_xp_gained(amount)
# Welt-bezogene Events
# signal area_transition_started(area_name)
# signal area_loading_finished
# Netzwerk-Events
# signal server_message_received(message, type)
# UI-Events
signal join_requested(ip: String, username: String, password: String)
signal ui_join_requested(ip: String, username: String, password: String)
@warning_ignore("unused_signal")
signal host_requested()
signal ui_host_requested()
signal area_join_requested()
signal player_area_join_requested(area_key: String)
signal ui_area_join_requested(area_key: String)
signal show_characters(characters:Array)
signal ui_show_characters(characters:Array)
signal character_created(character: CharacterData)
signal ui_show_character_create()
signal create_character_screen()
signal ui_character_created(character: CharacterData)
signal ui_character_select()

View file

@ -16,8 +16,8 @@ var area_paths = {
var player_worlds = {}
func _ready():
GameEvents.host_requested.connect(host_game)
GameEvents.join_requested.connect(join_game)
GameEvents.ui_host_requested.connect(host_game)
GameEvents.ui_join_requested.connect(join_game)
if DisplayServer.get_name() == "headless" or OS.get_cmdline_args().has("--server"):
host_game()

View file

@ -4,12 +4,12 @@ extends Control
func _on_host_button_pressed() -> void:
print("host pressed")
GameEvents.host_requested.emit()
GameEvents.ui_host_requested.emit()
hide()
func _on_join_button_pressed():
var username = $UsernameLineEdit.text
var password = $PasswordLineEdit.text # TODO: Handle Password
GameEvents.join_requested.emit(ip_input.text, username, password)
GameEvents.ui_join_requested.emit(ip_input.text, username, password)
hide()

View file

@ -3,7 +3,7 @@ extends Control
@onready var name_line_edit: LineEdit = $NameLineEdit
func _ready():
GameEvents.create_character_screen.connect(show_creation_screen)
GameEvents.ui_show_character_create.connect(show_creation_screen)
func show_creation_screen():
name_line_edit.text = ""
@ -12,7 +12,7 @@ func show_creation_screen():
func _on_create_button_pressed() -> void:
var new_character = CharacterData.new()
new_character.name = name_line_edit.text
GameEvents.character_created.emit(new_character)
GameEvents.ui_character_created.emit(new_character)
hide()

View file

@ -5,8 +5,8 @@ extends Control
var characters: Array[CharacterData] = []
func _ready():
GameEvents.show_characters.connect(show_list)
GameEvents.character_created.connect(character_created)
GameEvents.ui_show_characters.connect(show_list)
GameEvents.ui_character_created.connect(character_created)
func character_created(character):
characters.append(character)
@ -28,8 +28,10 @@ func _on_character_selected(index):
pass
func _on_create_character_button_pressed() -> void:
GameEvents.create_character_screen.emit()
hide()
# Doubleclick on Character should start area transition
func _on_character_item_list_item_activated(index: int) -> void:
pass # Replace with function body.

View file

@ -29,4 +29,5 @@ offset_right = 224.0
offset_bottom = 621.0
text = "Neu"
[connection signal="item_activated" from="CharacterItemList" to="." method="_on_character_item_list_item_activated"]
[connection signal="pressed" from="CreateCharacterButton" to="." method="_on_create_character_button_pressed"]