Compare commits
192 Commits
v3.2
...
v4.3-alpha
Author | SHA1 | Date | |
---|---|---|---|
2b2b18cfa4 | |||
b19800e37f | |||
e14729500c | |||
48bfc54830 | |||
7e74e42bd7 | |||
96a81b165b | |||
0681f0d240 | |||
d700f1276a | |||
3bea3d67b9 | |||
ec41b7553a | |||
9e2539499e | |||
3a5cd1c937 | |||
1afa5f9893 | |||
1383e87104 | |||
a2b8f41a21 | |||
93f23abeb9 | |||
4ba3ff9e5a | |||
a9a889a8fd | |||
fc34b19a42 | |||
9e65d258d7 | |||
ab266a07fb | |||
61c7709b97 | |||
1044d4b450 | |||
54edc4dab7 | |||
f40efb0467 | |||
10de948a79 | |||
0ae95e927f | |||
9f591113f8 | |||
685a0b8066 | |||
a1a215ec19 | |||
3bed920f11 | |||
6dc82aade6 | |||
ac6692cd97 | |||
14de9f3f1b | |||
dd64c0ce04 | |||
84f6baae6a | |||
5afbf679ed | |||
89f5b5990d | |||
b441063061 | |||
b96550ca5c | |||
cc74a2ca8b | |||
f9fe4af1fe | |||
4a96906002 | |||
c448216496 | |||
f10c273067 | |||
04aa879c22 | |||
4ffe29654b | |||
1d7ac76d0e | |||
77315ffbea | |||
0862ecd269 | |||
f4d3e48be2 | |||
6ae8899912 | |||
76f1cdc3c7 | |||
8105b110f2 | |||
acb87b3844 | |||
94d5c934c6 | |||
3372c7a4b7 | |||
4181096a9e | |||
89a5e6367b | |||
cb893b770a | |||
2f08455518 | |||
729e12ed7b | |||
fe47861bd0 | |||
c894d88c54 | |||
c8d59ef5f4 | |||
f5c50ae079 | |||
b1199f6a21 | |||
47a8d81ecd | |||
24ac07a3b3 | |||
b647d7256f | |||
421f01b3db | |||
f215d3487f | |||
1661f82a07 | |||
512e7e868b | |||
427bad4f6b | |||
209d212287 | |||
2271b0a621 | |||
6940428b88 | |||
aa602a7bb8 | |||
8588f097a2 | |||
5d8ffb7e48 | |||
270fddff52 | |||
084e7fbe61 | |||
190be6ec61 | |||
36e925101e | |||
84e7e8380f | |||
c58af8ce48 | |||
07298fd21c | |||
3a1a0fb0f6 | |||
3396947115 | |||
6cf2ab895d | |||
b039dd8b43 | |||
8bad1a487c | |||
0f18559d3f | |||
5a5053440c | |||
02a1222210 | |||
f8c344f65e | |||
0bec108dcb | |||
997839a187 | |||
da71d5560c | |||
02082bf99e | |||
c82c094519 | |||
8ec101e1f1 | |||
8499c25b67 | |||
200ac40648 | |||
25091a48a7 | |||
259f99ddf8 | |||
f123bdacc0 | |||
8f27fec3c8 | |||
0d0d4db2db | |||
bfbdf5c99b | |||
50b2cf2cf1 | |||
013096459a | |||
31aa5c3127 | |||
f9502fe2d4 | |||
b5565d796a | |||
6b31401240 | |||
2c006b4528 | |||
680f367a42 | |||
318d661ac1 | |||
321e1b6fe9 | |||
20aba6c273 | |||
c5ce6e8a2c | |||
9315ff723d | |||
50b7eb0bce | |||
03e8feac67 | |||
35f2c4a389 | |||
6bc3933291 | |||
03441c642b | |||
77b15a8797 | |||
94872957fd | |||
a6de69c882 | |||
52f3936e42 | |||
2f123e6a3c | |||
f6569313bf | |||
ebb22c9ec1 | |||
ae9a848864 | |||
ca7e047c09 | |||
5c34bbad38 | |||
70dd525315 | |||
3025fcf305 | |||
52452a96d5 | |||
84b3ace13d | |||
7116d7198a | |||
6944415912 | |||
88fe1519e3 | |||
5bb3abed20 | |||
e79982c43f | |||
8e2d7a4133 | |||
cb80fa8b03 | |||
e84c1148f3 | |||
1432c2990a | |||
1a2dd08092 | |||
59a1275f68 | |||
d128ffcde5 | |||
fd17d3b5c9 | |||
1f0444009f | |||
bd40e0fdf2 | |||
6991307b8b | |||
b7ad5c67d4 | |||
5bbaa895eb | |||
1299a14f3b | |||
8fad643dd9 | |||
ec0749f3e5 | |||
6e4b1b37da | |||
1eaaedfcbd | |||
c1f92c7244 | |||
2896602e6a | |||
9079bf1bb3 | |||
f7dd5f32ba | |||
b4bb85cc71 | |||
bcbe9c987e | |||
16d4fc2bca | |||
4f10b1a9e9 | |||
484a4101ad | |||
ea6cb430fe | |||
354b3cd180 | |||
1d1de08bd7 | |||
21345b8251 | |||
b94e7e2b22 | |||
5584bc66a0 | |||
4f693b555d | |||
4733295a39 | |||
d9b9531828 | |||
1db6cab8ca | |||
8de1adda04 | |||
f07cfc91d5 | |||
0a3b3c5862 | |||
0d1e382b37 | |||
12d5f8c236 | |||
6fe856fa8e | |||
c2a85a2d86 |
12
.gitattributes
vendored
@ -1,8 +1,6 @@
|
||||
# all png are binary
|
||||
# All PNG image are binary
|
||||
*.png binary
|
||||
# our generated mesh should be save as binary
|
||||
*.bin binary
|
||||
# json is data and not good for human reading(althought I edit it on my own hand.)
|
||||
# so set it as binary
|
||||
ballance_blender_plugin/json/basic_blocks/*.json binary
|
||||
ballance_blender_plugin/json/derived_blocks/*.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
|
||||
|
27
.github/workflows/main.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
name: Publish docs via GitHub Pages
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Deploy docs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout master
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: master
|
||||
|
||||
- name: Install MkDocs
|
||||
run: |
|
||||
echo 'mkdocs' > requirements.txt
|
||||
echo 'pymdown-extensions' >> requirements.txt
|
||||
|
||||
- name: Deploy docs
|
||||
uses: mhausenblas/mkdocs-deploy-gh-pages@nomaterial
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CONFIG_FILE: docs/mkdocs.yml
|
||||
# GITHUB_DOMAIN: github.myenterprise.com
|
141
.gitignore
vendored
@ -1,138 +1,3 @@
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
db.sqlite3
|
||||
db.sqlite3-journal
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||
# install all needed dependencies.
|
||||
#Pipfile.lock
|
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
## ===== Personal =====
|
||||
# Disable VSCode
|
||||
.vscode/
|
||||
|
175
README.md
@ -1,176 +1,7 @@
|
||||
# Ballance Blender Helper
|
||||
# BBP NG
|
||||
|
||||
[中文版本](README_ZH.md)
|
||||
|
||||
## Brief Introduction
|
||||
|
||||
This is a Blender plugin which is served for Ballance mapping in Blender.
|
||||
The latest commit may not be stable to use, please use the latest commit with git tag as the stable version.
|
||||
This plugin contain various aspect of Ballance mapping. However, if some features can be easily gotten from other Blender plugin, this plugin will not provide them duplicatedly. We highly recommend that use this plugin with following plugins.
|
||||
|
||||
* [BenjaminSauder/SimpleLattice](https://github.com/BenjaminSauder/SimpleLattice): Create lattice quickly to transform object.
|
||||
* [egtwobits/Mesh Align Plus](https://github.com/egtwobits/mesh_mesh_align_plus): Provide powerful align functions which far beyond vanilla Blender align function.
|
||||
|
||||
## Technical Infomation
|
||||
|
||||
Used BM file spec can be found in [there](https://github.com/yyc12345/gist/blob/master/BMFileSpec/BMSpec_ZH.md) (Chinese only).
|
||||
Used tools chain principle and the file format located in `meshes` can be found in [there](https://github.com/yyc12345/gist/blob/master/BMFileSpec/YYCToolsChainSpec_ZH.md) (Chinese only).
|
||||
The format of the files which are under the `jsons` folder and belong to the BMERevenge section, can be found in [here](https://github.com/yyc12345/gist/blob/master/BMERevenge/DevDocument_ZH.md) (Chinese only).
|
||||
|
||||
This plugin will continuously support Blender lastest **LTS** version. This plugin will migrate to new version when the new LTS version released. Currently, it based on Blender **3.3.x**.
|
||||
|
||||
## Installation
|
||||
|
||||
Put `ballance_blender_plugin` into Blender's plugin folder, `scripts/addons_contrib`. Then enable this plugin in Blender's preferences (DO NOT forget to configure this plugin's settings after first installation or updating plugin.).
|
||||
|
||||
## Feature Introduction
|
||||
|
||||
### Plugin Settings
|
||||
|
||||
* External Texture Folder: Please fill in the `Texture` directory of Ballance, the plugin will refer the external texture file from this directory (the texture file originally with Ballance)
|
||||
* No Component Collection: Objects located in this collection will be forced to be set as non-component. If left blank, this function will be shutdown. This function is frequently used in forced component replacement.
|
||||
* Temp Texture Folder: used to cache texture files extracted from BM files. Please arrange a directory that will not be automatically cleaned up. Since Blender will continue to read texture files from this directory, it can not be emptied casually.
|
||||
|
||||
Temp Texture Folder does not allow files with duplicated name. Because of this, imagine this situation, there are two texture files with the same name in two BM files, but they represent different images. When you import them one by one for different maps. The later file will overwrite the previous file, And this will cause a texture error when the first Blender document was opened again. For the solution of this issue, the best way is to force packaging once. After successfully importing the BM, click `File - External Data - Pack Resources`, then you can clear Temp Texture Folder safely. With your preference, you also can click `File - External Data - Unpack Resources` to extract textures. This operation will extract and re-refer all textures into standalone texture folder within the folder where this Blender document is.
|
||||
|
||||
### BM Import / Export
|
||||
|
||||
Click `File - Import - Ballance Map` to import BM file.
|
||||
When name conflicts occur during importing BM, you have ability to choose different strategies for 4 different data types, Texture, Material, Mesh and Object. You can specify them to create a new instance or use current data block.
|
||||
|
||||
Click `File - Export - Ballance Map` to export a BM file.
|
||||
You can export a collection or an object (Export Mode), and specify target (Export Target) correspondingly.
|
||||
Although plugin provide Virtools Group feature and give you ability to grouping object in Blender. The export function also depend on Tools Chain Principle. Because of this, if you do not follow Tools Chain Principle, some convenient features will be disabled, for example, your exported BM file may larger than common one.
|
||||
|
||||
It should be noted that once the BM is exported, all the faces in the file will be converted to triangular faces, please make a backup in advance.
|
||||
It is recommended to use a flat collection structure, do not put a collection within another collection, which may cause some unnecessary problems.
|
||||
The suffix name of BM file is BMX, X stands for compression. BMX and BM is the same thing.
|
||||
|
||||
### Ballance 3D
|
||||
|
||||
Ballance 3D is a set of light tools related to 3D operations, which can be found in the upper left corner menu bar of 3D View. This menu is named as Ballance.
|
||||
|
||||
#### 3ds Max Align
|
||||
|
||||
Provide 3ds Max like align tools. Current active object will be seen as reference object. All selected objects (except active object) will be seen as operating object (So you can select multiple objects to align to a single object).
|
||||
|
||||
#### Create Rail UV
|
||||
|
||||
To create UVs for the rails in the map, you need to select the objects that need to add UVs similar to the rails, and then click this button to create.
|
||||
In the dialog, you can select the material to be used. You can also choose the unfolding mode. In some unfolding modes, projection axis and zoom ratio options is available. Although Ballance will process all rail UV in game internally, it is essential that give a perfect UV in designer.
|
||||
If you want that the rail have in-game UV (it represent as smooth texture), you can choose `TT_ReflectionMapping` unfolding mode. This mode is written with the reverse work of game used function. This unfolding mode may be useful when you creating advertisement image in Blender for your map.
|
||||
|
||||
#### Flatten UV
|
||||
|
||||
In the object editing mode, it is a operator which is used to attach the currently selected surface to the UV. And you can specific the edge which will be attached into the V axis.
|
||||
Note that only convex face is supported. Applying this for a concave face will cause undefined behavior.
|
||||
|
||||
In the edit mode, select the surface, click Flatten UV, and then scroll the slider to select an edge as a reference.
|
||||
If the generated UV is not attached correctly, such as the FloorSide's band is pasted to the bottom, you can reselect the reference edge and redo the operation until it is correct.
|
||||
|
||||
For the UV flatten by plugin, it must have a scale property. For example, the UV scale of normal floor is 5. However, the UV scale of sink floor is slightly larger than 5. Because the sink floor is "sink" in the floor block. There are 2 methods provided by plugin to getting this proper scale number. You can choose one from Scale Mode.
|
||||
The first method is that user specify a direct scale number. You just need select Scale Size in Scale Mode and fill with a proper scale number. This option is frequently used for fill a large borderless floor.
|
||||
The second method is reference point mode. You need specify a reference point and corresponding U component of its UV. Plugin will calculate the scale size automatically. This method is used for expanding a path of floor.
|
||||
|
||||
### Quick Struct Adder
|
||||
|
||||
In the add menu, we have added a set of commonly used objects. After adding, the object will move to the 3D cursor.
|
||||
|
||||
#### Elements
|
||||
|
||||
Add elements, you can also specify attributes such as section when adding (it will not be displayed for unique objects such as start point)
|
||||
|
||||
#### Rail section
|
||||
|
||||
Add rail section, you can choose monorail or rail (just decide the number of rail section loops added, and will not help you rotate the angle), as well as rail radius and rail span (default value is standard value).
|
||||
|
||||
#### Floors
|
||||
|
||||
A powerful floor adder feature belong to the extension of BMERevenge project.
|
||||
In menu, Basic Floor is basic floor component. Derived Floor is consisted by basic floor components. Commonly, frequently used models are located in Derived Floor section.
|
||||
After selecting a floor type, you can assign 2 expand value at most, according to its property. You also can use options to decide whether side faces and bottom face can be generated.
|
||||
Comparing with trditional Ballance Map Editor, this function can massively reduce useless vertices.
|
||||
|
||||
The floor type can be simply grouped as Flat Floor, Sink Floor, Wide Floor and Platform.
|
||||
Additionally, Trafo Block and Transition between Flat Floor and Sink Floor are available.
|
||||
|
||||
It is recommended to merge the vertices by distance, unless you need do some special work.
|
||||
|
||||
### Virtools Group
|
||||
|
||||
Plugin add a new property for each Blender objects, called Virtools Group. It takes the same functionality of Group in Virtools.
|
||||
Select an object, You can find `Virtools Group` panel in `Object Properties` panel.
|
||||
Click Add or Delete icon to group or ungroup for object.
|
||||
Double click item in list to rename it.
|
||||
|
||||
After click Add button, you can choose Predefined option, and select a name from all legal Ballance used group names.
|
||||
Or, choose Custom option and write your own group name.
|
||||
|
||||
### Virtools Material
|
||||
|
||||
Plugin add a new property for each Blender materials, called Virtools Material. It create a bridge between Virtools Material and Blender Material.
|
||||
Navigate to `Material Properties` panel, select a material, you can find `Virtools Material` panel.
|
||||
In default, user created material will not enable Virtools Material feature. You need to click checkbox of `Virtools Material` panel to enable or disable it.
|
||||
|
||||
After enable Virtools Material, `Basic Parameters` section and `Advanced Parameters` section can be set. Set your material peroperties just like operating in Virtools.
|
||||
Just like its name, `Basic Parameters` is basic material properties. `Advanced Parameters` is mainly related to transparent properties and usually used in the bottom of transparent column.
|
||||
Additionally, `Basic Parameters` section provide a preset function, allowing user to use some preset material settings, which only affect 4 basic colors, just for convenient using.
|
||||
|
||||
In `Operation` section, `Apply Virtools Material` will clean all existed Blender material and create a new material graph according to Virtools material properties.
|
||||
And, `Parse from Blender Principled BSDF` will try parsing a Principled BSDF to Virtools material.
|
||||
If your material highly rely on Blender material, please execute `Parse from Blender Principled BSDF` or disable Virtools Material feature before exporting BM file, otherwise material can not be saved correctly.
|
||||
|
||||
### Select by Virtools Group
|
||||
|
||||
Plugin add a selection function according to Virtools Group in Select menu.
|
||||
|
||||
This function firstly have 5 different selection strategies which is exactly matched with Blender selection method. Just use it like Blender selection (Set, Extend, Subtract, Invert, Intersect).
|
||||
Then, select your group name to start a selection.
|
||||
|
||||
If you can, using Subtract or Intersect modes would be better than other modes. Because these modes avoid analyzing too many objects.
|
||||
For example, first, select a rough range, and then use the Intersect mode to filter objects, which is more efficient than directly using the Start mode to select.
|
||||
|
||||
### Quick Grouping
|
||||
|
||||
Plugin add quick grouping menu in 2 places.
|
||||
You can select various objects, right click and find quick grouping menu in Object Context menu.
|
||||
Also you can pick objects in Outline View and right click them, find quick grouping menu in Object menu.
|
||||
|
||||
#### Group into
|
||||
|
||||
Group selected objects into your specified group.
|
||||
|
||||
#### Ungroup from
|
||||
|
||||
Ungroup selected objects from your specified group.
|
||||
|
||||
#### Clear Grouping
|
||||
|
||||
Clean the grouping infomation for selected objects.
|
||||
|
||||
### Auto Grouping & Rename
|
||||
|
||||
In Outline View, you can find auto grouping and rename menu via right click any collection.
|
||||
|
||||
This plugin now support 2 name standard.
|
||||
First one has been introduced in Technical Infomation chapter. In plugin, its name is `YYC Tools Chains`.
|
||||
The second one is used by [Imengyu/Ballance](https://github.com/imengyu/Ballance). In plugin, its name is `Imengyu Ballance`.
|
||||
|
||||
All functions within this menu will only output a summary when finishing. If you want to check out some objects in detail, please click `Window - Switch System Terminal`. Plugin output a detailed report in that place.
|
||||
|
||||
#### Rename by Group
|
||||
|
||||
Rename object with proper name according to its Virtools Group properties.
|
||||
This usually use when migrating original map. Some Ballance derived applications do not have Group concept. They rely on name to get group infomations.
|
||||
|
||||
#### Convert Name
|
||||
|
||||
Convert name between different name standard.
|
||||
Frequently used in convertion between 2 different Ballance derived applications.
|
||||
|
||||
#### Auto Grouping
|
||||
|
||||
Auto grouping according to specified name standard.
|
||||
Please pay attention that previous grouping infomations will be overwritten.
|
||||
If you following some mapping standard during all mapping stages, this function will auto grouping all objects for you.
|
||||
BBP NG, abbr **B**allance **B**lender **P**lugin **N**ext **G**eneration.
|
||||
|
||||
For an introduction to this plugin, installing it, compiling it, reporting bugs, etc., see the GitHub Page of this project: https://yyc12345.github.io/BallanceBlenderHelper
|
||||
|
175
README_ZH.md
@ -1,176 +1,7 @@
|
||||
# Ballance Blender Helper
|
||||
# BBP NG
|
||||
|
||||
[English version](README.md)
|
||||
|
||||
## 简介
|
||||
|
||||
这是一个用于Blender的插件,其主要是服务于Ballance制图。
|
||||
请选择打了tag的最新commit使用。最新的commit不能保证其是稳定可用的。
|
||||
本插件囊括了Ballance制图中可能会用到的各种功能。对于一些其它插件可以提供的功能,本插件不再重复提供。建议与下列插件合用以取得更好制图效果:
|
||||
|
||||
* [BenjaminSauder/SimpleLattice](https://github.com/BenjaminSauder/SimpleLattice):快速创建晶格以便变形物体。
|
||||
* [egtwobits/Mesh Align Plus](https://github.com/egtwobits/mesh_mesh_align_plus):提供远超Blender原生的对齐功能。
|
||||
|
||||
## 技术信息
|
||||
|
||||
使用的BM文件标准可以在[这里](https://github.com/yyc12345/gist/blob/master/BMFileSpec/BMSpec_ZH.md)查找。
|
||||
使用的制图链标准以及`meshes`文件夹下的文件的格式可以在[这里](https://github.com/yyc12345/gist/blob/master/BMFileSpec/YYCToolsChainSpec_ZH.md)查找
|
||||
`jsons`文件夹下的,隶属于BMERevenge部分的文件的格式可以在[这里](https://github.com/yyc12345/gist/blob/master/BMERevenge/DevDocument_ZH.md)查找
|
||||
|
||||
支持Blender的原则是支持当前最新的 **LTS** 版本,在最新的LTS版本释出之后会花一些时间迁移插件。当前插件基于**3.3.x**版本
|
||||
|
||||
## 安装
|
||||
|
||||
将`ballance_blender_plugin`直接复制到Blender插件目录`scripts/addons_contrib`内即可。然后在Blender偏好设置中启用即可(请在第一次安装后或更新插件后配置插件设置)。
|
||||
|
||||
## 功能介绍
|
||||
|
||||
### 插件设置
|
||||
|
||||
* External texture folder:请填写为Ballance的`Texture`目录,插件将从此目录下调用外置贴图文件(即Ballance原本带有的贴图文件)
|
||||
* No component collection:处于此集合中的物体将被强制指定为非Component。如果留空则表示不需要这个功能。此功能通常用于机关模型强制替换。
|
||||
* Temp texture folder:用于缓存从BM文件中提取的贴图文件,请安排一个平时不会被自动清理的目录。由于Blender会持续从这个目录读取贴图文件,因此不能随意清空。
|
||||
|
||||
Temp texture folder不允许同名文件存在,即如果我为2个地图分别导入两个BM,这两个BM中存在贴图文件名相同但图像不同的两个文件,那么后来的文件将会覆盖前面的文件,并进而导致前者导入后的文档再次打开时出现贴图错误。关于这个问题的解决方案,最好的方法是强制打包一次。在导入BM成功之后,选择`文件-外部数据-打包资源`,然后就可以安全清空Temp texture folder所在目录或导入新BM文件。如果有需要可以再点击`文件-外部数据-解包资源`,将贴图重新依赖到工程文件夹下的独立贴图库内。
|
||||
|
||||
### BM导入导出
|
||||
|
||||
点击`文件-导入-Ballance Map`以导入BM文件。
|
||||
在导入发生名称冲突时,可以对贴图,材质,网格,物体这四种类型的数据分别决定是使用现有数据还是创建新的数据。
|
||||
|
||||
点击`文件-导出-Ballance Map`以导出BM文件。
|
||||
可以选择导出一个集合或者是一个物体(Export mode),并给定对象(Export target)即可。
|
||||
尽管插件提供了Virtools组功能,让你可以直接在Blender中归组完毕,但BM导出功能仍然受限于制图链标准。因此如果不按照制图链标准进行命名,那么在导出过程中则无法享受一些便利性功能,例如最终导出的文件可能会过大等。
|
||||
|
||||
一旦导出BM,文件中所有的面将全部转换为三角形面,请提前做好备份。
|
||||
在导出时,建议使用平铺的集合结构,不要在集合内嵌套集合,因为这样可能会导致一些不必要的问题。
|
||||
BM文件的后缀名是BMX,表示BM的压缩。BMX与BM为同一含义。
|
||||
|
||||
### Ballance 3D
|
||||
|
||||
Ballance 3D是一套简单的用于制图3D相关的轻型工具集合,可以在3D视图左上角菜单栏中找到,菜单名称为Ballance。
|
||||
|
||||
#### 3ds Max Align
|
||||
|
||||
提供一种类似于3ds Max的对齐方式。当前活动物体将被设为参照对象,当前选中的所有物体(如果参照也被选中则去掉参照对象)将被视为操作对象(因此可以选择多个物体一起对齐到参照对象)。
|
||||
|
||||
#### Create Rail UV
|
||||
|
||||
为地图中的钢轨创建UV,你需要先选中需要添加类似钢轨UV的物体,然后点击这个按钮以创建。
|
||||
在弹出设置窗口中,可以选择使用的材质。还可以选择展开模式,在部分展开模式下,还可以选择投影轴和缩放大小。尽管Ballance最终会为所有钢轨重新上UV,一个在界面中看着赏心悦目的钢轨贴图还是比较重要的。
|
||||
如果您需要在Blender中呈现游戏内钢轨的贴图效果(表现为所谓的平滑贴图),您可以选择`TT_ReflectionMapping`展开模式。此功能由逆向游戏所用函数得来。这在渲染地图宣传画时可能会很有用。
|
||||
|
||||
#### Flatten UV
|
||||
|
||||
在物体编辑模式下,用于将当前选中面按某一边贴附到V轴上的模式,展开到UV上。
|
||||
此功能只支持凸多边形面,对于凹多边形面会有未定义行为。
|
||||
|
||||
编辑模式下,选中面,点击Flatten UV,然后选中一个边作为参考。
|
||||
如果最后生成的边贴附不对,比如把路面花纹贴到了下部,可以重新选择参考边再进行操作,直到正确为止。
|
||||
|
||||
对于粘贴的贴图的UV,需要具有一定缩放,比如对于平路面,这个缩放比是5,而对于凹路面,则要比5大一些,因为凹路面由于凹进路面。为了方便确认这个缩放值,我们提供了两种方式,可以在Scale Mode种选择。
|
||||
一种是用户直接指定,选择Scale Mode为Scale Size并填写合适的缩放数值即可。此选项适合平谱无边框路面。
|
||||
另一种即为参考点模式。用户指定一个参考点,并指定此参考点在U轴上的位置,插件会自动计算缩放值应为多少。此选项适合展开路面路径的贴图。
|
||||
|
||||
### 快速添加结构
|
||||
|
||||
在添加菜单中我们添加了一系列较为常用的物体。添加后物体会移动到3D游标处。
|
||||
|
||||
#### Elements
|
||||
|
||||
添加机关,添加时还可以指定添加的小节等属性(对于飞船等唯一物体不会显示)
|
||||
|
||||
#### Rail section
|
||||
|
||||
添加钢轨截面,可以选择单轨还是双轨(只是决定添加的界面数量,并不会帮你旋转角度),以及轨道半径和轨道间距(默认值就是标准数据)。
|
||||
|
||||
#### Floors
|
||||
|
||||
一个非常强大的添加路面功能,隶属于BMERevenge工程的拓展。
|
||||
菜单中的Basic floor是基本的路面组件,而Derived floor则是由基本组件组成的常用组件。通常而言,大部分需要的路面都在Derived floor中。
|
||||
在选择一个路面后,可以根据其本身属性,设置最多2个延展方向的数值。此外还可以控制侧面和底面是否生成。
|
||||
与Ballance Map Editor相比,还具有减少大量无用顶点的优势。
|
||||
|
||||
可添加的路面大致分为平路面,凹路面,宽路面以及各类平台。
|
||||
此外还有变球器底座,平凹转换路面可供添加。
|
||||
|
||||
建议添加后除有特殊需求外,应该立即按距离合并顶点一次以避免各类问题。
|
||||
|
||||
### Virtools组
|
||||
|
||||
插件为每一个Blender物体添加了新的属性,被称为Virtools Group。与Virtools中的组具有相同的功能。
|
||||
选择一个物体,在`物体属性`面板可以找到`Virtools Group`面板。
|
||||
可以点击添加与删除图标,为物体归组和取消归组。
|
||||
亦可在列表中双击修改组名。
|
||||
|
||||
在点击添加按钮后,可以选择预定义,然后从所有合法的Ballance组名中选择一个添加。
|
||||
或选择自定义,然后输入你想要的组名添加。
|
||||
|
||||
### Virtools材质
|
||||
|
||||
插件为每一个Blender材质添加了新的属性,被称为Virtools Material。它在Virtools材质与Blender材质之间架起沟通的桥梁。
|
||||
转到`材质属性`面板,选择一个材质,即可以找到`Virtools Material`面板。
|
||||
默认情况下,由用户创建的材质不启用Virtools Material,您可以通过点击`Virtools Material`面板的复选框来启用或关闭它。
|
||||
|
||||
在启用Virtools Material后,可以在`Basic Parameters`和`Advanced Parameters`中设置材质属性,就像在Virtools中操作一般。
|
||||
`Basic Parameters`是基础材质属性。`Advanced Parameters`则是与透明相关的材质属性,主要用于半透明柱子底部等。
|
||||
另外,`Basic Parameters`部分提供了预设功能,允许用户使用一些预设的材质设置,这些设置只影响4种基本颜色,方便使用。
|
||||
|
||||
`Operation`中的`Apply Virtools Material`将把Virtools Material应用到Blender材质上。
|
||||
而`Parse from Blender Principled BSDF`将尝试将一个原理化BSDF转换为Virtools材质数据。
|
||||
如果您是从Blender材质编辑的,请务必对此材质在导出前执行`Parse from Blender Principled BSDF`,或关闭Virtools Material功能,否则材质将无法正确保存。
|
||||
|
||||
### 按组选择
|
||||
|
||||
选择菜单中新增了一项按照Virtools归组数据进行筛选的功能。
|
||||
|
||||
该功能首先有5种不同的选择策略,与Blender的选择方法完全匹配(开始、扩选、相减、反转、相交)。只需像Blender选择那样使用它。
|
||||
然后,选择你需要的组的名称,然后开始一次选择或筛选。
|
||||
|
||||
如果可以,请尽可能使用相减或相交模式。因为这样可以避免分析过多的物体。
|
||||
例如先选定一个大致的范围,然后使用相交模式过滤,比直接使用开始模式效率更高。
|
||||
|
||||
### 快速归组
|
||||
|
||||
插件在2个地方添加了为物体快速归组的功能。
|
||||
可以选择一系列物体,然后右键,在物体上下文菜单中找到快速归组功能。
|
||||
也可以在大纲窗口中,右键选择的物体,找到快速归组功能。
|
||||
|
||||
#### Group into
|
||||
|
||||
把选择物体归入你选择的组。
|
||||
|
||||
#### Ungroup from
|
||||
|
||||
把选择物体从你选择的组中取消归组。
|
||||
|
||||
#### Clear Grouping
|
||||
|
||||
清空选择物体的所有归组信息。
|
||||
|
||||
### 自动归组与重命名
|
||||
|
||||
在大纲视图中,对任意集合右键,可以得到自动归组与重命名菜单。
|
||||
|
||||
本插件目前支持两种命名标准。
|
||||
其一为技术信息章节已经阐述的制图链标准,在本插件中的名称为`YYC Tools Chains`。
|
||||
其二为[Imengyu/Ballance](https://github.com/imengyu/Ballance)所用命名标准,在本插件中的名称为`Imengyu Ballance`。
|
||||
|
||||
这些功能最终只会展示成功与否的一个概括性消息。如果您需要详细查看某个物体为什么不能转换,请点击`窗口-切换系统控制台`,插件在那里有更详细的输出。
|
||||
|
||||
#### Rename by Group
|
||||
|
||||
根据当前物体的归组信息,为其重命名为合适的名称。
|
||||
这通常用在迁移原版地图的过程中。一些Ballance衍生程序没有Virtools组概念,因此需要依赖名称来取得归组信息。
|
||||
|
||||
#### Convert Name
|
||||
|
||||
在不同命名标准之间切换。
|
||||
通常用于在不同Ballance衍生程序中进行转换。
|
||||
|
||||
#### Auto Grouping
|
||||
|
||||
根据给定的命名标准,为物体自动填充归组信息。
|
||||
需要注意的是,原有的归组信息会被覆盖。
|
||||
在制图过程中,如果你遵守了某些命名标准,则此功能可以为你自动完成归组功能。
|
||||
BBP NG,又名**B**allance **B**lender **P**lugin **N**ext **G**eneration(下一代Ballance Blender插件)。
|
||||
|
||||
有关此插件的介绍,安装,编译,汇报错误等,请参阅本项目的GitHub Page页面:https://yyc12345.github.io/BallanceBlenderHelper
|
||||
|
Before Width: | Height: | Size: 785 B After Width: | Height: | Size: 785 B |
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
BIN
assets/icons/bme/NarrowTransition.png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
BIN
assets/icons/bme/NormalFloorTerminal.png
Normal file
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
BIN
assets/icons/bme/RibbonOutterCorner.png
Normal file
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
BIN
assets/icons/bme/SinkFloorTerminal.png
Normal file
After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
BIN
assets/icons/bme/WideFloorTerminal.png
Normal file
After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 663 B After Width: | Height: | Size: 663 B |
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 745 B |
Before Width: | Height: | Size: 945 B After Width: | Height: | Size: 945 B |
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 818 B |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 984 B After Width: | Height: | Size: 984 B |
Before Width: | Height: | Size: 611 B After Width: | Height: | Size: 611 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 471 B After Width: | Height: | Size: 471 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 494 B After Width: | Height: | Size: 494 B |
Before Width: | Height: | Size: 360 B After Width: | Height: | Size: 360 B |
Before Width: | Height: | Size: 992 B After Width: | Height: | Size: 992 B |
Before Width: | Height: | Size: 444 B After Width: | Height: | Size: 444 B |
Before Width: | Height: | Size: 691 B After Width: | Height: | Size: 691 B |
Before Width: | Height: | Size: 775 B After Width: | Height: | Size: 775 B |
Before Width: | Height: | Size: 807 B After Width: | Height: | Size: 807 B |
Before Width: | Height: | Size: 652 B After Width: | Height: | Size: 652 B |
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 695 B |
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 550 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
BIN
assets/icons/group/SoundID_03.png
Normal file
After Width: | Height: | Size: 265 B |
185
assets/jsons/1x1.json5
Normal file
@ -0,0 +1,185 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_1x1",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, True, True, True, True)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_triangle_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"edge_length": "5",
|
||||
"tip_offset": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[3], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(5, 0, 0) @ rot(0, 0, 90)"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"edge_length": "5",
|
||||
"tip_offset": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[5], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(5, 5, 0) @ rot(0, 0, 180)"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"edge_length": "5",
|
||||
"tip_offset": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[2], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(0, 5, 0) @ rot(0, 0, 270)"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"edge_length": "5",
|
||||
"tip_offset": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[4], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5",
|
||||
"width": "5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_1x1",
|
||||
"showcase": {
|
||||
"title": "Normal 1x1",
|
||||
"category": "1x1 Blocks",
|
||||
"icon": "Normal1x1",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_1x1",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_1x1",
|
||||
"showcase": {
|
||||
"title": "Sink 1x1",
|
||||
"category": "1x1 Blocks",
|
||||
"icon": "Sink1x1",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_1x1",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
240
assets/jsons/borders.json5
Normal file
@ -0,0 +1,240 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_border",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "length",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, False, False, True, False)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
},
|
||||
{
|
||||
"field": "is_ribbon",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "length == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "length",
|
||||
"short_edge_offset": "0",
|
||||
"short_edge_length": "length",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "is_ribbon"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_border",
|
||||
"showcase": {
|
||||
"title": "Normal Border",
|
||||
"category": "Borders",
|
||||
"icon": "NormalBorder",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, True, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_border",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_border",
|
||||
"showcase": {
|
||||
"title": "Sink Border",
|
||||
"category": "Borders",
|
||||
"icon": "SinkBorder",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, True, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_border",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_ribbon_border",
|
||||
"showcase": {
|
||||
"title": "Ribbon Border",
|
||||
"category": "Borders",
|
||||
"icon": "RibbonBorder",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, True, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_border",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
427
assets/jsons/chris_vanilla.json5
Normal 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)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
466
assets/jsons/corners.json5
Normal file
@ -0,0 +1,466 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, False, False, False, False)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
},
|
||||
{
|
||||
"field": "is_inner",
|
||||
"data": "False"
|
||||
},
|
||||
{
|
||||
"field": "is_ribbon",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [
|
||||
{
|
||||
"field": "PXPY_sink",
|
||||
"data": "0.7 if (is_sink and (not is_inner)) else 0"
|
||||
},
|
||||
{
|
||||
"field": "NXNY_sink",
|
||||
"data": "0.7 if (is_sink and is_inner) else 0"
|
||||
},
|
||||
{
|
||||
"field": "PXPY_uv",
|
||||
"data": "(0 if is_inner else 0.5) * (2 if is_ribbon else 1)"
|
||||
},
|
||||
{
|
||||
"field": "NXNY_uv",
|
||||
"data": "(0.5 if is_inner else 0) * (2 if is_ribbon else 1)"
|
||||
},
|
||||
{
|
||||
"field": "corner_texture",
|
||||
"data": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\""
|
||||
}
|
||||
],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"data": "(0, 0, -NXNY_sink)"
|
||||
},
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"data": "(2.5, 0, -NXNY_sink)"
|
||||
},
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"data": "(2.5, 2.5, -PXPY_sink)"
|
||||
},
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"data": "(0, 2.5, -NXNY_sink)"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"texture": "corner_texture",
|
||||
"indices": [0, 1, 2],
|
||||
"uvs": [
|
||||
"(NXNY_uv, 0.5)",
|
||||
"(NXNY_uv, 0)",
|
||||
"(PXPY_uv, 0)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"texture": "corner_texture",
|
||||
"indices": [0, 2, 3],
|
||||
"uvs": [
|
||||
"(NXNY_uv, 0.5)",
|
||||
"(PXPY_uv, 0)",
|
||||
"(NXNY_uv, 0)"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[4]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "NXNY_sink != 0",
|
||||
"is_right_sink": "NXNY_sink != 0"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[2]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "NXNY_sink != 0",
|
||||
"is_right_sink": "NXNY_sink != 0"
|
||||
},
|
||||
"transform": "move(0, 2.5, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[3]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "NXNY_sink != 0",
|
||||
"is_right_sink": "PXPY_sink != 0"
|
||||
},
|
||||
"transform": "move(2.5, 0, 0) @ rot(0, 0, 90)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[5]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "PXPY_sink != 0",
|
||||
"is_right_sink": "NXNY_sink != 0"
|
||||
},
|
||||
"transform": "move(2.5, 2.5, 0) @ rot(0, 0, 180)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "2.5",
|
||||
"width": "2.5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_inner_corner",
|
||||
"showcase": {
|
||||
"title": "Normal Inner Corner",
|
||||
"category": "Half Block Corners",
|
||||
"icon": "NormalInnerCorner",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False",
|
||||
"is_inner": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"showcase": {
|
||||
"title": "Sink Inner Corner",
|
||||
"category": "Half Block Corners",
|
||||
"icon": "SinkInnerCorner",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_inner": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_ribbon_inner_corner",
|
||||
"showcase": {
|
||||
"title": "Ribbon Inner Corner",
|
||||
"category": "Half Block Corners",
|
||||
"icon": "RibbonInnerCorner",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_inner": "True",
|
||||
"is_ribbon": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_outter_corner",
|
||||
"showcase": {
|
||||
"title": "Normal Outter Corner",
|
||||
"category": "Half Block Corners",
|
||||
"icon": "NormalOutterCorner",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, False, True, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False",
|
||||
"is_inner": "False",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_outter_corner",
|
||||
"showcase": {
|
||||
"title": "Sink Outter Corner",
|
||||
"category": "Half Block Corners",
|
||||
"icon": "SinkOutterCorner",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, False, True, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_inner": "False",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_ribbon_outter_corner",
|
||||
"showcase": {
|
||||
"title": "Ribbon Outter Corner",
|
||||
"category": "Half Block Corners",
|
||||
"icon": "RibbonOutterCorner",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, False, True, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_inner": "False",
|
||||
"is_ribbon": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
533
assets/jsons/crossings.json5
Normal file
@ -0,0 +1,533 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_l_crossing",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, True, False, True, False)"
|
||||
},
|
||||
{
|
||||
"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[4], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5",
|
||||
"width": "5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_t_crossing",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, True, False, False, False)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_triangle_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[4], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5",
|
||||
"width": "5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_x_crossing",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, False, False, False, False)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_triangle_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[4], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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_center",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"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_l_crossing",
|
||||
"showcase": {
|
||||
"title": "Normal L Crossing",
|
||||
"category": "Floor Crossings",
|
||||
"icon": "NormalLCrossing",
|
||||
"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_l_crossing",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_l_crossing",
|
||||
"showcase": {
|
||||
"title": "Sink L Crossing",
|
||||
"category": "Floor Crossings",
|
||||
"icon": "SinkLCrossing",
|
||||
"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_l_crossing",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_t_crossing",
|
||||
"showcase": {
|
||||
"title": "Normal T Crossing",
|
||||
"category": "Floor Crossings",
|
||||
"icon": "NormalTCrossing",
|
||||
"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, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_t_crossing",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_t_crossing",
|
||||
"showcase": {
|
||||
"title": "Sink T Crossing",
|
||||
"category": "Floor Crossings",
|
||||
"icon": "SinkTCrossing",
|
||||
"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, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_t_crossing",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_x_crossing",
|
||||
"showcase": {
|
||||
"title": "Normal X Crossing",
|
||||
"category": "Floor Crossings",
|
||||
"icon": "NormalXCrossing",
|
||||
"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_x_crossing",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_x_crossing",
|
||||
"showcase": {
|
||||
"title": "Sink X Crossing",
|
||||
"category": "Floor Crossings",
|
||||
"icon": "SinkXCrossing",
|
||||
"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_x_crossing",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
172
assets/jsons/flat.json5
Normal file
@ -0,0 +1,172 @@
|
||||
[
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"showcase": {
|
||||
"title": "Flat",
|
||||
"category": "Miscellaneous",
|
||||
"icon": "Flat",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "width_",
|
||||
"type": "float",
|
||||
"title": "Width",
|
||||
"desc": "The width of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, False, False)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink_",
|
||||
"type": "bool",
|
||||
"title": "Is Sink",
|
||||
"desc": "Whether this flat floor is used for sink floor.",
|
||||
"default": "False"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "width_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "is_sink_"
|
||||
}
|
||||
],
|
||||
"skip": "length == 0.0 or width == 0.0",
|
||||
"vars": [
|
||||
{
|
||||
"field": "sink",
|
||||
"data": "0.7 if is_sink else 0"
|
||||
},
|
||||
{
|
||||
"field": "uv_length",
|
||||
"data": "length / 5.0"
|
||||
},
|
||||
{
|
||||
"field": "uv_width",
|
||||
"data": "width / 5.0"
|
||||
}
|
||||
],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 0, -sink)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(length, 0, -sink)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(length, width, -sink)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, width, -sink)"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"texture": "\"FloorTopBorderless\"",
|
||||
"indices": [0, 1, 2, 3],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_length, 0)",
|
||||
"(uv_length, uv_width)",
|
||||
"(0, uv_width)"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[4]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "length",
|
||||
"is_left_sink": "is_sink",
|
||||
"is_right_sink": "is_sink"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[2]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "width",
|
||||
"is_left_sink": "is_sink",
|
||||
"is_right_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(0, width, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[3]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "width",
|
||||
"is_left_sink": "is_sink",
|
||||
"is_right_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(length, 0, 0) @ rot(0, 0, 90)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[5]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "length",
|
||||
"is_left_sink": "is_sink",
|
||||
"is_right_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(length, width, 0) @ rot(0, 0, 180)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"width": "width"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
343
assets/jsons/platforms.json5
Normal file
@ -0,0 +1,343 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_platform",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "length",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, True, True, True, True)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
},
|
||||
{
|
||||
"field": "is_ribbon",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "length + 5",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "length",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[4], False)",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "is_ribbon"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "length + 5",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "length",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[5], False)",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "is_ribbon"
|
||||
},
|
||||
"transform": "move(0, 5 + width, 0) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "width + 5",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "width",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[3], False)",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "is_ribbon"
|
||||
},
|
||||
"transform": "move(5 + length, 0, 0) @ rot(0, 0, 90)"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "width + 5",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "width",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[2], False)",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "is_ribbon"
|
||||
},
|
||||
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "length",
|
||||
"width": "width",
|
||||
"face": "(face[0], False, False, False, False, False)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(2.5, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5 + length",
|
||||
"width": "5 + width"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_platform",
|
||||
"showcase": {
|
||||
"title": "Normal Platform",
|
||||
"category": "Platforms",
|
||||
"icon": "NormalPlatform",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "width_",
|
||||
"type": "float",
|
||||
"title": "Width",
|
||||
"desc": "The width of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "width_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_platform",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"width": "width",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_platform",
|
||||
"showcase": {
|
||||
"title": "Sink Platform",
|
||||
"category": "Platforms",
|
||||
"icon": "SinkPlatform",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "width_",
|
||||
"type": "float",
|
||||
"title": "Width",
|
||||
"desc": "The width of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "width_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_platform",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"width": "width",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_ribbon_platform",
|
||||
"showcase": {
|
||||
"title": "Ribbon Platform",
|
||||
"category": "Platforms",
|
||||
"icon": "RibbonPlatform",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "width_",
|
||||
"type": "float",
|
||||
"title": "Width",
|
||||
"desc": "The width of block.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "width_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_platform",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"width": "width",
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
324
assets/jsons/sides.json5
Normal file
@ -0,0 +1,324 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "length",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "is_left_sink",
|
||||
"data": "False"
|
||||
},
|
||||
{
|
||||
"field": "is_right_sink",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "height <= (0.7 if (is_left_sink or is_right_sink) else 0.0) or length == 0.0",
|
||||
"vars": [
|
||||
{
|
||||
"field": "skip_long_side",
|
||||
"data": "height <= 5.0"
|
||||
},
|
||||
{
|
||||
"field": "skip_short_side",
|
||||
"data": "height > 5.0"
|
||||
},
|
||||
{
|
||||
"field": "uv_height",
|
||||
"data": "height / 5.0"
|
||||
},
|
||||
{
|
||||
"field": "uv_length",
|
||||
"data": "length / 5.0"
|
||||
},
|
||||
{
|
||||
"field": "left_sink",
|
||||
"data": "0.7 if is_left_sink else 0.0"
|
||||
},
|
||||
{
|
||||
"field": "right_sink",
|
||||
"data": "0.7 if is_right_sink else 0.0"
|
||||
},
|
||||
{
|
||||
"field": "uv_left_sink",
|
||||
"data": "left_sink / 5.0"
|
||||
},
|
||||
{
|
||||
"field": "uv_right_sink",
|
||||
"data": "right_sink / 5.0"
|
||||
}
|
||||
],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 0, -left_sink)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(length, 0, -right_sink)"
|
||||
},
|
||||
{
|
||||
"skip": "skip_long_side",
|
||||
"data": "(0, 0, -5.0)"
|
||||
},
|
||||
{
|
||||
"skip": "skip_long_side",
|
||||
"data": "(length, 0, -5.0)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 0, -height)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(length, 0, -height)"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "skip_short_side",
|
||||
"texture": "\"FloorSide\"",
|
||||
"indices": [0, 2, 3, 1],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_height - uv_left_sink, 0)",
|
||||
"(uv_height - uv_right_sink, uv_length)",
|
||||
"(0, uv_length)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "skip_long_side",
|
||||
"texture": "\"LightingFloorTopBorder\"",
|
||||
"indices": [0, 2, 3, 1],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(1 - uv_left_sink, 0)",
|
||||
"(1 - uv_right_sink, uv_length)",
|
||||
"(0, uv_length)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "skip_long_side",
|
||||
"texture": "\"LightingFloorTopBorderless\"",
|
||||
"indices": [2, 4, 5, 3],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_height - 1.0, 0)",
|
||||
"(uv_height - 1.0, uv_length)",
|
||||
"(0, uv_length)"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": []
|
||||
},
|
||||
{
|
||||
"identifier": "floor_4edges_bottom",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "top_left_pos",
|
||||
"data": "(0.0, 0.0)"
|
||||
},
|
||||
{
|
||||
"field": "top_right_pos",
|
||||
"data": "(0.0, 5.0)"
|
||||
},
|
||||
{
|
||||
"field": "bottom_left_pos",
|
||||
"data": "(5.0, 0.0)"
|
||||
},
|
||||
{
|
||||
"field": "bottom_right_pos",
|
||||
"data": "(5.0, 5.0)"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [
|
||||
{
|
||||
"field": "top_left_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, top_left_pos))"
|
||||
},
|
||||
{
|
||||
"field": "top_right_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, top_right_pos))"
|
||||
},
|
||||
{
|
||||
"field": "bottom_left_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, bottom_left_pos))"
|
||||
},
|
||||
{
|
||||
"field": "bottom_right_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, bottom_right_pos))"
|
||||
}
|
||||
],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "top_left_pos + (0, )"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "top_right_pos + (0, )"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "bottom_left_pos + (0, )"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "bottom_right_pos + (0, )"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "False",
|
||||
"texture": "\"FloorTopBorderless\"",
|
||||
"indices": [0, 1, 3, 2],
|
||||
"uvs": [
|
||||
"top_left_uv",
|
||||
"top_right_uv",
|
||||
"bottom_right_uv",
|
||||
"bottom_left_uv"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": []
|
||||
},
|
||||
{
|
||||
"identifier": "floor_3edges_bottom",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "top_pos",
|
||||
"data": "(0.0, 0.0)"
|
||||
},
|
||||
{
|
||||
"field": "bottom_pos",
|
||||
"data": "(5.0, 0.0)"
|
||||
},
|
||||
{
|
||||
"field": "tip_pos",
|
||||
"data": "(2.5, 2.5)"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [
|
||||
{
|
||||
"field": "top_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, top_pos))"
|
||||
},
|
||||
{
|
||||
"field": "bottom_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, bottom_pos))"
|
||||
},
|
||||
{
|
||||
"field": "tip_uv",
|
||||
"data": "tuple(map(lambda x: x / 5.0, tip_pos))"
|
||||
}
|
||||
],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "top_pos + (0, )"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "bottom_pos + (0, )"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "tip_pos + (0, )"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "False",
|
||||
"texture": "\"FloorTopBorderless\"",
|
||||
"indices": [0, 2, 1],
|
||||
"uvs": [
|
||||
"top_uv",
|
||||
"tip_uv",
|
||||
"bottom_uv"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": []
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "length",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "5.0"
|
||||
}
|
||||
],
|
||||
"skip": "length == 0.0 or width == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "floor_4edges_bottom",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"top_left_pos": "(0, 0)",
|
||||
"top_right_pos": "(0, width)",
|
||||
"bottom_left_pos": "(length, 0)",
|
||||
"bottom_right_pos": "(length, width)"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_triangle_bottom",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "length",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "tip_offset",
|
||||
"data": "2.5"
|
||||
}
|
||||
],
|
||||
"skip": "length == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "floor_3edges_bottom",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"top_pos": "(0, 0)",
|
||||
"bottom_pos": "(length, 0)",
|
||||
"tip_pos": "(tip_offset, width)"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
324
assets/jsons/streets.json5
Normal file
@ -0,0 +1,324 @@
|
||||
[
|
||||
{
|
||||
"identifier": "floor_normal_straight",
|
||||
"showcase": {
|
||||
"title": "Normal Floor",
|
||||
"category": "Floors",
|
||||
"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",
|
||||
"category": "Floors",
|
||||
"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)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
178
assets/jsons/terminals.json5
Normal file
@ -0,0 +1,178 @@
|
||||
[
|
||||
// The shared template prototype used by all floor terminals.
|
||||
{
|
||||
"identifier": "raw_floor_terminal",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, True, False, True, True)"
|
||||
},
|
||||
{
|
||||
"field": "is_sink",
|
||||
"data": "False"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "5.0",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[3], face[4], False)",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "5.0",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[3], face[5], False)",
|
||||
"is_sink": "is_sink",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "move(0, 5, 0) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_triangle_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"edge_length": "5",
|
||||
"tip_offset": "2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, False, face[2], None)",
|
||||
"is_sink": "is_sink"
|
||||
},
|
||||
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5",
|
||||
"width": "5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_normal_terminal",
|
||||
"showcase": {
|
||||
"title": "Normal Floor Terminal",
|
||||
"category": "Floors",
|
||||
"icon": "NormalFloorTerminal",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, False, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_terminal",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_terminal",
|
||||
"showcase": {
|
||||
"title": "Sink Floor Terminal",
|
||||
"category": "Floors",
|
||||
"icon": "SinkFloorTerminal",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, False, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_terminal",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "face",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
289
assets/jsons/trafos.json5
Normal file
@ -0,0 +1,289 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_trafo",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "trafo_texture",
|
||||
"data": "\"BallWood\""
|
||||
},
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "(True, False, True, True, True, True)"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [
|
||||
{
|
||||
"field": "uv_height",
|
||||
"data": "height / 5.0"
|
||||
}
|
||||
],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 0, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(5, 0, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(5, 5, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 5, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 0, -height)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(5, 0, -height)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(5, 5, -height)"
|
||||
},
|
||||
{
|
||||
"skip": "False",
|
||||
"data": "(0, 5, -height)"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "not face[0]",
|
||||
"texture": "trafo_texture",
|
||||
"indices": [0, 1, 2, 3],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(1, 0)",
|
||||
"(1, 1)",
|
||||
"(0, 1)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "(not face[1]) or height == 0.0",
|
||||
"texture": "trafo_texture",
|
||||
"indices": [5, 4, 7, 6],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(1, 0)",
|
||||
"(1, 1)",
|
||||
"(0, 1)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "(not face[2]) or height == 0.0",
|
||||
"texture": "trafo_texture",
|
||||
"indices": [3, 7, 4, 0],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_height, 0)",
|
||||
"(uv_height, 1)",
|
||||
"(0, 1)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "(not face[3]) or height == 0.0",
|
||||
"texture": "trafo_texture",
|
||||
"indices": [1, 5, 6, 2],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_height, 0)",
|
||||
"(uv_height, 1)",
|
||||
"(0, 1)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "(not face[4]) or height == 0.0",
|
||||
"texture": "trafo_texture",
|
||||
"indices": [0, 4, 5, 1],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_height, 0)",
|
||||
"(uv_height, 1)",
|
||||
"(0, 1)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "(not face[5]) or height == 0.0",
|
||||
"texture": "trafo_texture",
|
||||
"indices": [2, 6, 7, 3],
|
||||
"uvs": [
|
||||
"(0, 0)",
|
||||
"(uv_height, 0)",
|
||||
"(uv_height, 1)",
|
||||
"(0, 1)"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": []
|
||||
},
|
||||
{
|
||||
"identifier": "wood_trafo",
|
||||
"showcase": {
|
||||
"title": "Wood Trafo",
|
||||
"category": "Trafo",
|
||||
"icon": "WoodTrafo",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_trafo",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"trafo_texture": "\"BallWood\"",
|
||||
"height": "height",
|
||||
"face": "face"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "stone_trafo",
|
||||
"showcase": {
|
||||
"title": "Stone Trafo",
|
||||
"category": "Trafo",
|
||||
"icon": "StoneTrafo",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_trafo",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"trafo_texture": "\"BallStone\"",
|
||||
"height": "height",
|
||||
"face": "face"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "paper_trafo",
|
||||
"showcase": {
|
||||
"title": "Paper Trafo",
|
||||
"category": "Trafo",
|
||||
"icon": "PaperTrafo",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, True, True, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_trafo",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"trafo_texture": "\"BallPaper\"",
|
||||
"height": "height",
|
||||
"face": "face"
|
||||
},
|
||||
"transform": "ident()"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
272
assets/jsons/transitions.json5
Normal file
@ -0,0 +1,272 @@
|
||||
[
|
||||
{
|
||||
"identifier": "raw_floor_transition_part",
|
||||
"showcase": null,
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_part",
|
||||
"data": "(True, False, False)"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"data": "(0, 0, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"data": "(5, 0, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"data": "(0, 2.5, -0.7)"
|
||||
},
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"data": "(5, 5, 0)"
|
||||
},
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"data": "(0, 5, 0)"
|
||||
}
|
||||
],
|
||||
"faces": [
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"texture": "\"FloorTopProfilFlat\"",
|
||||
"indices": [0, 1, 2],
|
||||
"uvs": [
|
||||
"(0, 1)",
|
||||
"(0, 0)",
|
||||
"(0.5, 1)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"texture": "\"FloorTopProfilFlat\"",
|
||||
"indices": [3, 2, 1],
|
||||
"uvs": [
|
||||
"(1, 0)",
|
||||
"(0.5, 1)",
|
||||
"(0, 0)"
|
||||
],
|
||||
"normals": null
|
||||
},
|
||||
{
|
||||
"skip": "not face_part[0]",
|
||||
"texture": "\"FloorTopProfilFlat\"",
|
||||
"indices": [2, 3, 4],
|
||||
"uvs": [
|
||||
"(0.5, 1)",
|
||||
"(1, 0)",
|
||||
"(1, 1)"
|
||||
],
|
||||
"normals": null
|
||||
}
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face_part[1]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "False",
|
||||
"is_right_sink": "True"
|
||||
},
|
||||
"transform": "move(0, 5, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face_part[1]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "True",
|
||||
"is_right_sink": "False"
|
||||
},
|
||||
"transform": "move(0, 2.5, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face_part[2]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "5",
|
||||
"is_left_sink": "False",
|
||||
"is_right_sink": "False"
|
||||
},
|
||||
"transform": "move(5, 0, 0) @ rot(0, 0, 90)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_transition",
|
||||
"showcase": {
|
||||
"title": "Transition",
|
||||
"category": "Miscellaneous",
|
||||
"icon": "Transition",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, True, True)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_transition_part",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face_part": "(face[0], face[2], face[3])"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[4]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "5",
|
||||
"is_left_sink": "False",
|
||||
"is_right_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[5]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "5",
|
||||
"is_left_sink": "False",
|
||||
"is_right_sink": "False"
|
||||
},
|
||||
"transform": "move(5, 5, 0) @ rot(0, 0, 180)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5",
|
||||
"width": "5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_narrow_transition",
|
||||
"showcase": {
|
||||
"title": "Narrow Transition",
|
||||
"category": "Miscellaneous",
|
||||
"icon": "NarrowTransition",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "height_",
|
||||
"type": "float",
|
||||
"title": "Height",
|
||||
"desc": "The height of block.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "face_",
|
||||
"type": "face",
|
||||
"title": "Face",
|
||||
"desc": "Whether has some faces.",
|
||||
"default": "(True, False, False, False, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "False",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "raw_floor_transition_part",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face_part": "(face[0], face[2], face[3])"
|
||||
},
|
||||
"transform": "scale(0.5, 1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[4]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "False",
|
||||
"is_right_sink": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "raw_floor_side",
|
||||
"skip": "not face[5]",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"is_left_sink": "False",
|
||||
"is_right_sink": "False"
|
||||
},
|
||||
"transform": "move(2.5, 5, 0) @ rot(0, 0, 180)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "2.5",
|
||||
"width": "5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
622
assets/jsons/wide_floors.json5
Normal file
@ -0,0 +1,622 @@
|
||||
[
|
||||
{
|
||||
"identifier": "floor_wide_straight",
|
||||
"showcase": {
|
||||
"title": "Wide Floor",
|
||||
"category": "Wide Floors",
|
||||
"icon": "WideFloor",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "length_",
|
||||
"type": "float",
|
||||
"title": "Length",
|
||||
"desc": "The length of wide floor.",
|
||||
"default": "2.5"
|
||||
},
|
||||
{
|
||||
"field": "width_",
|
||||
"type": "float",
|
||||
"title": "Width",
|
||||
"desc": "The width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"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": "length",
|
||||
"data": "length_"
|
||||
},
|
||||
{
|
||||
"field": "width",
|
||||
"data": "width_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "length == 0.0 or width == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "floor_sink_border",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, face[2], face[3], face[4], False)"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_border",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, face[2], face[3], face[5], False)"
|
||||
},
|
||||
"transform": "move(0, 5 + width, 0) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "length",
|
||||
"width": "width",
|
||||
"face": "(face[0], False, face[2], face[3], False, False)",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(0, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "length",
|
||||
"width": "5 + width"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_wide_terminal",
|
||||
"showcase": {
|
||||
"title": "Wide Floor Terminal",
|
||||
"category": "Wide Floors",
|
||||
"icon": "WideFloorTerminal",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "width_",
|
||||
"type": "float",
|
||||
"title": "Width",
|
||||
"desc": "The width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"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": "width",
|
||||
"data": "width_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "width == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"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], face[3])",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"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": "True",
|
||||
"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": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "move(0, width + 5, 0) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"width": "width",
|
||||
"face": "(face[0], False, False, face[3], False, False)",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "5",
|
||||
"width": "5 + width"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_wide_l_crossing",
|
||||
"showcase": {
|
||||
"title": "Wide Floor L Crossing",
|
||||
"category": "Wide Floors",
|
||||
"icon": "WideLCrossing",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "width_h_",
|
||||
"type": "float",
|
||||
"title": "Horizontal Width",
|
||||
"desc": "The horizontal floor width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "width_v_",
|
||||
"type": "float",
|
||||
"title": "Vertical Width",
|
||||
"desc": "The vertical floor width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"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": "width_h",
|
||||
"data": "width_h_"
|
||||
},
|
||||
{
|
||||
"field": "width_v",
|
||||
"data": "width_v_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "width_h == 0.0 or width_v == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "width_h + 5",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "width_h + 2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[3], face[4], False)",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "ident()"
|
||||
},
|
||||
{
|
||||
"identifier": "cv_trapezoid_side",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"long_edge_length": "width_v + 5",
|
||||
"short_edge_offset": "2.5",
|
||||
"short_edge_length": "width_v + 2.5",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[5], face[2], False)",
|
||||
"is_sink": "True",
|
||||
"is_ribbon": "False"
|
||||
},
|
||||
"transform": "rot(0, 0, 90) @ scale(1, -1, 1)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[3], False, face[5])"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5 + width_v, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "width_h + 2.5",
|
||||
"width": "width_v",
|
||||
"face": "(face[0], False, False, face[3], False, False)",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "width_h",
|
||||
"width": "2.5",
|
||||
"face": "(face[0], False, False, False, False, face[5])",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5, 2.5 + width_v, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "width_h + 5",
|
||||
"width": "width_v + 5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_wide_t_crossing",
|
||||
"showcase": {
|
||||
"title": "Wide Floor T Crossing",
|
||||
"category": "Wide Floors",
|
||||
"icon": "WideTCrossing",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "width_h_",
|
||||
"type": "float",
|
||||
"title": "Horizontal Width",
|
||||
"desc": "The horizontal floor width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "width_v_",
|
||||
"type": "float",
|
||||
"title": "Vertical Width",
|
||||
"desc": "The vertical floor width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"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, False, False)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"params": [
|
||||
{
|
||||
"field": "height",
|
||||
"data": "height_"
|
||||
},
|
||||
{
|
||||
"field": "width_h",
|
||||
"data": "width_h_"
|
||||
},
|
||||
{
|
||||
"field": "width_v",
|
||||
"data": "width_v_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "width_h == 0.0 or width_v == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "floor_sink_border",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"length": "5 + width_v",
|
||||
"height": "height",
|
||||
"face": "(face[0], False, face[5], face[4], face[2], False)"
|
||||
},
|
||||
"transform": "move(0, 5 + width_v, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[4], False, face[3])"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[3], False, face[5])"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5 + width_v, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "width_h",
|
||||
"width": "5 + width_v",
|
||||
"face": "(face[0], False, False, False, face[4], face[5])",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5, 0, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"width": "width_v",
|
||||
"face": "(face[0], False, False, face[3], False, False)",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "width_h + 5",
|
||||
"width": "width_v + 5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "floor_wide_x_crossing",
|
||||
"showcase": {
|
||||
"title": "Wide Floor X Crossing",
|
||||
"category": "Wide Floors",
|
||||
"icon": "WideXCrossing",
|
||||
"type": "floor",
|
||||
"cfgs": [
|
||||
{
|
||||
"field": "width_h_",
|
||||
"type": "float",
|
||||
"title": "Horizontal Width",
|
||||
"desc": "The horizontal floor width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"field": "width_v_",
|
||||
"type": "float",
|
||||
"title": "Vertical Width",
|
||||
"desc": "The vertical floor width of wide floor.",
|
||||
"default": "5.0"
|
||||
},
|
||||
{
|
||||
"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": "width_h",
|
||||
"data": "width_h_"
|
||||
},
|
||||
{
|
||||
"field": "width_v",
|
||||
"data": "width_v_"
|
||||
},
|
||||
{
|
||||
"field": "face",
|
||||
"data": "face_"
|
||||
}
|
||||
],
|
||||
"skip": "width_h == 0.0 or width_v == 0.0",
|
||||
"vars": [],
|
||||
"vertices": [],
|
||||
"faces": [],
|
||||
"instances": [
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[5], False, face[2])"
|
||||
},
|
||||
"transform": "move(2.5, 2.5 + width_v, 0) @ rot(0, 0, -270)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[2], False, face[4])"
|
||||
},
|
||||
"transform": "move(2.5, 2.5, 0) @ rot(0, 0, -180)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[4], False, face[3])"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5, 0) @ rot(0, 0, -90)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_sink_inner_corner",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"face": "(face[0], False, False, face[3], False, face[5])"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5 + width_v, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "width_h",
|
||||
"width": "5 + width_v",
|
||||
"face": "(face[0], False, False, False, face[4], face[5])",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5, 0, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"width": "width_v",
|
||||
"face": "(face[0], False, False, face[3], False, False)",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(2.5 + width_h, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_flat",
|
||||
"skip": "False",
|
||||
"params": {
|
||||
"height": "height",
|
||||
"length": "2.5",
|
||||
"width": "width_v",
|
||||
"face": "(face[0], False, face[2], False, False, False)",
|
||||
"is_sink": "True"
|
||||
},
|
||||
"transform": "move(0, 2.5, 0)"
|
||||
},
|
||||
{
|
||||
"identifier": "floor_rectangle_bottom",
|
||||
"skip": "not face[1]",
|
||||
"params": {
|
||||
"length": "width_h + 5",
|
||||
"width": "width_v + 5"
|
||||
},
|
||||
"transform": "move(0, 0, -height)"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|