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)
### *shadeless*
Turns off block model shading
## Physics
### *obstacle*

View File

@ -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]`.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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"
}

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("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);

View File

@ -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:

View File

@ -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;