fix: player name 3d text not updating by Decorator

This commit is contained in:
MihailRis 2026-04-03 19:49:19 +03:00
parent a9d185256a
commit 33db2633a2
5 changed files with 23 additions and 20 deletions

View file

@ -66,9 +66,7 @@ Decorator::Decorator(
continue;
}
playerTexts[id] = renderer.texts->add(std::make_unique<TextNote>(
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<TextNote>(
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;
}
}

View file

@ -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());
}

View file

@ -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<Inventory> 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"];

View file

@ -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<Inventory> 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<Inventory>& getInventory() const;

View file

@ -79,7 +79,7 @@ Player* Players::create(int64_t id) {
auto playerPtr = std::make_unique<Player>(
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<Player>(
level,
0,
"",
L"",
glm::vec3(0, DEF_PLAYER_Y, 0),
DEF_PLAYER_SPEED,
level.inventories->create(DEF_PLAYER_INVENTORY_SIZE),