From acc4d2540d24b7cf742f675a12f621bf9e1834e3 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 05:38:18 +0300 Subject: [PATCH] add player name --- doc/en/scripting/builtins/libplayer.md | 7 +++++++ doc/ru/scripting/builtins/libplayer.md | 7 +++++++ src/logic/scripting/lua/libs/libplayer.cpp | 16 ++++++++++++++++ src/objects/Player.cpp | 12 ++++++++++++ src/objects/Player.hpp | 7 ++++++- src/objects/Players.cpp | 2 ++ 6 files changed, 50 insertions(+), 1 deletion(-) diff --git a/doc/en/scripting/builtins/libplayer.md b/doc/en/scripting/builtins/libplayer.md index 99482c68..f71b8c95 100644 --- a/doc/en/scripting/builtins/libplayer.md +++ b/doc/en/scripting/builtins/libplayer.md @@ -77,6 +77,13 @@ player.get_spawnpoint(playerid: int) -> number, number, number Spawn point setter and getter +```lua +player.set_name(playerid: int, name: str) +player.get_name(playerid: int) -> str +``` + +Player name setter and getter + ```lua player.get_selected_block(playerid: int) -> x,y,z ``` diff --git a/doc/ru/scripting/builtins/libplayer.md b/doc/ru/scripting/builtins/libplayer.md index 179e6b18..916fd4ab 100644 --- a/doc/ru/scripting/builtins/libplayer.md +++ b/doc/ru/scripting/builtins/libplayer.md @@ -77,6 +77,13 @@ player.get_spawnpoint(playerid: int) -> number, number, number Сеттер и геттер точки спавна игрока +```lua +player.set_name(playerid: int, name: str) +player.get_name(playerid: int) -> str +``` + +Сеттер и геттер имени игрока + ```lua player.get_selected_block(playerid: int) -> x,y,z ``` diff --git a/src/logic/scripting/lua/libs/libplayer.cpp b/src/logic/scripting/lua/libs/libplayer.cpp index 0411fef9..ff2d6217 100644 --- a/src/logic/scripting/lua/libs/libplayer.cpp +++ b/src/logic/scripting/lua/libs/libplayer.cpp @@ -236,6 +236,20 @@ static int l_set_camera(lua::State* L) { return 0; } +static int l_get_name(lua::State* L) { + if (auto player = get_player(L, 1)) { + return lua::pushstring(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)); + } + return 0; +} + const luaL_Reg playerlib[] = { {"get_pos", lua::wrap}, {"set_pos", lua::wrap}, @@ -261,5 +275,7 @@ const luaL_Reg playerlib[] = { {"set_entity", lua::wrap}, {"get_camera", lua::wrap}, {"set_camera", lua::wrap}, + {"get_name", lua::wrap}, + {"set_name", lua::wrap}, {NULL, NULL} }; diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index a3ddb81e..ae8c0139 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -30,6 +30,7 @@ constexpr int SPAWN_ATTEMPTS_PER_UPDATE = 64; Player::Player( Level* level, int64_t id, + const std::string& name, glm::vec3 position, float speed, std::shared_ptr inv, @@ -37,6 +38,7 @@ Player::Player( ) : level(level), id(id), + name(name), speed(speed), chosenSlot(0), position(position), @@ -269,6 +271,14 @@ entityid_t Player::getSelectedEntity() const { return selectedEid; } +void Player::setName(const std::string& name) { + this->name = name; +} + +const std::string& Player::getName() const { + return name; +} + const std::shared_ptr& Player::getInventory() const { return inventory; } @@ -285,6 +295,7 @@ dv::value Player::serialize() const { auto root = dv::object(); root["id"] = id; + root["name"] = name; root["position"] = dv::to_value(position); root["rotation"] = dv::to_value(cam); @@ -308,6 +319,7 @@ dv::value Player::serialize() const { void Player::deserialize(const dv::value& src) { src.at("id").get(id); + src.at("name").get(name); const auto& posarr = src["position"]; diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index ad60f1b8..920e06e4 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -42,6 +42,7 @@ struct CursorSelection { class Player : public Serializable { Level* level; int64_t id; + std::string name; float speed; int chosenSlot; glm::vec3 position; @@ -63,6 +64,7 @@ public: Player( Level* level, int64_t id, + const std::string& name, glm::vec3 position, float speed, std::shared_ptr inv, @@ -100,9 +102,12 @@ public: entityid_t getSelectedEntity() const; + void setName(const std::string& name); + const std::string& getName() const; + const std::shared_ptr& getInventory() const; - glm::vec3 getPosition() const { + const glm::vec3& getPosition() const { return position; } diff --git a/src/objects/Players.cpp b/src/objects/Players.cpp index 6fe85a21..70f0a769 100644 --- a/src/objects/Players.cpp +++ b/src/objects/Players.cpp @@ -23,6 +23,7 @@ Player* Players::create() { auto playerPtr = std::make_unique( level, level->getWorld()->getInfo().nextPlayerId++, + "", glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, level->inventories->create(DEF_PLAYER_INVENTORY_SIZE), @@ -53,6 +54,7 @@ void Players::deserialize(const dv::value& src) { auto playerPtr = std::make_unique( level, 0, + "", glm::vec3(0, DEF_PLAYER_Y, 0), DEF_PLAYER_SPEED, level->inventories->create(DEF_PLAYER_INVENTORY_SIZE),