Compare commits
	
		
			56 Commits
		
	
	
		
			3372c7a4b7
			...
			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 | 
							
								
								
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,7 +1,6 @@ | |||||||
| # all png are binary | # All PNG image are binary | ||||||
| *.png binary | *.png binary | ||||||
| # our generated mesh should be save as binary | # Element placeholder mesh should be save as binary | ||||||
| *.bin binary | *.ph binary | ||||||
| # the raw json data should be binary | # Raw json data should be binary, although i edit it manually | ||||||
| # although i edit it manually | assets/jsons/*.json    binary | ||||||
| bbp_ng/raw_jsons/*.json    binary |  | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,3 +1,3 @@ | |||||||
| ## ===== Personal ===== | ## ===== Personal ===== | ||||||
| # Disable distribution build folder | # Disable VSCode | ||||||
| redist/ | .vscode/ | ||||||
|  | |||||||
| 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 | 
| Before Width: | Height: | Size: 15 KiB 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 | 
| Before Width: | Height: | Size: 14 KiB 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 | 
| Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 265 B | 
| @ -1,174 +1,185 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_floor_1x1", |         "identifier": "raw_floor_1x1", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "face", |                 "field": "face", | ||||||
|                 "data": "(True, False, True, True, True, True)" |                 "data": "(True, False, True, True, True, True)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_sink", |                 "field": "is_sink", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "False", |         "skip": "False", | ||||||
|         "vars": [], |         "vars": [], | ||||||
|         "vertices": [], |         "vertices": [], | ||||||
|         "faces": [], |         "faces": [], | ||||||
|         "instances": [ |         "instances": [ | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_corner", |                 "identifier": "cv_triangle_side", | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "edge_length": "5", | ||||||
|                     "face": "(face[0], face[1], face[4], False, face[3], False)", |                     "tip_offset": "2.5", | ||||||
|                     "is_sink": "is_sink", |                     "height": "height", | ||||||
|                     "is_inner": "False", |                     "face": "(face[0], False, False, False, face[3], None)", | ||||||
|                     "is_ribbon": "False" |                     "is_sink": "is_sink" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(5, 0, 0) @ rot(0, 0, -270)" |                 "transform": "move(5, 0, 0) @ rot(0, 0, 90)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_corner", |                 "identifier": "cv_triangle_side", | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "edge_length": "5", | ||||||
|                     "face": "(face[0], face[1], face[3], False, face[5], False)", |                     "tip_offset": "2.5", | ||||||
|                     "is_sink": "is_sink", |                     "height": "height", | ||||||
|                     "is_inner": "False", |                     "face": "(face[0], False, False, False, face[5], None)", | ||||||
|                     "is_ribbon": "False" |                     "is_sink": "is_sink" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(5, 5, 0) @ rot(0, 0, -180)" |                 "transform": "move(5, 5, 0) @ rot(0, 0, 180)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_corner", |                 "identifier": "cv_triangle_side", | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "edge_length": "5", | ||||||
|                     "face": "(face[0], face[1], face[5], False, face[2], False)", |                     "tip_offset": "2.5", | ||||||
|                     "is_sink": "is_sink", |                     "height": "height", | ||||||
|                     "is_inner": "False", |                     "face": "(face[0], False, False, False, face[2], None)", | ||||||
|                     "is_ribbon": "False" |                     "is_sink": "is_sink" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(0, 5, 0) @ rot(0, 0, -90)" |                 "transform": "move(0, 5, 0) @ rot(0, 0, 270)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_corner", |                 "identifier": "cv_triangle_side", | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "edge_length": "5", | ||||||
|                     "face": "(face[0], face[1], face[2], False, face[4], False)", |                     "tip_offset": "2.5", | ||||||
|                     "is_sink": "is_sink", |                     "height": "height", | ||||||
|                     "is_inner": "False", |                     "face": "(face[0], False, False, False, face[4], None)", | ||||||
|                     "is_ribbon": "False" |                     "is_sink": "is_sink" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(0, 0, 0)" |                 "transform": "ident()" | ||||||
|             } |             }, | ||||||
|         ] |             { | ||||||
|     }, |                 "identifier": "floor_rectangle_bottom", | ||||||
|     { |                 "skip": "not face[1]", | ||||||
|         "identifier": "floor_normal_1x1", |                 "params": { | ||||||
|         "showcase": { |                     "length": "5", | ||||||
|             "title": "Normal 1x1", |                     "width": "5" | ||||||
|             "icon": "Normal1x1", |                 }, | ||||||
|             "type": "floor", |                 "transform": "move(0, 0, -height)" | ||||||
|             "cfgs": [ |             } | ||||||
|                 { |         ] | ||||||
|                     "field": "height_", |     }, | ||||||
|                     "type": "float", |     { | ||||||
|                     "title": "Height", |         "identifier": "floor_normal_1x1", | ||||||
|                     "desc": "The height of block.", |         "showcase": { | ||||||
|                     "default": "5.0" |             "title": "Normal 1x1", | ||||||
|                 }, |             "category": "1x1 Blocks", | ||||||
|                 { |             "icon": "Normal1x1", | ||||||
|                     "field": "face_", |             "type": "floor", | ||||||
|                     "type": "face", |             "cfgs": [ | ||||||
|                     "title": "Face", |                 { | ||||||
|                     "desc": "Whether has some faces.", |                     "field": "height_", | ||||||
|                     "default": "(True, False, True, True, True, True)" |                     "type": "float", | ||||||
|                 } |                     "title": "Height", | ||||||
|             ] |                     "desc": "The height of block.", | ||||||
|         }, |                     "default": "5.0" | ||||||
|         "params": [ |                 }, | ||||||
|             { |                 { | ||||||
|                 "field": "height", |                     "field": "face_", | ||||||
|                 "data": "height_" |                     "type": "face", | ||||||
|             }, |                     "title": "Face", | ||||||
|             { |                     "desc": "Whether has some faces.", | ||||||
|                 "field": "face", |                     "default": "(True, False, True, True, True, True)" | ||||||
|                 "data": "face_" |                 } | ||||||
|             } |             ] | ||||||
|         ], |         }, | ||||||
|         "skip": "False", |         "params": [ | ||||||
|         "vars": [], |             { | ||||||
|         "vertices": [], |                 "field": "height", | ||||||
|         "faces": [], |                 "data": "height_" | ||||||
|         "instances": [ |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_1x1", |                 "field": "face", | ||||||
|                 "skip": "False", |                 "data": "face_" | ||||||
|                 "params": { |             } | ||||||
|                     "height": "height", |         ], | ||||||
|                     "face": "face", |         "skip": "False", | ||||||
|                     "is_sink": "False" |         "vars": [], | ||||||
|                 }, |         "vertices": [], | ||||||
|                 "transform": "ident()" |         "faces": [], | ||||||
|             } |         "instances": [ | ||||||
|         ] |             { | ||||||
|     }, |                 "identifier": "raw_floor_1x1", | ||||||
|     { |                 "skip": "False", | ||||||
|         "identifier": "floor_sink_1x1", |                 "params": { | ||||||
|         "showcase": { |                     "height": "height", | ||||||
|             "title": "Sink 1x1", |                     "face": "face", | ||||||
|             "icon": "Sink1x1", |                     "is_sink": "False" | ||||||
|             "type": "floor", |                 }, | ||||||
|             "cfgs": [ |                 "transform": "ident()" | ||||||
|                 { |             } | ||||||
|                     "field": "height_", |         ] | ||||||
|                     "type": "float", |     }, | ||||||
|                     "title": "Height", |     { | ||||||
|                     "desc": "The height of block.", |         "identifier": "floor_sink_1x1", | ||||||
|                     "default": "5.0" |         "showcase": { | ||||||
|                 }, |             "title": "Sink 1x1", | ||||||
|                 { |             "category": "1x1 Blocks", | ||||||
|                     "field": "face_", |             "icon": "Sink1x1", | ||||||
|                     "type": "face", |             "type": "floor", | ||||||
|                     "title": "Face", |             "cfgs": [ | ||||||
|                     "desc": "Whether has some faces.", |                 { | ||||||
|                     "default": "(True, False, True, True, True, True)" |                     "field": "height_", | ||||||
|                 } |                     "type": "float", | ||||||
|             ] |                     "title": "Height", | ||||||
|         }, |                     "desc": "The height of block.", | ||||||
|         "params": [ |                     "default": "5.0" | ||||||
|             { |                 }, | ||||||
|                 "field": "height", |                 { | ||||||
|                 "data": "height_" |                     "field": "face_", | ||||||
|             }, |                     "type": "face", | ||||||
|             { |                     "title": "Face", | ||||||
|                 "field": "face", |                     "desc": "Whether has some faces.", | ||||||
|                 "data": "face_" |                     "default": "(True, False, True, True, True, True)" | ||||||
|             } |                 } | ||||||
|         ], |             ] | ||||||
|         "skip": "False", |         }, | ||||||
|         "vars": [], |         "params": [ | ||||||
|         "vertices": [], |             { | ||||||
|         "faces": [], |                 "field": "height", | ||||||
|         "instances": [ |                 "data": "height_" | ||||||
|             { |             }, | ||||||
|                 "identifier": "raw_floor_1x1", |             { | ||||||
|                 "skip": "False", |                 "field": "face", | ||||||
|                 "params": { |                 "data": "face_" | ||||||
|                     "height": "height", |             } | ||||||
|                     "face": "face", |         ], | ||||||
|                     "is_sink": "True" |         "skip": "False", | ||||||
|                 }, |         "vars": [], | ||||||
|                 "transform": "ident()" |         "vertices": [], | ||||||
|             } |         "faces": [], | ||||||
|         ] |         "instances": [ | ||||||
|     } |             { | ||||||
|  |                 "identifier": "raw_floor_1x1", | ||||||
|  |                 "skip": "False", | ||||||
|  |                 "params": { | ||||||
|  |                     "height": "height", | ||||||
|  |                     "face": "face", | ||||||
|  |                     "is_sink": "True" | ||||||
|  |                 }, | ||||||
|  |                 "transform": "ident()" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
| ] | ] | ||||||
| @ -1,319 +1,240 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_floor_border", |         "identifier": "raw_floor_border", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "length", |                 "field": "length", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "face", |                 "field": "face", | ||||||
|                 "data": "(True, False, False, False, True, False)" |                 "data": "(True, False, False, False, True, False)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_sink", |                 "field": "is_sink", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_ribbon", |                 "field": "is_ribbon", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "length == 0.0", |         "skip": "length == 0.0", | ||||||
|         "vars": [ |         "vars": [], | ||||||
|             { |         "vertices": [], | ||||||
|                 "field": "uv_length", |         "faces": [], | ||||||
|                 "data": "length / 5.0" |         "instances": [ | ||||||
|             }, |             { | ||||||
|             { |                 "identifier": "cv_trapezoid_side", | ||||||
|                 "field": "uv_border_texture", |                 "skip": "False", | ||||||
|                 "data": "1.0 if is_ribbon else 0.5" |                 "params": { | ||||||
|             }, |                     "long_edge_length": "length", | ||||||
|             { |                     "short_edge_offset": "0", | ||||||
|                 "field": "sink", |                     "short_edge_length": "length", | ||||||
|                 "data": "0.7 if is_sink else 0.0" |                     "height": "height", | ||||||
|             } |                     "face": "face", | ||||||
|         ], |                     "is_sink": "is_sink", | ||||||
|         "vertices": [ |                     "is_ribbon": "is_ribbon" | ||||||
|             { |                 }, | ||||||
|                 "skip": "not face[0]", |                 "transform": "ident()" | ||||||
|                 "data": "(0, 0, 0)" |             } | ||||||
|             }, |         ] | ||||||
|             { |     }, | ||||||
|                 "skip": "not face[0]", |     { | ||||||
|                 "data": "(0, 2.5, -sink)" |         "identifier": "floor_normal_border", | ||||||
|             }, |         "showcase": { | ||||||
|             { |             "title": "Normal Border", | ||||||
|                 "skip": "not face[0]", |             "category": "Borders", | ||||||
|                 "data": "(length, 0, 0)" |             "icon": "NormalBorder", | ||||||
|             }, |             "type": "floor", | ||||||
|             { |             "cfgs": [ | ||||||
|                 "skip": "not face[0]", |                 { | ||||||
|                 "data": "(length, 2.5, -sink)" |                     "field": "length_", | ||||||
|             } |                     "type": "float", | ||||||
|         ], |                     "title": "Length", | ||||||
|         "faces": [ |                     "desc": "The length of block.", | ||||||
|             { |                     "default": "2.5" | ||||||
|                 "skip": "not face[0]", |                 }, | ||||||
|                 "texture": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\"", |                 { | ||||||
|                 "indices": [0, 2, 3, 1], |                     "field": "height_", | ||||||
|                 "uvs": [ |                     "type": "float", | ||||||
|                     "(0, 0)", |                     "title": "Height", | ||||||
|                     "(0, uv_length)", |                     "desc": "The height of block.", | ||||||
|                     "(uv_border_texture, uv_length)", |                     "default": "5.0" | ||||||
|                     "(uv_border_texture, 0)" |                 }, | ||||||
|                 ], |                 { | ||||||
|                 "normals": null |                     "field": "face_", | ||||||
|             } |                     "type": "face", | ||||||
|         ], |                     "title": "Face", | ||||||
|         "instances": [ |                     "desc": "Whether has some faces.", | ||||||
|             { |                     "default": "(True, False, False, False, True, False)" | ||||||
|                 "identifier": "raw_floor_side", |                 } | ||||||
|                 "skip": "not face[4]", |             ] | ||||||
|                 "params": { |         }, | ||||||
|                     "height": "height", |         "params": [ | ||||||
|                     "length": "length", |             { | ||||||
|                     "is_left_sink": "False", |                 "field": "length", | ||||||
|                     "is_right_sink": "False" |                 "data": "length_" | ||||||
|                 }, |             }, | ||||||
|                 "transform": "ident()" |             { | ||||||
|             }, |                 "field": "height", | ||||||
|             { |                 "data": "height_" | ||||||
|                 "identifier": "raw_floor_side", |             }, | ||||||
|                 "skip": "not face[2]", |             { | ||||||
|                 "params": { |                 "field": "face", | ||||||
|                     "height": "height", |                 "data": "face_" | ||||||
|                     "length": "2.5", |             } | ||||||
|                     "is_left_sink": "is_sink", |         ], | ||||||
|                     "is_right_sink": "False" |         "skip": "False", | ||||||
|                 }, |         "vars": [], | ||||||
|                 "transform": "move(0, 2.5, 0) @ rot(0, 0, -90)" |         "vertices": [], | ||||||
|             }, |         "faces": [], | ||||||
|             { |         "instances": [ | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[3]", |                 "identifier": "raw_floor_border", | ||||||
|                 "params": { |                 "skip": "False", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "2.5", |                     "length": "length", | ||||||
|                     "is_left_sink": "False", |                     "height": "height", | ||||||
|                     "is_right_sink": "is_sink" |                     "face": "face", | ||||||
|                 }, |                     "is_sink": "False", | ||||||
|                 "transform": "move(length, 0, 0) @ rot(0, 0, 90)" |                     "is_ribbon": "False" | ||||||
|             }, |                 }, | ||||||
|             { |                 "transform": "ident()" | ||||||
|                 "identifier": "raw_floor_side", |             } | ||||||
|                 "skip": "not face[5]", |         ] | ||||||
|                 "params": { |     }, | ||||||
|                     "height": "height", |     { | ||||||
|                     "length": "length", |         "identifier": "floor_sink_border", | ||||||
|                     "is_left_sink": "is_sink", |         "showcase": { | ||||||
|                     "is_right_sink": "is_sink" |             "title": "Sink Border", | ||||||
|                 }, |             "category": "Borders", | ||||||
|                 "transform": "move(length, 2.5, 0) @ rot(0, 0, 180)" |             "icon": "SinkBorder", | ||||||
|             }, |             "type": "floor", | ||||||
|             { |             "cfgs": [ | ||||||
|                 "identifier": "floor_bottom", |                 { | ||||||
|                 "skip": "not face[1]", |                     "field": "length_", | ||||||
|                 "params": { |                     "type": "float", | ||||||
|                     "length": "length", |                     "title": "Length", | ||||||
|                     "width": "2.5" |                     "desc": "The length of block.", | ||||||
|                 }, |                     "default": "2.5" | ||||||
|                 "transform": "move(0, 0, -height)" |                 }, | ||||||
|             } |                 { | ||||||
|         ] |                     "field": "height_", | ||||||
|     }, |                     "type": "float", | ||||||
|     { |                     "title": "Height", | ||||||
|         "identifier": "floor_normal_border", |                     "desc": "The height of block.", | ||||||
|         "showcase": { |                     "default": "5.0" | ||||||
|             "title": "Normal Border", |                 }, | ||||||
|             "icon": "NormalBorder", |                 { | ||||||
|             "type": "floor", |                     "field": "face_", | ||||||
|             "cfgs": [ |                     "type": "face", | ||||||
|                 { |                     "title": "Face", | ||||||
|                     "field": "length_", |                     "desc": "Whether has some faces.", | ||||||
|                     "type": "float", |                     "default": "(True, False, False, False, True, False)" | ||||||
|                     "title": "Length", |                 } | ||||||
|                     "desc": "The length of block.", |             ] | ||||||
|                     "default": "2.5" |         }, | ||||||
|                 }, |         "params": [ | ||||||
|                 { |             { | ||||||
|                     "field": "height_", |                 "field": "length", | ||||||
|                     "type": "float", |                 "data": "length_" | ||||||
|                     "title": "Height", |             }, | ||||||
|                     "desc": "The height of block.", |             { | ||||||
|                     "default": "5.0" |                 "field": "height", | ||||||
|                 }, |                 "data": "height_" | ||||||
|                 { |             }, | ||||||
|                     "field": "face_", |             { | ||||||
|                     "type": "face", |                 "field": "face", | ||||||
|                     "title": "Face", |                 "data": "face_" | ||||||
|                     "desc": "Whether has some faces.", |             } | ||||||
|                     "default": "(True, False, False, False, True, False)" |         ], | ||||||
|                 } |         "skip": "False", | ||||||
|             ] |         "vars": [], | ||||||
|         }, |         "vertices": [], | ||||||
|         "params": [ |         "faces": [], | ||||||
|             { |         "instances": [ | ||||||
|                 "field": "length", |             { | ||||||
|                 "data": "length_" |                 "identifier": "raw_floor_border", | ||||||
|             }, |                 "skip": "False", | ||||||
|             { |                 "params": { | ||||||
|                 "field": "height", |                     "length": "length", | ||||||
|                 "data": "height_" |                     "height": "height", | ||||||
|             }, |                     "face": "face", | ||||||
|             { |                     "is_sink": "True", | ||||||
|                 "field": "face", |                     "is_ribbon": "False" | ||||||
|                 "data": "face_" |                 }, | ||||||
|             } |                 "transform": "ident()" | ||||||
|         ], |             } | ||||||
|         "skip": "False", |         ] | ||||||
|         "vars": [], |     }, | ||||||
|         "vertices": [], |     { | ||||||
|         "faces": [], |         "identifier": "floor_ribbon_border", | ||||||
|         "instances": [ |         "showcase": { | ||||||
|             { |             "title": "Ribbon Border", | ||||||
|                 "identifier": "raw_floor_border", |             "category": "Borders", | ||||||
|                 "skip": "False", |             "icon": "RibbonBorder", | ||||||
|                 "params": { |             "type": "floor", | ||||||
|                     "length": "length", |             "cfgs": [ | ||||||
|                     "height": "height", |                 { | ||||||
|                     "face": "face", |                     "field": "length_", | ||||||
|                     "is_sink": "False", |                     "type": "float", | ||||||
|                     "is_ribbon": "False" |                     "title": "Length", | ||||||
|                 }, |                     "desc": "The length of block.", | ||||||
|                 "transform": "ident()" |                     "default": "2.5" | ||||||
|             } |                 }, | ||||||
|         ] |                 { | ||||||
|     }, |                     "field": "height_", | ||||||
|     { |                     "type": "float", | ||||||
|         "identifier": "floor_sink_border", |                     "title": "Height", | ||||||
|         "showcase": { |                     "desc": "The height of block.", | ||||||
|             "title": "Sink Border", |                     "default": "5.0" | ||||||
|             "icon": "SinkBorder", |                 }, | ||||||
|             "type": "floor", |                 { | ||||||
|             "cfgs": [ |                     "field": "face_", | ||||||
|                 { |                     "type": "face", | ||||||
|                     "field": "length_", |                     "title": "Face", | ||||||
|                     "type": "float", |                     "desc": "Whether has some faces.", | ||||||
|                     "title": "Length", |                     "default": "(True, False, False, False, True, False)" | ||||||
|                     "desc": "The length of block.", |                 } | ||||||
|                     "default": "2.5" |             ] | ||||||
|                 }, |         }, | ||||||
|                 { |         "params": [ | ||||||
|                     "field": "height_", |             { | ||||||
|                     "type": "float", |                 "field": "length", | ||||||
|                     "title": "Height", |                 "data": "length_" | ||||||
|                     "desc": "The height of block.", |             }, | ||||||
|                     "default": "5.0" |             { | ||||||
|                 }, |                 "field": "height", | ||||||
|                 { |                 "data": "height_" | ||||||
|                     "field": "face_", |             }, | ||||||
|                     "type": "face", |             { | ||||||
|                     "title": "Face", |                 "field": "face", | ||||||
|                     "desc": "Whether has some faces.", |                 "data": "face_" | ||||||
|                     "default": "(True, False, False, False, True, False)" |             } | ||||||
|                 } |         ], | ||||||
|             ] |         "skip": "False", | ||||||
|         }, |         "vars": [], | ||||||
|         "params": [ |         "vertices": [], | ||||||
|             { |         "faces": [], | ||||||
|                 "field": "length", |         "instances": [ | ||||||
|                 "data": "length_" |             { | ||||||
|             }, |                 "identifier": "raw_floor_border", | ||||||
|             { |                 "skip": "False", | ||||||
|                 "field": "height", |                 "params": { | ||||||
|                 "data": "height_" |                     "length": "length", | ||||||
|             }, |                     "height": "height", | ||||||
|             { |                     "face": "face", | ||||||
|                 "field": "face", |                     "is_sink": "True", | ||||||
|                 "data": "face_" |                     "is_ribbon": "True" | ||||||
|             } |                 }, | ||||||
|         ], |                 "transform": "ident()" | ||||||
|         "skip": "False", |             } | ||||||
|         "vars": [], |         ] | ||||||
|         "vertices": [], |     } | ||||||
|         "faces": [], |  | ||||||
|         "instances": [ |  | ||||||
|             { |  | ||||||
|                 "identifier": "raw_floor_border", |  | ||||||
|                 "skip": "False", |  | ||||||
|                 "params": { |  | ||||||
|                     "length": "length", |  | ||||||
|                     "height": "height", |  | ||||||
|                     "face": "face", |  | ||||||
|                     "is_sink": "True", |  | ||||||
|                     "is_ribbon": "False" |  | ||||||
|                 }, |  | ||||||
|                 "transform": "ident()" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "identifier": "floor_ribbon_border", |  | ||||||
|         "showcase": { |  | ||||||
|             "title": "Ribbon Border", |  | ||||||
|             "icon": "RibbonBorder", |  | ||||||
|             "type": "floor", |  | ||||||
|             "cfgs": [ |  | ||||||
|                 { |  | ||||||
|                     "field": "length_", |  | ||||||
|                     "type": "float", |  | ||||||
|                     "title": "Length", |  | ||||||
|                     "desc": "The length of block.", |  | ||||||
|                     "default": "2.5" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "field": "height_", |  | ||||||
|                     "type": "float", |  | ||||||
|                     "title": "Height", |  | ||||||
|                     "desc": "The height of block.", |  | ||||||
|                     "default": "5.0" |  | ||||||
|                 }, |  | ||||||
|                 { |  | ||||||
|                     "field": "face_", |  | ||||||
|                     "type": "face", |  | ||||||
|                     "title": "Face", |  | ||||||
|                     "desc": "Whether has some faces.", |  | ||||||
|                     "default": "(True, False, False, False, True, False)" |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }, |  | ||||||
|         "params": [ |  | ||||||
|             { |  | ||||||
|                 "field": "length", |  | ||||||
|                 "data": "length_" |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "field": "height", |  | ||||||
|                 "data": "height_" |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "field": "face", |  | ||||||
|                 "data": "face_" |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "skip": "False", |  | ||||||
|         "vars": [], |  | ||||||
|         "vertices": [], |  | ||||||
|         "faces": [], |  | ||||||
|         "instances": [ |  | ||||||
|             { |  | ||||||
|                 "identifier": "raw_floor_border", |  | ||||||
|                 "skip": "False", |  | ||||||
|                 "params": { |  | ||||||
|                     "length": "length", |  | ||||||
|                     "height": "height", |  | ||||||
|                     "face": "face", |  | ||||||
|                     "is_sink": "True", |  | ||||||
|                     "is_ribbon": "True" |  | ||||||
|                 }, |  | ||||||
|                 "transform": "ident()" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     } |  | ||||||
| ] | ] | ||||||
							
								
								
									
										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)" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
|  | ] | ||||||
| @ -1,460 +1,466 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_floor_corner", |         "identifier": "raw_floor_corner", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "face", |                 "field": "face", | ||||||
|                 "data": "(True, False, False, False, False, False)" |                 "data": "(True, False, False, False, False, False)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_sink", |                 "field": "is_sink", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_inner", |                 "field": "is_inner", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_ribbon", |                 "field": "is_ribbon", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "False", |         "skip": "False", | ||||||
|         "vars": [ |         "vars": [ | ||||||
|             { |             { | ||||||
|                 "field": "PXPY_sink", |                 "field": "PXPY_sink", | ||||||
|                 "data": "0.7 if (is_sink and (not is_inner)) else 0" |                 "data": "0.7 if (is_sink and (not is_inner)) else 0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "NXNY_sink", |                 "field": "NXNY_sink", | ||||||
|                 "data": "0.7 if (is_sink and is_inner) else 0" |                 "data": "0.7 if (is_sink and is_inner) else 0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "PXPY_uv", |                 "field": "PXPY_uv", | ||||||
|                 "data": "(0 if is_inner else 0.5) * (2 if is_ribbon else 1)" |                 "data": "(0 if is_inner else 0.5) * (2 if is_ribbon else 1)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "NXNY_uv", |                 "field": "NXNY_uv", | ||||||
|                 "data": "(0.5 if is_inner else 0) * (2 if is_ribbon else 1)" |                 "data": "(0.5 if is_inner else 0) * (2 if is_ribbon else 1)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "corner_texture", |                 "field": "corner_texture", | ||||||
|                 "data": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\"" |                 "data": "(\"FloorTopFlat\" if is_ribbon else \"FloorTopProfil\") if is_sink else \"FloorTopBorder\"" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "vertices": [ |         "vertices": [ | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "data": "(0, 0, -NXNY_sink)" |                 "data": "(0, 0, -NXNY_sink)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "data": "(2.5, 0, -NXNY_sink)" |                 "data": "(2.5, 0, -NXNY_sink)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "data": "(2.5, 2.5, -PXPY_sink)" |                 "data": "(2.5, 2.5, -PXPY_sink)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "data": "(0, 2.5, -NXNY_sink)" |                 "data": "(0, 2.5, -NXNY_sink)" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "faces": [ |         "faces": [ | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "texture": "corner_texture", |                 "texture": "corner_texture", | ||||||
|                 "indices": [0, 1, 2], |                 "indices": [0, 1, 2], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(NXNY_uv, 0.5)", |                     "(NXNY_uv, 0.5)", | ||||||
|                     "(NXNY_uv, 0)", |                     "(NXNY_uv, 0)", | ||||||
|                     "(PXPY_uv, 0)" |                     "(PXPY_uv, 0)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "texture": "corner_texture", |                 "texture": "corner_texture", | ||||||
|                 "indices": [0, 2, 3], |                 "indices": [0, 2, 3], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(NXNY_uv, 0.5)", |                     "(NXNY_uv, 0.5)", | ||||||
|                     "(PXPY_uv, 0)", |                     "(PXPY_uv, 0)", | ||||||
|                     "(NXNY_uv, 0)" |                     "(NXNY_uv, 0)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "instances": [ |         "instances": [ | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face[4]", |                 "skip": "not face[4]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "is_left_sink": "NXNY_sink != 0", |                     "is_left_sink": "NXNY_sink != 0", | ||||||
|                     "is_right_sink": "NXNY_sink != 0" |                     "is_right_sink": "NXNY_sink != 0" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "ident()" |                 "transform": "ident()" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face[2]", |                 "skip": "not face[2]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "is_left_sink": "NXNY_sink != 0", |                     "is_left_sink": "NXNY_sink != 0", | ||||||
|                     "is_right_sink": "NXNY_sink != 0" |                     "is_right_sink": "NXNY_sink != 0" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(0, 2.5, 0) @ rot(0, 0, -90)" |                 "transform": "move(0, 2.5, 0) @ rot(0, 0, -90)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face[3]", |                 "skip": "not face[3]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "is_left_sink": "NXNY_sink != 0", |                     "is_left_sink": "NXNY_sink != 0", | ||||||
|                     "is_right_sink": "PXPY_sink != 0" |                     "is_right_sink": "PXPY_sink != 0" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(2.5, 0, 0) @ rot(0, 0, 90)" |                 "transform": "move(2.5, 0, 0) @ rot(0, 0, 90)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face[5]", |                 "skip": "not face[5]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "is_left_sink": "PXPY_sink != 0", |                     "is_left_sink": "PXPY_sink != 0", | ||||||
|                     "is_right_sink": "NXNY_sink != 0" |                     "is_right_sink": "NXNY_sink != 0" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(2.5, 2.5, 0) @ rot(0, 0, 180)" |                 "transform": "move(2.5, 2.5, 0) @ rot(0, 0, 180)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "floor_bottom", |                 "identifier": "floor_rectangle_bottom", | ||||||
|                 "skip": "not face[1]", |                 "skip": "not face[1]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "width": "2.5" |                     "width": "2.5" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(0, 0, -height)" |                 "transform": "move(0, 0, -height)" | ||||||
|             } |             } | ||||||
|         ] |         ] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         "identifier": "floor_normal_inner_corner", |         "identifier": "floor_normal_inner_corner", | ||||||
|         "showcase": { |         "showcase": { | ||||||
|             "title": "Normal Inner Corner", |             "title": "Normal Inner Corner", | ||||||
|             "icon": "NormalInnerCorner", |             "category": "Half Block Corners", | ||||||
|             "type": "floor", |             "icon": "NormalInnerCorner", | ||||||
|             "cfgs": [ |             "type": "floor", | ||||||
|                 { |             "cfgs": [ | ||||||
|                     "field": "height_", |                 { | ||||||
|                     "type": "float", |                     "field": "height_", | ||||||
|                     "title": "Height", |                     "type": "float", | ||||||
|                     "desc": "The height of block.", |                     "title": "Height", | ||||||
|                     "default": "5.0" |                     "desc": "The height of block.", | ||||||
|                 }, |                     "default": "5.0" | ||||||
|                 { |                 }, | ||||||
|                     "field": "face_", |                 { | ||||||
|                     "type": "face", |                     "field": "face_", | ||||||
|                     "title": "Face", |                     "type": "face", | ||||||
|                     "desc": "Whether has some faces.", |                     "title": "Face", | ||||||
|                     "default": "(True, False, False, False, False, False)" |                     "desc": "Whether has some faces.", | ||||||
|                 } |                     "default": "(True, False, False, False, False, False)" | ||||||
|             ] |                 } | ||||||
|         }, |             ] | ||||||
|         "params": [ |         }, | ||||||
|             { |         "params": [ | ||||||
|                 "field": "height", |             { | ||||||
|                 "data": "height_" |                 "field": "height", | ||||||
|             }, |                 "data": "height_" | ||||||
|             { |             }, | ||||||
|                 "field": "face", |             { | ||||||
|                 "data": "face_" |                 "field": "face", | ||||||
|             } |                 "data": "face_" | ||||||
|         ], |             } | ||||||
|         "skip": "False", |         ], | ||||||
|         "vars": [], |         "skip": "False", | ||||||
|         "vertices": [], |         "vars": [], | ||||||
|         "faces": [], |         "vertices": [], | ||||||
|         "instances": [ |         "faces": [], | ||||||
|             { |         "instances": [ | ||||||
|                 "identifier": "raw_floor_corner", |             { | ||||||
|                 "skip": "False", |                 "identifier": "raw_floor_corner", | ||||||
|                 "params": { |                 "skip": "False", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "face": "face", |                     "height": "height", | ||||||
|                     "is_sink": "False", |                     "face": "face", | ||||||
|                     "is_inner": "True", |                     "is_sink": "False", | ||||||
|                     "is_ribbon": "False" |                     "is_inner": "True", | ||||||
|                 }, |                     "is_ribbon": "False" | ||||||
|                 "transform": "ident()" |                 }, | ||||||
|             } |                 "transform": "ident()" | ||||||
|         ] |             } | ||||||
|     }, |         ] | ||||||
|     { |     }, | ||||||
|         "identifier": "floor_sink_inner_corner", |     { | ||||||
|         "showcase": { |         "identifier": "floor_sink_inner_corner", | ||||||
|             "title": "Sink Inner Corner", |         "showcase": { | ||||||
|             "icon": "SinkInnerCorner", |             "title": "Sink Inner Corner", | ||||||
|             "type": "floor", |             "category": "Half Block Corners", | ||||||
|             "cfgs": [ |             "icon": "SinkInnerCorner", | ||||||
|                 { |             "type": "floor", | ||||||
|                     "field": "height_", |             "cfgs": [ | ||||||
|                     "type": "float", |                 { | ||||||
|                     "title": "Height", |                     "field": "height_", | ||||||
|                     "desc": "The height of block.", |                     "type": "float", | ||||||
|                     "default": "5.0" |                     "title": "Height", | ||||||
|                 }, |                     "desc": "The height of block.", | ||||||
|                 { |                     "default": "5.0" | ||||||
|                     "field": "face_", |                 }, | ||||||
|                     "type": "face", |                 { | ||||||
|                     "title": "Face", |                     "field": "face_", | ||||||
|                     "desc": "Whether has some faces.", |                     "type": "face", | ||||||
|                     "default": "(True, False, False, False, False, False)" |                     "title": "Face", | ||||||
|                 } |                     "desc": "Whether has some faces.", | ||||||
|             ] |                     "default": "(True, False, False, False, False, False)" | ||||||
|         }, |                 } | ||||||
|         "params": [ |             ] | ||||||
|             { |         }, | ||||||
|                 "field": "height", |         "params": [ | ||||||
|                 "data": "height_" |             { | ||||||
|             }, |                 "field": "height", | ||||||
|             { |                 "data": "height_" | ||||||
|                 "field": "face", |             }, | ||||||
|                 "data": "face_" |             { | ||||||
|             } |                 "field": "face", | ||||||
|         ], |                 "data": "face_" | ||||||
|         "skip": "False", |             } | ||||||
|         "vars": [], |         ], | ||||||
|         "vertices": [], |         "skip": "False", | ||||||
|         "faces": [], |         "vars": [], | ||||||
|         "instances": [ |         "vertices": [], | ||||||
|             { |         "faces": [], | ||||||
|                 "identifier": "raw_floor_corner", |         "instances": [ | ||||||
|                 "skip": "False", |             { | ||||||
|                 "params": { |                 "identifier": "raw_floor_corner", | ||||||
|                     "height": "height", |                 "skip": "False", | ||||||
|                     "face": "face", |                 "params": { | ||||||
|                     "is_sink": "True", |                     "height": "height", | ||||||
|                     "is_inner": "True", |                     "face": "face", | ||||||
|                     "is_ribbon": "False" |                     "is_sink": "True", | ||||||
|                 }, |                     "is_inner": "True", | ||||||
|                 "transform": "ident()" |                     "is_ribbon": "False" | ||||||
|             } |                 }, | ||||||
|         ] |                 "transform": "ident()" | ||||||
|     }, |             } | ||||||
|     { |         ] | ||||||
|         "identifier": "floor_ribbon_inner_corner", |     }, | ||||||
|         "showcase": { |     { | ||||||
|             "title": "Ribbon Inner Corner", |         "identifier": "floor_ribbon_inner_corner", | ||||||
|             "icon": "RibbonInnerCorner", |         "showcase": { | ||||||
|             "type": "floor", |             "title": "Ribbon Inner Corner", | ||||||
|             "cfgs": [ |             "category": "Half Block Corners", | ||||||
|                 { |             "icon": "RibbonInnerCorner", | ||||||
|                     "field": "height_", |             "type": "floor", | ||||||
|                     "type": "float", |             "cfgs": [ | ||||||
|                     "title": "Height", |                 { | ||||||
|                     "desc": "The height of block.", |                     "field": "height_", | ||||||
|                     "default": "5.0" |                     "type": "float", | ||||||
|                 }, |                     "title": "Height", | ||||||
|                 { |                     "desc": "The height of block.", | ||||||
|                     "field": "face_", |                     "default": "5.0" | ||||||
|                     "type": "face", |                 }, | ||||||
|                     "title": "Face", |                 { | ||||||
|                     "desc": "Whether has some faces.", |                     "field": "face_", | ||||||
|                     "default": "(True, False, False, False, False, False)" |                     "type": "face", | ||||||
|                 } |                     "title": "Face", | ||||||
|             ] |                     "desc": "Whether has some faces.", | ||||||
|         }, |                     "default": "(True, False, False, False, False, False)" | ||||||
|         "params": [ |                 } | ||||||
|             { |             ] | ||||||
|                 "field": "height", |         }, | ||||||
|                 "data": "height_" |         "params": [ | ||||||
|             }, |             { | ||||||
|             { |                 "field": "height", | ||||||
|                 "field": "face", |                 "data": "height_" | ||||||
|                 "data": "face_" |             }, | ||||||
|             } |             { | ||||||
|         ], |                 "field": "face", | ||||||
|         "skip": "False", |                 "data": "face_" | ||||||
|         "vars": [], |             } | ||||||
|         "vertices": [], |         ], | ||||||
|         "faces": [], |         "skip": "False", | ||||||
|         "instances": [ |         "vars": [], | ||||||
|             { |         "vertices": [], | ||||||
|                 "identifier": "raw_floor_corner", |         "faces": [], | ||||||
|                 "skip": "False", |         "instances": [ | ||||||
|                 "params": { |             { | ||||||
|                     "height": "height", |                 "identifier": "raw_floor_corner", | ||||||
|                     "face": "face", |                 "skip": "False", | ||||||
|                     "is_sink": "True", |                 "params": { | ||||||
|                     "is_inner": "True", |                     "height": "height", | ||||||
|                     "is_ribbon": "True" |                     "face": "face", | ||||||
|                 }, |                     "is_sink": "True", | ||||||
|                 "transform": "ident()" |                     "is_inner": "True", | ||||||
|             } |                     "is_ribbon": "True" | ||||||
|         ] |                 }, | ||||||
|     }, |                 "transform": "ident()" | ||||||
|     { |             } | ||||||
|         "identifier": "floor_normal_outter_corner", |         ] | ||||||
|         "showcase": { |     }, | ||||||
|             "title": "Normal Outter Corner", |     { | ||||||
|             "icon": "NormalOutterCorner", |         "identifier": "floor_normal_outter_corner", | ||||||
|             "type": "floor", |         "showcase": { | ||||||
|             "cfgs": [ |             "title": "Normal Outter Corner", | ||||||
|                 { |             "category": "Half Block Corners", | ||||||
|                     "field": "height_", |             "icon": "NormalOutterCorner", | ||||||
|                     "type": "float", |             "type": "floor", | ||||||
|                     "title": "Height", |             "cfgs": [ | ||||||
|                     "desc": "The height of block.", |                 { | ||||||
|                     "default": "5.0" |                     "field": "height_", | ||||||
|                 }, |                     "type": "float", | ||||||
|                 { |                     "title": "Height", | ||||||
|                     "field": "face_", |                     "desc": "The height of block.", | ||||||
|                     "type": "face", |                     "default": "5.0" | ||||||
|                     "title": "Face", |                 }, | ||||||
|                     "desc": "Whether has some faces.", |                 { | ||||||
|                     "default": "(True, False, True, False, True, False)" |                     "field": "face_", | ||||||
|                 } |                     "type": "face", | ||||||
|             ] |                     "title": "Face", | ||||||
|         }, |                     "desc": "Whether has some faces.", | ||||||
|         "params": [ |                     "default": "(True, False, True, False, True, False)" | ||||||
|             { |                 } | ||||||
|                 "field": "height", |             ] | ||||||
|                 "data": "height_" |         }, | ||||||
|             }, |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "face", |                 "field": "height", | ||||||
|                 "data": "face_" |                 "data": "height_" | ||||||
|             } |             }, | ||||||
|         ], |             { | ||||||
|         "skip": "False", |                 "field": "face", | ||||||
|         "vars": [], |                 "data": "face_" | ||||||
|         "vertices": [], |             } | ||||||
|         "faces": [], |         ], | ||||||
|         "instances": [ |         "skip": "False", | ||||||
|             { |         "vars": [], | ||||||
|                 "identifier": "raw_floor_corner", |         "vertices": [], | ||||||
|                 "skip": "False", |         "faces": [], | ||||||
|                 "params": { |         "instances": [ | ||||||
|                     "height": "height", |             { | ||||||
|                     "face": "face", |                 "identifier": "raw_floor_corner", | ||||||
|                     "is_sink": "False", |                 "skip": "False", | ||||||
|                     "is_inner": "False", |                 "params": { | ||||||
|                     "is_ribbon": "False" |                     "height": "height", | ||||||
|                 }, |                     "face": "face", | ||||||
|                 "transform": "ident()" |                     "is_sink": "False", | ||||||
|             } |                     "is_inner": "False", | ||||||
|         ] |                     "is_ribbon": "False" | ||||||
|     }, |                 }, | ||||||
|     { |                 "transform": "ident()" | ||||||
|         "identifier": "floor_sink_outter_corner", |             } | ||||||
|         "showcase": { |         ] | ||||||
|             "title": "Sink Outter Corner", |     }, | ||||||
|             "icon": "SinkOutterCorner", |     { | ||||||
|             "type": "floor", |         "identifier": "floor_sink_outter_corner", | ||||||
|             "cfgs": [ |         "showcase": { | ||||||
|                 { |             "title": "Sink Outter Corner", | ||||||
|                     "field": "height_", |             "category": "Half Block Corners", | ||||||
|                     "type": "float", |             "icon": "SinkOutterCorner", | ||||||
|                     "title": "Height", |             "type": "floor", | ||||||
|                     "desc": "The height of block.", |             "cfgs": [ | ||||||
|                     "default": "5.0" |                 { | ||||||
|                 }, |                     "field": "height_", | ||||||
|                 { |                     "type": "float", | ||||||
|                     "field": "face_", |                     "title": "Height", | ||||||
|                     "type": "face", |                     "desc": "The height of block.", | ||||||
|                     "title": "Face", |                     "default": "5.0" | ||||||
|                     "desc": "Whether has some faces.", |                 }, | ||||||
|                     "default": "(True, False, True, False, True, False)" |                 { | ||||||
|                 } |                     "field": "face_", | ||||||
|             ] |                     "type": "face", | ||||||
|         }, |                     "title": "Face", | ||||||
|         "params": [ |                     "desc": "Whether has some faces.", | ||||||
|             { |                     "default": "(True, False, True, False, True, False)" | ||||||
|                 "field": "height", |                 } | ||||||
|                 "data": "height_" |             ] | ||||||
|             }, |         }, | ||||||
|             { |         "params": [ | ||||||
|                 "field": "face", |             { | ||||||
|                 "data": "face_" |                 "field": "height", | ||||||
|             } |                 "data": "height_" | ||||||
|         ], |             }, | ||||||
|         "skip": "False", |             { | ||||||
|         "vars": [], |                 "field": "face", | ||||||
|         "vertices": [], |                 "data": "face_" | ||||||
|         "faces": [], |             } | ||||||
|         "instances": [ |         ], | ||||||
|             { |         "skip": "False", | ||||||
|                 "identifier": "raw_floor_corner", |         "vars": [], | ||||||
|                 "skip": "False", |         "vertices": [], | ||||||
|                 "params": { |         "faces": [], | ||||||
|                     "height": "height", |         "instances": [ | ||||||
|                     "face": "face", |             { | ||||||
|                     "is_sink": "True", |                 "identifier": "raw_floor_corner", | ||||||
|                     "is_inner": "False", |                 "skip": "False", | ||||||
|                     "is_ribbon": "False" |                 "params": { | ||||||
|                 }, |                     "height": "height", | ||||||
|                 "transform": "ident()" |                     "face": "face", | ||||||
|             } |                     "is_sink": "True", | ||||||
|         ] |                     "is_inner": "False", | ||||||
|     }, |                     "is_ribbon": "False" | ||||||
|     { |                 }, | ||||||
|         "identifier": "floor_ribbon_outter_corner", |                 "transform": "ident()" | ||||||
|         "showcase": { |             } | ||||||
|             "title": "Ribbon Outter Corner", |         ] | ||||||
|             "icon": "RibbonOutterCorner", |     }, | ||||||
|             "type": "floor", |     { | ||||||
|             "cfgs": [ |         "identifier": "floor_ribbon_outter_corner", | ||||||
|                 { |         "showcase": { | ||||||
|                     "field": "height_", |             "title": "Ribbon Outter Corner", | ||||||
|                     "type": "float", |             "category": "Half Block Corners", | ||||||
|                     "title": "Height", |             "icon": "RibbonOutterCorner", | ||||||
|                     "desc": "The height of block.", |             "type": "floor", | ||||||
|                     "default": "5.0" |             "cfgs": [ | ||||||
|                 }, |                 { | ||||||
|                 { |                     "field": "height_", | ||||||
|                     "field": "face_", |                     "type": "float", | ||||||
|                     "type": "face", |                     "title": "Height", | ||||||
|                     "title": "Face", |                     "desc": "The height of block.", | ||||||
|                     "desc": "Whether has some faces.", |                     "default": "5.0" | ||||||
|                     "default": "(True, False, True, False, True, False)" |                 }, | ||||||
|                 } |                 { | ||||||
|             ] |                     "field": "face_", | ||||||
|         }, |                     "type": "face", | ||||||
|         "params": [ |                     "title": "Face", | ||||||
|             { |                     "desc": "Whether has some faces.", | ||||||
|                 "field": "height", |                     "default": "(True, False, True, False, True, False)" | ||||||
|                 "data": "height_" |                 } | ||||||
|             }, |             ] | ||||||
|             { |         }, | ||||||
|                 "field": "face", |         "params": [ | ||||||
|                 "data": "face_" |             { | ||||||
|             } |                 "field": "height", | ||||||
|         ], |                 "data": "height_" | ||||||
|         "skip": "False", |             }, | ||||||
|         "vars": [], |             { | ||||||
|         "vertices": [], |                 "field": "face", | ||||||
|         "faces": [], |                 "data": "face_" | ||||||
|         "instances": [ |             } | ||||||
|             { |         ], | ||||||
|                 "identifier": "raw_floor_corner", |         "skip": "False", | ||||||
|                 "skip": "False", |         "vars": [], | ||||||
|                 "params": { |         "vertices": [], | ||||||
|                     "height": "height", |         "faces": [], | ||||||
|                     "face": "face", |         "instances": [ | ||||||
|                     "is_sink": "True", |             { | ||||||
|                     "is_inner": "False", |                 "identifier": "raw_floor_corner", | ||||||
|                     "is_ribbon": "True" |                 "skip": "False", | ||||||
|                 }, |                 "params": { | ||||||
|                 "transform": "ident()" |                     "height": "height", | ||||||
|             } |                     "face": "face", | ||||||
|         ] |                     "is_sink": "True", | ||||||
|     } |                     "is_inner": "False", | ||||||
|  |                     "is_ribbon": "True" | ||||||
|  |                 }, | ||||||
|  |                 "transform": "ident()" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
| ] | ] | ||||||
| @ -1,171 +1,172 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "floor_flat", |         "identifier": "floor_flat", | ||||||
|         "showcase": { |         "showcase": { | ||||||
|             "title": "Flat", |             "title": "Flat", | ||||||
|             "icon": "Flat", |             "category": "Miscellaneous", | ||||||
|             "type": "floor", |             "icon": "Flat", | ||||||
|             "cfgs": [ |             "type": "floor", | ||||||
|                 { |             "cfgs": [ | ||||||
|                     "field": "height_", |                 { | ||||||
|                     "type": "float", |                     "field": "height_", | ||||||
|                     "title": "Height", |                     "type": "float", | ||||||
|                     "desc": "The height of block.", |                     "title": "Height", | ||||||
|                     "default": "5.0" |                     "desc": "The height of block.", | ||||||
|                 }, |                     "default": "5.0" | ||||||
|                 { |                 }, | ||||||
|                     "field": "length_", |                 { | ||||||
|                     "type": "float", |                     "field": "length_", | ||||||
|                     "title": "Length", |                     "type": "float", | ||||||
|                     "desc": "The length of block.", |                     "title": "Length", | ||||||
|                     "default": "2.5" |                     "desc": "The length of block.", | ||||||
|                 }, |                     "default": "2.5" | ||||||
|                 { |                 }, | ||||||
|                     "field": "width_", |                 { | ||||||
|                     "type": "float", |                     "field": "width_", | ||||||
|                     "title": "Width", |                     "type": "float", | ||||||
|                     "desc": "The width of block.", |                     "title": "Width", | ||||||
|                     "default": "2.5" |                     "desc": "The width of block.", | ||||||
|                 }, |                     "default": "2.5" | ||||||
|                 { |                 }, | ||||||
|                     "field": "face_", |                 { | ||||||
|                     "type": "face", |                     "field": "face_", | ||||||
|                     "title": "Face", |                     "type": "face", | ||||||
|                     "desc": "Whether has some faces.", |                     "title": "Face", | ||||||
|                     "default": "(True, False, False, False, False, False)" |                     "desc": "Whether has some faces.", | ||||||
|                 }, |                     "default": "(True, False, False, False, False, False)" | ||||||
|                 { |                 }, | ||||||
|                     "field": "is_sink_", |                 { | ||||||
|                     "type": "float", |                     "field": "is_sink_", | ||||||
|                     "title": "Is Sink", |                     "type": "bool", | ||||||
|                     "desc": "Whether this flat floor is used for sink floor.", |                     "title": "Is Sink", | ||||||
|                     "default": "False" |                     "desc": "Whether this flat floor is used for sink floor.", | ||||||
|                 } |                     "default": "False" | ||||||
|             ] |                 } | ||||||
|         }, |             ] | ||||||
|         "params": [ |         }, | ||||||
|             { |         "params": [ | ||||||
|                 "field": "height", |             { | ||||||
|                 "data": "height_" |                 "field": "height", | ||||||
|             }, |                 "data": "height_" | ||||||
|             { |             }, | ||||||
|                 "field": "length", |             { | ||||||
|                 "data": "length_" |                 "field": "length", | ||||||
|             }, |                 "data": "length_" | ||||||
|             { |             }, | ||||||
|                 "field": "width", |             { | ||||||
|                 "data": "width_" |                 "field": "width", | ||||||
|             }, |                 "data": "width_" | ||||||
|             { |             }, | ||||||
|                 "field": "face", |             { | ||||||
|                 "data": "face_" |                 "field": "face", | ||||||
|             }, |                 "data": "face_" | ||||||
|             { |             }, | ||||||
|                 "field": "is_sink", |             { | ||||||
|                 "data": "is_sink_" |                 "field": "is_sink", | ||||||
|             } |                 "data": "is_sink_" | ||||||
|         ], |             } | ||||||
|         "skip": "length == 0.0 or width == 0.0", |         ], | ||||||
|         "vars": [ |         "skip": "length == 0.0 or width == 0.0", | ||||||
|             { |         "vars": [ | ||||||
|                 "field": "sink", |             { | ||||||
|                 "data": "0.7 if is_sink else 0" |                 "field": "sink", | ||||||
|             }, |                 "data": "0.7 if is_sink else 0" | ||||||
|             { |             }, | ||||||
|                 "field": "uv_length", |             { | ||||||
|                 "data": "length / 5.0" |                 "field": "uv_length", | ||||||
|             }, |                 "data": "length / 5.0" | ||||||
|             { |             }, | ||||||
|                 "field": "uv_width", |             { | ||||||
|                 "data": "width / 5.0" |                 "field": "uv_width", | ||||||
|             } |                 "data": "width / 5.0" | ||||||
|         ], |             } | ||||||
|         "vertices": [ |         ], | ||||||
|             { |         "vertices": [ | ||||||
|                 "skip": "False", |             { | ||||||
|                 "data": "(0, 0, -sink)" |                 "skip": "False", | ||||||
|             }, |                 "data": "(0, 0, -sink)" | ||||||
|             { |             }, | ||||||
|                 "skip": "False", |             { | ||||||
|                 "data": "(length, 0, -sink)" |                 "skip": "False", | ||||||
|             }, |                 "data": "(length, 0, -sink)" | ||||||
|             { |             }, | ||||||
|                 "skip": "False", |             { | ||||||
|                 "data": "(length, width, -sink)" |                 "skip": "False", | ||||||
|             }, |                 "data": "(length, width, -sink)" | ||||||
|             { |             }, | ||||||
|                 "skip": "False", |             { | ||||||
|                 "data": "(0, width, -sink)" |                 "skip": "False", | ||||||
|             } |                 "data": "(0, width, -sink)" | ||||||
|         ], |             } | ||||||
|         "faces": [ |         ], | ||||||
|             { |         "faces": [ | ||||||
|                 "skip": "not face[0]", |             { | ||||||
|                 "texture": "\"FloorTopBorderless\"", |                 "skip": "not face[0]", | ||||||
|                 "indices": [0, 1, 2, 3], |                 "texture": "\"FloorTopBorderless\"", | ||||||
|                 "uvs": [ |                 "indices": [0, 1, 2, 3], | ||||||
|                     "(0, 0)", |                 "uvs": [ | ||||||
|                     "(uv_length, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_length, uv_width)", |                     "(uv_length, 0)", | ||||||
|                     "(0, uv_width)" |                     "(uv_length, uv_width)", | ||||||
|                 ], |                     "(0, uv_width)" | ||||||
|                 "normals": null |                 ], | ||||||
|             } |                 "normals": null | ||||||
|         ], |             } | ||||||
|         "instances": [ |         ], | ||||||
|             { |         "instances": [ | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[4]", |                 "identifier": "raw_floor_side", | ||||||
|                 "params": { |                 "skip": "not face[4]", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "length", |                     "height": "height", | ||||||
|                     "is_left_sink": "is_sink", |                     "length": "length", | ||||||
|                     "is_right_sink": "is_sink" |                     "is_left_sink": "is_sink", | ||||||
|                 }, |                     "is_right_sink": "is_sink" | ||||||
|                 "transform": "ident()" |                 }, | ||||||
|             }, |                 "transform": "ident()" | ||||||
|             { |             }, | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[2]", |                 "identifier": "raw_floor_side", | ||||||
|                 "params": { |                 "skip": "not face[2]", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "width", |                     "height": "height", | ||||||
|                     "is_left_sink": "is_sink", |                     "length": "width", | ||||||
|                     "is_right_sink": "is_sink" |                     "is_left_sink": "is_sink", | ||||||
|                 }, |                     "is_right_sink": "is_sink" | ||||||
|                 "transform": "move(0, width, 0) @ rot(0, 0, -90)" |                 }, | ||||||
|             }, |                 "transform": "move(0, width, 0) @ rot(0, 0, -90)" | ||||||
|             { |             }, | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[3]", |                 "identifier": "raw_floor_side", | ||||||
|                 "params": { |                 "skip": "not face[3]", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "width", |                     "height": "height", | ||||||
|                     "is_left_sink": "is_sink", |                     "length": "width", | ||||||
|                     "is_right_sink": "is_sink" |                     "is_left_sink": "is_sink", | ||||||
|                 }, |                     "is_right_sink": "is_sink" | ||||||
|                 "transform": "move(length, 0, 0) @ rot(0, 0, 90)" |                 }, | ||||||
|             }, |                 "transform": "move(length, 0, 0) @ rot(0, 0, 90)" | ||||||
|             { |             }, | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[5]", |                 "identifier": "raw_floor_side", | ||||||
|                 "params": { |                 "skip": "not face[5]", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "length", |                     "height": "height", | ||||||
|                     "is_left_sink": "is_sink", |                     "length": "length", | ||||||
|                     "is_right_sink": "is_sink" |                     "is_left_sink": "is_sink", | ||||||
|                 }, |                     "is_right_sink": "is_sink" | ||||||
|                 "transform": "move(length, width, 0) @ rot(0, 0, 180)" |                 }, | ||||||
|             }, |                 "transform": "move(length, width, 0) @ rot(0, 0, 180)" | ||||||
|             { |             }, | ||||||
|                 "identifier": "floor_bottom", |             { | ||||||
|                 "skip": "not face[1]", |                 "identifier": "floor_rectangle_bottom", | ||||||
|                 "params": { |                 "skip": "not face[1]", | ||||||
|                     "length": "length", |                 "params": { | ||||||
|                     "width": "width" |                     "length": "length", | ||||||
|                 }, |                     "width": "width" | ||||||
|                 "transform": "move(0, 0, -height)" |                 }, | ||||||
|             } |                 "transform": "move(0, 0, -height)" | ||||||
|         ] |             } | ||||||
|     } |         ] | ||||||
|  |     } | ||||||
| ] | ] | ||||||
| @ -1,371 +1,343 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_floor_platform", |         "identifier": "raw_floor_platform", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "length", |                 "field": "length", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "width", |                 "field": "width", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "face", |                 "field": "face", | ||||||
|                 "data": "(True, False, True, True, True, True)" |                 "data": "(True, False, True, True, True, True)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_sink", |                 "field": "is_sink", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_ribbon", |                 "field": "is_ribbon", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "False", |         "skip": "False", | ||||||
|         "vars": [], |         "vars": [], | ||||||
|         "vertices": [], |         "vertices": [], | ||||||
|         "faces": [], |         "faces": [], | ||||||
|         "instances": [ |         "instances": [ | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_corner", |                 "identifier": "cv_trapezoid_side", | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "long_edge_length": "length + 5", | ||||||
|                     "face": "(face[0], face[1], face[4], False, face[3], False)", |                     "short_edge_offset": "2.5", | ||||||
|                     "is_sink": "is_sink", |                     "short_edge_length": "length", | ||||||
|                     "is_inner": "False", |                     "height": "height", | ||||||
|                     "is_ribbon": "is_ribbon" |                     "face": "(face[0], False, False, False, face[4], False)", | ||||||
|                 }, |                     "is_sink": "is_sink", | ||||||
|                 "transform": "move(5 + length, 0, 0) @ rot(0, 0, -270)" |                     "is_ribbon": "is_ribbon" | ||||||
|             }, |                 }, | ||||||
|             { |                 "transform": "ident()" | ||||||
|                 "identifier": "raw_floor_corner", |             }, | ||||||
|                 "skip": "False", |             { | ||||||
|                 "params": { |                 "identifier": "cv_trapezoid_side", | ||||||
|                     "height": "height", |                 "skip": "False", | ||||||
|                     "face": "(face[0], face[1], face[3], False, face[5], False)", |                 "params": { | ||||||
|                     "is_sink": "is_sink", |                     "long_edge_length": "length + 5", | ||||||
|                     "is_inner": "False", |                     "short_edge_offset": "2.5", | ||||||
|                     "is_ribbon": "is_ribbon" |                     "short_edge_length": "length", | ||||||
|                 }, |                     "height": "height", | ||||||
|                 "transform": "move(5 + length, 5 + width, 0) @ rot(0, 0, -180)" |                     "face": "(face[0], False, False, False, face[5], False)", | ||||||
|             }, |                     "is_sink": "is_sink", | ||||||
|             { |                     "is_ribbon": "is_ribbon" | ||||||
|                 "identifier": "raw_floor_corner", |                 }, | ||||||
|                 "skip": "False", |                 "transform": "move(0, 5 + width, 0) @ scale(1, -1, 1)" | ||||||
|                 "params": { |             }, | ||||||
|                     "height": "height", |             { | ||||||
|                     "face": "(face[0], face[1], face[5], False, face[2], False)", |                 "identifier": "cv_trapezoid_side", | ||||||
|                     "is_sink": "is_sink", |                 "skip": "False", | ||||||
|                     "is_inner": "False", |                 "params": { | ||||||
|                     "is_ribbon": "is_ribbon" |                     "long_edge_length": "width + 5", | ||||||
|                 }, |                     "short_edge_offset": "2.5", | ||||||
|                 "transform": "move(0, 5 + width, 0) @ rot(0, 0, -90)" |                     "short_edge_length": "width", | ||||||
|             }, |                     "height": "height", | ||||||
|             { |                     "face": "(face[0], False, False, False, face[3], False)", | ||||||
|                 "identifier": "raw_floor_corner", |                     "is_sink": "is_sink", | ||||||
|                 "skip": "False", |                     "is_ribbon": "is_ribbon" | ||||||
|                 "params": { |                 }, | ||||||
|                     "height": "height", |                 "transform": "move(5 + length, 0, 0) @ rot(0, 0, 90)" | ||||||
|                     "face": "(face[0], face[1], face[2], False, face[4], False)", |             }, | ||||||
|                     "is_sink": "is_sink", |             { | ||||||
|                     "is_inner": "False", |                 "identifier": "cv_trapezoid_side", | ||||||
|                     "is_ribbon": "is_ribbon" |                 "skip": "False", | ||||||
|                 }, |                 "params": { | ||||||
|                 "transform": "ident()" |                     "long_edge_length": "width + 5", | ||||||
|             }, |                     "short_edge_offset": "2.5", | ||||||
|             { |                     "short_edge_length": "width", | ||||||
|                 "identifier": "floor_flat", |                     "height": "height", | ||||||
|                 "skip": "False", |                     "face": "(face[0], False, False, False, face[2], False)", | ||||||
|                 "params": { |                     "is_sink": "is_sink", | ||||||
|                     "height": "height", |                     "is_ribbon": "is_ribbon" | ||||||
|                     "length": "length", |                 }, | ||||||
|                     "width": "width", |                 "transform": "rot(0, 0, 90) @ scale(1, -1, 1)" | ||||||
|                     "face": "(face[0], face[1], False, False, False, False)", |             }, | ||||||
|                     "is_sink": "is_sink" |             { | ||||||
|                 }, |                 "identifier": "floor_flat", | ||||||
|                 "transform": "move(2.5, 2.5, 0)" |                 "skip": "False", | ||||||
|             }, |                 "params": { | ||||||
|             { |                     "height": "height", | ||||||
|                 "identifier": "raw_floor_border", |                     "length": "length", | ||||||
|                 "skip": "False", |                     "width": "width", | ||||||
|                 "params": { |                     "face": "(face[0], False, False, False, False, False)", | ||||||
|                     "height": "height", |                     "is_sink": "is_sink" | ||||||
|                     "length": "length", |                 }, | ||||||
|                     "face": "(face[0], face[1], False, False, face[4], False)", |                 "transform": "move(2.5, 2.5, 0)" | ||||||
|                     "is_sink": "is_sink", |             }, | ||||||
|                     "is_ribbon": "is_ribbon" |             { | ||||||
|                 }, |                 "identifier": "floor_rectangle_bottom", | ||||||
|                 "transform": "move(2.5, 0, 0)" |                 "skip": "not face[1]", | ||||||
|             }, |                 "params": { | ||||||
|             { |                     "length": "5 + length", | ||||||
|                 "identifier": "raw_floor_border", |                     "width": "5 + width" | ||||||
|                 "skip": "False", |                 }, | ||||||
|                 "params": { |                 "transform": "move(0, 0, -height)" | ||||||
|                     "height": "height", |             } | ||||||
|                     "length": "width", |         ] | ||||||
|                     "face": "(face[0], face[1], False, False, face[2], False)", |     }, | ||||||
|                     "is_sink": "is_sink", |     { | ||||||
|                     "is_ribbon": "is_ribbon" |         "identifier": "floor_normal_platform", | ||||||
|                 }, |         "showcase": { | ||||||
|                 "transform": "move(0, 2.5 + width, 0) @ rot(0, 0, -90)" |             "title": "Normal Platform", | ||||||
|             }, |             "category": "Platforms", | ||||||
|             { |             "icon": "NormalPlatform", | ||||||
|                 "identifier": "raw_floor_border", |             "type": "floor", | ||||||
|                 "skip": "False", |             "cfgs": [ | ||||||
|                 "params": { |                 { | ||||||
|                     "height": "height", |                     "field": "length_", | ||||||
|                     "length": "length", |                     "type": "float", | ||||||
|                     "face": "(face[0], face[1], False, False, face[5], False)", |                     "title": "Length", | ||||||
|                     "is_sink": "is_sink", |                     "desc": "The length of block.", | ||||||
|                     "is_ribbon": "is_ribbon" |                     "default": "2.5" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(2.5 + length, 5 + width, 0) @ rot(0, 0, -180)" |                 { | ||||||
|             }, |                     "field": "width_", | ||||||
|             { |                     "type": "float", | ||||||
|                 "identifier": "raw_floor_border", |                     "title": "Width", | ||||||
|                 "skip": "False", |                     "desc": "The width of block.", | ||||||
|                 "params": { |                     "default": "2.5" | ||||||
|                     "height": "height", |                 }, | ||||||
|                     "length": "width", |                 { | ||||||
|                     "face": "(face[0], face[1], False, False, face[3], False)", |                     "field": "height_", | ||||||
|                     "is_sink": "is_sink", |                     "type": "float", | ||||||
|                     "is_ribbon": "is_ribbon" |                     "title": "Height", | ||||||
|                 }, |                     "desc": "The height of block.", | ||||||
|                 "transform": "move(5 + length, 2.5, 0) @ rot(0, 0, -270)" |                     "default": "5.0" | ||||||
|             } |                 }, | ||||||
|         ] |                 { | ||||||
|     }, |                     "field": "face_", | ||||||
|     { |                     "type": "face", | ||||||
|         "identifier": "floor_normal_platform", |                     "title": "Face", | ||||||
|         "showcase": { |                     "desc": "Whether has some faces.", | ||||||
|             "title": "Normal Platform", |                     "default": "(True, False, True, True, True, True)" | ||||||
|             "icon": "NormalPlatform", |                 } | ||||||
|             "type": "floor", |             ] | ||||||
|             "cfgs": [ |         }, | ||||||
|                 { |         "params": [ | ||||||
|                     "field": "length_", |             { | ||||||
|                     "type": "float", |                 "field": "height", | ||||||
|                     "title": "Length", |                 "data": "height_" | ||||||
|                     "desc": "The length of block.", |             }, | ||||||
|                     "default": "2.5" |             { | ||||||
|                 }, |                 "field": "length", | ||||||
|                 { |                 "data": "length_" | ||||||
|                     "field": "width_", |             }, | ||||||
|                     "type": "float", |             { | ||||||
|                     "title": "Width", |                 "field": "width", | ||||||
|                     "desc": "The width of block.", |                 "data": "width_" | ||||||
|                     "default": "2.5" |             }, | ||||||
|                 }, |             { | ||||||
|                 { |                 "field": "face", | ||||||
|                     "field": "height_", |                 "data": "face_" | ||||||
|                     "type": "float", |             } | ||||||
|                     "title": "Height", |         ], | ||||||
|                     "desc": "The height of block.", |         "skip": "False", | ||||||
|                     "default": "5.0" |         "vars": [], | ||||||
|                 }, |         "vertices": [], | ||||||
|                 { |         "faces": [], | ||||||
|                     "field": "face_", |         "instances": [ | ||||||
|                     "type": "face", |             { | ||||||
|                     "title": "Face", |                 "identifier": "raw_floor_platform", | ||||||
|                     "desc": "Whether has some faces.", |                 "skip": "False", | ||||||
|                     "default": "(True, False, True, True, True, True)" |                 "params": { | ||||||
|                 } |                     "length": "length", | ||||||
|             ] |                     "width": "width", | ||||||
|         }, |                     "height": "height", | ||||||
|         "params": [ |                     "face": "face", | ||||||
|             { |                     "is_sink": "False", | ||||||
|                 "field": "height", |                     "is_ribbon": "False" | ||||||
|                 "data": "height_" |                 }, | ||||||
|             }, |                 "transform": "ident()" | ||||||
|             { |             } | ||||||
|                 "field": "length", |         ] | ||||||
|                 "data": "length_" |     }, | ||||||
|             }, |     { | ||||||
|             { |         "identifier": "floor_sink_platform", | ||||||
|                 "field": "width", |         "showcase": { | ||||||
|                 "data": "width_" |             "title": "Sink Platform", | ||||||
|             }, |             "category": "Platforms", | ||||||
|             { |             "icon": "SinkPlatform", | ||||||
|                 "field": "face", |             "type": "floor", | ||||||
|                 "data": "face_" |             "cfgs": [ | ||||||
|             } |                 { | ||||||
|         ], |                     "field": "length_", | ||||||
|         "skip": "False", |                     "type": "float", | ||||||
|         "vars": [], |                     "title": "Length", | ||||||
|         "vertices": [], |                     "desc": "The length of block.", | ||||||
|         "faces": [], |                     "default": "2.5" | ||||||
|         "instances": [ |                 }, | ||||||
|             { |                 { | ||||||
|                 "identifier": "raw_floor_platform", |                     "field": "width_", | ||||||
|                 "skip": "False", |                     "type": "float", | ||||||
|                 "params": { |                     "title": "Width", | ||||||
|                     "length": "length", |                     "desc": "The width of block.", | ||||||
|                     "width": "width", |                     "default": "2.5" | ||||||
|                     "height": "height", |                 }, | ||||||
|                     "face": "face", |                 { | ||||||
|                     "is_sink": "False", |                     "field": "height_", | ||||||
|                     "is_ribbon": "False" |                     "type": "float", | ||||||
|                 }, |                     "title": "Height", | ||||||
|                 "transform": "ident()" |                     "desc": "The height of block.", | ||||||
|             } |                     "default": "5.0" | ||||||
|         ] |                 }, | ||||||
|     }, |                 { | ||||||
|     { |                     "field": "face_", | ||||||
|         "identifier": "floor_sink_platform", |                     "type": "face", | ||||||
|         "showcase": { |                     "title": "Face", | ||||||
|             "title": "Sink Platform", |                     "desc": "Whether has some faces.", | ||||||
|             "icon": "SinkPlatform", |                     "default": "(True, False, True, True, True, True)" | ||||||
|             "type": "floor", |                 } | ||||||
|             "cfgs": [ |             ] | ||||||
|                 { |         }, | ||||||
|                     "field": "length_", |         "params": [ | ||||||
|                     "type": "float", |             { | ||||||
|                     "title": "Length", |                 "field": "height", | ||||||
|                     "desc": "The length of block.", |                 "data": "height_" | ||||||
|                     "default": "2.5" |             }, | ||||||
|                 }, |             { | ||||||
|                 { |                 "field": "length", | ||||||
|                     "field": "width_", |                 "data": "length_" | ||||||
|                     "type": "float", |             }, | ||||||
|                     "title": "Width", |             { | ||||||
|                     "desc": "The width of block.", |                 "field": "width", | ||||||
|                     "default": "2.5" |                 "data": "width_" | ||||||
|                 }, |             }, | ||||||
|                 { |             { | ||||||
|                     "field": "height_", |                 "field": "face", | ||||||
|                     "type": "float", |                 "data": "face_" | ||||||
|                     "title": "Height", |             } | ||||||
|                     "desc": "The height of block.", |         ], | ||||||
|                     "default": "5.0" |         "skip": "False", | ||||||
|                 }, |         "vars": [], | ||||||
|                 { |         "vertices": [], | ||||||
|                     "field": "face_", |         "faces": [], | ||||||
|                     "type": "face", |         "instances": [ | ||||||
|                     "title": "Face", |             { | ||||||
|                     "desc": "Whether has some faces.", |                 "identifier": "raw_floor_platform", | ||||||
|                     "default": "(True, False, True, True, True, True)" |                 "skip": "False", | ||||||
|                 } |                 "params": { | ||||||
|             ] |                     "length": "length", | ||||||
|         }, |                     "width": "width", | ||||||
|         "params": [ |                     "height": "height", | ||||||
|             { |                     "face": "face", | ||||||
|                 "field": "height", |                     "is_sink": "True", | ||||||
|                 "data": "height_" |                     "is_ribbon": "False" | ||||||
|             }, |                 }, | ||||||
|             { |                 "transform": "ident()" | ||||||
|                 "field": "length", |             } | ||||||
|                 "data": "length_" |         ] | ||||||
|             }, |     }, | ||||||
|             { |     { | ||||||
|                 "field": "width", |         "identifier": "floor_ribbon_platform", | ||||||
|                 "data": "width_" |         "showcase": { | ||||||
|             }, |             "title": "Ribbon Platform", | ||||||
|             { |             "category": "Platforms", | ||||||
|                 "field": "face", |             "icon": "RibbonPlatform", | ||||||
|                 "data": "face_" |             "type": "floor", | ||||||
|             } |             "cfgs": [ | ||||||
|         ], |                 { | ||||||
|         "skip": "False", |                     "field": "length_", | ||||||
|         "vars": [], |                     "type": "float", | ||||||
|         "vertices": [], |                     "title": "Length", | ||||||
|         "faces": [], |                     "desc": "The length of block.", | ||||||
|         "instances": [ |                     "default": "2.5" | ||||||
|             { |                 }, | ||||||
|                 "identifier": "raw_floor_platform", |                 { | ||||||
|                 "skip": "False", |                     "field": "width_", | ||||||
|                 "params": { |                     "type": "float", | ||||||
|                     "length": "length", |                     "title": "Width", | ||||||
|                     "width": "width", |                     "desc": "The width of block.", | ||||||
|                     "height": "height", |                     "default": "2.5" | ||||||
|                     "face": "face", |                 }, | ||||||
|                     "is_sink": "True", |                 { | ||||||
|                     "is_ribbon": "False" |                     "field": "height_", | ||||||
|                 }, |                     "type": "float", | ||||||
|                 "transform": "ident()" |                     "title": "Height", | ||||||
|             } |                     "desc": "The height of block.", | ||||||
|         ] |                     "default": "5.0" | ||||||
|     }, |                 }, | ||||||
|     { |                 { | ||||||
|         "identifier": "floor_ribbon_platform", |                     "field": "face_", | ||||||
|         "showcase": { |                     "type": "face", | ||||||
|             "title": "Ribbon Platform", |                     "title": "Face", | ||||||
|             "icon": "RibbonPlatform", |                     "desc": "Whether has some faces.", | ||||||
|             "type": "floor", |                     "default": "(True, False, True, True, True, True)" | ||||||
|             "cfgs": [ |                 } | ||||||
|                 { |             ] | ||||||
|                     "field": "length_", |         }, | ||||||
|                     "type": "float", |         "params": [ | ||||||
|                     "title": "Length", |             { | ||||||
|                     "desc": "The length of block.", |                 "field": "height", | ||||||
|                     "default": "2.5" |                 "data": "height_" | ||||||
|                 }, |             }, | ||||||
|                 { |             { | ||||||
|                     "field": "width_", |                 "field": "length", | ||||||
|                     "type": "float", |                 "data": "length_" | ||||||
|                     "title": "Width", |             }, | ||||||
|                     "desc": "The width of block.", |             { | ||||||
|                     "default": "2.5" |                 "field": "width", | ||||||
|                 }, |                 "data": "width_" | ||||||
|                 { |             }, | ||||||
|                     "field": "height_", |             { | ||||||
|                     "type": "float", |                 "field": "face", | ||||||
|                     "title": "Height", |                 "data": "face_" | ||||||
|                     "desc": "The height of block.", |             } | ||||||
|                     "default": "5.0" |         ], | ||||||
|                 }, |         "skip": "False", | ||||||
|                 { |         "vars": [], | ||||||
|                     "field": "face_", |         "vertices": [], | ||||||
|                     "type": "face", |         "faces": [], | ||||||
|                     "title": "Face", |         "instances": [ | ||||||
|                     "desc": "Whether has some faces.", |             { | ||||||
|                     "default": "(True, False, True, True, True, True)" |                 "identifier": "raw_floor_platform", | ||||||
|                 } |                 "skip": "False", | ||||||
|             ] |                 "params": { | ||||||
|         }, |                     "length": "length", | ||||||
|         "params": [ |                     "width": "width", | ||||||
|             { |                     "height": "height", | ||||||
|                 "field": "height", |                     "face": "face", | ||||||
|                 "data": "height_" |                     "is_sink": "True", | ||||||
|             }, |                     "is_ribbon": "True" | ||||||
|             { |                 }, | ||||||
|                 "field": "length", |                 "transform": "ident()" | ||||||
|                 "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()" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     } |  | ||||||
| ] | ] | ||||||
| @ -1,182 +1,324 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_floor_side", |         "identifier": "raw_floor_side", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "length", |                 "field": "length", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_left_sink", |                 "field": "is_left_sink", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "is_right_sink", |                 "field": "is_right_sink", | ||||||
|                 "data": "False" |                 "data": "False" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "height <= (0.7 if (is_left_sink or is_right_sink) else 0.0) or length == 0.0", |         "skip": "height <= (0.7 if (is_left_sink or is_right_sink) else 0.0) or length == 0.0", | ||||||
|         "vars": [ |         "vars": [ | ||||||
|             { |             { | ||||||
|                 "field": "skip_long_side", |                 "field": "skip_long_side", | ||||||
|                 "data": "height <= 5.0" |                 "data": "height <= 5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "skip_short_side", |                 "field": "skip_short_side", | ||||||
|                 "data": "height > 5.0" |                 "data": "height > 5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "uv_height", |                 "field": "uv_height", | ||||||
|                 "data": "height / 5.0" |                 "data": "height / 5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "uv_length", |                 "field": "uv_length", | ||||||
|                 "data": "length / 5.0" |                 "data": "length / 5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "left_sink", |                 "field": "left_sink", | ||||||
|                 "data": "0.7 if is_left_sink else 0.0" |                 "data": "0.7 if is_left_sink else 0.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "right_sink", |                 "field": "right_sink", | ||||||
|                 "data": "0.7 if is_right_sink else 0.0" |                 "data": "0.7 if is_right_sink else 0.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "uv_left_sink", |                 "field": "uv_left_sink", | ||||||
|                 "data": "left_sink / 5.0" |                 "data": "left_sink / 5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "uv_right_sink", |                 "field": "uv_right_sink", | ||||||
|                 "data": "right_sink / 5.0" |                 "data": "right_sink / 5.0" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "vertices": [ |         "vertices": [ | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(0, 0, -left_sink)" |                 "data": "(0, 0, -left_sink)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(length, 0, -right_sink)" |                 "data": "(length, 0, -right_sink)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "skip_long_side", |                 "skip": "skip_long_side", | ||||||
|                 "data": "(0, 0, -5.0)" |                 "data": "(0, 0, -5.0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "skip_long_side", |                 "skip": "skip_long_side", | ||||||
|                 "data": "(length, 0, -5.0)" |                 "data": "(length, 0, -5.0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(0, 0, -height)" |                 "data": "(0, 0, -height)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(length, 0, -height)" |                 "data": "(length, 0, -height)" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "faces": [ |         "faces": [ | ||||||
|             { |             { | ||||||
|                 "skip": "skip_short_side", |                 "skip": "skip_short_side", | ||||||
|                 "texture": "\"FloorSide\"", |                 "texture": "\"FloorSide\"", | ||||||
|                 "indices": [0, 2, 3, 1], |                 "indices": [0, 2, 3, 1], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_height - uv_left_sink, 0)", |                     "(uv_height - uv_left_sink, 0)", | ||||||
|                     "(uv_height - uv_right_sink, uv_length)", |                     "(uv_height - uv_right_sink, uv_length)", | ||||||
|                     "(0, uv_length)" |                     "(0, uv_length)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "skip_long_side", |                 "skip": "skip_long_side", | ||||||
|                 "texture": "\"LightingFloorTopBorder\"", |                 "texture": "\"LightingFloorTopBorder\"", | ||||||
|                 "indices": [0, 2, 3, 1], |                 "indices": [0, 2, 3, 1], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(1 - uv_left_sink, 0)", |                     "(1 - uv_left_sink, 0)", | ||||||
|                     "(1 - uv_right_sink, uv_length)", |                     "(1 - uv_right_sink, uv_length)", | ||||||
|                     "(0, uv_length)" |                     "(0, uv_length)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "skip_long_side", |                 "skip": "skip_long_side", | ||||||
|                 "texture": "\"LightingFloorTopBorderless\"", |                 "texture": "\"LightingFloorTopBorderless\"", | ||||||
|                 "indices": [2, 4, 5, 3], |                 "indices": [2, 4, 5, 3], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_height - 1.0, 0)", |                     "(uv_height - 1.0, 0)", | ||||||
|                     "(uv_height - 1.0, uv_length)", |                     "(uv_height - 1.0, uv_length)", | ||||||
|                     "(0, uv_length)" |                     "(0, uv_length)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "instances": [] |         "instances": [] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         "identifier": "floor_bottom", |         "identifier": "floor_4edges_bottom", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "length", |                 "field": "top_left_pos", | ||||||
|                 "data": "5.0" |                 "data": "(0.0, 0.0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "width", |                 "field": "top_right_pos", | ||||||
|                 "data": "5.0" |                 "data": "(0.0, 5.0)" | ||||||
|             } |             }, | ||||||
|         ], |             { | ||||||
|         "skip": "length == 0.0 or width == 0.0", |                 "field": "bottom_left_pos", | ||||||
|         "vars": [ |                 "data": "(5.0, 0.0)" | ||||||
|             { |             }, | ||||||
|                 "field": "uv_length", |             { | ||||||
|                 "data": "length / 5.0" |                 "field": "bottom_right_pos", | ||||||
|             }, |                 "data": "(5.0, 5.0)" | ||||||
|             { |             } | ||||||
|                 "field": "uv_width", |         ], | ||||||
|                 "data": "width / 5.0" |         "skip": "False", | ||||||
|             } |         "vars": [ | ||||||
|         ], |             { | ||||||
|         "vertices": [ |                 "field": "top_left_uv", | ||||||
|             { |                 "data": "tuple(map(lambda x: x / 5.0, top_left_pos))" | ||||||
|                 "skip": "False", |             }, | ||||||
|                 "data": "(0, 0, 0)" |             { | ||||||
|             }, |                 "field": "top_right_uv", | ||||||
|             { |                 "data": "tuple(map(lambda x: x / 5.0, top_right_pos))" | ||||||
|                 "skip": "False", |             }, | ||||||
|                 "data": "(0, width, 0)" |             { | ||||||
|             }, |                 "field": "bottom_left_uv", | ||||||
|             { |                 "data": "tuple(map(lambda x: x / 5.0, bottom_left_pos))" | ||||||
|                 "skip": "False", |             }, | ||||||
|                 "data": "(length, 0, 0)" |             { | ||||||
|             }, |                 "field": "bottom_right_uv", | ||||||
|             { |                 "data": "tuple(map(lambda x: x / 5.0, bottom_right_pos))" | ||||||
|                 "skip": "False", |             } | ||||||
|                 "data": "(length, width, 0)" |         ], | ||||||
|             } |         "vertices": [ | ||||||
|         ], |             { | ||||||
|         "faces": [ |                 "skip": "False", | ||||||
|             { |                 "data": "top_left_pos + (0, )" | ||||||
|                 "skip": "False", |             }, | ||||||
|                 "texture": "\"FloorTopBorderless\"", |             { | ||||||
|                 "indices": [0, 1, 3, 2], |                 "skip": "False", | ||||||
|                 "uvs": [ |                 "data": "top_right_pos + (0, )" | ||||||
|                     "(0, 0)", |             }, | ||||||
|                     "(uv_width, 0)", |             { | ||||||
|                     "(uv_width, uv_length)", |                 "skip": "False", | ||||||
|                     "(0, uv_length)" |                 "data": "bottom_left_pos + (0, )" | ||||||
|                 ], |             }, | ||||||
|                 "normals": null |             { | ||||||
|             } |                 "skip": "False", | ||||||
|         ], |                 "data": "bottom_right_pos + (0, )" | ||||||
|         "instances": [] |             } | ||||||
|     } |         ], | ||||||
|  |         "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)" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
|  | ] | ||||||
| @ -1,150 +1,178 @@ | |||||||
| [ | [ | ||||||
|     { |     // The shared template prototype used by all floor terminals. | ||||||
|         "identifier": "raw_floor_terminal", |     { | ||||||
|         "showcase": null, |         "identifier": "raw_floor_terminal", | ||||||
|         "params": [ |         "showcase": null, | ||||||
|             { |         "params": [ | ||||||
|                 "field": "height", |             { | ||||||
|                 "data": "5.0" |                 "field": "height", | ||||||
|             }, |                 "data": "5.0" | ||||||
|             { |             }, | ||||||
|                 "field": "face", |             { | ||||||
|                 "data": "(True, False, True, False, True, True)" |                 "field": "face", | ||||||
|             }, |                 "data": "(True, False, True, False, True, True)" | ||||||
|             { |             }, | ||||||
|                 "field": "is_sink", |             { | ||||||
|                 "data": "False" |                 "field": "is_sink", | ||||||
|             } |                 "data": "False" | ||||||
|         ], |             } | ||||||
|         "skip": "False", |         ], | ||||||
|         "vars": [], |         "skip": "False", | ||||||
|         "vertices": [], |         "vars": [], | ||||||
|         "faces": [], |         "vertices": [], | ||||||
|         "instances": [ |         "faces": [], | ||||||
|             { |         "instances": [ | ||||||
|                 "identifier": "raw_floor_corner", |             { | ||||||
|                 "skip": "False", |                 "identifier": "cv_trapezoid_side", | ||||||
|                 "params": { |                 "skip": "False", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "face": "(face[0], face[1], face[2], face[3], face[4], False)", |                     "long_edge_length": "5.0", | ||||||
|                     "is_sink": "is_sink", |                     "short_edge_offset": "2.5", | ||||||
|                     "is_inner": "False", |                     "short_edge_length": "2.5", | ||||||
|                     "is_ribbon": "False" |                     "height": "height", | ||||||
|                 }, |                     "face": "(face[0], False, False, face[3], face[4], False)", | ||||||
|                 "transform": "ident()" |                     "is_sink": "is_sink", | ||||||
|             }, |                     "is_ribbon": "False" | ||||||
|             { |                 }, | ||||||
|                 "identifier": "raw_floor_corner", |                 "transform": "ident()" | ||||||
|                 "skip": "False", |             }, | ||||||
|                 "params": { |             { | ||||||
|                     "height": "height", |                 "identifier": "cv_trapezoid_side", | ||||||
|                     "face": "(face[0], face[1], face[5], False, face[2], face[3])", |                 "skip": "False", | ||||||
|                     "is_sink": "is_sink", |                 "params": { | ||||||
|                     "is_inner": "False", |                     "long_edge_length": "5.0", | ||||||
|                     "is_ribbon": "False" |                     "short_edge_offset": "2.5", | ||||||
|                 }, |                     "short_edge_length": "2.5", | ||||||
|                 "transform": "move(0, 5, 0) @ rot(0, 0, -90)" |                     "height": "height", | ||||||
|             } |                     "face": "(face[0], False, False, face[3], face[5], False)", | ||||||
|         ] |                     "is_sink": "is_sink", | ||||||
|     }, |                     "is_ribbon": "False" | ||||||
|     { |                 }, | ||||||
|         "identifier": "floor_normal_terminal", |                 "transform": "move(0, 5, 0) @ scale(1, -1, 1)" | ||||||
|         "showcase": { |             }, | ||||||
|             "title": "Normal Floor Terminal", |             { | ||||||
|             "icon": "NormalFloorTerminal", |                 "identifier": "cv_triangle_side", | ||||||
|             "type": "floor", |                 "skip": "False", | ||||||
|             "cfgs": [ |                 "params": { | ||||||
|                 { |                     "edge_length": "5", | ||||||
|                     "field": "height_", |                     "tip_offset": "2.5", | ||||||
|                     "type": "float", |                     "height": "height", | ||||||
|                     "title": "Height", |                     "face": "(face[0], False, False, False, face[2], None)", | ||||||
|                     "desc": "The height of block.", |                     "is_sink": "is_sink" | ||||||
|                     "default": "5.0" |                 }, | ||||||
|                 }, |                 "transform": "move(0, 5, 0) @ rot(0, 0, -90)" | ||||||
|                 { |             }, | ||||||
|                     "field": "face_", |             { | ||||||
|                     "type": "face", |                 "identifier": "floor_rectangle_bottom", | ||||||
|                     "title": "Face", |                 "skip": "not face[1]", | ||||||
|                     "desc": "Whether has some faces.", |                 "params": { | ||||||
|                     "default": "(True, False, True, False, True, True)" |                     "length": "5", | ||||||
|                 } |                     "width": "5" | ||||||
|             ] |                 }, | ||||||
|         }, |                 "transform": "move(0, 0, -height)" | ||||||
|         "params": [ |             } | ||||||
|             { |         ] | ||||||
|                 "field": "height", |     }, | ||||||
|                 "data": "height_" |     { | ||||||
|             }, |         "identifier": "floor_normal_terminal", | ||||||
|             { |         "showcase": { | ||||||
|                 "field": "face", |             "title": "Normal Floor Terminal", | ||||||
|                 "data": "face_" |             "category": "Floors", | ||||||
|             } |             "icon": "NormalFloorTerminal", | ||||||
|         ], |             "type": "floor", | ||||||
|         "skip": "False", |             "cfgs": [ | ||||||
|         "vars": [], |                 { | ||||||
|         "vertices": [], |                     "field": "height_", | ||||||
|         "faces": [], |                     "type": "float", | ||||||
|         "instances": [ |                     "title": "Height", | ||||||
|             { |                     "desc": "The height of block.", | ||||||
|                 "identifier": "raw_floor_terminal", |                     "default": "5.0" | ||||||
|                 "skip": "False", |                 }, | ||||||
|                 "params": { |                 { | ||||||
|                     "height": "height", |                     "field": "face_", | ||||||
|                     "face": "face", |                     "type": "face", | ||||||
|                     "is_sink": "False" |                     "title": "Face", | ||||||
|                 }, |                     "desc": "Whether has some faces.", | ||||||
|                 "transform": "ident()" |                     "default": "(True, False, True, False, True, True)" | ||||||
|             } |                 } | ||||||
|         ] |             ] | ||||||
|     }, |         }, | ||||||
|     { |         "params": [ | ||||||
|         "identifier": "floor_sink_terminal", |             { | ||||||
|         "showcase": { |                 "field": "height", | ||||||
|             "title": "Sink Floor Terminal", |                 "data": "height_" | ||||||
|             "icon": "SinkFloorTerminal", |             }, | ||||||
|             "type": "floor", |             { | ||||||
|             "cfgs": [ |                 "field": "face", | ||||||
|                 { |                 "data": "face_" | ||||||
|                     "field": "height_", |             } | ||||||
|                     "type": "float", |         ], | ||||||
|                     "title": "Height", |         "skip": "False", | ||||||
|                     "desc": "The height of block.", |         "vars": [], | ||||||
|                     "default": "5.0" |         "vertices": [], | ||||||
|                 }, |         "faces": [], | ||||||
|                 { |         "instances": [ | ||||||
|                     "field": "face_", |             { | ||||||
|                     "type": "face", |                 "identifier": "raw_floor_terminal", | ||||||
|                     "title": "Face", |                 "skip": "False", | ||||||
|                     "desc": "Whether has some faces.", |                 "params": { | ||||||
|                     "default": "(True, False, True, False, True, True)" |                     "height": "height", | ||||||
|                 } |                     "face": "face", | ||||||
|             ] |                     "is_sink": "False" | ||||||
|         }, |                 }, | ||||||
|         "params": [ |                 "transform": "ident()" | ||||||
|             { |             } | ||||||
|                 "field": "height", |         ] | ||||||
|                 "data": "height_" |     }, | ||||||
|             }, |     { | ||||||
|             { |         "identifier": "floor_sink_terminal", | ||||||
|                 "field": "face", |         "showcase": { | ||||||
|                 "data": "face_" |             "title": "Sink Floor Terminal", | ||||||
|             } |             "category": "Floors", | ||||||
|         ], |             "icon": "SinkFloorTerminal", | ||||||
|         "skip": "False", |             "type": "floor", | ||||||
|         "vars": [], |             "cfgs": [ | ||||||
|         "vertices": [], |                 { | ||||||
|         "faces": [], |                     "field": "height_", | ||||||
|         "instances": [ |                     "type": "float", | ||||||
|             { |                     "title": "Height", | ||||||
|                 "identifier": "raw_floor_terminal", |                     "desc": "The height of block.", | ||||||
|                 "skip": "False", |                     "default": "5.0" | ||||||
|                 "params": { |                 }, | ||||||
|                     "height": "height", |                 { | ||||||
|                     "face": "face", |                     "field": "face_", | ||||||
|                     "is_sink": "True" |                     "type": "face", | ||||||
|                 }, |                     "title": "Face", | ||||||
|                 "transform": "ident()" |                     "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()" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
| ] | ] | ||||||
| @ -1,286 +1,289 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_trafo", |         "identifier": "raw_trafo", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "trafo_texture", |                 "field": "trafo_texture", | ||||||
|                 "data": "\"BallWood\"" |                 "data": "\"BallWood\"" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "face", |                 "field": "face", | ||||||
|                 "data": "(True, False, True, True, True, True)" |                 "data": "(True, False, True, True, True, True)" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "False", |         "skip": "False", | ||||||
|         "vars": [ |         "vars": [ | ||||||
|             { |             { | ||||||
|                 "field": "uv_height", |                 "field": "uv_height", | ||||||
|                 "data": "height / 5.0" |                 "data": "height / 5.0" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "vertices": [ |         "vertices": [ | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(0, 0, 0)" |                 "data": "(0, 0, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(5, 0, 0)" |                 "data": "(5, 0, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(5, 5, 0)" |                 "data": "(5, 5, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(0, 5, 0)" |                 "data": "(0, 5, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(0, 0, -height)" |                 "data": "(0, 0, -height)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(5, 0, -height)" |                 "data": "(5, 0, -height)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(5, 5, -height)" |                 "data": "(5, 5, -height)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "False", |                 "skip": "False", | ||||||
|                 "data": "(0, 5, -height)" |                 "data": "(0, 5, -height)" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "faces": [ |         "faces": [ | ||||||
|             { |             { | ||||||
|                 "skip": "not face[0]", |                 "skip": "not face[0]", | ||||||
|                 "texture": "trafo_texture", |                 "texture": "trafo_texture", | ||||||
|                 "indices": [0, 1, 2, 3], |                 "indices": [0, 1, 2, 3], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(1, 0)", |                     "(1, 0)", | ||||||
|                     "(1, 1)", |                     "(1, 1)", | ||||||
|                     "(0, 1)" |                     "(0, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "(not face[1]) or height == 0.0", |                 "skip": "(not face[1]) or height == 0.0", | ||||||
|                 "texture": "trafo_texture", |                 "texture": "trafo_texture", | ||||||
|                 "indices": [5, 4, 7, 6], |                 "indices": [5, 4, 7, 6], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(1, 0)", |                     "(1, 0)", | ||||||
|                     "(1, 1)", |                     "(1, 1)", | ||||||
|                     "(0, 1)" |                     "(0, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "(not face[2]) or height == 0.0", |                 "skip": "(not face[2]) or height == 0.0", | ||||||
|                 "texture": "trafo_texture", |                 "texture": "trafo_texture", | ||||||
|                 "indices": [3, 7, 4, 0], |                 "indices": [3, 7, 4, 0], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_height, 0)", |                     "(uv_height, 0)", | ||||||
|                     "(uv_height, 1)", |                     "(uv_height, 1)", | ||||||
|                     "(0, 1)" |                     "(0, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "(not face[3]) or height == 0.0", |                 "skip": "(not face[3]) or height == 0.0", | ||||||
|                 "texture": "trafo_texture", |                 "texture": "trafo_texture", | ||||||
|                 "indices": [1, 5, 6, 2], |                 "indices": [1, 5, 6, 2], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_height, 0)", |                     "(uv_height, 0)", | ||||||
|                     "(uv_height, 1)", |                     "(uv_height, 1)", | ||||||
|                     "(0, 1)" |                     "(0, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "(not face[4]) or height == 0.0", |                 "skip": "(not face[4]) or height == 0.0", | ||||||
|                 "texture": "trafo_texture", |                 "texture": "trafo_texture", | ||||||
|                 "indices": [0, 4, 5, 1], |                 "indices": [0, 4, 5, 1], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_height, 0)", |                     "(uv_height, 0)", | ||||||
|                     "(uv_height, 1)", |                     "(uv_height, 1)", | ||||||
|                     "(0, 1)" |                     "(0, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "(not face[5]) or height == 0.0", |                 "skip": "(not face[5]) or height == 0.0", | ||||||
|                 "texture": "trafo_texture", |                 "texture": "trafo_texture", | ||||||
|                 "indices": [2, 6, 7, 3], |                 "indices": [2, 6, 7, 3], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(uv_height, 0)", |                     "(uv_height, 0)", | ||||||
|                     "(uv_height, 1)", |                     "(uv_height, 1)", | ||||||
|                     "(0, 1)" |                     "(0, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "instances": [] |         "instances": [] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         "identifier": "wood_trafo", |         "identifier": "wood_trafo", | ||||||
|         "showcase": { |         "showcase": { | ||||||
|             "title": "Wood Trafo", |             "title": "Wood Trafo", | ||||||
|             "icon": "WoodTrafo", |             "category": "Trafo", | ||||||
|             "type": "floor", |             "icon": "WoodTrafo", | ||||||
|             "cfgs": [ |             "type": "floor", | ||||||
|                 { |             "cfgs": [ | ||||||
|                     "field": "height_", |                 { | ||||||
|                     "type": "float", |                     "field": "height_", | ||||||
|                     "title": "Height", |                     "type": "float", | ||||||
|                     "desc": "The height of block.", |                     "title": "Height", | ||||||
|                     "default": "5.0" |                     "desc": "The height of block.", | ||||||
|                 }, |                     "default": "5.0" | ||||||
|                 { |                 }, | ||||||
|                     "field": "face_", |                 { | ||||||
|                     "type": "face", |                     "field": "face_", | ||||||
|                     "title": "Face", |                     "type": "face", | ||||||
|                     "desc": "Whether has some faces.", |                     "title": "Face", | ||||||
|                     "default": "(True, False, True, True, True, True)" |                     "desc": "Whether has some faces.", | ||||||
|                 } |                     "default": "(True, False, True, True, True, True)" | ||||||
|             ] |                 } | ||||||
|         }, |             ] | ||||||
|         "params": [ |         }, | ||||||
|             { |         "params": [ | ||||||
|                 "field": "height", |             { | ||||||
|                 "data": "height_" |                 "field": "height", | ||||||
|             }, |                 "data": "height_" | ||||||
|             { |             }, | ||||||
|                 "field": "face", |             { | ||||||
|                 "data": "face_" |                 "field": "face", | ||||||
|             } |                 "data": "face_" | ||||||
|         ], |             } | ||||||
|         "skip": "False", |         ], | ||||||
|         "vars": [], |         "skip": "False", | ||||||
|         "vertices": [], |         "vars": [], | ||||||
|         "faces": [], |         "vertices": [], | ||||||
|         "instances": [ |         "faces": [], | ||||||
|             { |         "instances": [ | ||||||
|                 "identifier": "raw_trafo", |             { | ||||||
|                 "skip": "False", |                 "identifier": "raw_trafo", | ||||||
|                 "params": { |                 "skip": "False", | ||||||
|                     "trafo_texture": "\"BallWood\"", |                 "params": { | ||||||
|                     "height": "height", |                     "trafo_texture": "\"BallWood\"", | ||||||
|                     "face": "face" |                     "height": "height", | ||||||
|                 }, |                     "face": "face" | ||||||
|                 "transform": "ident()" |                 }, | ||||||
|             } |                 "transform": "ident()" | ||||||
|         ] |             } | ||||||
|     }, |         ] | ||||||
|     { |     }, | ||||||
|         "identifier": "stone_trafo", |     { | ||||||
|         "showcase": { |         "identifier": "stone_trafo", | ||||||
|             "title": "Stone Trafo", |         "showcase": { | ||||||
|             "icon": "StoneTrafo", |             "title": "Stone Trafo", | ||||||
|             "type": "floor", |             "category": "Trafo", | ||||||
|             "cfgs": [ |             "icon": "StoneTrafo", | ||||||
|                 { |             "type": "floor", | ||||||
|                     "field": "height_", |             "cfgs": [ | ||||||
|                     "type": "float", |                 { | ||||||
|                     "title": "Height", |                     "field": "height_", | ||||||
|                     "desc": "The height of block.", |                     "type": "float", | ||||||
|                     "default": "5.0" |                     "title": "Height", | ||||||
|                 }, |                     "desc": "The height of block.", | ||||||
|                 { |                     "default": "5.0" | ||||||
|                     "field": "face_", |                 }, | ||||||
|                     "type": "face", |                 { | ||||||
|                     "title": "Face", |                     "field": "face_", | ||||||
|                     "desc": "Whether has some faces.", |                     "type": "face", | ||||||
|                     "default": "(True, False, True, True, True, True)" |                     "title": "Face", | ||||||
|                 } |                     "desc": "Whether has some faces.", | ||||||
|             ] |                     "default": "(True, False, True, True, True, True)" | ||||||
|         }, |                 } | ||||||
|         "params": [ |             ] | ||||||
|             { |         }, | ||||||
|                 "field": "height", |         "params": [ | ||||||
|                 "data": "height_" |             { | ||||||
|             }, |                 "field": "height", | ||||||
|             { |                 "data": "height_" | ||||||
|                 "field": "face", |             }, | ||||||
|                 "data": "face_" |             { | ||||||
|             } |                 "field": "face", | ||||||
|         ], |                 "data": "face_" | ||||||
|         "skip": "False", |             } | ||||||
|         "vars": [], |         ], | ||||||
|         "vertices": [], |         "skip": "False", | ||||||
|         "faces": [], |         "vars": [], | ||||||
|         "instances": [ |         "vertices": [], | ||||||
|             { |         "faces": [], | ||||||
|                 "identifier": "raw_trafo", |         "instances": [ | ||||||
|                 "skip": "False", |             { | ||||||
|                 "params": { |                 "identifier": "raw_trafo", | ||||||
|                     "trafo_texture": "\"BallStone\"", |                 "skip": "False", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "face": "face" |                     "trafo_texture": "\"BallStone\"", | ||||||
|                 }, |                     "height": "height", | ||||||
|                 "transform": "ident()" |                     "face": "face" | ||||||
|             } |                 }, | ||||||
|         ] |                 "transform": "ident()" | ||||||
|     }, |             } | ||||||
|     { |         ] | ||||||
|         "identifier": "paper_trafo", |     }, | ||||||
|         "showcase": { |     { | ||||||
|             "title": "Paper Trafo", |         "identifier": "paper_trafo", | ||||||
|             "icon": "PaperTrafo", |         "showcase": { | ||||||
|             "type": "floor", |             "title": "Paper Trafo", | ||||||
|             "cfgs": [ |             "category": "Trafo", | ||||||
|                 { |             "icon": "PaperTrafo", | ||||||
|                     "field": "height_", |             "type": "floor", | ||||||
|                     "type": "float", |             "cfgs": [ | ||||||
|                     "title": "Height", |                 { | ||||||
|                     "desc": "The height of block.", |                     "field": "height_", | ||||||
|                     "default": "5.0" |                     "type": "float", | ||||||
|                 }, |                     "title": "Height", | ||||||
|                 { |                     "desc": "The height of block.", | ||||||
|                     "field": "face_", |                     "default": "5.0" | ||||||
|                     "type": "face", |                 }, | ||||||
|                     "title": "Face", |                 { | ||||||
|                     "desc": "Whether has some faces.", |                     "field": "face_", | ||||||
|                     "default": "(True, False, True, True, True, True)" |                     "type": "face", | ||||||
|                 } |                     "title": "Face", | ||||||
|             ] |                     "desc": "Whether has some faces.", | ||||||
|         }, |                     "default": "(True, False, True, True, True, True)" | ||||||
|         "params": [ |                 } | ||||||
|             { |             ] | ||||||
|                 "field": "height", |         }, | ||||||
|                 "data": "height_" |         "params": [ | ||||||
|             }, |             { | ||||||
|             { |                 "field": "height", | ||||||
|                 "field": "face", |                 "data": "height_" | ||||||
|                 "data": "face_" |             }, | ||||||
|             } |             { | ||||||
|         ], |                 "field": "face", | ||||||
|         "skip": "False", |                 "data": "face_" | ||||||
|         "vars": [], |             } | ||||||
|         "vertices": [], |         ], | ||||||
|         "faces": [], |         "skip": "False", | ||||||
|         "instances": [ |         "vars": [], | ||||||
|             { |         "vertices": [], | ||||||
|                 "identifier": "raw_trafo", |         "faces": [], | ||||||
|                 "skip": "False", |         "instances": [ | ||||||
|                 "params": { |             { | ||||||
|                     "trafo_texture": "\"BallPaper\"", |                 "identifier": "raw_trafo", | ||||||
|                     "height": "height", |                 "skip": "False", | ||||||
|                     "face": "face" |                 "params": { | ||||||
|                 }, |                     "trafo_texture": "\"BallPaper\"", | ||||||
|                 "transform": "ident()" |                     "height": "height", | ||||||
|             } |                     "face": "face" | ||||||
|         ] |                 }, | ||||||
|     } |                 "transform": "ident()" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
| ] | ] | ||||||
| @ -1,270 +1,272 @@ | |||||||
| [ | [ | ||||||
|     { |     { | ||||||
|         "identifier": "raw_floor_transition_part", |         "identifier": "raw_floor_transition_part", | ||||||
|         "showcase": null, |         "showcase": null, | ||||||
|         "params": [ |         "params": [ | ||||||
|             { |             { | ||||||
|                 "field": "height", |                 "field": "height", | ||||||
|                 "data": "5.0" |                 "data": "5.0" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "field": "face_part", |                 "field": "face_part", | ||||||
|                 "data": "(True, False, False)" |                 "data": "(True, False, False)" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "skip": "False", |         "skip": "False", | ||||||
|         "vars": [], |         "vars": [], | ||||||
|         "vertices": [ |         "vertices": [ | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "data": "(0, 0, 0)" |                 "data": "(0, 0, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "data": "(5, 0, 0)" |                 "data": "(5, 0, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "data": "(0, 2.5, -0.7)" |                 "data": "(0, 2.5, -0.7)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "data": "(5, 5, 0)" |                 "data": "(5, 5, 0)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "data": "(0, 5, 0)" |                 "data": "(0, 5, 0)" | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "faces": [ |         "faces": [ | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "texture": "\"FloorTopProfilFlat\"", |                 "texture": "\"FloorTopProfilFlat\"", | ||||||
|                 "indices": [0, 1, 2], |                 "indices": [0, 1, 2], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0, 1)", |                     "(0, 1)", | ||||||
|                     "(0, 0)", |                     "(0, 0)", | ||||||
|                     "(0.5, 1)" |                     "(0.5, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "texture": "\"FloorTopProfilFlat\"", |                 "texture": "\"FloorTopProfilFlat\"", | ||||||
|                 "indices": [3, 2, 1], |                 "indices": [3, 2, 1], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(1, 0)", |                     "(1, 0)", | ||||||
|                     "(0.5, 1)", |                     "(0.5, 1)", | ||||||
|                     "(0, 0)" |                     "(0, 0)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "skip": "not face_part[0]", |                 "skip": "not face_part[0]", | ||||||
|                 "texture": "\"FloorTopProfilFlat\"", |                 "texture": "\"FloorTopProfilFlat\"", | ||||||
|                 "indices": [2, 3, 4], |                 "indices": [2, 3, 4], | ||||||
|                 "uvs": [ |                 "uvs": [ | ||||||
|                     "(0.5, 1)", |                     "(0.5, 1)", | ||||||
|                     "(1, 0)", |                     "(1, 0)", | ||||||
|                     "(1, 1)" |                     "(1, 1)" | ||||||
|                 ], |                 ], | ||||||
|                 "normals": null |                 "normals": null | ||||||
|             } |             } | ||||||
|         ], |         ], | ||||||
|         "instances": [ |         "instances": [ | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face_part[1]", |                 "skip": "not face_part[1]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "is_left_sink": "False", |                     "is_left_sink": "False", | ||||||
|                     "is_right_sink": "True" |                     "is_right_sink": "True" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(0, 5, 0) @ rot(0, 0, -90)" |                 "transform": "move(0, 5, 0) @ rot(0, 0, -90)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face_part[1]", |                 "skip": "not face_part[1]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "2.5", |                     "length": "2.5", | ||||||
|                     "is_left_sink": "True", |                     "is_left_sink": "True", | ||||||
|                     "is_right_sink": "False" |                     "is_right_sink": "False" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(0, 2.5, 0) @ rot(0, 0, -90)" |                 "transform": "move(0, 2.5, 0) @ rot(0, 0, -90)" | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 "identifier": "raw_floor_side", |                 "identifier": "raw_floor_side", | ||||||
|                 "skip": "not face_part[2]", |                 "skip": "not face_part[2]", | ||||||
|                 "params": { |                 "params": { | ||||||
|                     "height": "height", |                     "height": "height", | ||||||
|                     "length": "5", |                     "length": "5", | ||||||
|                     "is_left_sink": "False", |                     "is_left_sink": "False", | ||||||
|                     "is_right_sink": "False" |                     "is_right_sink": "False" | ||||||
|                 }, |                 }, | ||||||
|                 "transform": "move(5, 0, 0) @ rot(0, 0, 90)" |                 "transform": "move(5, 0, 0) @ rot(0, 0, 90)" | ||||||
|             } |             } | ||||||
|         ] |         ] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|         "identifier": "floor_transition", |         "identifier": "floor_transition", | ||||||
|         "showcase": { |         "showcase": { | ||||||
|             "title": "Transition", |             "title": "Transition", | ||||||
|             "icon": "Transition", |             "category": "Miscellaneous", | ||||||
|             "type": "floor", |             "icon": "Transition", | ||||||
|             "cfgs": [ |             "type": "floor", | ||||||
|                 { |             "cfgs": [ | ||||||
|                     "field": "height_", |                 { | ||||||
|                     "type": "float", |                     "field": "height_", | ||||||
|                     "title": "Height", |                     "type": "float", | ||||||
|                     "desc": "The height of block.", |                     "title": "Height", | ||||||
|                     "default": "5.0" |                     "desc": "The height of block.", | ||||||
|                 }, |                     "default": "5.0" | ||||||
|                 { |                 }, | ||||||
|                     "field": "face_", |                 { | ||||||
|                     "type": "face", |                     "field": "face_", | ||||||
|                     "title": "Face", |                     "type": "face", | ||||||
|                     "desc": "Whether has some faces.", |                     "title": "Face", | ||||||
|                     "default": "(True, False, False, False, True, True)" |                     "desc": "Whether has some faces.", | ||||||
|                 } |                     "default": "(True, False, False, False, True, True)" | ||||||
|             ] |                 } | ||||||
|         }, |             ] | ||||||
|         "params": [ |         }, | ||||||
|             { |         "params": [ | ||||||
|                 "field": "height", |             { | ||||||
|                 "data": "height_" |                 "field": "height", | ||||||
|             }, |                 "data": "height_" | ||||||
|             { |             }, | ||||||
|                 "field": "face", |             { | ||||||
|                 "data": "face_" |                 "field": "face", | ||||||
|             } |                 "data": "face_" | ||||||
|         ], |             } | ||||||
|         "skip": "False", |         ], | ||||||
|         "vars": [], |         "skip": "False", | ||||||
|         "vertices": [], |         "vars": [], | ||||||
|         "faces": [], |         "vertices": [], | ||||||
|         "instances": [ |         "faces": [], | ||||||
|             { |         "instances": [ | ||||||
|                 "identifier": "raw_floor_transition_part", |             { | ||||||
|                 "skip": "False", |                 "identifier": "raw_floor_transition_part", | ||||||
|                 "params": { |                 "skip": "False", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "face_part": "(face[0], face[2], face[3])" |                     "height": "height", | ||||||
|                 }, |                     "face_part": "(face[0], face[2], face[3])" | ||||||
|                 "transform": "ident()" |                 }, | ||||||
|             }, |                 "transform": "ident()" | ||||||
|             { |             }, | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[4]", |                 "identifier": "raw_floor_side", | ||||||
|                 "params": { |                 "skip": "not face[4]", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "5", |                     "height": "height", | ||||||
|                     "is_left_sink": "False", |                     "length": "5", | ||||||
|                     "is_right_sink": "False" |                     "is_left_sink": "False", | ||||||
|                 }, |                     "is_right_sink": "False" | ||||||
|                 "transform": "ident()" |                 }, | ||||||
|             }, |                 "transform": "ident()" | ||||||
|             { |             }, | ||||||
|                 "identifier": "raw_floor_side", |             { | ||||||
|                 "skip": "not face[5]", |                 "identifier": "raw_floor_side", | ||||||
|                 "params": { |                 "skip": "not face[5]", | ||||||
|                     "height": "height", |                 "params": { | ||||||
|                     "length": "5", |                     "height": "height", | ||||||
|                     "is_left_sink": "False", |                     "length": "5", | ||||||
|                     "is_right_sink": "False" |                     "is_left_sink": "False", | ||||||
|                 }, |                     "is_right_sink": "False" | ||||||
|                 "transform": "move(5, 5, 0) @ rot(0, 0, 180)" |                 }, | ||||||
|             }, |                 "transform": "move(5, 5, 0) @ rot(0, 0, 180)" | ||||||
|             { |             }, | ||||||
|                 "identifier": "floor_bottom", |             { | ||||||
|                 "skip": "not face[1]", |                 "identifier": "floor_rectangle_bottom", | ||||||
|                 "params": { |                 "skip": "not face[1]", | ||||||
|                     "length": "5", |                 "params": { | ||||||
|                     "width": "5" |                     "length": "5", | ||||||
|                 }, |                     "width": "5" | ||||||
|                 "transform": "move(0, 0, -height)" |                 }, | ||||||
|             } |                 "transform": "move(0, 0, -height)" | ||||||
|         ] |             } | ||||||
|     }, |         ] | ||||||
|     { |     }, | ||||||
|         "identifier": "floor_narrow_transition", |     { | ||||||
|         "showcase": { |         "identifier": "floor_narrow_transition", | ||||||
|             "title": "Narrow Transition", |         "showcase": { | ||||||
|             "icon": "NarrowTransition", |             "title": "Narrow Transition", | ||||||
|             "type": "floor", |             "category": "Miscellaneous", | ||||||
|             "cfgs": [ |             "icon": "NarrowTransition", | ||||||
|                 { |             "type": "floor", | ||||||
|                     "field": "height_", |             "cfgs": [ | ||||||
|                     "type": "float", |                 { | ||||||
|                     "title": "Height", |                     "field": "height_", | ||||||
|                     "desc": "The height of block.", |                     "type": "float", | ||||||
|                     "default": "5.0" |                     "title": "Height", | ||||||
|                 }, |                     "desc": "The height of block.", | ||||||
|                 { |                     "default": "5.0" | ||||||
|                     "field": "face_", |                 }, | ||||||
|                     "type": "face", |                 { | ||||||
|                     "title": "Face", |                     "field": "face_", | ||||||
|                     "desc": "Whether has some faces.", |                     "type": "face", | ||||||
|                     "default": "(True, False, False, False, False, False)" |                     "title": "Face", | ||||||
|                 } |                     "desc": "Whether has some faces.", | ||||||
|             ] |                     "default": "(True, False, False, False, False, False)" | ||||||
|         }, |                 } | ||||||
|         "params": [ |             ] | ||||||
|             { |         }, | ||||||
|                 "field": "height", |         "params": [ | ||||||
|                 "data": "height_" |             { | ||||||
|             }, |                 "field": "height", | ||||||
|             { |                 "data": "height_" | ||||||
|                 "field": "face", |             }, | ||||||
|                 "data": "face_" |             { | ||||||
|             } |                 "field": "face", | ||||||
|         ], |                 "data": "face_" | ||||||
|         "skip": "False", |             } | ||||||
|         "vars": [], |         ], | ||||||
|         "vertices": [], |         "skip": "False", | ||||||
|         "faces": [], |         "vars": [], | ||||||
|         "instances": [ |         "vertices": [], | ||||||
|             { |         "faces": [], | ||||||
|                 "identifier": "raw_floor_transition_part", |         "instances": [ | ||||||
|                 "skip": "False", |             { | ||||||
|                 "params": { |                 "identifier": "raw_floor_transition_part", | ||||||
|                     "height": "height", |                 "skip": "False", | ||||||
|                     "face_part": "(face[0], face[2], face[3])" |                 "params": { | ||||||
|                 }, |                     "height": "height", | ||||||
|                 "transform": "scale(0.5, 1, 1)" |                     "face_part": "(face[0], face[2], face[3])" | ||||||
|             }, |                 }, | ||||||
|             { |                 "transform": "scale(0.5, 1, 1)" | ||||||
|                 "identifier": "raw_floor_side", |             }, | ||||||
|                 "skip": "not face[4]", |             { | ||||||
|                 "params": { |                 "identifier": "raw_floor_side", | ||||||
|                     "height": "height", |                 "skip": "not face[4]", | ||||||
|                     "length": "2.5", |                 "params": { | ||||||
|                     "is_left_sink": "False", |                     "height": "height", | ||||||
|                     "is_right_sink": "False" |                     "length": "2.5", | ||||||
|                 }, |                     "is_left_sink": "False", | ||||||
|                 "transform": "ident()" |                     "is_right_sink": "False" | ||||||
|             }, |                 }, | ||||||
|             { |                 "transform": "ident()" | ||||||
|                 "identifier": "raw_floor_side", |             }, | ||||||
|                 "skip": "not face[5]", |             { | ||||||
|                 "params": { |                 "identifier": "raw_floor_side", | ||||||
|                     "height": "height", |                 "skip": "not face[5]", | ||||||
|                     "length": "2.5", |                 "params": { | ||||||
|                     "is_left_sink": "False", |                     "height": "height", | ||||||
|                     "is_right_sink": "False" |                     "length": "2.5", | ||||||
|                 }, |                     "is_left_sink": "False", | ||||||
|                 "transform": "move(2.5, 5, 0) @ rot(0, 0, 180)" |                     "is_right_sink": "False" | ||||||
|             }, |                 }, | ||||||
|             { |                 "transform": "move(2.5, 5, 0) @ rot(0, 0, 180)" | ||||||
|                 "identifier": "floor_bottom", |             }, | ||||||
|                 "skip": "not face[1]", |             { | ||||||
|                 "params": { |                 "identifier": "floor_rectangle_bottom", | ||||||
|                     "length": "2.5", |                 "skip": "not face[1]", | ||||||
|                     "width": "5" |                 "params": { | ||||||
|                 }, |                     "length": "2.5", | ||||||
|                 "transform": "move(0, 0, -height)" |                     "width": "5" | ||||||
|             } |                 }, | ||||||
|         ] |                 "transform": "move(0, 0, -height)" | ||||||
|     } |             } | ||||||
|  |         ] | ||||||
|  |     } | ||||||
| ] | ] | ||||||