diff --git a/doc/en/scripting/builtins/libentities.md b/doc/en/scripting/builtins/libentities.md index c0a5d260..cb46a3a5 100644 --- a/doc/en/scripting/builtins/libentities.md +++ b/doc/en/scripting/builtins/libentities.md @@ -23,6 +23,9 @@ entities.exists(uid: int) -> bool -- Returns entity definition index by UID entities.get_def(uid: int) -> int +-- Returns entity 'hitbox' property value +entities.def_hitbox(id: int) -> vec3 + -- Returns entity definition name by index (string ID). entities.def_name(id: int) -> str diff --git a/doc/ru/entity-properties.md b/doc/ru/entity-properties.md index 3a6825ac..ec11306c 100644 --- a/doc/ru/entity-properties.md +++ b/doc/ru/entity-properties.md @@ -99,4 +99,4 @@ | save-skeleton-pose | поза скелета сущности | false | | save-skeleton-textures | динамически назначенные текстуры | false | | save-body-velocity | скорость движения тела | true | -| save-body-settings | измененные настройки тела
(type, damping, crouching) | false | +| save-body-settings | измененные настройки тела
(type, damping, crouching) | true | diff --git a/doc/ru/scripting/builtins/libentities.md b/doc/ru/scripting/builtins/libentities.md index 93275e5b..1e0cc6c0 100644 --- a/doc/ru/scripting/builtins/libentities.md +++ b/doc/ru/scripting/builtins/libentities.md @@ -26,6 +26,9 @@ entities.get_def(uid: int) -> int -- Возвращает имя определения сущности по индексу (строковый ID). entities.def_name(id: int) -> str +-- Возвращает значение свойства 'hitbox' сущности +entities.def_hitbox(id: int) -> vec3 + -- Возвращает индекс определения сущности по имени (числовой ID). entities.def_index(name: str) -> int diff --git a/res/layouts/pages/content_menu.xml b/res/layouts/pages/content_menu.xml index aa9f7dd9..097e068e 100644 --- a/res/layouts/pages/content_menu.xml +++ b/res/layouts/pages/content_menu.xml @@ -3,6 +3,7 @@ + diff --git a/res/scripts/stdcmd.lua b/res/scripts/stdcmd.lua index c5b832b7..f99f04c2 100644 --- a/res/scripts/stdcmd.lua +++ b/res/scripts/stdcmd.lua @@ -111,18 +111,22 @@ console.add_command( end ) console.add_command( - "blocks.fill id:str x:num~pos.x y:num~pos.y z:num~pos.z w:int h:int d:int", + "blocks.fill id:str x1:int~pos.x y1:int~pos.y z1:int~pos.z ".. + "x2:int~pos.x y2:int~pos.y z2:int~pos.z", "Fill specified zone with blocks", function(args, kwargs) - local name, x, y, z, w, h, d = unpack(args) + local name, x1,y1,z1, x2,y2,z2 = unpack(args) local id = block.index(name) - for ly = 0, h - 1 do - for lz = 0, d - 1 do - for lx = 0, w - 1 do - block.set(x + lx, y + ly, z + lz, id) + for y=y1,y2 do + for z=z1,z2 do + for x=x1,x2 do + block.set(x, y, z, id) end end end + local w = math.floor(math.abs(x2-x1+1) + 0.5) + local h = math.floor(math.abs(y2-y1+1) + 0.5) + local d = math.floor(math.abs(z2-z1+1) + 0.5) return tostring(w * h * d) .. " blocks set" end ) @@ -151,22 +155,24 @@ console.add_command( ) console.add_command( - "fragment.save x:int y:int z:int w:int h:int d:int name:str='untitled' crop:bool=false", + "fragment.save x1:int~pos.x y1:int~pos.y z1:int~pos.z ".. + "x2:int~pos.x y2:int~pos.y z2:int~pos.z ".. + "name:str='untitled' crop:bool=false", "Save fragment", function(args, kwargs) - local x = args[1] - local y = args[2] - local z = args[3] + local x1 = args[1] + local y1 = args[2] + local z1 = args[3] - local w = args[4] - local h = args[5] - local d = args[6] + local x2 = args[4] + local y2 = args[5] + local z2 = args[6] local name = args[7] local crop = args[8] local fragment = generation.create_fragment( - {x, y, z}, {x + w, y + h, z + d}, crop, false + {x1, y1, z1}, {x2, y2, z2}, crop, false ) local filename = 'export:'..name..'.vox' generation.save_fragment(fragment, filename, crop) diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt index 942d69a9..2b907a59 100644 --- a/res/texts/ru_RU.txt +++ b/res/texts/ru_RU.txt @@ -40,6 +40,7 @@ menu.Save and Quit to Menu=Сохранить и Выйти в Меню menu.Settings=Настройки menu.Contents Menu=Меню контентпаков menu.Open data folder=Открыть папку данных +menu.Open content folder=Открыть папку [content] world.Seed=Зерно world.Name=Название diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp index 4290312d..895b28f9 100644 --- a/src/content/ContentBuilder.cpp +++ b/src/content/ContentBuilder.cpp @@ -44,6 +44,8 @@ std::unique_ptr ContentBuilder::build() { def.rt.hitboxes[i].push_back(aabb); } } + } else { + def.rt.hitboxes->emplace_back(AABB(glm::vec3(1.0f))); } blockDefsIndices.push_back(&def); diff --git a/src/logic/scripting/lua/libs/libentity.cpp b/src/logic/scripting/lua/libs/libentity.cpp index 845e4e96..b6fef820 100644 --- a/src/logic/scripting/lua/libs/libentity.cpp +++ b/src/logic/scripting/lua/libs/libentity.cpp @@ -34,6 +34,14 @@ static int l_def_name(lua::State* L) { } return 0; } + +static int l_def_hitbox(lua::State* L) { + if (auto def = require_entity_def(L)) { + return lua::pushvec(L, def->hitbox); + } + return 0; +} + static int l_defs_count(lua::State* L) { return lua::pushinteger(L, indices->entities.count()); } @@ -202,6 +210,7 @@ const luaL_Reg entitylib[] = { {"exists", lua::wrap}, {"def_index", lua::wrap}, {"def_name", lua::wrap}, + {"def_hitbox", lua::wrap}, {"get_def", lua::wrap}, {"defs_count", lua::wrap}, {"spawn", lua::wrap}, diff --git a/src/objects/EntityDef.cpp b/src/objects/EntityDef.cpp index 8fa9c129..4cc85871 100644 --- a/src/objects/EntityDef.cpp +++ b/src/objects/EntityDef.cpp @@ -1,4 +1,6 @@ #include "EntityDef.hpp" + + void EntityDef::cloneTo(EntityDef& dst) { dst.components = components; dst.bodyType = bodyType; @@ -8,5 +10,4 @@ void EntityDef::cloneTo(EntityDef& dst) { dst.skeletonName = skeletonName; dst.blocking = blocking; dst.save = save; - -} \ No newline at end of file +} diff --git a/src/objects/EntityDef.hpp b/src/objects/EntityDef.hpp index dec61730..53c69c95 100644 --- a/src/objects/EntityDef.hpp +++ b/src/objects/EntityDef.hpp @@ -45,7 +45,7 @@ struct EntityDef { } skeleton; struct { bool velocity = true; - bool settings = false; + bool settings = true; } body; } save {}; diff --git a/src/world/generator/VoxelFragment.cpp b/src/world/generator/VoxelFragment.cpp index b6e65094..2d287b0b 100644 --- a/src/world/generator/VoxelFragment.cpp +++ b/src/world/generator/VoxelFragment.cpp @@ -21,7 +21,7 @@ std::unique_ptr VoxelFragment::create( bool entities ) { auto start = glm::min(a, b); - auto size = glm::abs(a - b); + auto size = glm::abs(a - b) + 1; if (crop) { VoxelsVolume volume(size.x, size.y, size.z);