From 5a3f28f2b5dfbd00e7f9d26548df6be02edfabc2 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 17 Jul 2024 20:15:45 +0300 Subject: [PATCH] add entities.name(...) and entity:get_name(...) --- doc/en/scripting/builtins/libentities.md | 3 +++ doc/en/scripting/ecs.md | 3 +++ doc/ru/scripting/builtins/libentities.md | 3 +++ doc/ru/scripting/ecs.md | 3 +++ res/modules/internal/stdcomp.lua | 1 + src/logic/scripting/lua/libentity.cpp | 9 +++++++++ 6 files changed, 22 insertions(+) diff --git a/doc/en/scripting/builtins/libentities.md b/doc/en/scripting/builtins/libentities.md index 2dfe2736..08fbb809 100644 --- a/doc/en/scripting/builtins/libentities.md +++ b/doc/en/scripting/builtins/libentities.md @@ -15,6 +15,9 @@ entities.spawn(name: str, pos: vec3, [optional] args: table) -- Checks the existence of an entity by a unique identifier. entities.exists(uid: int) -> bool +-- Returns entity name (string ID). +entities.name(uid: int) -> str + -- Returns a table of all loaded entities entities.get_all() -> table diff --git a/doc/en/scripting/ecs.md b/doc/en/scripting/ecs.md index b509ba1b..8f6a1ce8 100644 --- a/doc/en/scripting/ecs.md +++ b/doc/en/scripting/ecs.md @@ -15,6 +15,9 @@ The entity object is available in components as a global variable **entity**. -- Deletes an entity (the entity may continue to exist until the frame ends, but will not be displayed in that frame) entity:despawn() +-- Returns entity name (string ID) +entity:get_name() + -- Returns the name of the entity skeleton entity:get_skeleton() -> str -- Replaces the entity skeleton diff --git a/doc/ru/scripting/builtins/libentities.md b/doc/ru/scripting/builtins/libentities.md index fa805797..a01aefcb 100644 --- a/doc/ru/scripting/builtins/libentities.md +++ b/doc/ru/scripting/builtins/libentities.md @@ -15,6 +15,9 @@ entities.spawn(name: str, pos: vec3, [optional] args: table) -- Проверяет наличие сущности по уникальному идентификатору. entities.exists(uid: int) -> bool +-- Возвращает имя сущности (строковый ID). +entities.name(uid: int) -> str + -- Возвращает таблицу всех загруженных сущностей entities.get_all() -> table diff --git a/doc/ru/scripting/ecs.md b/doc/ru/scripting/ecs.md index 52e94d62..c713a3a0 100644 --- a/doc/ru/scripting/ecs.md +++ b/doc/ru/scripting/ecs.md @@ -16,6 +16,9 @@ Lua. -- Удаляет сущность (сущность может продолжать существовать до завершения кадра, но не будет отображена в этом кадре) entity:despawn() +-- Возвращает имя сущности (строковый ID) +entity:get_name() + -- Возращает имя скелета сущности entity:get_skeleton() -> str -- Заменяет скелет сущности diff --git a/res/modules/internal/stdcomp.lua b/res/modules/internal/stdcomp.lua index e3f5589f..55c80bd4 100644 --- a/res/modules/internal/stdcomp.lua +++ b/res/modules/internal/stdcomp.lua @@ -62,6 +62,7 @@ local Entity = {__index={ get_component=function(self, name) return self.components[name] end, has_component=function(self, name) return self.components[name] ~= nil end, get_uid=function(self) return self.eid end, + get_name=function(self) return entities.name(self.eid) end, }} local entities = {} diff --git a/src/logic/scripting/lua/libentity.cpp b/src/logic/scripting/lua/libentity.cpp index c2790737..d044bdcc 100644 --- a/src/logic/scripting/lua/libentity.cpp +++ b/src/logic/scripting/lua/libentity.cpp @@ -2,6 +2,7 @@ #include "../../../objects/Player.hpp" #include "../../../objects/Entities.hpp" +#include "../../../objects/EntityDef.hpp" #include "../../../objects/rigging.hpp" #include "../../../physics/Hitbox.hpp" #include "../../../window/Camera.hpp" @@ -15,6 +16,13 @@ static int l_exists(lua::State* L) { return lua::pushboolean(L, get_entity(L, 1).has_value()); } +static int l_name(lua::State* L) { + if (auto entity = get_entity(L, 1)) { + return lua::pushstring(L, entity->getDef().name); + } + return 0; +} + static int l_spawn(lua::State* L) { auto level = controller->getLevel(); auto defname = lua::tostring(L, 1); @@ -150,6 +158,7 @@ static int l_raycast(lua::State* L) { const luaL_Reg entitylib [] = { {"exists", lua::wrap}, + {"name", lua::wrap}, {"spawn", lua::wrap}, {"despawn", lua::wrap}, {"get_skeleton", lua::wrap},