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; continue;
} }
playerTexts[id] = renderer.texts->add(std::make_unique<TextNote>( playerTexts[id] = renderer.texts->add(std::make_unique<TextNote>(
util::str2wstr_utf8(player->getName()), player->getName(), playerNamePreset, player->getPosition()
playerNamePreset,
player->getPosition()
)); ));
} }
} }
@ -296,9 +294,7 @@ void Decorator::updateTextNotes() {
continue; continue;
} }
playerTexts[id] = renderer.texts->add(std::make_unique<TextNote>( playerTexts[id] = renderer.texts->add(std::make_unique<TextNote>(
util::str2wstr_utf8(player->getName()), player->getName(), playerNamePreset, player->getPosition()
playerNamePreset,
player->getPosition()
)); ));
} }
@ -315,6 +311,9 @@ void Decorator::updateTextNotes() {
position = entity->getInterpolatedPosition(); position = entity->getInterpolatedPosition();
} }
note->setPosition(position + glm::vec3(0, 1, 0)); note->setPosition(position + glm::vec3(0, 1, 0));
if (note->getText() != player->getName()) {
note->setText(player->getName());
}
++textsIter; ++textsIter;
} }
} }

View file

@ -294,14 +294,14 @@ static int l_set_camera(lua::State* L) {
static int l_get_name(lua::State* L) { static int l_get_name(lua::State* L) {
if (auto player = get_player(L, 1)) { if (auto player = get_player(L, 1)) {
return lua::pushstring(L, player->getName()); return lua::pushwstring(L, player->getName());
} }
return 0; return 0;
} }
static int l_set_name(lua::State* L) { static int l_set_name(lua::State* L) {
if (auto player = get_player(L, 1)) { if (auto player = get_player(L, 1)) {
player->setName(lua::require_string(L, 2)); player->setName(lua::require_wstring(L, 2));
} }
return 0; return 0;
} }
@ -313,7 +313,7 @@ static int l_create(lua::State* L) {
} }
auto& level = require_level(); auto& level = require_level();
auto player = level.players->create(playerId); 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()); return lua::pushinteger(L, player->getId());
} }

View file

@ -20,6 +20,7 @@
#include "world/generator/GeneratorDef.hpp" #include "world/generator/GeneratorDef.hpp"
#include "data/dv_util.hpp" #include "data/dv_util.hpp"
#include "debug/Logger.hpp" #include "debug/Logger.hpp"
#include "util/stringutil.hpp"
static debug::Logger logger("player"); static debug::Logger logger("player");
@ -28,7 +29,7 @@ constexpr int SPAWN_ATTEMPTS_PER_UPDATE = 64;
Player::Player( Player::Player(
Level& level, Level& level,
int64_t id, int64_t id,
const std::string& name, const std::wstring& name,
glm::vec3 position, glm::vec3 position,
float speed, float speed,
std::shared_ptr<Inventory> inv, std::shared_ptr<Inventory> inv,
@ -230,11 +231,11 @@ entityid_t Player::getSelectedEntity() const {
return selectedEid; return selectedEid;
} }
void Player::setName(const std::string& name) { void Player::setName(const std::wstring& name) {
this->name = name; this->name = name;
} }
const std::string& Player::getName() const { const std::wstring& Player::getName() const {
return name; return name;
} }
@ -266,7 +267,7 @@ dv::value Player::serialize() const {
auto root = dv::object(); auto root = dv::object();
root["id"] = id; root["id"] = id;
root["name"] = name; root["name"] = util::wstr2str_utf8(name);
root["position"] = dv::to_value(position); root["position"] = dv::to_value(position);
root["rotation"] = dv::to_value(rotation); root["rotation"] = dv::to_value(rotation);
@ -293,7 +294,10 @@ dv::value Player::serialize() const {
void Player::deserialize(const dv::value& src) { void Player::deserialize(const dv::value& src) {
src.at("id").get(id); 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"]; const auto& posarr = src["position"];

View file

@ -45,7 +45,7 @@ struct CursorSelection {
class Player : public Serializable { class Player : public Serializable {
Level& level; Level& level;
int64_t id; int64_t id;
std::string name; std::wstring name;
float speed; float speed;
int chosenSlot; int chosenSlot;
@ -79,7 +79,7 @@ public:
Player( Player(
Level& level, Level& level,
int64_t id, int64_t id,
const std::string& name, const std::wstring& name,
glm::vec3 position, glm::vec3 position,
float speed, float speed,
std::shared_ptr<Inventory> inv, std::shared_ptr<Inventory> inv,
@ -124,8 +124,8 @@ public:
entityid_t getSelectedEntity() const; entityid_t getSelectedEntity() const;
void setName(const std::string& name); void setName(const std::wstring& name);
const std::string& getName() const; const std::wstring& getName() const;
const std::shared_ptr<Inventory>& getInventory() 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>( auto playerPtr = std::make_unique<Player>(
level, level,
id, id,
"", L"",
glm::vec3(0, DEF_PLAYER_Y, 0), glm::vec3(0, DEF_PLAYER_Y, 0),
DEF_PLAYER_SPEED, DEF_PLAYER_SPEED,
level.inventories->create(DEF_PLAYER_INVENTORY_SIZE), level.inventories->create(DEF_PLAYER_INVENTORY_SIZE),
@ -134,7 +134,7 @@ void Players::deserialize(const dv::value& src) {
auto playerPtr = std::make_unique<Player>( auto playerPtr = std::make_unique<Player>(
level, level,
0, 0,
"", L"",
glm::vec3(0, DEF_PLAYER_Y, 0), glm::vec3(0, DEF_PLAYER_Y, 0),
DEF_PLAYER_SPEED, DEF_PLAYER_SPEED,
level.inventories->create(DEF_PLAYER_INVENTORY_SIZE), level.inventories->create(DEF_PLAYER_INVENTORY_SIZE),