diff --git a/client/network/Chat.gd b/client/network/Chat.gd index 31af478..afcd02c 100644 --- a/client/network/Chat.gd +++ b/client/network/Chat.gd @@ -15,9 +15,13 @@ func handle_packet(data: PackedByteArray): var player_id := buffer.get_string() var player := Global.players.get_player(player_id) var message := buffer.get_utf8_string() + message = escape_bbcode(message) Log.info("%s: %s" % [player.name, message]) - message_received.emit("[color=#e0e0e0]%s:[/color] %s" % [player.name, escape_bbcode(message)]) + emit.call_deferred(player.name, message) + +func emit(player_name: String, message: String): + message_received.emit("[color=#e0e0e0]%s:[/color] %s" % [player_name, message]) func escape_bbcode(text: String) -> String: return text.replace("[", "[lb]") diff --git a/client/network/Login.gd b/client/network/Login.gd index 6a970db..c80fa67 100644 --- a/client/network/Login.gd +++ b/client/network/Login.gd @@ -10,12 +10,18 @@ func handle_packet(data: PackedByteArray): var error := buffer.get_8() if error != 0: Log.info("[%s] Login failed." % Global.account.name) - failure.emit() + emit_failure.call_deferred() return Global.account.id = buffer.get_string() Global.account.auth_token = buffer.get_string() + emit_success.call_deferred() + +func emit_failure(): + failure.emit() + +func emit_success(): success.emit() func send_login(): diff --git a/client/network/Logout.gd b/client/network/Logout.gd index 8a28e55..b3d8911 100644 --- a/client/network/Logout.gd +++ b/client/network/Logout.gd @@ -4,6 +4,9 @@ signal success func handle_packet(_data: PackedByteArray): logout() + emit.call_deferred() + +func emit(): success.emit() func logout(): diff --git a/client/network/Ping.gd b/client/network/Ping.gd index 20cd807..4ee9d34 100644 --- a/client/network/Ping.gd +++ b/client/network/Ping.gd @@ -9,7 +9,6 @@ var history: Array[float] = [] func _init(): history.resize(HISTORY_SIZE) - thread_safe = true func handle_packet(data: PackedByteArray): var id := data[0] diff --git a/client/network/PlayerAdd.gd b/client/network/PlayerAdd.gd index f7f63e5..04d7500 100644 --- a/client/network/PlayerAdd.gd +++ b/client/network/PlayerAdd.gd @@ -21,7 +21,7 @@ func handle_packet(data: PackedByteArray): Log.info("Add player: %s %s @ %v" % [player_id, player_name, server_position]) - spawn_player(player_id, player_name, server_position) + spawn_player.call_deferred(player_id, player_name, server_position) func spawn_player(id: String, nick: String, position: Vector3) -> Player: var player: Player diff --git a/client/network/PlayerJump.gd b/client/network/PlayerJump.gd index 70a3969..1f2e7c1 100644 --- a/client/network/PlayerJump.gd +++ b/client/network/PlayerJump.gd @@ -18,7 +18,10 @@ func handle_packet(data: PackedByteArray): var player_id := data.get_string_from_ascii() var player := Global.players.get_player(player_id) - if !player: + if !player || !player.controller: return - player.controller.jumped.emit() + emit.call_deferred(player.controller) + +func emit(controller: Controller): + controller.jumped.emit() diff --git a/client/network/PlayerMove.gd b/client/network/PlayerMove.gd index b43885f..813d5d5 100644 --- a/client/network/PlayerMove.gd +++ b/client/network/PlayerMove.gd @@ -34,7 +34,10 @@ func handle_packet(data: PackedByteArray): controller.server_position.x = x controller.server_position.z = z - controller.direction_changed.emit(Vector3(direction_x, 0, direction_z)) + emit.call_deferred(controller, Vector3(direction_x, 0, direction_z)) + +func emit(controller: Controller, direction: Vector3): + controller.direction_changed.emit(direction) func _process(_delta: float): if !Global.player: diff --git a/client/network/PlayerUseSkill.gd b/client/network/PlayerUseSkill.gd index c698ea0..b6ab4ed 100644 --- a/client/network/PlayerUseSkill.gd +++ b/client/network/PlayerUseSkill.gd @@ -22,6 +22,12 @@ func handle_packet(data: PackedByteArray): var player_id_length := buffer.get_size() - 1 var player_id := buffer.get_string(player_id_length) var slot := buffer.get_u8() - var player := Global.players.get_player(player_id) - player.controller.used_skill.emit(slot) + + if !player || !player.controller: + return + + emit.call_deferred(player.controller, slot) + +func emit(controller: Controller, slot: int): + controller.used_skill.emit(slot) diff --git a/client/network/shared/NetworkNode.gd b/client/network/shared/NetworkNode.gd index c043049..0803d6c 100644 --- a/client/network/shared/NetworkNode.gd +++ b/client/network/shared/NetworkNode.gd @@ -21,9 +21,5 @@ func handle_packet(packet: PackedByteArray): push_warning("Unknown packet type %d" % type) return - if handler.thread_safe: - handler.handle_packet(packet.slice(1)) - else: - handler.handle_packet.call_deferred(packet.slice(1)) - + handler.handle_packet(packet.slice(1)) download += packet.size() diff --git a/client/network/shared/PacketHandler.gd b/client/network/shared/PacketHandler.gd index da83e9e..5cdcb83 100644 --- a/client/network/shared/PacketHandler.gd +++ b/client/network/shared/PacketHandler.gd @@ -16,7 +16,5 @@ enum Packet { @export var packet_type: Packet -var thread_safe: bool - func handle_packet(_data: PackedByteArray): pass \ No newline at end of file diff --git a/client/ui/chat/ChatInput.gd b/client/ui/chat/ChatInput.gd index 404ce51..e90430a 100644 --- a/client/ui/chat/ChatInput.gd +++ b/client/ui/chat/ChatInput.gd @@ -26,5 +26,8 @@ func on_text_submitted(message: String): text = "" release_focus() + if !message: + return + var chat := owner as Chat chat.message_submitted.emit(message)