From 792ee63f22733ced0adef672b77faaafbc2522e8 Mon Sep 17 00:00:00 2001 From: GHOST11111100 Date: Fri, 26 Sep 2025 21:59:15 +0300 Subject: [PATCH] Player Attributes (#578) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add max interaction distance functionality to Player class and Lua bindings * feat: add getter and setter for max interaction distance in Player class documentation * feat: add speed and gravity scale properties with corresponding getters and setters in Player class * fix: replace deprecated __max and __min with std::max and std::min in setMaxInteractionDistance * feat: add time scale functionality with getters and setters in World and Engine classes * remove speed and gravity scale functions from player and world libraries * remove time scale setting on world open and close * rename interaction distance functions for consistency * refactor: update interaction distance functions and remove time scale methods * refactor: revert classes.lua to dev * refactor: remove time scale functionality from Engine and World classes * fix: Now I’ve definitely rolled back `classes.lua`. * refactor: remove unused player attributes and clean up player class * Update Player.hpp removed unused methods from Player.cpp --- doc/en/scripting/builtins/libplayer.md | 7 +++++++ doc/ru/scripting/builtins/libplayer.md | 7 +++++++ res/scripts/classes.lua | 2 +- src/logic/PlayerController.cpp | 2 +- src/logic/scripting/lua/libs/libplayer.cpp | 16 ++++++++++++++++ src/network/Network.hpp | 1 - src/objects/Player.cpp | 11 +++++++++++ src/objects/Player.hpp | 9 +++++++++ 8 files changed, 52 insertions(+), 3 deletions(-) diff --git a/doc/en/scripting/builtins/libplayer.md b/doc/en/scripting/builtins/libplayer.md index fa799198..b406f694 100644 --- a/doc/en/scripting/builtins/libplayer.md +++ b/doc/en/scripting/builtins/libplayer.md @@ -89,6 +89,13 @@ player.set_loading_chunks(playerid: int, bool) Getter and setter of the property that determines whether the player is loading chunks. +```lua +player.get_interaction_distance(playerid: int) -> float +player.set_interaction_distance(playerid: int, distance: float) +``` + +Getter and setter of the property for max interaction distance. + ``` lua player.set_spawnpoint(playerid: int, x: number, y: number, z: number) player.get_spawnpoint(playerid: int) -> number, number, number diff --git a/doc/ru/scripting/builtins/libplayer.md b/doc/ru/scripting/builtins/libplayer.md index 2228f42c..c40cd86d 100644 --- a/doc/ru/scripting/builtins/libplayer.md +++ b/doc/ru/scripting/builtins/libplayer.md @@ -89,6 +89,13 @@ player.set_loading_chunks(playerid: int, bool) Геттер и сеттер свойства, определяющего, прогружает ли игрок чанки вокруг. +```lua +player.get_interaction_distance(playerid: int) -> float +player.set_interaction_distance(playerid: int, distance: float) +``` + +Геттер и сеттер свойства, определяющего максимальную дистанцию взаимодействия. + ```lua player.set_spawnpoint(playerid: int, x: number, y: number, z: number) player.get_spawnpoint(playerid: int) -> number, number, number diff --git a/res/scripts/classes.lua b/res/scripts/classes.lua index e950aa0d..23ee45b7 100644 --- a/res/scripts/classes.lua +++ b/res/scripts/classes.lua @@ -289,4 +289,4 @@ network.__process_events = function() cleaned = true end end -end +end \ No newline at end of file diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 8021db51..4e63f76d 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -488,7 +488,7 @@ void PlayerController::updateInteraction(const Input& inputEvents, float delta) } const auto& bindings = inputEvents.getBindings(); bool xkey = bindings.active(BIND_PLAYER_FAST_INTERACTOIN); - float maxDistance = xkey ? 200.0f : 10.0f; + float maxDistance = xkey ? 200.0f : player.getMaxInteractionDistance(); bool longInteraction = interactionTimer <= 0 || xkey; bool lclick = bindings.jactive(BIND_PLAYER_DESTROY) || (longInteraction && bindings.active(BIND_PLAYER_DESTROY)); diff --git a/src/logic/scripting/lua/libs/libplayer.cpp b/src/logic/scripting/lua/libs/libplayer.cpp index d850231d..a9e18d8e 100644 --- a/src/logic/scripting/lua/libs/libplayer.cpp +++ b/src/logic/scripting/lua/libs/libplayer.cpp @@ -181,6 +181,20 @@ static int l_set_loading_chunks(lua::State* L) { return 0; } +static int l_get_interaction_distance(lua::State* L) { + if (auto player = get_player(L, 1)) { + return lua::pushnumber(L, player->getMaxInteractionDistance()); + } + return 0; +} + +static int l_set_interaction_distance(lua::State* L) { + if (auto player = get_player(L, 1)) { + player->setMaxInteractionDistance( static_cast(lua::tonumber(L, 2)) ); + } + return 0; +} + static int l_get_selected_block(lua::State* L) { if (auto player = get_player(L, 1)) { if (player->selection.vox.id == BLOCK_VOID) { @@ -328,6 +342,8 @@ const luaL_Reg playerlib[] = { {"set_instant_destruction", lua::wrap}, {"is_loading_chunks", lua::wrap}, {"set_loading_chunks", lua::wrap}, + {"get_interaction_distance", lua::wrap}, + {"set_interaction_distance", lua::wrap}, {"set_selected_slot", lua::wrap}, {"get_selected_block", lua::wrap}, {"get_selected_entity", lua::wrap}, diff --git a/src/network/Network.hpp b/src/network/Network.hpp index 054b9444..3e9feeda 100644 --- a/src/network/Network.hpp +++ b/src/network/Network.hpp @@ -16,7 +16,6 @@ namespace network { using ServerDatagramCallback = std::function; using ClientDatagramCallback = std::function; - class Requests { public: virtual ~Requests() {} diff --git a/src/objects/Player.cpp b/src/objects/Player.cpp index 2c2fbe24..93e86625 100644 --- a/src/objects/Player.cpp +++ b/src/objects/Player.cpp @@ -196,6 +196,14 @@ void Player::setLoadingChunks(bool flag) { loadingChunks = flag; } +float Player::getMaxInteractionDistance() const { + return maxInteractionDistance; +} + +void Player::setMaxInteractionDistance(float distance) { + maxInteractionDistance = std::max(1.0f, std::min(200.0f, distance)); +} + entityid_t Player::getEntity() const { return eid; } @@ -250,6 +258,7 @@ dv::value Player::serialize() const { root["rotation"] = dv::to_value(rotation); root["spawnpoint"] = dv::to_value(spawnpoint); + root["max-interaction-distance"] = maxInteractionDistance; root["flight"] = flight; root["noclip"] = noclip; root["suspended"] = suspended; @@ -283,6 +292,8 @@ void Player::deserialize(const dv::value& src) { const auto& sparr = src["spawnpoint"]; setSpawnPoint(glm::vec3( sparr[0].asNumber(), sparr[1].asNumber(), sparr[2].asNumber())); + + if (src.has("max-interaction-distance")) maxInteractionDistance = src["max-interaction-distance"].asNumber(); flight = src["flight"].asBoolean(); noclip = src["noclip"].asBoolean(); diff --git a/src/objects/Player.hpp b/src/objects/Player.hpp index b9999c78..313966b0 100644 --- a/src/objects/Player.hpp +++ b/src/objects/Player.hpp @@ -46,6 +46,7 @@ class Player : public Serializable { int64_t id; std::string name; float speed; + int chosenSlot; glm::vec3 position; glm::vec3 spawnpoint {}; @@ -56,6 +57,10 @@ class Player : public Serializable { bool infiniteItems = true; bool instantDestruction = true; bool loadingChunks = true; + + // attributes + float maxInteractionDistance = 10.0f; + entityid_t eid = ENTITY_AUTO; entityid_t selectedEid = 0; @@ -90,6 +95,7 @@ public: void setChosenSlot(int index); int getChosenSlot() const; + float getSpeed() const; bool isSuspended() const; @@ -110,6 +116,9 @@ public: bool isLoadingChunks() const; void setLoadingChunks(bool flag); + float getMaxInteractionDistance() const; + void setMaxInteractionDistance(float distance); + entityid_t getEntity() const; void setEntity(entityid_t eid);