Merge branch 'MihailRis:main' into main
This commit is contained in:
commit
0f6f19de02
@ -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*
|
||||||
|
|||||||
@ -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]`.
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
"texture": "lamp",
|
"texture": "lamp",
|
||||||
"emission": [15, 14, 13]
|
"emission": [15, 14, 13],
|
||||||
|
"shadeless": true
|
||||||
}
|
}
|
||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -127,6 +127,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;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user