From 33db2633a282a9ba532143e223e3ae8b4d12fc22 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 3 Apr 2026 19:49:19 +0300 Subject: [PATCH] fix: player name 3d text not updating by Decorator --- src/graphics/render/Decorator.cpp | 11 +++++------ src/logic/scripting/lua/libs/libplayer.cpp | 6 +++--- src/objects/Player.cpp | 14 +++++++++----- src/objects/Player.hpp | 8 ++++---- src/objects/Players.cpp | 4 ++-- 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/graphics/render/Decorator.cpp b/src/graphics/render/Decorator.cpp index 80291194e..59840770a 100644 --- a/src/graphics/render/Decorator.cpp +++ b/src/graphics/render/Decorator.cpp @@ -66,9 +66,7 @@ Decorator::Decorator( continue; } playerTexts[id] = renderer.texts->add(std::make_unique( - util::str2wstr_utf8(player->getName()), - playerNamePreset, - player->getPosition() + player->getName(), playerNamePreset, player->getPosition() )); } } @@ -296,9 +294,7 @@ void Decorator::updateTextNotes() { continue; } playerTexts[id] = renderer.texts->add(std::make_unique( - util::str2wstr_utf8(player->getName()), - playerNamePreset, - player->getPosition() + player->getName(), playerNamePreset, player->getPosition() )); } @@ -315,6 +311,9 @@ void Decorator::updateTextNotes() { position = entity->getInterpolatedPosition(); } note->setPosition(position + glm::vec3(0, 1, 0)); + if (note->getText() != player->getName()) { + note->setText(player->getName()); + } ++textsIter; } } diff --git a/src/logic/scripting/lua/libs/libplayer.cpp b/src/logic/scripting/lua/libs/libplayer.cpp index a978e5c22..e143d368a 100644 --- a/src/logic/scripting/lua/libs/libplayer.cpp +++ b/src/logic/scripting/lua/libs/libplayer.cpp @@ -294,14 +294,14 @@ static int l_set_camera(lua::State* L) { static int l_get_name(lua::State* L) { if (auto player = get_player(L, 1)) { - return lua::pushstring(L, player->getName()); + return lua::pushwstring(L, player->getName()); } return 0; } static int l_set_name(lua::State* L) { if (auto player = get_player(L, 1)) { - player->setName(lua::require_string(L, 2)); + player->setName(lua::require_wstring(L, 2)); } return 0; } @@ -313,7 +313,7 @@ static int l_create(lua::State* L) { } auto& level = require_level(); auto player = level.players->create(playerId); - player->setName(lua::require_string(L, 1)); + player->setName(lua::require_wstring(L, 1)); return lua::pushinteger(L, player->getId()); } diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index d51ae0d4c..fec65d7de 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -20,6 +20,7 @@ #include "world/generator/GeneratorDef.hpp" #include "data/dv_util.hpp" #include "debug/Logger.hpp" +#include "util/stringutil.hpp" static debug::Logger logger("player"); @@ -28,7 +29,7 @@ constexpr int SPAWN_ATTEMPTS_PER_UPDATE = 64; Player::Player( Level& level, int64_t id, - const std::string& name, + const std::wstring& name, glm::vec3 position, float speed, std::shared_ptr inv, @@ -230,11 +231,11 @@ entityid_t Player::getSelectedEntity() const { return selectedEid; } -void Player::setName(const std::string& name) { +void Player::setName(const std::wstring& name) { this->name = name; } -const std::string& Player::getName() const { +const std::wstring& Player::getName() const { return name; } @@ -266,7 +267,7 @@ dv::value Player::serialize() const { auto root = dv::object(); root["id"] = id; - root["name"] = name; + root["name"] = util::wstr2str_utf8(name); root["position"] = dv::to_value(position); root["rotation"] = dv::to_value(rotation); @@ -293,7 +294,10 @@ dv::value Player::serialize() const { void Player::deserialize(const dv::value& src) { src.at("id").get(id); - src.at("name").get(name); + + std::string utf8name; + src.at("name").get(utf8name); + name = util::str2wstr_utf8(utf8name); const auto& posarr = src["position"]; diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index 6fbd4a899..a095ccfb7 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -45,7 +45,7 @@ struct CursorSelection { class Player : public Serializable { Level& level; int64_t id; - std::string name; + std::wstring name; float speed; int chosenSlot; @@ -79,7 +79,7 @@ public: Player( Level& level, int64_t id, - const std::string& name, + const std::wstring& name, glm::vec3 position, float speed, std::shared_ptr inv, @@ -124,8 +124,8 @@ public: entityid_t getSelectedEntity() const; - void setName(const std::string& name); - const std::string& getName() const; + void setName(const std::wstring& name); + const std::wstring& getName() const; const std::shared_ptr& getInventory() const; diff --git a/src/objects/Players.cpp b/src/objects/Players.cpp index c925c9390..c100e3d67 100644 --- a/src/objects/Players.cpp +++ b/src/objects/Players.cpp @@ -79,7 +79,7 @@ Player* Players::create(int64_t id) { auto playerPtr = std::make_unique( level, id, - "", + L"", glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, level.inventories->create(DEF_PLAYER_INVENTORY_SIZE), @@ -134,7 +134,7 @@ void Players::deserialize(const dv::value& src) { auto playerPtr = std::make_unique( level, 0, - "", + L"", glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, level.inventories->create(DEF_PLAYER_INVENTORY_SIZE),