From a47b650591b5aef3d7bbe3a9a59d1577d41e9f7a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 4 Oct 2024 01:53:17 +0300 Subject: [PATCH] add core:struct_air --- res/textures/blocks/struct_air.png | Bin 0 -> 6361 bytes src/constants.hpp | 1 + src/core_defs.cpp | 23 ++++++++++++++++++++--- src/core_defs.hpp | 3 ++- src/world/generator/WorldGenerator.cpp | 6 +++++- 5 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 res/textures/blocks/struct_air.png diff --git a/res/textures/blocks/struct_air.png b/res/textures/blocks/struct_air.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a7de095933be099b152d1b7441abfa0b2d8971 GIT binary patch literal 6361 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 a>Lu7%@be_{(k|4#0u2_ literal 0 HcmV?d00001 diff --git a/src/constants.hpp b/src/constants.hpp index 9766bcc8..e99c1c7f 100644 --- a/src/constants.hpp +++ b/src/constants.hpp @@ -24,6 +24,7 @@ inline constexpr uint MAX_OPEN_REGION_FILES = 32; inline constexpr blockid_t BLOCK_AIR = 0; inline constexpr blockid_t BLOCK_OBSTACLE = 1; +inline constexpr blockid_t BLOCK_STRUCT_AIR = 2; inline constexpr itemid_t ITEM_EMPTY = 0; inline constexpr entityid_t ENTITY_NONE = 0; diff --git a/src/core_defs.cpp b/src/core_defs.cpp index 5fe46341..7d19acd1 100644 --- a/src/core_defs.cpp +++ b/src/core_defs.cpp @@ -23,9 +23,10 @@ void corecontent::setup(EnginePaths* paths, ContentBuilder* builder) { block.model = BlockModel::none; block.pickingItem = CORE_EMPTY; } - - ItemDef& item = builder->items.create(CORE_EMPTY); - item.iconType = item_icon_type::none; + { + ItemDef& item = builder->items.create(CORE_EMPTY); + item.iconType = item_icon_type::none; + } auto bindsFile = paths->getResourcesFolder()/fs::path("bindings.toml"); if (fs::is_regular_file(bindsFile)) { @@ -47,4 +48,20 @@ void corecontent::setup(EnginePaths* paths, ContentBuilder* builder) { item.placingBlock = CORE_OBSTACLE; item.caption = block.caption; } + { + Block& block = builder->blocks.create(CORE_STRUCT_AIR); + for (uint i = 0; i < 6; i++) { + block.textureFaces[i] = "struct_air"; + } + block.drawGroup = -1; + block.skyLightPassing = true; + block.lightPassing = true; + block.hitboxes = {AABB()}; + block.obstacle = false; + ItemDef& item = builder->items.create(CORE_STRUCT_AIR+".item"); + item.iconType = item_icon_type::block; + item.icon = CORE_STRUCT_AIR; + item.placingBlock = CORE_STRUCT_AIR; + item.caption = block.caption; + } } diff --git a/src/core_defs.hpp b/src/core_defs.hpp index ccfa2e69..0f25de3a 100644 --- a/src/core_defs.hpp +++ b/src/core_defs.hpp @@ -3,8 +3,9 @@ #include inline const std::string CORE_EMPTY = "core:empty"; -inline const std::string CORE_OBSTACLE = "core:obstacle"; inline const std::string CORE_AIR = "core:air"; +inline const std::string CORE_OBSTACLE = "core:obstacle"; +inline const std::string CORE_STRUCT_AIR = "core:struct_air"; inline const std::string TEXTURE_NOTFOUND = "notfound"; diff --git a/src/world/generator/WorldGenerator.cpp b/src/world/generator/WorldGenerator.cpp index 365a63fc..e31f3cb0 100644 --- a/src/world/generator/WorldGenerator.cpp +++ b/src/world/generator/WorldGenerator.cpp @@ -348,7 +348,11 @@ void WorldGenerator::generate(voxel* voxels, int chunkX, int chunkZ) { const auto& structVoxel = structVoxels[vox_index(x, y, z, size.x, size.z)]; if (structVoxel.id) { - voxels[vox_index(sx, sy, sz)] = structVoxel; + if (structVoxel.id == BLOCK_STRUCT_AIR) { + voxels[vox_index(sx, sy, sz)] = {0, {}}; + } else { + voxels[vox_index(sx, sy, sz)] = structVoxel; + } } } }