65 Commits

Author SHA1 Message Date
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
14de9f3f1b i18n: update translation 2025-01-23 13:09:11 +08:00
dd64c0ce04 feat: finish work of release
- bump up version to 4.2
- update document about translation.
2025-01-21 10:10:36 +08:00
84f6baae6a i18n: basically finish translation 2025-01-20 22:38:29 +08:00
5afbf679ed i18n: update translations 2025-01-20 20:32:08 +08:00
89f5b5990d i18n: update translation 2025-01-20 18:21:14 +08:00
b441063061 i18n: first commit about i18n translation.
- add i18n translation files.
- add document about how to translate this plugin.
- fix some field descriptions in source code.
2025-01-20 16:08:46 +08:00
b96550ca5c feat: finish BME prototype improvement 2025-01-20 10:07:45 +08:00
cc74a2ca8b feat: add i18n for forgetten entries.
- add i18n for progress hints when importing or exporting virtools file.
- add i18n for naming convention report.
2025-01-19 10:52:20 +08:00
f9fe4af1fe feat: update BME structure 2025-01-19 10:29:58 +08:00
4a96906002 feat: update BME prototypes
- update BMe prototypes. add chris suggested component for future changes.
- add new 2 custom function in BME environment.
2025-01-18 19:09:32 +08:00
c448216496 doc: update document 2025-01-17 22:22:51 +08:00
f10c273067 fix: improve BME extractor
- improve BMe extractor with new added classes.
- I have written a half of BME validator, but I gave up now.
	* it takes too much time and I don't want to pay more on it. postpone it to next update.
	* I annotate all of BMe validator code for future implementation.
	* the improvement of BME json files (upgrade them to YAML format) also is postponed.
- change some interface in common.py. synchronize it to other modules using it.
2025-01-17 17:53:03 +08:00
04aa879c22 feat: finish i18n extract work
- masically finish u18n extract work (most fields are extracted)
2025-01-12 15:15:29 +08:00
4ffe29654b feat: add translation context for operators and their properties.
- add translation context for operator, menu, panel and etc. and their associated properties.
- improve some name and description but not finished.
- move reset BME material function inside BMEMaterialsHelper.
- rename variable of collection visitor in BME adder operator for clear meaning.
- replace some message box to report in ballance elements reset operator, BME materials reset operator and rail UV operator
2025-01-11 21:36:11 +08:00
1d7ac76d0e chore: update the generator of json
- add PO file extractor for BME prototypes.
- add validator for BME prototypes but not finished.
- update json builder script.
2025-01-09 21:41:52 +08:00
77315ffbea fix: fix previous commit remained issues.
- vt encodings in list showcase now works.
- modify some usage of message_box to Operator.report to make it more like blender suggested.
2025-01-08 20:20:10 +08:00
0862ecd269 feat: use list to display virtools encodings settings, instead of raw string.
- use list to show bmap encoding settings, instead of user input raw string. it will give a more obvisous interface.
	* add bmap encoding setting properties in ptrprop_resolver.
	* update ptrprop_resolver for more clear usage.
- following features has not been implemented yet.
	* default value for bmap encoding list.
	* the bridge function in ioport_shared module (filter empty item in result)
	* validate encoding list result when importing and exporting virtools file.
2025-01-08 13:21:35 +08:00
f4d3e48be2 refactor: add 2 classes to refactor old code which raise too much erros by linter.
- add TinyMutex to resolve the issue that we can not operate the virtools group infos of 2 individual objects.
	* use this new class for all class need resource mutex, such as ballance element, bme materials and etc.
- add CollectionVisitor to resolve that blender have bad document and type hint for runtime bpy.types.CollectionProperty.
	* now all visit to CollectionProperty are delegated by this class.
2025-01-06 15:12:14 +08:00
6ae8899912 feat: add new operator about convert curve to mesh with group infos.
- add a new operator which can converte selected object to mesh, and if object is curve and has bevel object, it will copy the virtools group info of bevel object at the same time.
- add a hint in virtools group panel to tell user that the virtools group of non-mesh object will not be saved.
2025-01-05 20:06:40 +08:00
76f1cdc3c7 fix: fix various rail creation issue.
- move rail creation function into an individual file, UTIL_rail_creator.py
- add flip options for screw rails. this allow user to create any types of screw rail they needed.
2025-01-04 20:13:20 +08:00
8105b110f2 feat: add default rail material when creating rail.
- add default rail material when creating rail.
	* add Rail material in bme material.
- remove negative screw radius feature when creating curve rail.
	* originally negative screw radius will cause normal flip issue when creating.
	* however, negative screw radius feature can no fulfill each shapes of screw style. it is more convenient using blender mirror feature after creating screw rail.
	* thus I remove this feature, not fix it (I can fix it).
2025-01-04 12:28:59 +08:00
acb87b3844 fix: fix step count error when exporting virtools file 2025-01-04 10:19:31 +08:00
94d5c934c6 fix: fix light direction issue when importing and exporting virtools file. 2025-01-03 23:42:44 +08:00
3372c7a4b7 feat: add light support in exporting virtools file.
Some checks failed
Publish docs via GitHub Pages / Deploy docs (push) Has been cancelled
- support light type when exporting virtools.
- both import and export virtools file now support light type. however there is a slight bug about light direction need to be resolved.
- fix bug that exporter throw exception if exported collection contain non-mesh object or exported object is not mesh object.
- fix the usage of BMMeshTrans according to upstream changes.
2025-01-03 17:36:44 +08:00
4181096a9e fix: redirect some reference of bpy.context to context passed by operator argument 2025-01-03 10:37:26 +08:00
89a5e6367b feat: improve name conflict strategy UI layout 2025-01-03 09:55:02 +08:00
cb893b770a feat: add light object support in importing virtools file.
- fix all `def poll(self)` to `def poll(cls)` to let it fit class method name convention.
- fix wrong progress counter when importing virtools file.
- add light support when importing virtools file.
- add corresponding conflict strategy and resolver for light.
2025-01-03 09:36:32 +08:00
2f08455518 feat: add virtools light features.
- add virtools light feature for blender light type and add all essential operators, functions and structs.
- remove PyBMap from repository. order builder fetch it on their own.
- update gitignore.
2024-12-31 14:40:41 +08:00
729e12ed7b feat: update virtools file importer and exporter
- use panel to organise property group in virtools file importer and exporter.
- move all ballance params and virtools params into ioport_shared module and enable different showcase according to the argument passed to show function presenting whether current window is importer or exporter.
- add multiple type ignore to ignore the error of bpy operator member field type hints.
2024-12-30 17:53:42 +08:00
fe47861bd0 fix: fix issue of BME module prototype 2024-11-02 17:44:06 +08:00
c894d88c54 doc: modify document to mark changes
- add universal encoding infos in documentation.
- bump up version to 4.1 for release.
2024-09-21 23:30:56 +08:00
c8d59ef5f4 feat: update PyBMap dependency.
- update PyBMap dependency.
- use BMap 0.2 instead of old one.
- change default encoding name string according to the change of LibCmo changes.
2024-09-21 22:59:14 +08:00
f5c50ae079 fix: fix legacy align issue.
- fix issus that legacy align can not align object with non-1 scale factors.
- refactor some functions in legacy align to have better looking.
- fix issus that legacy fail to align objects since second executing by forcely updating view layer.
2024-09-07 20:34:22 +08:00
b1199f6a21 doc: translate documentation 2024-07-27 11:44:35 +08:00
47a8d81ecd doc: translate documentation 2024-07-26 09:46:16 +08:00
24ac07a3b3 doc: translate documentation 2024-07-25 10:37:16 +08:00
b647d7256f doc: translate documentation 2024-07-24 13:49:13 +08:00
421f01b3db doc: translate documentation 2024-07-23 11:01:41 +08:00
f215d3487f doc: translate documentation 2024-07-22 16:40:52 +08:00
1661f82a07 doc: update english documentation 2024-07-21 14:42:02 +08:00
512e7e868b doc: add english documentation.
- add english documentation for install-plugin and tech-info chapters.
- modify gitignore because we do not need redist folder any more.
2024-07-20 10:26:50 +08:00
208 changed files with 19708 additions and 7167 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/*.json binary

6
.gitignore vendored
View File

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

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,174 +1,183 @@
[
{
"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": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[4], False, face[3], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "move(5, 0, 0) @ rot(0, 0, -270)"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[3], False, face[5], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "move(5, 5, 0) @ rot(0, 0, -180)"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[5], False, face[2], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[2], False, face[4], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "move(0, 0, 0)"
}
]
},
{
"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",
"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()"
}
]
}
]

View File

@ -1,319 +1,237 @@
[
{
"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": [
{
"field": "uv_length",
"data": "length / 5.0"
},
{
"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": "(0, 2.5, -sink)"
},
{
"skip": "not face[0]",
"data": "(length, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(length, 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, uv_length)",
"(uv_border_texture, uv_length)",
"(uv_border_texture, 0)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "is_sink",
"is_right_sink": "False"
},
"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": "False",
"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, 2.5, 0) @ rot(0, 0, 180)"
},
{
"identifier": "floor_bottom",
"skip": "not face[1]",
"params": {
"length": "length",
"width": "2.5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"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",
"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()"
}
]
}
]

View File

@ -0,0 +1,427 @@
[
// 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,460 @@
[
{
"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_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",
"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()"
}
]
}
]

View File

@ -1,171 +1,171 @@
[
{
"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_bottom",
"skip": "not face[1]",
"params": {
"length": "length",
"width": "width"
},
"transform": "move(0, 0, -height)"
}
]
}
[
{
"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)"
}
]
}
]

View File

@ -1,371 +1,340 @@
[
{
"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": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[4], False, face[3], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "is_ribbon"
},
"transform": "move(5 + length, 0, 0) @ rot(0, 0, -270)"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[3], False, face[5], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "is_ribbon"
},
"transform": "move(5 + length, 5 + width, 0) @ rot(0, 0, -180)"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[5], False, face[2], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "is_ribbon"
},
"transform": "move(0, 5 + width, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[2], False, face[4], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "is_ribbon"
},
"transform": "ident()"
},
{
"identifier": "floor_flat",
"skip": "False",
"params": {
"height": "height",
"length": "length",
"width": "width",
"face": "(face[0], face[1], False, False, False, False)",
"is_sink": "is_sink"
},
"transform": "move(2.5, 2.5, 0)"
},
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"height": "height",
"length": "length",
"face": "(face[0], face[1], False, False, face[4], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(2.5, 0, 0)"
},
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"height": "height",
"length": "width",
"face": "(face[0], face[1], False, False, face[2], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(0, 2.5 + width, 0) @ rot(0, 0, -90)"
},
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"height": "height",
"length": "length",
"face": "(face[0], face[1], False, False, face[5], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(2.5 + length, 5 + width, 0) @ rot(0, 0, -180)"
},
{
"identifier": "raw_floor_border",
"skip": "False",
"params": {
"height": "height",
"length": "width",
"face": "(face[0], face[1], False, False, face[3], False)",
"is_sink": "is_sink",
"is_ribbon": "is_ribbon"
},
"transform": "move(5 + length, 2.5, 0) @ rot(0, 0, -270)"
}
]
},
{
"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",
"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()"
}
]
}
]

View File

@ -1,182 +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_bottom",
"showcase": null,
"params": [
{
"field": "length",
"data": "5.0"
},
{
"field": "width",
"data": "5.0"
}
],
"skip": "length == 0.0 or width == 0.0",
"vars": [
{
"field": "uv_length",
"data": "length / 5.0"
},
{
"field": "uv_width",
"data": "width / 5.0"
}
],
"vertices": [
{
"skip": "False",
"data": "(0, 0, 0)"
},
{
"skip": "False",
"data": "(0, width, 0)"
},
{
"skip": "False",
"data": "(length, 0, 0)"
},
{
"skip": "False",
"data": "(length, width, 0)"
}
],
"faces": [
{
"skip": "False",
"texture": "\"FloorTopBorderless\"",
"indices": [0, 1, 3, 2],
"uvs": [
"(0, 0)",
"(uv_width, 0)",
"(uv_width, uv_length)",
"(0, uv_length)"
],
"normals": null
}
],
"instances": []
}
[
{
"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()"
}
]
}
]

322
assets/jsons/streets.json5 Normal file
View File

@ -0,0 +1,322 @@
[
{
"identifier": "floor_normal_straight",
"showcase": {
"title": "Normal Floor",
"icon": "NormalFloor",
"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": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "length == 0",
"vars": [
{
"field": "length_uv",
"data": "length / 5.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(length, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(length, 5, 0)"
},
{
"skip": "not face[0]",
"data": "(0, 5, 0)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "\"FloorTopFlat\"",
"indices": [0, 1, 2, 3],
"uvs": [
"(0, 0)",
"(0, length_uv)",
"(1, length_uv)",
"(1, 0)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "5",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(length, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(0, 5, 0) @ scale(1, -1, 1)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "length",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
},
{
"identifier": "floor_sink_straight",
"showcase": {
"title": "Sink Floor",
"icon": "SinkFloor",
"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": "face_",
"type": "face",
"title": "Face",
"desc": "Whether has some faces.",
"default": "(True, False, False, False, True, True)"
}
]
},
"params": [
{
"field": "height",
"data": "height_"
},
{
"field": "length",
"data": "length_"
},
{
"field": "face",
"data": "face_"
}
],
"skip": "length == 0",
"vars": [
{
"field": "length_uv",
"data": "length / 5.0"
}
],
"vertices": [
{
"skip": "not face[0]",
"data": "(0, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(length, 0, 0)"
},
{
"skip": "not face[0]",
"data": "(length, 2.5, -0.7)"
},
{
"skip": "not face[0]",
"data": "(0, 2.5, -0.7)"
},
{
"skip": "not face[0]",
"data": "(length, 5, 0)"
},
{
"skip": "not face[0]",
"data": "(0, 5, 0)"
}
],
"faces": [
{
"skip": "not face[0]",
"texture": "\"FloorTopProfil\"",
"indices": [0, 1, 2, 3],
"uvs": [
"(0, 0)",
"(0, length_uv)",
"(0.5, length_uv)",
"(0.5, 0)"
],
"normals": null
},
{
"skip": "not face[0]",
"texture": "\"FloorTopProfil\"",
"indices": [3, 2, 4, 5],
"uvs": [
"(0.5, 0)",
"(0.5, length_uv)",
"(1, length_uv)",
"(1, 0)"
],
"normals": null
}
],
"instances": [
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "True"
},
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[2]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "True",
"is_right_sink": "False"
},
"transform": "move(0, 2.5, 0) @ rot(0, 0, 90) @ scale(1, -1, 1)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "False",
"is_right_sink": "True"
},
"transform": "move(length, 0, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[3]",
"params": {
"height": "height",
"length": "2.5",
"is_left_sink": "True",
"is_right_sink": "False"
},
"transform": "move(length, 2.5, 0) @ rot(0, 0, 90)"
},
{
"identifier": "raw_floor_side",
"skip": "not face[4]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_side",
"skip": "not face[5]",
"params": {
"height": "height",
"length": "length",
"is_left_sink": "False",
"is_right_sink": "False"
},
"transform": "move(0, 5, 0) @ scale(1, -1, 1)"
},
{
"identifier": "floor_rectangle_bottom",
"skip": "not face[1]",
"params": {
"length": "length",
"width": "5"
},
"transform": "move(0, 0, -height)"
}
]
}
]

View File

@ -1,150 +1,176 @@
[
{
"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": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[2], face[3], face[4], False)",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "ident()"
},
{
"identifier": "raw_floor_corner",
"skip": "False",
"params": {
"height": "height",
"face": "(face[0], face[1], face[5], False, face[2], face[3])",
"is_sink": "is_sink",
"is_inner": "False",
"is_ribbon": "False"
},
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
}
]
},
{
"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",
"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()"
}
]
}
]

View File

@ -1,286 +1,286 @@
[
{
"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",
"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()"
}
]
}
]

View File

@ -1,270 +1,270 @@
[
{
"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_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_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",
"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)"
}
]
}
]

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