Merge branch 'MihailRis:main' into main

This commit is contained in:
Xertis 2024-06-16 01:21:09 +03:00 committed by GitHub
commit 0f6f19de02
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 47 additions and 28 deletions

View File

@ -67,6 +67,10 @@ Light ignores block if **true**
Vertical sky light ray ignores block if **true**. (used for water) Vertical sky light ray ignores block if **true**. (used for water)
### *shadeless*
Turns off block model shading
## Physics ## Physics
### *obstacle* ### *obstacle*

View File

@ -2,16 +2,16 @@
## Вид ## Вид
### Текстура - `texture` ### Текстура - *texture*
Название текстуры блока (указывается только имя, без расширения или пути к файлу) Название текстуры блока (указывается только имя, без расширения или пути к файлу)
Файл текстуры должен находиться в `res/textures/blocks/` и иметь формат **png** Файл текстуры должен находиться в `res/textures/blocks/` и иметь формат **png**
### Текстурирование сторон - `texture-faces` ### Текстурирование сторон - *texture-faces*
>[!IMPORTANT] >[!IMPORTANT]
> Не может использоваться одновременно с `texture` > Не может использоваться одновременно с *texture*
Массив из 6 названий текстур, позволяющих указать их для каждой из сторон отдельно. Массив из 6 названий текстур, позволяющих указать их для каждой из сторон отдельно.
@ -27,7 +27,7 @@
] ]
``` ```
### Модель - `model` ### Модель - *model*
Модель блока из списка: Модель блока из списка:
- "block" - используется по-умолчанию для всех обычных блоков - "block" - используется по-умолчанию для всех обычных блоков
@ -35,12 +35,12 @@
- "X" - модель травы (крест из двух спрайтов) - "X" - модель травы (крест из двух спрайтов)
- "aabb" - модель, соответствующая хитбоксу блока (составной хитбокс будет объединен в один). Примеры: трубы, лампочки, панели. - "aabb" - модель, соответствующая хитбоксу блока (составной хитбокс будет объединен в один). Примеры: трубы, лампочки, панели.
### Группа отрисовки - `draw-group` ### Группа отрисовки - *draw-group*
Целое число определяющее номер группы отрисовки данного блока. Целое число определяющее номер группы отрисовки данного блока.
Актуально для полупрозрачных блоков - решает проблемы невидимых сторон блоков за этим блоком. Актуально для полупрозрачных блоков - решает проблемы невидимых сторон блоков за этим блоком.
### Вращение - `rotation` ### Вращение - *rotation*
Профиль вращения (набор положений, в которые можно установить блок) из списка: Профиль вращения (набор положений, в которые можно установить блок) из списка:
@ -50,7 +50,7 @@
## Освещение ## Освещение
### Излучение - `emission` ### Излучение - *emission*:
Массив из трех целых чисел - R, G, B освещения от 0 до 15. Массив из трех целых чисел - R, G, B освещения от 0 до 15.
@ -61,21 +61,26 @@
- `[0, 0, 0]` - блок не излучает свет (по-умолчанию) - `[0, 0, 0]` - блок не излучает свет (по-умолчанию)
### Светопроводимость - `light-passing` ### Светопроводимость - *light-passing*
При значении `true` блок проводит свет от излучающих блоков. При значении `true` блок проводит свет от излучающих блоков.
### Солнечная светопроводимость - `sky-light-passing` ### Солнечная светопроводимость - *sky-light-passing*
При значении `true` блок не препятствует прохождению вертикального луча солнечного света. При значении `true` блок не препятствует прохождению вертикального луча солнечного света.
### Без освещения - *shadeless*
Выключает освещение на модели блока.
## Физика ## Физика
### Препятствие - `obstacle`: ### Препятствие - *obstacle*
Значение false отключает хитбокс у блока (позволяет игроку проходить сквозь блок) Значение false отключает хитбокс у блока (позволяет игроку проходить сквозь блок)
### Хитбокс - `hitbox`: ### Хитбокс - *hitbox*
Массив из 6 чисел описывающих смещение и размер хитбокса блока. Массив из 6 чисел описывающих смещение и размер хитбокса блока.
@ -89,50 +94,50 @@
- смещен на 0.0 м вверх - смещен на 0.0 м вверх
- смещен на 0.5 м на север - смещен на 0.5 м на север
### Приземленность - `grounded` ### Приземленность - *grounded*
Блок может быть установлен только на полный блок. Блок может быть установлен только на полный блок.
Разрушается при разрушении блока под ним. Разрушается при разрушении блока под ним.
### Выделяемость - `selectable` ### Выделяемость - *selectable*
При значении в `false` курсор будет игнорировать блок, выделяя тот, что находится за ним. При значении в `false` курсор будет игнорировать блок, выделяя тот, что находится за ним.
### Заменяемость - `replaceable` ### Заменяемость - *replaceable*
При значении в `true` на месте блока можно установить любой другой блок. Пример: вода, трава, цветок. При значении в `true` на месте блока можно установить любой другой блок. Пример: вода, трава, цветок.
### Разрушаемость - `breakable` ### Разрушаемость - *breakable*
При значении в `false` блок нельзя сломать. При значении в `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"` Пример: блок `door:door_open` скрыт (hidden) поэтому указывается `picking-item: "door:door.item"`
### Имя скрипта - `script-name` ### Имя скрипта - *script-name*
Позволяет указать название скрипта блока. Свойство обеспечивает возможность использования одного скрипта для нескольких блоков. Позволяет указать название скрипта блока. Свойство обеспечивает возможность использования одного скрипта для нескольких блоков.
Название указывается без `пак:scripts/` и расширения. Название указывается без `пак:scripts/` и расширения.
### Имя макета UI - `ui-layout` ### Имя макета UI - *ui-layout*
Позволяет указать id XML-макета интерфейса блока. По-умолчанию используется строковый id блока. Позволяет указать id XML-макета интерфейса блока. По-умолчанию используется строковый id блока.
### Размер инвентаря - `inventory-size` ### Размер инвентаря - *inventory-size*
Число слотов инвентаря блока. По-умолчанию - 0 (инвентарь отсутствует) Число слотов инвентаря блока. По-умолчанию - 0 (инвентарь отсутствует)
## Расширенные блоки ## Расширенные блоки
### Размер блока - `size` ### Размер блока - *size*
Массив из трех целых чисел. Значение по-умолчанию - `[1, 1, 1]`. Массив из трех целых чисел. Значение по-умолчанию - `[1, 1, 1]`.

View File

@ -1,5 +1,6 @@
{ {
"texture": "blue_lamp", "texture": "blue_lamp",
"emission": [0, 0, 15], "emission": [0, 0, 15],
"shadeless": true,
"material": "base:glass" "material": "base:glass"
} }

View File

@ -1,5 +1,6 @@
{ {
"texture": "green_lamp", "texture": "green_lamp",
"emission": [0, 15, 0], "emission": [0, 15, 0],
"shadeless": true,
"material": "base:glass" "material": "base:glass"
} }

View File

@ -1,4 +1,5 @@
{ {
"texture": "lamp", "texture": "lamp",
"emission": [15, 14, 13] "emission": [15, 14, 13],
} "shadeless": true
}

View File

@ -7,5 +7,6 @@
"rotation": "pipe", "rotation": "pipe",
"light-passing": true, "light-passing": true,
"sky-light-passing": true, "sky-light-passing": true,
"shadeless": true,
"material": "base:glass" "material": "base:glass"
} }

View File

@ -1,5 +1,6 @@
{ {
"texture": "red_lamp", "texture": "red_lamp",
"emission": [15, 0, 0], "emission": [15, 0, 0],
"shadeless": true,
"material": "base:glass" "material": "base:glass"
} }

View File

@ -11,6 +11,7 @@
"model": "aabb", "model": "aabb",
"hitbox": [0.4375, 0.0, 0.4375, 0.125, 0.5, 0.125], "hitbox": [0.4375, 0.0, 0.4375, 0.125, 0.5, 0.125],
"light-passing": true, "light-passing": true,
"shadeless": true,
"obstacle": false, "obstacle": false,
"rotation": "pipe" "rotation": "pipe"
} }

View File

@ -208,11 +208,12 @@ void ContentLoader::loadBlock(Block& def, const std::string& name, const fs::pat
root->flag("obstacle", def.obstacle); root->flag("obstacle", def.obstacle);
root->flag("replaceable", def.replaceable); root->flag("replaceable", def.replaceable);
root->flag("light-passing", def.lightPassing); 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("breakable", def.breakable);
root->flag("selectable", def.selectable); root->flag("selectable", def.selectable);
root->flag("grounded", def.grounded); root->flag("grounded", def.grounded);
root->flag("hidden", def.hidden); root->flag("hidden", def.hidden);
root->flag("sky-light-passing", def.skyLightPassing);
root->num("draw-group", def.drawGroup); root->num("draw-group", def.drawGroup);
root->str("picking-item", def.pickingItem); root->str("picking-item", def.pickingItem);
root->str("script-name", def.scriptName); root->str("script-name", def.scriptName);

View File

@ -440,7 +440,7 @@ void BlocksRenderer::render(const voxel* voxels) {
int z = (i / CHUNK_D) % CHUNK_W; int z = (i / CHUNK_D) % CHUNK_W;
switch (def.model) { switch (def.model) {
case BlockModel::block: 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; break;
case BlockModel::xsprite: { case BlockModel::xsprite: {
blockXSprite(x, y, z, vec3(1.0f), blockXSprite(x, y, z, vec3(1.0f),
@ -448,11 +448,11 @@ void BlocksRenderer::render(const voxel* voxels) {
break; break;
} }
case BlockModel::aabb: { 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; break;
} }
case BlockModel::custom: { 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; break;
} }
default: default:

View File

@ -126,6 +126,9 @@ public:
/// @brief Does the block passing top-down sky lights into itself /// @brief Does the block passing top-down sky lights into itself
bool skyLightPassing = false; bool skyLightPassing = false;
/// @brief Does block model have shading
bool shadeless = false;
/// @brief Is the block a physical obstacle /// @brief Is the block a physical obstacle
bool obstacle = true; bool obstacle = true;