diff --git a/doc/en/block-properties.md b/doc/en/block-properties.md index 2c9dffac..602df3eb 100644 --- a/doc/en/block-properties.md +++ b/doc/en/block-properties.md @@ -67,6 +67,10 @@ Light ignores block if **true** Vertical sky light ray ignores block if **true**. (used for water) +### *shadeless* + +Turns off block model shading + ## Physics ### *obstacle* diff --git a/doc/ru/block-properties.md b/doc/ru/block-properties.md index 1fca4f1b..1c9c92ed 100644 --- a/doc/ru/block-properties.md +++ b/doc/ru/block-properties.md @@ -2,16 +2,16 @@ ## Вид -### Текстура - `texture` +### Текстура - *texture* Название текстуры блока (указывается только имя, без расширения или пути к файлу) Файл текстуры должен находиться в `res/textures/blocks/` и иметь формат **png** -### Текстурирование сторон - `texture-faces` +### Текстурирование сторон - *texture-faces* >[!IMPORTANT] -> Не может использоваться одновременно с `texture` +> Не может использоваться одновременно с *texture* Массив из 6 названий текстур, позволяющих указать их для каждой из сторон отдельно. @@ -27,7 +27,7 @@ ] ``` -### Модель - `model` +### Модель - *model* Модель блока из списка: - "block" - используется по-умолчанию для всех обычных блоков @@ -35,12 +35,12 @@ - "X" - модель травы (крест из двух спрайтов) - "aabb" - модель, соответствующая хитбоксу блока (составной хитбокс будет объединен в один). Примеры: трубы, лампочки, панели. -### Группа отрисовки - `draw-group` +### Группа отрисовки - *draw-group* Целое число определяющее номер группы отрисовки данного блока. Актуально для полупрозрачных блоков - решает проблемы невидимых сторон блоков за этим блоком. -### Вращение - `rotation` +### Вращение - *rotation* Профиль вращения (набор положений, в которые можно установить блок) из списка: @@ -50,7 +50,7 @@ ## Освещение -### Излучение - `emission` +### Излучение - *emission*: Массив из трех целых чисел - R, G, B освещения от 0 до 15. @@ -61,21 +61,26 @@ - `[0, 0, 0]` - блок не излучает свет (по-умолчанию) -### Светопроводимость - `light-passing` +### Светопроводимость - *light-passing* При значении `true` блок проводит свет от излучающих блоков. -### Солнечная светопроводимость - `sky-light-passing` +### Солнечная светопроводимость - *sky-light-passing* При значении `true` блок не препятствует прохождению вертикального луча солнечного света. + +### Без освещения - *shadeless* + +Выключает освещение на модели блока. + ## Физика -### Препятствие - `obstacle`: +### Препятствие - *obstacle* Значение false отключает хитбокс у блока (позволяет игроку проходить сквозь блок) -### Хитбокс - `hitbox`: +### Хитбокс - *hitbox* Массив из 6 чисел описывающих смещение и размер хитбокса блока. @@ -89,50 +94,50 @@ - смещен на 0.0 м вверх - смещен на 0.5 м на север -### Приземленность - `grounded` +### Приземленность - *grounded* Блок может быть установлен только на полный блок. Разрушается при разрушении блока под ним. -### Выделяемость - `selectable` +### Выделяемость - *selectable* При значении в `false` курсор будет игнорировать блок, выделяя тот, что находится за ним. -### Заменяемость - `replaceable` +### Заменяемость - *replaceable* При значении в `true` на месте блока можно установить любой другой блок. Пример: вода, трава, цветок. -### Разрушаемость - `breakable` +### Разрушаемость - *breakable* При значении в `false` блок нельзя сломать. ## Инвентарь -### Скрытый блок - `hidden` +### Скрытый блок - *hidden* -При значении в `true` блок не появляется в инвентаре и для него не генерируется предмет, поэтому c 0.17 требуется указать свойство `picking-item` +При значении в `true` блок не появляется в инвентаре и для него не генерируется предмет, поэтому c 0.17 требуется указать свойство *picking-item* -### Подбираемый предмет - `picking-item` +### Подбираемый предмет - *picking-item* Предмет, который будет выбран при нажатии средней кнопкой мыши на блок. Пример: блок `door:door_open` скрыт (hidden) поэтому указывается `picking-item: "door:door.item"` -### Имя скрипта - `script-name` +### Имя скрипта - *script-name* Позволяет указать название скрипта блока. Свойство обеспечивает возможность использования одного скрипта для нескольких блоков. Название указывается без `пак:scripts/` и расширения. -### Имя макета UI - `ui-layout` +### Имя макета UI - *ui-layout* Позволяет указать id XML-макета интерфейса блока. По-умолчанию используется строковый id блока. -### Размер инвентаря - `inventory-size` +### Размер инвентаря - *inventory-size* Число слотов инвентаря блока. По-умолчанию - 0 (инвентарь отсутствует) ## Расширенные блоки -### Размер блока - `size` +### Размер блока - *size* Массив из трех целых чисел. Значение по-умолчанию - `[1, 1, 1]`. diff --git a/res/content/base/blocks/blue_lamp.json b/res/content/base/blocks/blue_lamp.json index 18f48ae3..cfded63b 100644 --- a/res/content/base/blocks/blue_lamp.json +++ b/res/content/base/blocks/blue_lamp.json @@ -1,5 +1,6 @@ { "texture": "blue_lamp", "emission": [0, 0, 15], + "shadeless": true, "material": "base:glass" } diff --git a/res/content/base/blocks/green_lamp.json b/res/content/base/blocks/green_lamp.json index 4f7e2cfa..55264976 100644 --- a/res/content/base/blocks/green_lamp.json +++ b/res/content/base/blocks/green_lamp.json @@ -1,5 +1,6 @@ { "texture": "green_lamp", "emission": [0, 15, 0], + "shadeless": true, "material": "base:glass" } diff --git a/res/content/base/blocks/lamp.json b/res/content/base/blocks/lamp.json index 1af83c3b..7d79c1a1 100644 --- a/res/content/base/blocks/lamp.json +++ b/res/content/base/blocks/lamp.json @@ -1,4 +1,5 @@ { "texture": "lamp", - "emission": [15, 14, 13] -} \ No newline at end of file + "emission": [15, 14, 13], + "shadeless": true +} diff --git a/res/content/base/blocks/lightbulb.json b/res/content/base/blocks/lightbulb.json index a22cfaf3..7a1ca235 100644 --- a/res/content/base/blocks/lightbulb.json +++ b/res/content/base/blocks/lightbulb.json @@ -7,5 +7,6 @@ "rotation": "pipe", "light-passing": true, "sky-light-passing": true, + "shadeless": true, "material": "base:glass" } diff --git a/res/content/base/blocks/red_lamp.json b/res/content/base/blocks/red_lamp.json index fe7e8cb1..06617a21 100644 --- a/res/content/base/blocks/red_lamp.json +++ b/res/content/base/blocks/red_lamp.json @@ -1,5 +1,6 @@ { "texture": "red_lamp", "emission": [15, 0, 0], + "shadeless": true, "material": "base:glass" } diff --git a/res/content/base/blocks/torch.json b/res/content/base/blocks/torch.json index b5b76e4f..2a914a94 100644 --- a/res/content/base/blocks/torch.json +++ b/res/content/base/blocks/torch.json @@ -11,6 +11,7 @@ "model": "aabb", "hitbox": [0.4375, 0.0, 0.4375, 0.125, 0.5, 0.125], "light-passing": true, + "shadeless": true, "obstacle": false, "rotation": "pipe" } diff --git a/src/content/ContentLoader.cpp b/src/content/ContentLoader.cpp index 68cb44d7..73d8b3a3 100644 --- a/src/content/ContentLoader.cpp +++ b/src/content/ContentLoader.cpp @@ -208,11 +208,12 @@ void ContentLoader::loadBlock(Block& def, const std::string& name, const fs::pat root->flag("obstacle", def.obstacle); root->flag("replaceable", def.replaceable); root->flag("light-passing", def.lightPassing); + root->flag("sky-light-passing", def.skyLightPassing); + root->flag("shadeless", def.shadeless); root->flag("breakable", def.breakable); root->flag("selectable", def.selectable); root->flag("grounded", def.grounded); root->flag("hidden", def.hidden); - root->flag("sky-light-passing", def.skyLightPassing); root->num("draw-group", def.drawGroup); root->str("picking-item", def.pickingItem); root->str("script-name", def.scriptName); diff --git a/src/graphics/render/BlocksRenderer.cpp b/src/graphics/render/BlocksRenderer.cpp index 378dc4e7..e143f271 100644 --- a/src/graphics/render/BlocksRenderer.cpp +++ b/src/graphics/render/BlocksRenderer.cpp @@ -440,7 +440,7 @@ void BlocksRenderer::render(const voxel* voxels) { int z = (i / CHUNK_D) % CHUNK_W; switch (def.model) { case BlockModel::block: - blockCube(x, y, z, texfaces, &def, vox.state, !def.rt.emissive); + blockCube(x, y, z, texfaces, &def, vox.state, !def.shadeless); break; case BlockModel::xsprite: { blockXSprite(x, y, z, vec3(1.0f), @@ -448,11 +448,11 @@ void BlocksRenderer::render(const voxel* voxels) { break; } case BlockModel::aabb: { - blockAABB(ivec3(x,y,z), texfaces, &def, vox.state.rotation, !def.rt.emissive); + blockAABB(ivec3(x,y,z), texfaces, &def, vox.state.rotation, !def.shadeless); break; } case BlockModel::custom: { - blockCustomModel(ivec3(x, y, z), &def, vox.state.rotation, !def.rt.emissive); + blockCustomModel(ivec3(x, y, z), &def, vox.state.rotation, !def.shadeless); break; } default: diff --git a/src/voxels/Block.hpp b/src/voxels/Block.hpp index d3d95d7c..90ae2f6a 100644 --- a/src/voxels/Block.hpp +++ b/src/voxels/Block.hpp @@ -126,6 +126,9 @@ public: /// @brief Does the block passing top-down sky lights into itself bool skyLightPassing = false; + + /// @brief Does block model have shading + bool shadeless = false; /// @brief Is the block a physical obstacle bool obstacle = true;