60 Commits

Author SHA1 Message Date
2e76ce7862 feat: bump up version 2026-03-20 14:55:38 +08:00
eb8984c341 refactor: use python built in dataclass to improve our raw data structs. 2026-03-20 14:50:05 +08:00
77e4dcdb69 fix: rename some types in module 2026-03-20 14:16:44 +08:00
44d3b1fc99 feat: finish virtools camera work
- add operator for applying camera aspect ratio to blender scene.
- add camera aspect ratio preset in virtools camera panel.
- update game camera operators. use virtools camera instead of directly modifying camera properties.
2026-03-20 13:49:00 +08:00
70fa3b5f07 feat: support virtools camera import and export 2026-03-13 15:47:24 +08:00
fbee0ccce5 doc: update README for notes 2026-03-06 16:14:47 +08:00
684567777f feat: add virtools camera support 2026-03-06 16:10:05 +08:00
5e94d7db85 fix: change the default length of flat and sink street from 2.5 to 5
- this feature is requested by Lee623
2026-03-06 14:40:50 +08:00
8a7e3306a7 feat: allow exporting object in virtools file which has geometry.
- allow exporting object without apply modifier.
- allow exporting any objects which can be mesh (has geometry).
- due to this change, add virtools mesh properties for metaball, font, curve, surface.
- due to this change, remove the virtools group warning for metaball, font, curve and surface.
2026-03-05 21:45:36 +08:00
68fbffad54 feat: update pybmap to the latest version 2026-03-05 12:45:25 +08:00
dd6e557f39 refactor: rename PyBMap to pybmap due to the change of libcmo21 2026-03-04 21:56:11 +08:00
e4a4eae88e fix: fix fatal error when exporting virtools file
- fix fatal error that user only can export virtools file into existing file, rather than any new file.
2025-09-23 21:45:56 +08:00
f920cdcaf5 i18n: fix translation 2025-09-04 10:01:41 +08:00
40cad381af i18n: update translation 2025-09-03 09:50:56 +08:00
0d20a1fe44 doc: update english doc 2025-09-02 13:51:51 +08:00
599e9a6ef0 doc: sync zh-cn doc to en doc 2025-09-01 13:59:31 +08:00
e22b888bfc doc: fix bme adder doc 2025-09-01 13:16:02 +08:00
88ef1d3202 doc: fix legacy align doc 2025-09-01 13:05:51 +08:00
f2af90c876 doc: fix export target for virtools exporting in doc 2025-09-01 12:56:19 +08:00
4dba3c3a71 doc: add game camera doc 2025-09-01 11:00:34 +08:00
e31a677d83 doc: add version rules in doc 2025-09-01 10:12:44 +08:00
35fcbe54b5 fix: re-design the layout of game camera.
- use more friendly layout in game camera. reported by zzq.
2025-08-30 22:50:43 +08:00
9e83fe0a10 i18n: update i18n
- update i18n template and translation.
- fix lost translation context in code.
2025-08-26 21:54:32 +08:00
33fb1a65d3 chore: remove useless gitkeep 2025-08-26 20:47:06 +08:00
415cc98758 doc: update document
- add hint for gray virtools import export button
- add outcome of leaving blank ballance texture folder setting.
- update compile chapter according to the change of build scripts.
2025-08-26 20:42:11 +08:00
2d93ce1340 feat: allow export all object for virtools file. 2025-08-26 19:59:36 +08:00
1129872234 fix: fix UTIL_naming_convention rename in i18n files. 2025-08-25 14:22:42 +08:00
2b2b18cfa4 fix: add error report for invalid file path when importing or exporting virtools file.
- add error report for invalid file path when importing or exporting virtools to avoid BMapException was thrown. Reported by SongRui
2025-08-25 14:09:10 +08:00
b19800e37f fix: fix bug that there is no preset encoding names.
- fix the issue that there is no preset encoding names in list when enable plugin without any extra operations.
2025-08-25 13:53:57 +08:00
e14729500c fix: fix rail adders poll issue
- add Ballance Texture requirement for all rail adders because they need it.
2025-08-25 13:24:15 +08:00
48bfc54830 i18n: modify i18n file batchly.
- update translation context in i18n files batchly due to previous BME prototype changes.
2025-08-25 13:13:42 +08:00
7e74e42bd7 feat: add BME category display in blender.
- add BME category display in blender, including add menu and side menu.
2025-08-25 13:07:55 +08:00
96a81b165b feat: add category fields for BME.
- add category for BME prorotypes.
- update validator and extractor for this change.
2025-08-25 10:30:44 +08:00
0681f0d240 fix: optimize the ui layout for BME boolean property. 2025-08-20 14:40:14 +08:00
d700f1276a fix: fix the wrong showcase type of Is Sink field in BME prototype Flat. 2025-08-20 14:32:57 +08:00
3bea3d67b9 feat: add OP_OBJECT_game_view operator.
- add OP_OBJECT_game_view operator for changing blender render resolution to some game resolution presets.
2025-08-18 21:55:15 +08:00
ec41b7553a feat: add game camera feature.
- add game camera operator which allow user see camera view as Ballance game presented.
2025-08-18 16:02:50 +08:00
9e2539499e fix: fix wrong UI words in legacy align. 2025-08-04 13:50:56 +08:00
3a5cd1c937 feat: support macos arm64 arch
- specially thank doyaGu for compiling macos arm64 BMap binary.
2025-08-04 11:22:09 +08:00
1afa5f9893 fix: change the shape of BME floor terminal.
- change the shape of all BME floor terminal (normal, sink and wide) from 5x2.5 to 5x5 requested by Zzq and Lee623.
- change icons according to above changes.
- add some comment in prototype files.
2025-08-01 15:13:38 +08:00
1383e87104 feat: allow 3D Cursor as align source in legacy align operator.
- allow 3D Cursor as align source in legacy align operator. this feature is requested by Zzq.
- add icon for legacy align.
2025-08-01 15:13:21 +08:00
a2b8f41a21 fix: fix performance after adding sidebar panel.
- resolve a performance issue by removing useless feature.
- more details about this issue can be seen the content inside this commit.
2025-07-31 16:50:32 +08:00
93f23abeb9 feat: add Ballance menu in 3d view sidebar for convenient adding. 2025-07-31 12:02:40 +08:00
4ba3ff9e5a fix: fix the aftermath of changing EnumPropHelper.
- fix the generic error of EnumPropHelper.
- use EnumPropHelper in UTIL_ioport_shared.ExportParams field instead of raw Blender string.
- remove useless type hint in various modules.
2025-07-30 13:35:36 +08:00
a9a889a8fd refactor: use generic type in EnumPropHelper
- use typing.Generic in EnumPropHelper and its child classes.
- change Doxygen docstring into reStructedText docstring.
2025-07-30 10:56:24 +08:00
fc34b19a42 feat: allow exporting selected objects as Virtools file
- add Selected Objects option in exporting Virtools file window requested by ZZQ.
2025-07-29 21:43:59 +08:00
9e65d258d7 refactor: use JSON5 instead of JSON for BME prototype.
- use JSON5 for BME prototype description file instead of JSON to make us have ability that make comment in declaration files (TBD in future).
- upgrade corresponding scripts.
- confirm the finish of upgrading script into modern Python.
2025-07-29 21:14:02 +08:00
ab266a07fb fix: fix BME JSONs validator error 2025-07-24 22:03:42 +08:00
61c7709b97 chore: finish BME JSON validator 2025-07-24 21:51:01 +08:00
1044d4b450 chore: remove useless scripts 2025-07-24 14:55:59 +08:00
54edc4dab7 chore: finish BME JSONs extractor 2025-07-24 14:51:05 +08:00
f40efb0467 chore: finish icons builder
- finish icons builder in scripts.
2025-07-24 14:00:25 +08:00
10de948a79 feat: update scripts
- add meshes builder (copyer).
- fix json compressor.
2025-07-24 10:16:58 +08:00
0ae95e927f refactor: re-layput project
- move assets (raw jsons, icons, meshes and i18n data) into the root of repo.
- move script into the root of repo.
- modify blender manifest according to this changes.
- optimize gitignore.
2025-07-24 09:44:38 +08:00
9f591113f8 refactor: refactor toolset (not finished) 2025-07-23 22:35:47 +08:00
685a0b8066 fix: rotate 4 flames when creating sector pair.
- according to Lee623 report, rotate 90 degree for 4 flames startpoint when creating sector pair to correspond with models in ballance asset library.
2025-07-18 14:42:33 +08:00
a1a215ec19 fix: fix span between checkpoint and resetpoint.
- change the span between checkpoint and resetpoint to prevent paper ball model respawn offset error.
- the span between 4 flames and resetpoint now is 3.65
- the span for 2 flames now is 3.3258
- these data were measured by Lee623 and picked by mode number in all original levels (because there is no uniform number in original levels).
2025-07-18 14:30:18 +08:00
3bed920f11 refactor: rename some operators and modules.
- rename module OP_MTL_fix_all_material to OP_MTL_fix_all_materials.
- rename operator BBP_OT_fix_all_material to BBP_OT_fix_all_materials.
- rename module UTIL_naming_convension to UTIL_naming_convention.
- change some translation contexts to correspond with this change.
2025-07-18 14:13:19 +08:00
6dc82aade6 doc: update fake-bpy-module.
- update fake-bpy-module for dev and write its version, which is suit for blender 4.5, in doc.
2025-07-18 09:43:27 +08:00
ac6692cd97 feat: bump version up to 4.3
- update blender version to 4.5 LTS.
- there is no compatibility issue when porting to blender 4.5.
- bump plugin version up to 4.3 in manifest and document (which has not been updated a while).
2025-07-17 20:08:07 +08:00
193 changed files with 14046 additions and 6934 deletions

11
.gitattributes vendored
View File

@@ -1,7 +1,6 @@
# all png are binary
# All PNG image are binary
*.png binary
# our generated mesh should be save as binary
*.bin binary
# the raw json data should be binary
# although i edit it manually
bbp_ng/raw_jsons/*.json binary
# Element placeholder mesh should be save as binary
*.ph binary
# Raw json data should be binary, although i edit it manually
assets/jsons/*.json5 binary

4
.gitignore vendored
View File

@@ -1,3 +1,3 @@
## ===== Personal =====
# Disable distribution build folder
redist/
# Disable VSCode
.vscode/

View File

@@ -5,3 +5,9 @@
BBP NG, abbr **B**allance **B**lender **P**lugin **N**ext **G**eneration.
For an introduction to this plugin, installing it, compiling it, reporting bugs, etc., see the GitHub Page of this project: https://yyc12345.github.io/BallanceBlenderHelper
## Notes
This project is now suspended and may be still suspended eternally
due to the lost interest and the lack of time of mine.
In the rest of life time of this project, only easy-to-be-resolved critical bugs will be fixed.

View File

@@ -5,3 +5,8 @@
BBP NG又名**B**allance **B**lender **P**lugin **N**ext **G**eneration下一代Ballance Blender插件
有关此插件的介绍安装编译汇报错误等请参阅本项目的GitHub Page页面https://yyc12345.github.io/BallanceBlenderHelper
## 注意事项
该项目的开发目前已暂停,并且由于我兴趣的丧失和时间的不足,可能会永远暂停。
在该项目剩余的生命周期中,只会修复易于解决的致命错误。

View File

Before

Width:  |  Height:  |  Size: 785 B

After

Width:  |  Height:  |  Size: 785 B

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 663 B

After

Width:  |  Height:  |  Size: 663 B

View File

Before

Width:  |  Height:  |  Size: 745 B

After

Width:  |  Height:  |  Size: 745 B

View File

Before

Width:  |  Height:  |  Size: 945 B

After

Width:  |  Height:  |  Size: 945 B

View File

Before

Width:  |  Height:  |  Size: 818 B

After

Width:  |  Height:  |  Size: 818 B

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 984 B

After

Width:  |  Height:  |  Size: 984 B

View File

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 611 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 471 B

After

Width:  |  Height:  |  Size: 471 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

View File

Before

Width:  |  Height:  |  Size: 360 B

After

Width:  |  Height:  |  Size: 360 B

View File

Before

Width:  |  Height:  |  Size: 992 B

After

Width:  |  Height:  |  Size: 992 B

View File

Before

Width:  |  Height:  |  Size: 444 B

After

Width:  |  Height:  |  Size: 444 B

View File

Before

Width:  |  Height:  |  Size: 691 B

After

Width:  |  Height:  |  Size: 691 B

View File

Before

Width:  |  Height:  |  Size: 775 B

After

Width:  |  Height:  |  Size: 775 B

View File

Before

Width:  |  Height:  |  Size: 807 B

After

Width:  |  Height:  |  Size: 807 B

View File

Before

Width:  |  Height:  |  Size: 652 B

After

Width:  |  Height:  |  Size: 652 B

View File

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 695 B

View File

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 550 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 265 B

After

Width:  |  Height:  |  Size: 265 B

View File

@@ -1,183 +1,185 @@
[
{
"identifier": "raw_floor_1x1",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, True, True, True)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[3], None)",
"is_sink": "is_sink"
},
"transform": "move(5, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[5], None)",
"is_sink": "is_sink"
},
"transform": "move(5, 5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[2], None)",
"is_sink": "is_sink"
},
"transform": "move(0, 5, 0) @ rot(0, 0, 270)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[4], None)",
"is_sink": "is_sink"
},
"transform": "ident()"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_1x1",
"showcase": {
"title": "Normal 1x1",
"icon": "Normal1x1",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_1x1",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_1x1",
"showcase": {
"title": "Sink 1x1",
"icon": "Sink1x1",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_1x1",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True"
},
"transform": "ident()"
}
]
}
[
{
"identifier": "raw_floor_1x1",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, True, True, True)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[3], None)",
"is_sink": "is_sink"
},
"transform": "move(5, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[5], None)",
"is_sink": "is_sink"
},
"transform": "move(5, 5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[2], None)",
"is_sink": "is_sink"
},
"transform": "move(0, 5, 0) @ rot(0, 0, 270)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[4], None)",
"is_sink": "is_sink"
},
"transform": "ident()"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_1x1",
"showcase": {
"title": "Normal 1x1",
"category": "1x1 Blocks",
"icon": "Normal1x1",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_1x1",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_1x1",
"showcase": {
"title": "Sink 1x1",
"category": "1x1 Blocks",
"icon": "Sink1x1",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_1x1",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True"
},
"transform": "ident()"
}
]
}
]

View File

@@ -1,237 +1,240 @@
[
{
"identifier": "raw_floor_border",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, False)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "length == 0.0",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "length",
"short_edge_offset": "0",
"short_edge_length": "length",
"height": "height",
"face": "face",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_normal_border",
"showcase": {
"title": "Normal Border",
"icon": "NormalBorder",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, False)"
}
]
},
"params": [
{
"field": "length",
"data": "length_"
},
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"length": "length",
"height": "height",
"face": "face",
"is_sink": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_border",
"showcase": {
"title": "Sink Border",
"icon": "SinkBorder",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, False)"
}
]
},
"params": [
{
"field": "length",
"data": "length_"
},
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"length": "length",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_border",
"showcase": {
"title": "Ribbon Border",
"icon": "RibbonBorder",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, False)"
}
]
},
"params": [
{
"field": "length",
"data": "length_"
},
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"length": "length",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
}
[
{
"identifier": "raw_floor_border",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, False)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "length == 0.0",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "length",
"short_edge_offset": "0",
"short_edge_length": "length",
"height": "height",
"face": "face",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_normal_border",
"showcase": {
"title": "Normal Border",
"category": "Borders",
"icon": "NormalBorder",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, False)"
}
]
},
"params": [
{
"field": "length",
"data": "length_"
},
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"length": "length",
"height": "height",
"face": "face",
"is_sink": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_border",
"showcase": {
"title": "Sink Border",
"category": "Borders",
"icon": "SinkBorder",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, False)"
}
]
},
"params": [
{
"field": "length",
"data": "length_"
},
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"length": "length",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_border",
"showcase": {
"title": "Ribbon Border",
"category": "Borders",
"icon": "RibbonBorder",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, False)"
}
]
},
"params": [
{
"field": "length",
"data": "length_"
},
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"length": "length",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
}
]

View File

@@ -1,414 +1,427 @@
[
{
"identifier": "cv_trapezoid_side",
"showcase": null,
"params": [
{
"field": "long_edge_length",
"data": "5.0"
},
{
"field": "short_edge_offset",
"data": "0.0"
},
{
"field": "short_edge_length",
"data": "5.0"
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, False)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "long_edge_length == 0.0 or short_edge_length == 0.0",
"vars": [
{
"field": "long_edge_uv_length",
"data": "long_edge_length / 5.0"
},
{
"field": "short_edge_uv_offset",
"data": "short_edge_offset / 5.0"
},
{
"field": "short_edge_uv_length",
"data": "short_edge_length / 5.0"
},
{
"field": "short_edge_total",
"data": "short_edge_offset + short_edge_length"
},
{
"field": "short_edge_uv_total",
"data": "short_edge_uv_offset + short_edge_uv_length"
},
{
"field": "uv_border_texture",
"data": "1.0 if is_ribbon else 0.5"
},
{
"field": "sink",
"data": "0.7 if is_sink else 0.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(short_edge_offset, 2.5, -sink)"
},
{
"skip": "not face[0]",
"data": "(long_edge_length, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(short_edge_total, 2.5, -sink)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\"",
"indices": [0, 2, 3, 1],
"uvs": [
"(0, 0)",
"(0, long_edge_uv_length)",
"(uv_border_texture, short_edge_uv_total)",
"(uv_border_texture, short_edge_uv_offset)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "long_edge_length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "distance(0, 0, short_edge_offset, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "rot(0, 0, angle(0, 0, short_edge_offset, 2.5)) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "distance(long_edge_length, 0, short_edge_total, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "move(long_edge_length, 0, 0) @ rot(0, 0, angle(long_edge_length, 0, short_edge_total, 2.5))"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "short_edge_length",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(short_edge_offset, 2.5, 0) @ scale(1, -1, 1)"
},
{
"identifier": "floor_4edges_bottom",
"skip": "not face[1]",
"params": {
"top_left_pos": "(0, 0)",
"top_right_pos": "(short_edge_offset, 2.5)",
"bottom_left_pos": "(long_edge_length, 0)",
"bottom_right_pos": "(short_edge_total, 2.5)"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "cv_triangle_side",
"showcase": null,
"params": [
{
"field": "edge_length",
"data": "5.0"
},
{
"field": "tip_offset",
"data": "2.5"
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, None)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "edge_length == 0.0",
"vars": [
{
"field": "edge_uv_length",
"data": "edge_length / 5.0"
},
{
"field": "tip_uv_offset",
"data": "tip_offset / 5.0"
},
{
"field": "sink",
"data": "0.7 if is_sink else 0.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(tip_offset, 2.5, -sink)"
},
{
"skip": "not face[0]",
"data": "(edge_length, 0, 0)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "\"FloorTopProfil\" if is_sink else \"FloorTopBorder\"",
"indices": [0, 2, 1],
"uvs": [
"(0, 0)",
"(0, edge_uv_length)",
"(0.5, tip_uv_offset)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "edge_length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "distance(0, 0, tip_offset, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "rot(0, 0, angle(0, 0, tip_offset, 2.5)) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "distance(edge_length, 0, tip_offset, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "move(edge_length, 0, 0) @ rot(0, 0, angle(edge_length, 0, tip_offset, 2.5))"
},
{
"identifier": "floor_triangle_bottom",
"skip": "not face[1]",
"params": {
"length": "edge_length",
"width": "2.5",
"tip_offset": "tip_offset"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "cv_triangle_center",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, None)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "False",
"vars": [
{
"field": "sink",
"data": "0.7 if is_sink else 0.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(5, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(2.5, 2.5, -sink)"
},
{
"skip": "(not face[0]) or (not is_sink)",
"data": "(2.5, 0, -sink)"
}
],
"faces": [
{
"skip": "(not face[0]) or is_sink",
"texture": "\"FloorTopFlat\"",
"indices": [0, 1, 2],
"uvs": [
"(0, 0)",
"(1, 0)",
"(0.5, 0.5)"
],
"normals": null
},
{
"skip": "(not face[0]) or (not is_sink)",
"texture": "\"FloorTopProfil\"",
"indices": [0, 3, 2],
"uvs": [
"(0, 0)",
"(0.5, 0)",
"(0.5, 0.5)"
],
"normals": null
},
{
"skip": "(not face[0]) or (not is_sink)",
"texture": "\"FloorTopProfil\"",
"indices": [3, 1, 2],
"uvs": [
"(0.5, 0)",
"(1, 0)",
"(0.5, 0.5)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "distance(0, 0, 2.5, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "rot(0, 0, 45)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "distance(5, 0, 2.5, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "move(5, 0, 0) @ rot(0, 0, 135)"
},
{
"identifier": "raw_floor_side",
"skip": "(not face[4]) or (not is_sink)",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "True"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "(not face[4]) or (not is_sink)",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "True",
"is_right_sink": "False"
},
"transform": "move(2.5, 0, 0)"
},
{
"identifier": "raw_floor_side",
"skip": "(not face[4]) or is_sink",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "floor_triangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "2.5",
"tip_offset": "2.5"
},
"transform": "move(0, 0, -height)"
}
]
}
[
// One of Chris suggested more vanilla prototypes.
// This prototype represent a half of a normal, sink or double ribbon border,
// which looks like trapezoid from top to bottom.
//
// The bottom edge of trapezoid is from origin to +X with `long_edge_length` length.
// The length of top edge is `short_edge_length` and it just like moving bottom edge to +Y direction.
// The offset between top edge and bottom edge is always 2.5.
// The distance from the closest point of top edge, to Y axis is `short_edge_offset`.
{
"identifier": "cv_trapezoid_side",
"showcase": null,
"params": [
{
"field": "long_edge_length",
"data": "5.0"
},
{
"field": "short_edge_offset",
"data": "0.0"
},
{
"field": "short_edge_length",
"data": "5.0"
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, False)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "long_edge_length == 0.0 or short_edge_length == 0.0",
"vars": [
{
"field": "long_edge_uv_length",
"data": "long_edge_length / 5.0"
},
{
"field": "short_edge_uv_offset",
"data": "short_edge_offset / 5.0"
},
{
"field": "short_edge_uv_length",
"data": "short_edge_length / 5.0"
},
{
"field": "short_edge_total",
"data": "short_edge_offset + short_edge_length"
},
{
"field": "short_edge_uv_total",
"data": "short_edge_uv_offset + short_edge_uv_length"
},
{
"field": "uv_border_texture",
"data": "1.0 if is_ribbon else 0.5"
},
{
"field": "sink",
"data": "0.7 if is_sink else 0.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(short_edge_offset, 2.5, -sink)"
},
{
"skip": "not face[0]",
"data": "(long_edge_length, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(short_edge_total, 2.5, -sink)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\"",
"indices": [0, 2, 3, 1],
"uvs": [
"(0, 0)",
"(0, long_edge_uv_length)",
"(uv_border_texture, short_edge_uv_total)",
"(uv_border_texture, short_edge_uv_offset)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "long_edge_length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "distance(0, 0, short_edge_offset, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "rot(0, 0, angle(0, 0, short_edge_offset, 2.5)) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "distance(long_edge_length, 0, short_edge_total, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "move(long_edge_length, 0, 0) @ rot(0, 0, angle(long_edge_length, 0, short_edge_total, 2.5))"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "short_edge_length",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(short_edge_offset, 2.5, 0) @ scale(1, -1, 1)"
},
{
"identifier": "floor_4edges_bottom",
"skip": "not face[1]",
"params": {
"top_left_pos": "(0, 0)",
"top_right_pos": "(short_edge_offset, 2.5)",
"bottom_left_pos": "(long_edge_length, 0)",
"bottom_right_pos": "(short_edge_total, 2.5)"
},
"transform": "move(0, 0, -height)"
}
]
},
// Same as previous one, but looks like triangle from top to bottom.
//
// The bottom edge is from origin to +X with `edge_length` length.
// The tip is going to +Y.
// The height of this triangle is always 2.5 and the offset between tip and Y axis is `tip_offset`.
{
"identifier": "cv_triangle_side",
"showcase": null,
"params": [
{
"field": "edge_length",
"data": "5.0"
},
{
"field": "tip_offset",
"data": "2.5"
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, None)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "edge_length == 0.0",
"vars": [
{
"field": "edge_uv_length",
"data": "edge_length / 5.0"
},
{
"field": "tip_uv_offset",
"data": "tip_offset / 5.0"
},
{
"field": "sink",
"data": "0.7 if is_sink else 0.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(tip_offset, 2.5, -sink)"
},
{
"skip": "not face[0]",
"data": "(edge_length, 0, 0)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "\"FloorTopProfil\" if is_sink else \"FloorTopBorder\"",
"indices": [0, 2, 1],
"uvs": [
"(0, 0)",
"(0, edge_uv_length)",
"(0.5, tip_uv_offset)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "edge_length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "distance(0, 0, tip_offset, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "rot(0, 0, angle(0, 0, tip_offset, 2.5)) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "distance(edge_length, 0, tip_offset, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "move(edge_length, 0, 0) @ rot(0, 0, angle(edge_length, 0, tip_offset, 2.5))"
},
{
"identifier": "floor_triangle_bottom",
"skip": "not face[1]",
"params": {
"length": "edge_length",
"width": "2.5",
"tip_offset": "tip_offset"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "cv_triangle_center",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, True, None)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "False",
"vars": [
{
"field": "sink",
"data": "0.7 if is_sink else 0.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(5, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(2.5, 2.5, -sink)"
},
{
"skip": "(not face[0]) or (not is_sink)",
"data": "(2.5, 0, -sink)"
}
],
"faces": [
{
"skip": "(not face[0]) or is_sink",
"texture": "\"FloorTopFlat\"",
"indices": [0, 1, 2],
"uvs": [
"(0, 0)",
"(1, 0)",
"(0.5, 0.5)"
],
"normals": null
},
{
"skip": "(not face[0]) or (not is_sink)",
"texture": "\"FloorTopProfil\"",
"indices": [0, 3, 2],
"uvs": [
"(0, 0)",
"(0.5, 0)",
"(0.5, 0.5)"
],
"normals": null
},
{
"skip": "(not face[0]) or (not is_sink)",
"texture": "\"FloorTopProfil\"",
"indices": [3, 1, 2],
"uvs": [
"(0.5, 0)",
"(1, 0)",
"(0.5, 0.5)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "distance(0, 0, 2.5, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "rot(0, 0, 45)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "distance(5, 0, 2.5, 2.5)",
"is_left_sink": "False",
"is_right_sink": "is_sink"
},
"transform": "move(5, 0, 0) @ rot(0, 0, 135)"
},
{
"identifier": "raw_floor_side",
"skip": "(not face[4]) or (not is_sink)",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "True"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "(not face[4]) or (not is_sink)",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "True",
"is_right_sink": "False"
},
"transform": "move(2.5, 0, 0)"
},
{
"identifier": "raw_floor_side",
"skip": "(not face[4]) or is_sink",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "floor_triangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "2.5",
"tip_offset": "2.5"
},
"transform": "move(0, 0, -height)"
}
]
}
]

View File

@@ -1,460 +1,466 @@
[
{
"identifier": "raw_floor_corner",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, False, False)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_inner",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "False",
"vars": [
{
"field": "PXPY_sink",
"data": "0.7 if (is_sink and (not is_inner)) else 0"
},
{
"field": "NXNY_sink",
"data": "0.7 if (is_sink and is_inner) else 0"
},
{
"field": "PXPY_uv",
"data": "(0 if is_inner else 0.5) * (2 if is_ribbon else 1)"
},
{
"field": "NXNY_uv",
"data": "(0.5 if is_inner else 0) * (2 if is_ribbon else 1)"
},
{
"field": "corner_texture",
"data": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\""
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, -NXNY_sink)"
},
{
"skip": "not face[0]",
"data": "(2.5, 0, -NXNY_sink)"
},
{
"skip": "not face[0]",
"data": "(2.5, 2.5, -PXPY_sink)"
},
{
"skip": "not face[0]",
"data": "(0, 2.5, -NXNY_sink)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "corner_texture",
"indices": [0, 1, 2],
"uvs": [
"(NXNY_uv, 0.5)",
"(NXNY_uv, 0)",
"(PXPY_uv, 0)"
],
"normals": null
},
{
"skip": "not face[0]",
"texture": "corner_texture",
"indices": [0, 2, 3],
"uvs": [
"(NXNY_uv, 0.5)",
"(PXPY_uv, 0)",
"(NXNY_uv, 0)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "NXNY_sink != 0",
"is_right_sink": "NXNY_sink != 0"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "NXNY_sink != 0",
"is_right_sink": "NXNY_sink != 0"
},
"transform": "move(0, 2.5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "NXNY_sink != 0",
"is_right_sink": "PXPY_sink != 0"
},
"transform": "move(2.5, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "PXPY_sink != 0",
"is_right_sink": "NXNY_sink != 0"
},
"transform": "move(2.5, 2.5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "2.5",
"width": "2.5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_inner_corner",
"showcase": {
"title": "Normal Inner Corner",
"icon": "NormalInnerCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False",
"is_inner": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_inner_corner",
"showcase": {
"title": "Sink Inner Corner",
"icon": "SinkInnerCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_inner_corner",
"showcase": {
"title": "Ribbon Inner Corner",
"icon": "RibbonInnerCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "True",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_normal_outter_corner",
"showcase": {
"title": "Normal Outter Corner",
"icon": "NormalOutterCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_outter_corner",
"showcase": {
"title": "Sink Outter Corner",
"icon": "SinkOutterCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_outter_corner",
"showcase": {
"title": "Ribbon Outter Corner",
"icon": "RibbonOutterCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "False",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
}
[
{
"identifier": "raw_floor_corner",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, False, False, False, False)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_inner",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "False",
"vars": [
{
"field": "PXPY_sink",
"data": "0.7 if (is_sink and (not is_inner)) else 0"
},
{
"field": "NXNY_sink",
"data": "0.7 if (is_sink and is_inner) else 0"
},
{
"field": "PXPY_uv",
"data": "(0 if is_inner else 0.5) * (2 if is_ribbon else 1)"
},
{
"field": "NXNY_uv",
"data": "(0.5 if is_inner else 0) * (2 if is_ribbon else 1)"
},
{
"field": "corner_texture",
"data": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\""
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, -NXNY_sink)"
},
{
"skip": "not face[0]",
"data": "(2.5, 0, -NXNY_sink)"
},
{
"skip": "not face[0]",
"data": "(2.5, 2.5, -PXPY_sink)"
},
{
"skip": "not face[0]",
"data": "(0, 2.5, -NXNY_sink)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "corner_texture",
"indices": [0, 1, 2],
"uvs": [
"(NXNY_uv, 0.5)",
"(NXNY_uv, 0)",
"(PXPY_uv, 0)"
],
"normals": null
},
{
"skip": "not face[0]",
"texture": "corner_texture",
"indices": [0, 2, 3],
"uvs": [
"(NXNY_uv, 0.5)",
"(PXPY_uv, 0)",
"(NXNY_uv, 0)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "NXNY_sink != 0",
"is_right_sink": "NXNY_sink != 0"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "NXNY_sink != 0",
"is_right_sink": "NXNY_sink != 0"
},
"transform": "move(0, 2.5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "NXNY_sink != 0",
"is_right_sink": "PXPY_sink != 0"
},
"transform": "move(2.5, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "PXPY_sink != 0",
"is_right_sink": "NXNY_sink != 0"
},
"transform": "move(2.5, 2.5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "2.5",
"width": "2.5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_inner_corner",
"showcase": {
"title": "Normal Inner Corner",
"category": "Half Block Corners",
"icon": "NormalInnerCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False",
"is_inner": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_inner_corner",
"showcase": {
"title": "Sink Inner Corner",
"category": "Half Block Corners",
"icon": "SinkInnerCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_inner_corner",
"showcase": {
"title": "Ribbon Inner Corner",
"category": "Half Block Corners",
"icon": "RibbonInnerCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "True",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_normal_outter_corner",
"showcase": {
"title": "Normal Outter Corner",
"category": "Half Block Corners",
"icon": "NormalOutterCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_outter_corner",
"showcase": {
"title": "Sink Outter Corner",
"category": "Half Block Corners",
"icon": "SinkOutterCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_outter_corner",
"showcase": {
"title": "Ribbon Outter Corner",
"category": "Half Block Corners",
"icon": "RibbonOutterCorner",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True",
"is_inner": "False",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
}
]

View File

@@ -1,171 +1,172 @@
[
{
"identifier": "floor_flat",
"showcase": {
"title": "Flat",
"icon": "Flat",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
},
{
"field": "is_sink_",
"type": "float",
"title": "Is Sink",
"desc": "Whether this flat floor is used for sink floor.",
"default": "False"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
},
{
"field": "is_sink",
"data": "is_sink_"
}
],
"skip": "length == 0.0 or width == 0.0",
"vars": [
{
"field": "sink",
"data": "0.7 if is_sink else 0"
},
{
"field": "uv_length",
"data": "length / 5.0"
},
{
"field": "uv_width",
"data": "width / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, -sink)"
},
{
"skip": "False",
"data": "(length, 0, -sink)"
},
{
"skip": "False",
"data": "(length, width, -sink)"
},
{
"skip": "False",
"data": "(0, width, -sink)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 1, 2, 3],
"uvs": [
"(0, 0)",
"(uv_length, 0)",
"(uv_length, uv_width)",
"(0, uv_width)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "width",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(0, width, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "width",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(length, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(length, width, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "length",
"width": "width"
},
"transform": "move(0, 0, -height)"
}
]
}
[
{
"identifier": "floor_flat",
"showcase": {
"title": "Flat",
"category": "Miscellaneous",
"icon": "Flat",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
},
{
"field": "is_sink_",
"type": "bool",
"title": "Is Sink",
"desc": "Whether this flat floor is used for sink floor.",
"default": "False"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
},
{
"field": "is_sink",
"data": "is_sink_"
}
],
"skip": "length == 0.0 or width == 0.0",
"vars": [
{
"field": "sink",
"data": "0.7 if is_sink else 0"
},
{
"field": "uv_length",
"data": "length / 5.0"
},
{
"field": "uv_width",
"data": "width / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, -sink)"
},
{
"skip": "False",
"data": "(length, 0, -sink)"
},
{
"skip": "False",
"data": "(length, width, -sink)"
},
{
"skip": "False",
"data": "(0, width, -sink)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 1, 2, 3],
"uvs": [
"(0, 0)",
"(uv_length, 0)",
"(uv_length, uv_width)",
"(0, uv_width)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "width",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(0, width, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "width",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(length, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "is_sink",
"is_right_sink": "is_sink"
},
"transform": "move(length, width, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "length",
"width": "width"
},
"transform": "move(0, 0, -height)"
}
]
}
]

View File

@@ -1,340 +1,343 @@
[
{
"identifier": "raw_floor_platform",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, True, True, True)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "length + 5",
"short_edge_offset": "2.5",
"short_edge_length": "length",
"height": "height",
"face": "(face[0], False, False, False, face[4], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "ident()"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "length + 5",
"short_edge_offset": "2.5",
"short_edge_length": "length",
"height": "height",
"face": "(face[0], False, False, False, face[5], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(0, 5 + width, 0) @ scale(1, -1, 1)"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "width + 5",
"short_edge_offset": "2.5",
"short_edge_length": "width",
"height": "height",
"face": "(face[0], False, False, False, face[3], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(5 + length, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "width + 5",
"short_edge_offset": "2.5",
"short_edge_length": "width",
"height": "height",
"face": "(face[0], False, False, False, face[2], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
},
{
"identifier": "floor_flat",
"skip": "False",
"params": {
"height": "height",
"length": "length",
"width": "width",
"face": "(face[0], False, False, False, False, False)",
"is_sink": "is_sink"
},
"transform": "move(2.5, 2.5, 0)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5 + length",
"width": "5 + width"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_platform",
"showcase": {
"title": "Normal Platform",
"icon": "NormalPlatform",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_platform",
"skip": "False",
"params": {
"length": "length",
"width": "width",
"height": "height",
"face": "face",
"is_sink": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_platform",
"showcase": {
"title": "Sink Platform",
"icon": "SinkPlatform",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_platform",
"skip": "False",
"params": {
"length": "length",
"width": "width",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_platform",
"showcase": {
"title": "Ribbon Platform",
"icon": "RibbonPlatform",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_platform",
"skip": "False",
"params": {
"length": "length",
"width": "width",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
}
[
{
"identifier": "raw_floor_platform",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, True, True, True)"
},
{
"field": "is_sink",
"data": "False"
},
{
"field": "is_ribbon",
"data": "False"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "length + 5",
"short_edge_offset": "2.5",
"short_edge_length": "length",
"height": "height",
"face": "(face[0], False, False, False, face[4], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "ident()"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "length + 5",
"short_edge_offset": "2.5",
"short_edge_length": "length",
"height": "height",
"face": "(face[0], False, False, False, face[5], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(0, 5 + width, 0) @ scale(1, -1, 1)"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "width + 5",
"short_edge_offset": "2.5",
"short_edge_length": "width",
"height": "height",
"face": "(face[0], False, False, False, face[3], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(5 + length, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "width + 5",
"short_edge_offset": "2.5",
"short_edge_length": "width",
"height": "height",
"face": "(face[0], False, False, False, face[2], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
},
{
"identifier": "floor_flat",
"skip": "False",
"params": {
"height": "height",
"length": "length",
"width": "width",
"face": "(face[0], False, False, False, False, False)",
"is_sink": "is_sink"
},
"transform": "move(2.5, 2.5, 0)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5 + length",
"width": "5 + width"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_platform",
"showcase": {
"title": "Normal Platform",
"category": "Platforms",
"icon": "NormalPlatform",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_platform",
"skip": "False",
"params": {
"length": "length",
"width": "width",
"height": "height",
"face": "face",
"is_sink": "False",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_platform",
"showcase": {
"title": "Sink Platform",
"category": "Platforms",
"icon": "SinkPlatform",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_platform",
"skip": "False",
"params": {
"length": "length",
"width": "width",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_ribbon_platform",
"showcase": {
"title": "Ribbon Platform",
"category": "Platforms",
"icon": "RibbonPlatform",
"type": "floor",
"cfgs": [
{
"field": "length_",
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
},
{
"field": "width_",
"type": "float",
"title": "Width",
"desc": "The width of block.",
"default": "2.5"
},
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "width",
"data": "width_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_platform",
"skip": "False",
"params": {
"length": "length",
"width": "width",
"height": "height",
"face": "face",
"is_sink": "True",
"is_ribbon": "True"
},
"transform": "ident()"
}
]
}
]

View File

@@ -1,324 +1,324 @@
[
{
"identifier": "raw_floor_side",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "length",
"data": "5.0"
},
{
"field": "is_left_sink",
"data": "False"
},
{
"field": "is_right_sink",
"data": "False"
}
],
"skip": "height <= (0.7 if (is_left_sink or is_right_sink) else 0.0) or length == 0.0",
"vars": [
{
"field": "skip_long_side",
"data": "height <= 5.0"
},
{
"field": "skip_short_side",
"data": "height > 5.0"
},
{
"field": "uv_height",
"data": "height / 5.0"
},
{
"field": "uv_length",
"data": "length / 5.0"
},
{
"field": "left_sink",
"data": "0.7 if is_left_sink else 0.0"
},
{
"field": "right_sink",
"data": "0.7 if is_right_sink else 0.0"
},
{
"field": "uv_left_sink",
"data": "left_sink / 5.0"
},
{
"field": "uv_right_sink",
"data": "right_sink / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, -left_sink)"
},
{
"skip": "False",
"data": "(length, 0, -right_sink)"
},
{
"skip": "skip_long_side",
"data": "(0, 0, -5.0)"
},
{
"skip": "skip_long_side",
"data": "(length, 0, -5.0)"
},
{
"skip": "False",
"data": "(0, 0, -height)"
},
{
"skip": "False",
"data": "(length, 0, -height)"
}
],
"faces": [
{
"skip": "skip_short_side",
"texture": "\"FloorSide\"",
"indices": [0, 2, 3, 1],
"uvs": [
"(0, 0)",
"(uv_height - uv_left_sink, 0)",
"(uv_height - uv_right_sink, uv_length)",
"(0, uv_length)"
],
"normals": null
},
{
"skip": "skip_long_side",
"texture": "\"LightingFloorTopBorder\"",
"indices": [0, 2, 3, 1],
"uvs": [
"(0, 0)",
"(1 - uv_left_sink, 0)",
"(1 - uv_right_sink, uv_length)",
"(0, uv_length)"
],
"normals": null
},
{
"skip": "skip_long_side",
"texture": "\"LightingFloorTopBorderless\"",
"indices": [2, 4, 5, 3],
"uvs": [
"(0, 0)",
"(uv_height - 1.0, 0)",
"(uv_height - 1.0, uv_length)",
"(0, uv_length)"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "floor_4edges_bottom",
"showcase": null,
"params": [
{
"field": "top_left_pos",
"data": "(0.0, 0.0)"
},
{
"field": "top_right_pos",
"data": "(0.0, 5.0)"
},
{
"field": "bottom_left_pos",
"data": "(5.0, 0.0)"
},
{
"field": "bottom_right_pos",
"data": "(5.0, 5.0)"
}
],
"skip": "False",
"vars": [
{
"field": "top_left_uv",
"data": "tuple(map(lambda x: x / 5.0, top_left_pos))"
},
{
"field": "top_right_uv",
"data": "tuple(map(lambda x: x / 5.0, top_right_pos))"
},
{
"field": "bottom_left_uv",
"data": "tuple(map(lambda x: x / 5.0, bottom_left_pos))"
},
{
"field": "bottom_right_uv",
"data": "tuple(map(lambda x: x / 5.0, bottom_right_pos))"
}
],
"vertices": [
{
"skip": "False",
"data": "top_left_pos + (0, )"
},
{
"skip": "False",
"data": "top_right_pos + (0, )"
},
{
"skip": "False",
"data": "bottom_left_pos + (0, )"
},
{
"skip": "False",
"data": "bottom_right_pos + (0, )"
}
],
"faces": [
{
"skip": "False",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 1, 3, 2],
"uvs": [
"top_left_uv",
"top_right_uv",
"bottom_right_uv",
"bottom_left_uv"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "floor_3edges_bottom",
"showcase": null,
"params": [
{
"field": "top_pos",
"data": "(0.0, 0.0)"
},
{
"field": "bottom_pos",
"data": "(5.0, 0.0)"
},
{
"field": "tip_pos",
"data": "(2.5, 2.5)"
}
],
"skip": "False",
"vars": [
{
"field": "top_uv",
"data": "tuple(map(lambda x: x / 5.0, top_pos))"
},
{
"field": "bottom_uv",
"data": "tuple(map(lambda x: x / 5.0, bottom_pos))"
},
{
"field": "tip_uv",
"data": "tuple(map(lambda x: x / 5.0, tip_pos))"
}
],
"vertices": [
{
"skip": "False",
"data": "top_pos + (0, )"
},
{
"skip": "False",
"data": "bottom_pos + (0, )"
},
{
"skip": "False",
"data": "tip_pos + (0, )"
}
],
"faces": [
{
"skip": "False",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 2, 1],
"uvs": [
"top_uv",
"tip_uv",
"bottom_uv"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "floor_rectangle_bottom",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "5.0"
}
],
"skip": "length == 0.0 or width == 0.0",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "floor_4edges_bottom",
"skip": "False",
"params": {
"top_left_pos": "(0, 0)",
"top_right_pos": "(0, width)",
"bottom_left_pos": "(length, 0)",
"bottom_right_pos": "(length, width)"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_triangle_bottom",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "2.5"
},
{
"field": "tip_offset",
"data": "2.5"
}
],
"skip": "length == 0.0",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "floor_3edges_bottom",
"skip": "False",
"params": {
"top_pos": "(0, 0)",
"bottom_pos": "(length, 0)",
"tip_pos": "(tip_offset, width)"
},
"transform": "ident()"
}
]
}
[
{
"identifier": "raw_floor_side",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "length",
"data": "5.0"
},
{
"field": "is_left_sink",
"data": "False"
},
{
"field": "is_right_sink",
"data": "False"
}
],
"skip": "height <= (0.7 if (is_left_sink or is_right_sink) else 0.0) or length == 0.0",
"vars": [
{
"field": "skip_long_side",
"data": "height <= 5.0"
},
{
"field": "skip_short_side",
"data": "height > 5.0"
},
{
"field": "uv_height",
"data": "height / 5.0"
},
{
"field": "uv_length",
"data": "length / 5.0"
},
{
"field": "left_sink",
"data": "0.7 if is_left_sink else 0.0"
},
{
"field": "right_sink",
"data": "0.7 if is_right_sink else 0.0"
},
{
"field": "uv_left_sink",
"data": "left_sink / 5.0"
},
{
"field": "uv_right_sink",
"data": "right_sink / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, -left_sink)"
},
{
"skip": "False",
"data": "(length, 0, -right_sink)"
},
{
"skip": "skip_long_side",
"data": "(0, 0, -5.0)"
},
{
"skip": "skip_long_side",
"data": "(length, 0, -5.0)"
},
{
"skip": "False",
"data": "(0, 0, -height)"
},
{
"skip": "False",
"data": "(length, 0, -height)"
}
],
"faces": [
{
"skip": "skip_short_side",
"texture": "\"FloorSide\"",
"indices": [0, 2, 3, 1],
"uvs": [
"(0, 0)",
"(uv_height - uv_left_sink, 0)",
"(uv_height - uv_right_sink, uv_length)",
"(0, uv_length)"
],
"normals": null
},
{
"skip": "skip_long_side",
"texture": "\"LightingFloorTopBorder\"",
"indices": [0, 2, 3, 1],
"uvs": [
"(0, 0)",
"(1 - uv_left_sink, 0)",
"(1 - uv_right_sink, uv_length)",
"(0, uv_length)"
],
"normals": null
},
{
"skip": "skip_long_side",
"texture": "\"LightingFloorTopBorderless\"",
"indices": [2, 4, 5, 3],
"uvs": [
"(0, 0)",
"(uv_height - 1.0, 0)",
"(uv_height - 1.0, uv_length)",
"(0, uv_length)"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "floor_4edges_bottom",
"showcase": null,
"params": [
{
"field": "top_left_pos",
"data": "(0.0, 0.0)"
},
{
"field": "top_right_pos",
"data": "(0.0, 5.0)"
},
{
"field": "bottom_left_pos",
"data": "(5.0, 0.0)"
},
{
"field": "bottom_right_pos",
"data": "(5.0, 5.0)"
}
],
"skip": "False",
"vars": [
{
"field": "top_left_uv",
"data": "tuple(map(lambda x: x / 5.0, top_left_pos))"
},
{
"field": "top_right_uv",
"data": "tuple(map(lambda x: x / 5.0, top_right_pos))"
},
{
"field": "bottom_left_uv",
"data": "tuple(map(lambda x: x / 5.0, bottom_left_pos))"
},
{
"field": "bottom_right_uv",
"data": "tuple(map(lambda x: x / 5.0, bottom_right_pos))"
}
],
"vertices": [
{
"skip": "False",
"data": "top_left_pos + (0, )"
},
{
"skip": "False",
"data": "top_right_pos + (0, )"
},
{
"skip": "False",
"data": "bottom_left_pos + (0, )"
},
{
"skip": "False",
"data": "bottom_right_pos + (0, )"
}
],
"faces": [
{
"skip": "False",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 1, 3, 2],
"uvs": [
"top_left_uv",
"top_right_uv",
"bottom_right_uv",
"bottom_left_uv"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "floor_3edges_bottom",
"showcase": null,
"params": [
{
"field": "top_pos",
"data": "(0.0, 0.0)"
},
{
"field": "bottom_pos",
"data": "(5.0, 0.0)"
},
{
"field": "tip_pos",
"data": "(2.5, 2.5)"
}
],
"skip": "False",
"vars": [
{
"field": "top_uv",
"data": "tuple(map(lambda x: x / 5.0, top_pos))"
},
{
"field": "bottom_uv",
"data": "tuple(map(lambda x: x / 5.0, bottom_pos))"
},
{
"field": "tip_uv",
"data": "tuple(map(lambda x: x / 5.0, tip_pos))"
}
],
"vertices": [
{
"skip": "False",
"data": "top_pos + (0, )"
},
{
"skip": "False",
"data": "bottom_pos + (0, )"
},
{
"skip": "False",
"data": "tip_pos + (0, )"
}
],
"faces": [
{
"skip": "False",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 2, 1],
"uvs": [
"top_uv",
"tip_uv",
"bottom_uv"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "floor_rectangle_bottom",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "5.0"
}
],
"skip": "length == 0.0 or width == 0.0",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "floor_4edges_bottom",
"skip": "False",
"params": {
"top_left_pos": "(0, 0)",
"top_right_pos": "(0, width)",
"bottom_left_pos": "(length, 0)",
"bottom_right_pos": "(length, width)"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_triangle_bottom",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "2.5"
},
{
"field": "tip_offset",
"data": "2.5"
}
],
"skip": "length == 0.0",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "floor_3edges_bottom",
"skip": "False",
"params": {
"top_pos": "(0, 0)",
"bottom_pos": "(length, 0)",
"tip_pos": "(tip_offset, width)"
},
"transform": "ident()"
}
]
}
]

View File

@@ -3,6 +3,7 @@
"identifier": "floor_normal_straight",
"showcase": {
"title": "Normal Floor",
"category": "Floors",
"icon": "NormalFloor",
"type": "floor",
"cfgs": [
@@ -18,7 +19,7 @@
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
"default": "5.0"
},
{
"field": "face_",
@@ -142,6 +143,7 @@
"identifier": "floor_sink_straight",
"showcase": {
"title": "Sink Floor",
"category": "Floors",
"icon": "SinkFloor",
"type": "floor",
"cfgs": [
@@ -157,7 +159,7 @@
"type": "float",
"title": "Length",
"desc": "The length of block.",
"default": "2.5"
"default": "5.0"
},
{
"field": "face_",

View File

@@ -1,171 +1,178 @@
[
{
"identifier": "raw_floor_terminal",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, False, True, True)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "2.5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, face[3], face[4], None)",
"is_sink": "is_sink"
},
"transform": "ident()"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "2.5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, face[3], face[5], None)",
"is_sink": "is_sink"
},
"transform": "move(0, 5, 0) @ scale(1, -1, 1)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[2], None)",
"is_sink": "is_sink"
},
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "2.5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_terminal",
"showcase": {
"title": "Normal Floor Terminal",
"icon": "NormalFloorTerminal",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_terminal",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_terminal",
"showcase": {
"title": "Sink Floor Terminal",
"icon": "SinkFloorTerminal",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_terminal",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True"
},
"transform": "ident()"
}
]
}
[
// The shared template prototype used by all floor terminals.
{
"identifier": "raw_floor_terminal",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, False, True, True)"
},
{
"field": "is_sink",
"data": "False"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "5.0",
"short_edge_offset": "2.5",
"short_edge_length": "2.5",
"height": "height",
"face": "(face[0], False, False, face[3], face[4], False)",
"is_sink": "is_sink",
"is_ribbon": "False"
},
"transform": "ident()"
},
{
"identifier": "cv_trapezoid_side",
"skip": "False",
"params": {
"long_edge_length": "5.0",
"short_edge_offset": "2.5",
"short_edge_length": "2.5",
"height": "height",
"face": "(face[0], False, False, face[3], face[5], False)",
"is_sink": "is_sink",
"is_ribbon": "False"
},
"transform": "move(0, 5, 0) @ scale(1, -1, 1)"
},
{
"identifier": "cv_triangle_side",
"skip": "False",
"params": {
"edge_length": "5",
"tip_offset": "2.5",
"height": "height",
"face": "(face[0], False, False, False, face[2], None)",
"is_sink": "is_sink"
},
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_normal_terminal",
"showcase": {
"title": "Normal Floor Terminal",
"category": "Floors",
"icon": "NormalFloorTerminal",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_terminal",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "False"
},
"transform": "ident()"
}
]
},
{
"identifier": "floor_sink_terminal",
"showcase": {
"title": "Sink Floor Terminal",
"category": "Floors",
"icon": "SinkFloorTerminal",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_terminal",
"skip": "False",
"params": {
"height": "height",
"face": "face",
"is_sink": "True"
},
"transform": "ident()"
}
]
}
]

View File

@@ -1,286 +1,289 @@
[
{
"identifier": "raw_trafo",
"showcase": null,
"params": [
{
"field": "trafo_texture",
"data": "\"BallWood\""
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, True, True, True)"
}
],
"skip": "False",
"vars": [
{
"field": "uv_height",
"data": "height / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, 0)"
},
{
"skip": "False",
"data": "(5, 0, 0)"
},
{
"skip": "False",
"data": "(5, 5, 0)"
},
{
"skip": "False",
"data": "(0, 5, 0)"
},
{
"skip": "False",
"data": "(0, 0, -height)"
},
{
"skip": "False",
"data": "(5, 0, -height)"
},
{
"skip": "False",
"data": "(5, 5, -height)"
},
{
"skip": "False",
"data": "(0, 5, -height)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "trafo_texture",
"indices": [0, 1, 2, 3],
"uvs": [
"(0, 0)",
"(1, 0)",
"(1, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[1]) or height == 0.0",
"texture": "trafo_texture",
"indices": [5, 4, 7, 6],
"uvs": [
"(0, 0)",
"(1, 0)",
"(1, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[2]) or height == 0.0",
"texture": "trafo_texture",
"indices": [3, 7, 4, 0],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[3]) or height == 0.0",
"texture": "trafo_texture",
"indices": [1, 5, 6, 2],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[4]) or height == 0.0",
"texture": "trafo_texture",
"indices": [0, 4, 5, 1],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[5]) or height == 0.0",
"texture": "trafo_texture",
"indices": [2, 6, 7, 3],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "wood_trafo",
"showcase": {
"title": "Wood Trafo",
"icon": "WoodTrafo",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_trafo",
"skip": "False",
"params": {
"trafo_texture": "\"BallWood\"",
"height": "height",
"face": "face"
},
"transform": "ident()"
}
]
},
{
"identifier": "stone_trafo",
"showcase": {
"title": "Stone Trafo",
"icon": "StoneTrafo",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_trafo",
"skip": "False",
"params": {
"trafo_texture": "\"BallStone\"",
"height": "height",
"face": "face"
},
"transform": "ident()"
}
]
},
{
"identifier": "paper_trafo",
"showcase": {
"title": "Paper Trafo",
"icon": "PaperTrafo",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_trafo",
"skip": "False",
"params": {
"trafo_texture": "\"BallPaper\"",
"height": "height",
"face": "face"
},
"transform": "ident()"
}
]
}
[
{
"identifier": "raw_trafo",
"showcase": null,
"params": [
{
"field": "trafo_texture",
"data": "\"BallWood\""
},
{
"field": "height",
"data": "5.0"
},
{
"field": "face",
"data": "(True, False, True, True, True, True)"
}
],
"skip": "False",
"vars": [
{
"field": "uv_height",
"data": "height / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, 0)"
},
{
"skip": "False",
"data": "(5, 0, 0)"
},
{
"skip": "False",
"data": "(5, 5, 0)"
},
{
"skip": "False",
"data": "(0, 5, 0)"
},
{
"skip": "False",
"data": "(0, 0, -height)"
},
{
"skip": "False",
"data": "(5, 0, -height)"
},
{
"skip": "False",
"data": "(5, 5, -height)"
},
{
"skip": "False",
"data": "(0, 5, -height)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "trafo_texture",
"indices": [0, 1, 2, 3],
"uvs": [
"(0, 0)",
"(1, 0)",
"(1, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[1]) or height == 0.0",
"texture": "trafo_texture",
"indices": [5, 4, 7, 6],
"uvs": [
"(0, 0)",
"(1, 0)",
"(1, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[2]) or height == 0.0",
"texture": "trafo_texture",
"indices": [3, 7, 4, 0],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[3]) or height == 0.0",
"texture": "trafo_texture",
"indices": [1, 5, 6, 2],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[4]) or height == 0.0",
"texture": "trafo_texture",
"indices": [0, 4, 5, 1],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
},
{
"skip": "(not face[5]) or height == 0.0",
"texture": "trafo_texture",
"indices": [2, 6, 7, 3],
"uvs": [
"(0, 0)",
"(uv_height, 0)",
"(uv_height, 1)",
"(0, 1)"
],
"normals": null
}
],
"instances": []
},
{
"identifier": "wood_trafo",
"showcase": {
"title": "Wood Trafo",
"category": "Trafo",
"icon": "WoodTrafo",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_trafo",
"skip": "False",
"params": {
"trafo_texture": "\"BallWood\"",
"height": "height",
"face": "face"
},
"transform": "ident()"
}
]
},
{
"identifier": "stone_trafo",
"showcase": {
"title": "Stone Trafo",
"category": "Trafo",
"icon": "StoneTrafo",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_trafo",
"skip": "False",
"params": {
"trafo_texture": "\"BallStone\"",
"height": "height",
"face": "face"
},
"transform": "ident()"
}
]
},
{
"identifier": "paper_trafo",
"showcase": {
"title": "Paper Trafo",
"category": "Trafo",
"icon": "PaperTrafo",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, True, True, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_trafo",
"skip": "False",
"params": {
"trafo_texture": "\"BallPaper\"",
"height": "height",
"face": "face"
},
"transform": "ident()"
}
]
}
]

View File

@@ -1,270 +1,272 @@
[
{
"identifier": "raw_floor_transition_part",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face_part",
"data": "(True, False, False)"
}
],
"skip": "False",
"vars": [],
"vertices": [
{
"skip": "not face_part[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face_part[0]",
"data": "(5, 0, 0)"
},
{
"skip": "not face_part[0]",
"data": "(0, 2.5, -0.7)"
},
{
"skip": "not face_part[0]",
"data": "(5, 5, 0)"
},
{
"skip": "not face_part[0]",
"data": "(0, 5, 0)"
}
],
"faces": [
{
"skip": "not face_part[0]",
"texture": "\"FloorTopProfilFlat\"",
"indices": [0, 1, 2],
"uvs": [
"(0, 1)",
"(0, 0)",
"(0.5, 1)"
],
"normals": null
},
{
"skip": "not face_part[0]",
"texture": "\"FloorTopProfilFlat\"",
"indices": [3, 2, 1],
"uvs": [
"(1, 0)",
"(0.5, 1)",
"(0, 0)"
],
"normals": null
},
{
"skip": "not face_part[0]",
"texture": "\"FloorTopProfilFlat\"",
"indices": [2, 3, 4],
"uvs": [
"(0.5, 1)",
"(1, 0)",
"(1, 1)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face_part[1]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "True"
},
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face_part[1]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "True",
"is_right_sink": "False"
},
"transform": "move(0, 2.5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face_part[2]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(5, 0, 0) @ rot(0, 0, 90)"
}
]
},
{
"identifier": "floor_transition",
"showcase": {
"title": "Transition",
"icon": "Transition",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_transition_part",
"skip": "False",
"params": {
"height": "height",
"face_part": "(face[0], face[2], face[3])"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(5, 5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_narrow_transition",
"showcase": {
"title": "Narrow Transition",
"icon": "NarrowTransition",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_transition_part",
"skip": "False",
"params": {
"height": "height",
"face_part": "(face[0], face[2], face[3])"
},
"transform": "scale(0.5, 1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(2.5, 5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "2.5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
}
[
{
"identifier": "raw_floor_transition_part",
"showcase": null,
"params": [
{
"field": "height",
"data": "5.0"
},
{
"field": "face_part",
"data": "(True, False, False)"
}
],
"skip": "False",
"vars": [],
"vertices": [
{
"skip": "not face_part[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face_part[0]",
"data": "(5, 0, 0)"
},
{
"skip": "not face_part[0]",
"data": "(0, 2.5, -0.7)"
},
{
"skip": "not face_part[0]",
"data": "(5, 5, 0)"
},
{
"skip": "not face_part[0]",
"data": "(0, 5, 0)"
}
],
"faces": [
{
"skip": "not face_part[0]",
"texture": "\"FloorTopProfilFlat\"",
"indices": [0, 1, 2],
"uvs": [
"(0, 1)",
"(0, 0)",
"(0.5, 1)"
],
"normals": null
},
{
"skip": "not face_part[0]",
"texture": "\"FloorTopProfilFlat\"",
"indices": [3, 2, 1],
"uvs": [
"(1, 0)",
"(0.5, 1)",
"(0, 0)"
],
"normals": null
},
{
"skip": "not face_part[0]",
"texture": "\"FloorTopProfilFlat\"",
"indices": [2, 3, 4],
"uvs": [
"(0.5, 1)",
"(1, 0)",
"(1, 1)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face_part[1]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "True"
},
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face_part[1]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "True",
"is_right_sink": "False"
},
"transform": "move(0, 2.5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face_part[2]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(5, 0, 0) @ rot(0, 0, 90)"
}
]
},
{
"identifier": "floor_transition",
"showcase": {
"title": "Transition",
"category": "Miscellaneous",
"icon": "Transition",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_transition_part",
"skip": "False",
"params": {
"height": "height",
"face_part": "(face[0], face[2], face[3])"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(5, 5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_narrow_transition",
"showcase": {
"title": "Narrow Transition",
"category": "Miscellaneous",
"icon": "NarrowTransition",
"type": "floor",
"cfgs": [
{
"field": "height_",
"type": "float",
"title": "Height",
"desc": "The height of block.",
"default": "5.0"
},
{
"field": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, False, False)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "False",
"vars": [],
"vertices": [],
"faces": [],
"instances": [
{
"identifier": "raw_floor_transition_part",
"skip": "False",
"params": {
"height": "height",
"face_part": "(face[0], face[2], face[3])"
},
"transform": "scale(0.5, 1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(2.5, 5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "2.5",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
}
]

Some files were not shown because too many files have changed in this diff Show More