Compare commits
	
		
			347 Commits
		
	
	
		
			0.4.16
			...
			2f9f9a7b54
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2f9f9a7b54 | |||
| 
						 | 
					7c74d0bdf3 | ||
| 
						 | 
					dc77d1056c | ||
| 
						 | 
					ab0713d9a5 | ||
| 
						 | 
					b6ae50be87 | ||
| 
						 | 
					e7cba4071b | ||
| 
						 | 
					d90c17edee | ||
| 
						 | 
					4f55610df5 | ||
| 
						 | 
					500cce8668 | ||
| 
						 | 
					cb3e7757fc | ||
| 
						 | 
					7f93e8aa0a | ||
| 
						 | 
					ebe2331619 | ||
| 
						 | 
					2f97a367f3 | ||
| 02322855d5 | |||
| 
						 | 
					9395013cde | ||
| 
						 | 
					2c880a3843 | ||
| 
						 | 
					56bcc7dbb7 | ||
| 
						 | 
					bd5a42356b | ||
| 
						 | 
					b0b675f715 | ||
| 
						 | 
					855937aec3 | ||
| 
						 | 
					fc0d4990b0 | ||
| 
						 | 
					5e9bfa049b | ||
| 
						 | 
					5345fe7af3 | ||
| 
						 | 
					8c251800db | ||
| 
						 | 
					b190d29d21 | ||
| 
						 | 
					e45eca76e1 | ||
| 
						 | 
					65cea1e33c | ||
| b11cb37123 | |||
| 
						 | 
					b6c02ac8de | ||
| 
						 | 
					54243764e0 | ||
| 
						 | 
					1823690dad | ||
| 503c1190ed | |||
| 
						 | 
					75894355d4 | ||
| 5bba517b03 | |||
| 
						 | 
					7b15bdbd1f | ||
| 
						 | 
					90425fde95 | ||
| 
						 | 
					1349ff8dd8 | ||
| 
						 | 
					3b31b6f9c0 | ||
| 
						 | 
					4fce320d9c | ||
| 
						 | 
					55ded7e569 | ||
| 
						 | 
					e3d94cb3a8 | ||
| 
						 | 
					97903327a5 | ||
| 
						 | 
					37eef73695 | ||
| 
						 | 
					3092ce771f | ||
| 
						 | 
					96ccd29dd2 | ||
| 
						 | 
					8e0b25fb2c | ||
| 
						 | 
					8a29f8844c | ||
| 
						 | 
					5aa0501872 | ||
| 66070dd801 | |||
| 
						 | 
					5618003be3 | ||
| 
						 | 
					06fd754216 | ||
| 
						 | 
					794cae675e | ||
| 
						 | 
					7d3a61e595 | ||
| 
						 | 
					a70115ab8d | ||
| 
						 | 
					23fe215721 | ||
| 
						 | 
					8f067db7cd | ||
| 
						 | 
					e082ea473b | ||
| 7ee74133e1 | |||
| 
						 | 
					cec6049dd1 | ||
| 
						 | 
					047718b3c3 | ||
| 
						 | 
					01f4ea066c | ||
| 
						 | 
					7ba685344c | ||
| 
						 | 
					c39d40e940 | ||
| 
						 | 
					48b082e014 | ||
| c01bd7b888 | |||
| 
						 | 
					2670fd88a9 | ||
| 
						 | 
					3536004667 | ||
| 
						 | 
					b53a1ee477 | ||
| 
						 | 
					29bac67d3a | ||
| e2fdcc4fb2 | |||
| 
						 | 
					db6d1bd9c1 | ||
| 
						 | 
					79dc5f5c7d | ||
| 
						 | 
					01d44056a2 | ||
| 
						 | 
					c7d44272e6 | ||
| 
						 | 
					5837d62979 | ||
| e4db1e885e | |||
| 
						 | 
					fc6efb450c | ||
| 
						 | 
					828c50e85d | ||
| 
						 | 
					4add40705f | ||
| 
						 | 
					a6e4f2dceb | ||
| 
						 | 
					7ad991ce40 | ||
| f7839444cd | |||
| 
						 | 
					d2954c5277 | ||
| 93f5fb3d87 | |||
| 
						 | 
					9ad6e5d07a | ||
| 
						 | 
					31e1255245 | ||
| a535bebd2e | |||
| 
						 | 
					a735d1a155 | ||
| be2776fc46 | |||
| 
						 | 
					a2c0dd1130 | ||
| 
						 | 
					f0ef43823c | ||
| 
						 | 
					17a602a5a1 | ||
| 
						 | 
					2294a23582 | ||
| 
						 | 
					b2d2ccbcba | ||
| ee03959a65 | |||
| 
						 | 
					8322f256c5 | ||
| 
						 | 
					ba7eb19317 | ||
| 4dd30df37a | |||
| 
						 | 
					065c953eba | ||
| 946da11206 | |||
| 
						 | 
					9a63d17e4a | ||
| 
						 | 
					d814357ddf | ||
| 
						 | 
					c2fe5fe956 | ||
| 
						 | 
					9dbaa5f4f6 | ||
| 77c8026400 | |||
| 
						 | 
					d93396600f | ||
| 
						 | 
					c966a8a57d | ||
| 70b521c721 | |||
| 
						 | 
					61b061f669 | ||
| 
						 | 
					fe91d5eb46 | ||
| 
						 | 
					eb1064ca6d | ||
| 
						 | 
					f54e25ec52 | ||
| 6d795b7d34 | |||
| 
						 | 
					dedb0dd54e | ||
| 
						 | 
					477a024034 | ||
| 92249b7941 | |||
| 
						 | 
					34cb0e7682 | ||
| 
						 | 
					505fc7cc49 | ||
| e04fb691ad | |||
| 
						 | 
					cb58a646cf | ||
| 
						 | 
					e3135c53f0 | ||
| ac80224371 | |||
| 
						 | 
					366d57f4da | ||
| 
						 | 
					c79e68a80c | ||
| 
						 | 
					9338c109a6 | ||
| 
						 | 
					63bee98948 | ||
| 
						 | 
					ee6c9991b9 | ||
| 34262ed8d5 | |||
| 
						 | 
					9eefe9c7bb | ||
| 
						 | 
					8281e3d068 | ||
| 
						 | 
					ed282b0298 | ||
| 
						 | 
					5410ea74f2 | ||
| 
						 | 
					4602290bc5 | ||
| 
						 | 
					64fb90f3e5 | ||
| 5cfe8d893f | |||
| 
						 | 
					99cb3a5d9d | ||
| 
						 | 
					728d4e179a | ||
| 
						 | 
					760e9e383c | ||
| 
						 | 
					62bc13078f | ||
| 
						 | 
					84d7104c66 | ||
| 
						 | 
					2ca825f991 | ||
| 
						 | 
					0fa88b7054 | ||
| 
						 | 
					8f03c0e684 | ||
| 975e20f704 | |||
| 
						 | 
					75cfac34e6 | ||
| 
						 | 
					d5fe933456 | ||
| 
						 | 
					6ad2c9f568 | ||
| 2693e2ecbb | |||
| 
						 | 
					05ca3e4f4f | ||
| 
						 | 
					c93df73a5c | ||
| 
						 | 
					27eb2ca9de | ||
| 
						 | 
					dc8778d7d3 | ||
| 
						 | 
					26e7b46415 | ||
| 
						 | 
					839b0ed4b1 | ||
| 
						 | 
					da764f4ce0 | ||
| 
						 | 
					ef5d30c92d | ||
| 
						 | 
					f2fff77e90 | ||
| 
						 | 
					f37b21e632 | ||
| 
						 | 
					c9a951c2e8 | ||
| 
						 | 
					f5a60ba407 | ||
| 
						 | 
					d7dfd11364 | ||
| 
						 | 
					4c20de48b2 | ||
| 
						 | 
					9725fa2f28 | ||
| 
						 | 
					25c00a6e05 | ||
| 
						 | 
					d8ed6d3af4 | ||
| 
						 | 
					a69c210b56 | ||
| 
						 | 
					cb8a4f3cec | ||
| 
						 | 
					002bcbf850 | ||
| 
						 | 
					6fdda18390 | ||
| 
						 | 
					6492b8ec76 | ||
| 
						 | 
					8186f003be | ||
| 
						 | 
					d19f4fc518 | ||
| 
						 | 
					92a55c3985 | ||
| 
						 | 
					1a396c707c | ||
| 
						 | 
					ea94718a9a | ||
| 
						 | 
					bfd44443a2 | ||
| 
						 | 
					7ee48e0938 | ||
| 
						 | 
					cb5530c6c8 | ||
| 
						 | 
					cb692d2188 | ||
| 
						 | 
					91bd0c7e98 | ||
| 
						 | 
					57fc8c67f8 | ||
| 
						 | 
					a2e183c6f3 | ||
| 
						 | 
					fb91ba53f1 | ||
| 
						 | 
					97522b6a24 | ||
| 
						 | 
					755dd26208 | ||
| 
						 | 
					56362cdd2a | ||
| 
						 | 
					28a3ba44d1 | ||
| 
						 | 
					d659cb38b3 | ||
| 
						 | 
					83c3030494 | ||
| 
						 | 
					8fa259c93f | ||
| 
						 | 
					8db1f02bca | ||
| 
						 | 
					59d9e0b97d | ||
| 
						 | 
					ee0c276900 | ||
| 
						 | 
					e46e2f8c45 | ||
| 
						 | 
					67b777885b | ||
| 
						 | 
					a2f9be258e | ||
| 
						 | 
					d71e371d17 | ||
| 
						 | 
					c2bd682388 | ||
| 
						 | 
					82524cb448 | ||
| 
						 | 
					8ffef8e43c | ||
| 
						 | 
					7b167224f4 | ||
| 
						 | 
					8817918a53 | ||
| 
						 | 
					dfc09f3acc | ||
| 
						 | 
					75978a0207 | ||
| 
						 | 
					538e33c537 | ||
| 
						 | 
					86fa342d85 | ||
| 
						 | 
					d4b32d5fa3 | ||
| 
						 | 
					4d1c8d5529 | ||
| 
						 | 
					bd172a3ca1 | ||
| 
						 | 
					b7714df954 | ||
| 
						 | 
					b2b29a1737 | ||
| 
						 | 
					9df0ec7edb | ||
| 
						 | 
					fd4bd8eadc | ||
| 
						 | 
					0913098a9d | ||
| 
						 | 
					efcec7bdce | ||
| 
						 | 
					3a85152e4d | ||
| 
						 | 
					7f7dfb79d5 | ||
| 
						 | 
					7b141fb0ea | ||
| 
						 | 
					38a893ec82 | ||
| 
						 | 
					0a97abcaf6 | ||
| 
						 | 
					653aaffa3e | ||
| 
						 | 
					084bbc6c0b | ||
| 
						 | 
					a69c5e24a9 | ||
| 
						 | 
					0a4d15d26e | ||
| 
						 | 
					909b321f3c | ||
| 
						 | 
					d68d3d5852 | ||
| 
						 | 
					a7c171940e | ||
| 
						 | 
					aacd5ec829 | ||
| 
						 | 
					7bacbdf015 | ||
| 
						 | 
					0dd1dbc901 | ||
| 
						 | 
					c55374cdfa | ||
| 
						 | 
					fd978204dd | ||
| 
						 | 
					e41167813b | ||
| 
						 | 
					0e74978a73 | ||
| 
						 | 
					04db73aa6c | ||
| 
						 | 
					15bb7b129c | ||
| 
						 | 
					30bedbfecc | ||
| 
						 | 
					edbb3aace9 | ||
| 
						 | 
					fa4817136c | ||
| 
						 | 
					2e0891cf1b | ||
| 
						 | 
					cd9102cef1 | ||
| 
						 | 
					eefcbc1e86 | ||
| 
						 | 
					47ba123113 | ||
| 
						 | 
					4915b2564f | ||
| 
						 | 
					f8cb55a60e | ||
| 
						 | 
					366dd24e5b | ||
| 
						 | 
					a81834558a | ||
| 
						 | 
					b0de9d9958 | ||
| 
						 | 
					a028aef9c9 | ||
| 
						 | 
					467907602b | ||
| 
						 | 
					085ee7b497 | ||
| 
						 | 
					72f793e2b3 | ||
| 
						 | 
					084174123d | ||
| 
						 | 
					d5e3f1cf68 | ||
| 
						 | 
					ce0983d239 | ||
| 
						 | 
					c2553928f2 | ||
| 
						 | 
					eaf6c33bae | ||
| 
						 | 
					32a24730f1 | ||
| 
						 | 
					e98e4e268b | ||
| 
						 | 
					7e09da50c2 | ||
| 
						 | 
					6a25e56336 | ||
| 
						 | 
					f94c93bb59 | ||
| 
						 | 
					d4346919bc | ||
| 
						 | 
					9ab197af2f | ||
| 
						 | 
					07e769d1b9 | ||
| 
						 | 
					bd32b4fca2 | ||
| 
						 | 
					453a114cd0 | ||
| 
						 | 
					187e755aa5 | ||
| 
						 | 
					ea92bfe4d3 | ||
| 
						 | 
					91d057fcab | ||
| 
						 | 
					9c770532e6 | ||
| 
						 | 
					be1a6d53aa | ||
| 
						 | 
					65b3448796 | ||
| 
						 | 
					016f9de82f | ||
| 
						 | 
					608a9a6980 | ||
| 
						 | 
					34cfee8a2f | ||
| 
						 | 
					1669cfd451 | ||
| 
						 | 
					d175f0b94f | ||
| 
						 | 
					157f117c62 | ||
| 
						 | 
					57362118dc | ||
| 
						 | 
					6f90ee0875 | ||
| 
						 | 
					31a67cf4f9 | ||
| 
						 | 
					4f58a3039c | ||
| 
						 | 
					465e28cbd3 | ||
| 
						 | 
					7eb5dc6aca | ||
| 
						 | 
					750612181a | ||
| 
						 | 
					894ea5174f | ||
| 
						 | 
					8e53526b54 | ||
| 
						 | 
					76ebd0a0e1 | ||
| 
						 | 
					667eeb7d09 | ||
| 
						 | 
					dc13ec619f | ||
| 
						 | 
					9abdeb3d62 | ||
| 
						 | 
					df3d54f58a | ||
| 
						 | 
					de44593b41 | ||
| 
						 | 
					396a4fdacd | ||
| 
						 | 
					13383770ef | ||
| 
						 | 
					a1fc493de1 | ||
| 
						 | 
					e6b55028fc | ||
| 
						 | 
					caacc2a261 | ||
| 
						 | 
					0fb0eab723 | ||
| 
						 | 
					f3cd1b61d7 | ||
| 
						 | 
					d9b616c5f0 | ||
| 
						 | 
					f7b1719767 | ||
| 
						 | 
					3a1edac06c | ||
| 
						 | 
					e615a1013b | ||
| 
						 | 
					f3a94fcd24 | ||
| 
						 | 
					15b41d14f3 | ||
| 
						 | 
					463e7a206a | ||
| 
						 | 
					4cf9c90bb9 | ||
| 
						 | 
					3486ee319e | ||
| 
						 | 
					aee23d7642 | ||
| 
						 | 
					ec9cf1df50 | ||
| 
						 | 
					31741e33e2 | ||
| 
						 | 
					21892456f5 | ||
| 
						 | 
					c3627551b0 | ||
| 
						 | 
					d69941a0ae | ||
| 
						 | 
					afcec82ae3 | ||
| 
						 | 
					aaef5eb22b | ||
| 
						 | 
					7498a32364 | ||
| 
						 | 
					8dfbcad949 | ||
| 
						 | 
					0251baf692 | ||
| 
						 | 
					40eeaac2ec | ||
| 
						 | 
					10221c6c15 | ||
| 
						 | 
					ca4837f1c6 | ||
| 
						 | 
					879b4489b2 | ||
| 
						 | 
					1666dfc2c7 | ||
| 
						 | 
					9d01482488 | ||
| 
						 | 
					3e827c23b9 | ||
| 
						 | 
					2d70d2b657 | ||
| 
						 | 
					df8ef255a3 | ||
| 
						 | 
					69133818f7 | ||
| 
						 | 
					d6dcd51302 | ||
| 
						 | 
					c3708b154c | ||
| 
						 | 
					67350b55bb | ||
| 
						 | 
					c5e5aa069f | ||
| 
						 | 
					6a0fe9f3c0 | ||
| 
						 | 
					59ac978093 | ||
| 
						 | 
					64a5b18e89 | ||
| 
						 | 
					f82570f580 | ||
| 
						 | 
					2adcd3e777 | ||
| 
						 | 
					cf93eca017 | ||
| 
						 | 
					b2bb4c5280 | ||
| 
						 | 
					736d67784c | ||
| 
						 | 
					e8e9de04dd | ||
| 
						 | 
					05c0a8670b | ||
| 
						 | 
					a5e1bfa0e8 | ||
| 
						 | 
					c57a35d5bd | 
							
								
								
									
										13
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					name: luacheck
 | 
				
			||||||
 | 
					on: [push, pull_request]
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  build:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@master
 | 
				
			||||||
 | 
					    - name: apt
 | 
				
			||||||
 | 
					      run: sudo apt-get install -y luarocks
 | 
				
			||||||
 | 
					    - name: luacheck install
 | 
				
			||||||
 | 
					      run: luarocks install --local luacheck
 | 
				
			||||||
 | 
					    - name: luacheck run
 | 
				
			||||||
 | 
					      run: $HOME/.luarocks/bin/luacheck ./
 | 
				
			||||||
							
								
								
									
										25
									
								
								.luacheckrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					unused_args = false
 | 
				
			||||||
 | 
					max_line_length= 240
 | 
				
			||||||
 | 
					redefined = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					globals = {
 | 
				
			||||||
 | 
						"pipeworks",
 | 
				
			||||||
 | 
						"luaentity"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read_globals = {
 | 
				
			||||||
 | 
						-- Stdlib
 | 
				
			||||||
 | 
						string = {fields = {"split"}},
 | 
				
			||||||
 | 
						table = {fields = {"copy", "getn"}},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- Minetest
 | 
				
			||||||
 | 
						"vector", "ItemStack",
 | 
				
			||||||
 | 
						"dump", "minetest",
 | 
				
			||||||
 | 
						"VoxelManip", "VoxelArea",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- mods
 | 
				
			||||||
 | 
						"default", "mesecon", "digiline",
 | 
				
			||||||
 | 
						"screwdriver", "unified_inventory",
 | 
				
			||||||
 | 
						"i3", "mcl_experience", "awards"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								README
									
									
									
									
									
								
							
							
						
						@@ -1,7 +1,7 @@
 | 
				
			|||||||
This mod uses nodeboxes to supply a complete set of 3D pipes and tubes, 
 | 
					This mod uses nodeboxes to supply a complete set of 3D pipes and tubes, 
 | 
				
			||||||
along devices that work with them.
 | 
					along devices that work with them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See https://github.com/VanessaE/pipeworks/wiki/ for detailed information about usage of this mod.
 | 
					See https://github.com/mt-mods/pipeworks/wiki/ for detailed information about usage of this mod.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Unlike the previous version of this mod, these pipes are rounded, and when 
 | 
					Unlike the previous version of this mod, these pipes are rounded, and when 
 | 
				
			||||||
placed, they'll automatically join together as needed.  Pipes can go vertically 
 | 
					placed, they'll automatically join together as needed.  Pipes can go vertically 
 | 
				
			||||||
@@ -20,3 +20,7 @@ This mod is a work in progress.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Please note that owing to the nature of this mod, I have opted to use 64px 
 | 
					Please note that owing to the nature of this mod, I have opted to use 64px 
 | 
				
			||||||
textures.  Anything less just looks terrible.
 | 
					textures.  Anything less just looks terrible.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The teleport tube database used to be kept in a file named 'teleport_tubes'.
 | 
				
			||||||
 | 
					The database is now kept in mod storage. The migration from 'teleport_tubes' is
 | 
				
			||||||
 | 
					automatic. The old file is then kept around but is not used at all.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										158
									
								
								autocrafter.lua
									
									
									
									
									
								
							
							
						
						@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
local autocrafterCache = {}  -- caches some recipe data to avoid to call the slow function minetest.get_craft_result() every second
 | 
					local autocrafterCache = {}  -- caches some recipe data to avoid to call the slow function minetest.get_craft_result() every second
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local craft_time = 1
 | 
					local craft_time = 1
 | 
				
			||||||
@@ -16,7 +17,7 @@ end
 | 
				
			|||||||
local function get_item_info(stack)
 | 
					local function get_item_info(stack)
 | 
				
			||||||
	local name = stack:get_name()
 | 
						local name = stack:get_name()
 | 
				
			||||||
	local def = minetest.registered_items[name]
 | 
						local def = minetest.registered_items[name]
 | 
				
			||||||
	local description = def and def.description or "Unknown item"
 | 
						local description = def and def.description or S("Unknown item")
 | 
				
			||||||
	return description, name
 | 
						return description, name
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,25 +35,42 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local function autocraft(inventory, craft)
 | 
					local function autocraft(inventory, craft)
 | 
				
			||||||
	if not craft then return false end
 | 
						if not craft then return false end
 | 
				
			||||||
	local output_item = craft.output.item
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	-- check if we have enough room in dst
 | 
					 | 
				
			||||||
	if not inventory:room_for_item("dst", output_item) then	return false end
 | 
					 | 
				
			||||||
	local consumption = craft.consumption
 | 
					 | 
				
			||||||
	local inv_index = count_index(inventory:get_list("src"))
 | 
					 | 
				
			||||||
	-- check if we have enough material available
 | 
						-- check if we have enough material available
 | 
				
			||||||
	for itemname, number in pairs(consumption) do
 | 
						local inv_index = count_index(inventory:get_list("src"))
 | 
				
			||||||
 | 
						for itemname, number in pairs(craft.consumption) do
 | 
				
			||||||
		if (not inv_index[itemname]) or inv_index[itemname] < number then return false end
 | 
							if (not inv_index[itemname]) or inv_index[itemname] < number then return false end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						-- check if output and all replacements fit in dst
 | 
				
			||||||
 | 
						local output = craft.output.item
 | 
				
			||||||
 | 
						local out_items = count_index(craft.decremented_input.items)
 | 
				
			||||||
 | 
						out_items[output:get_name()] = (out_items[output:get_name()] or 0) + output:get_count()
 | 
				
			||||||
 | 
						local empty_count = 0
 | 
				
			||||||
 | 
						for _,item in pairs(inventory:get_list("dst")) do
 | 
				
			||||||
 | 
							if item:is_empty() then
 | 
				
			||||||
 | 
								empty_count = empty_count + 1
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								local name = item:get_name()
 | 
				
			||||||
 | 
								if out_items[name] then
 | 
				
			||||||
 | 
									out_items[name] = out_items[name] - item:get_free_space()
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						for _,count in pairs(out_items) do
 | 
				
			||||||
 | 
							if count > 0 then
 | 
				
			||||||
 | 
								empty_count = empty_count - 1
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if empty_count < 0 then
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	-- consume material
 | 
						-- consume material
 | 
				
			||||||
	for itemname, number in pairs(consumption) do
 | 
						for itemname, number in pairs(craft.consumption) do
 | 
				
			||||||
		for i = 1, number do -- We have to do that since remove_item does not work if count > stack_max
 | 
							for _ = 1, number do -- We have to do that since remove_item does not work if count > stack_max
 | 
				
			||||||
			inventory:remove_item("src", ItemStack(itemname))
 | 
								inventory:remove_item("src", ItemStack(itemname))
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					 | 
				
			||||||
	-- craft the result into the dst inventory and add any "replacements" as well
 | 
						-- craft the result into the dst inventory and add any "replacements" as well
 | 
				
			||||||
	inventory:add_item("dst", output_item)
 | 
						inventory:add_item("dst", output)
 | 
				
			||||||
	for i = 1, 9 do
 | 
						for i = 1, 9 do
 | 
				
			||||||
		inventory:add_item("dst", craft.decremented_input.items[i])
 | 
							inventory:add_item("dst", craft.decremented_input.items[i])
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -66,13 +84,16 @@ local function run_autocrafter(pos, elapsed)
 | 
				
			|||||||
	local inventory = meta:get_inventory()
 | 
						local inventory = meta:get_inventory()
 | 
				
			||||||
	local craft = get_craft(pos, inventory)
 | 
						local craft = get_craft(pos, inventory)
 | 
				
			||||||
	local output_item = craft.output.item
 | 
						local output_item = craft.output.item
 | 
				
			||||||
 | 
						-- NALC: existence de limitgroup ?
 | 
				
			||||||
 | 
						local limitcraft = minetest.get_item_group(output_item:get_name(), "limitcraft") or 0
 | 
				
			||||||
	-- only use crafts that have an actual result
 | 
						-- only use crafts that have an actual result
 | 
				
			||||||
	if output_item:is_empty() then
 | 
						-- NALC: ou si l'item n'est pas dans le group limitcraft
 | 
				
			||||||
		meta:set_string("infotext", "unconfigured Autocrafter: unknown recipe")
 | 
						if output_item:is_empty() or limitcraft > 0 then
 | 
				
			||||||
 | 
							meta:set_string("infotext", S("unconfigured Autocrafter: unknown recipe"))
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for step = 1, math.floor(elapsed/craft_time) do
 | 
						for _ = 1, math.floor(elapsed/craft_time) do
 | 
				
			||||||
		local continue = autocraft(inventory, craft)
 | 
							local continue = autocraft(inventory, craft)
 | 
				
			||||||
		if not continue then return false end
 | 
							if not continue then return false end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -101,11 +122,10 @@ local function after_recipe_change(pos, inventory)
 | 
				
			|||||||
	if inventory:is_empty("recipe") then
 | 
						if inventory:is_empty("recipe") then
 | 
				
			||||||
		minetest.get_node_timer(pos):stop()
 | 
							minetest.get_node_timer(pos):stop()
 | 
				
			||||||
		autocrafterCache[minetest.hash_node_position(pos)] = nil
 | 
							autocrafterCache[minetest.hash_node_position(pos)] = nil
 | 
				
			||||||
		meta:set_string("infotext", "unconfigured Autocrafter")
 | 
							meta:set_string("infotext", S("unconfigured Autocrafter"))
 | 
				
			||||||
		inventory:set_stack("output", 1, "")
 | 
							inventory:set_stack("output", 1, "")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local recipe_changed = false
 | 
					 | 
				
			||||||
	local recipe = inventory:get_list("recipe")
 | 
						local recipe = inventory:get_list("recipe")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local hash = minetest.hash_node_position(pos)
 | 
						local hash = minetest.hash_node_position(pos)
 | 
				
			||||||
@@ -126,7 +146,7 @@ local function after_recipe_change(pos, inventory)
 | 
				
			|||||||
	craft = craft or get_craft(pos, inventory, hash)
 | 
						craft = craft or get_craft(pos, inventory, hash)
 | 
				
			||||||
	local output_item = craft.output.item
 | 
						local output_item = craft.output.item
 | 
				
			||||||
	local description, name = get_item_info(output_item)
 | 
						local description, name = get_item_info(output_item)
 | 
				
			||||||
	meta:set_string("infotext", string.format("'%s' Autocrafter (%s)", description, name))
 | 
						meta:set_string("infotext", S("'@1' Autocrafter (@2)", description, name))
 | 
				
			||||||
	inventory:set_stack("output", 1, output_item)
 | 
						inventory:set_stack("output", 1, output_item)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	after_inventory_change(pos)
 | 
						after_inventory_change(pos)
 | 
				
			||||||
@@ -172,26 +192,47 @@ end
 | 
				
			|||||||
local function update_meta(meta, enabled)
 | 
					local function update_meta(meta, enabled)
 | 
				
			||||||
	local state = enabled and "on" or "off"
 | 
						local state = enabled and "on" or "off"
 | 
				
			||||||
	meta:set_int("enabled", enabled and 1 or 0)
 | 
						meta:set_int("enabled", enabled and 1 or 0)
 | 
				
			||||||
	local fs = 	"size[8,12]"..
 | 
						local list_backgrounds = ""
 | 
				
			||||||
			"list[context;recipe;0,0;3,3;]"..
 | 
						if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
				
			||||||
			"image[3,1;1,1;gui_hb_bg.png^[colorize:#141318:255]"..
 | 
							list_backgrounds = "style_type[box;colors=#666]"
 | 
				
			||||||
			"list[context;output;3,1;1,1;]"..
 | 
							for i=0, 2 do
 | 
				
			||||||
			"image_button[3,2;1,0.6;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" ..
 | 
								for j=0, 2 do
 | 
				
			||||||
			"list[context;src;0,4.5;8,3;]"..
 | 
									list_backgrounds = list_backgrounds .. "box[".. 0.22+(i*1.25) ..",".. 0.22+(j*1.25) ..";1,1;]"
 | 
				
			||||||
			"list[context;dst;4,0;4,3;]"..
 | 
								end
 | 
				
			||||||
			default.gui_bg..
 | 
							end
 | 
				
			||||||
			default.gui_bg_img..
 | 
							for i=0, 3 do
 | 
				
			||||||
			default.gui_slots..
 | 
								for j=0, 2 do
 | 
				
			||||||
			default.get_hotbar_bg(0,8) ..
 | 
									list_backgrounds = list_backgrounds .. "box[".. 5.28+(i*1.25) ..",".. 0.22+(j*1.25) ..";1,1;]"
 | 
				
			||||||
			"list[current_player;main;0,8;8,4;]" ..
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							for i=0, 7 do
 | 
				
			||||||
 | 
								for j=0, 2 do
 | 
				
			||||||
 | 
									list_backgrounds = list_backgrounds .. "box[".. 0.22+(i*1.25) ..",".. 5+(j*1.25) ..";1,1;]"
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local size = "10.2,14"
 | 
				
			||||||
 | 
						local fs =
 | 
				
			||||||
 | 
							"formspec_version[2]"..
 | 
				
			||||||
 | 
							"size["..size.."]"..
 | 
				
			||||||
 | 
							pipeworks.fs_helpers.get_prepends(size)..
 | 
				
			||||||
 | 
							list_backgrounds..
 | 
				
			||||||
 | 
							"list[context;recipe;0.22,0.22;3,3;]"..
 | 
				
			||||||
 | 
							"image[4,1.45;1,1;[combine:16x16^[noalpha^[colorize:#141318:255]"..
 | 
				
			||||||
 | 
							"list[context;output;4,1.45;1,1;]"..
 | 
				
			||||||
 | 
							"image_button[4,2.6;1,0.6;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" ..
 | 
				
			||||||
 | 
							"list[context;dst;5.28,0.22;4,3;]"..
 | 
				
			||||||
 | 
							"list[context;src;0.22,5;8,3;]"..
 | 
				
			||||||
 | 
							pipeworks.fs_helpers.get_inv(9)..
 | 
				
			||||||
		"listring[current_player;main]"..
 | 
							"listring[current_player;main]"..
 | 
				
			||||||
		"listring[context;src]" ..
 | 
							"listring[context;src]" ..
 | 
				
			||||||
		"listring[current_player;main]"..
 | 
							"listring[current_player;main]"..
 | 
				
			||||||
		"listring[context;dst]" ..
 | 
							"listring[context;dst]" ..
 | 
				
			||||||
		"listring[current_player;main]"
 | 
							"listring[current_player;main]"
 | 
				
			||||||
	if minetest.get_modpath("digilines") then
 | 
						if minetest.get_modpath("digilines") then
 | 
				
			||||||
		fs = fs.."field[1,3.5;4,1;channel;Channel;${channel}]"
 | 
							fs = fs.."field[0.22,4.1;4.5,0.75;channel;"..S("Channel")..";${channel}]"..
 | 
				
			||||||
		fs = fs.."button_exit[5,3.2;2,1;save;Save]"
 | 
								"button[5,4.1;1.5,0.75;set_channel;"..S("Set").."]"..
 | 
				
			||||||
 | 
								"button_exit[6.8,4.1;2,0.75;close;"..S("Close").."]"
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	meta:set_string("formspec",fs)
 | 
						meta:set_string("formspec",fs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -200,13 +241,13 @@ local function update_meta(meta, enabled)
 | 
				
			|||||||
	-- this might be more written code, but actually executes less
 | 
						-- this might be more written code, but actually executes less
 | 
				
			||||||
	local output = meta:get_inventory():get_stack("output", 1)
 | 
						local output = meta:get_inventory():get_stack("output", 1)
 | 
				
			||||||
	if output:is_empty() then -- doesn't matter if paused or not
 | 
						if output:is_empty() then -- doesn't matter if paused or not
 | 
				
			||||||
		meta:set_string("infotext", "unconfigured Autocrafter")
 | 
							meta:set_string("infotext", S("unconfigured Autocrafter"))
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local description, name = get_item_info(output)
 | 
						local description, name = get_item_info(output)
 | 
				
			||||||
	local infotext = enabled and string.format("'%s' Autocrafter (%s)", description, name)
 | 
						local infotext = enabled and S("'@1' Autocrafter (@2)", description, name)
 | 
				
			||||||
				or string.format("paused '%s' Autocrafter", description)
 | 
									or S("paused '@1' Autocrafter", description)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	meta:set_string("infotext", infotext)
 | 
						meta:set_string("infotext", infotext)
 | 
				
			||||||
	return enabled
 | 
						return enabled
 | 
				
			||||||
@@ -226,7 +267,7 @@ local function upgrade_autocrafter(pos, meta)
 | 
				
			|||||||
		update_meta(meta, true)
 | 
							update_meta(meta, true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if meta:get_string("virtual_items") == "1" then -- we are version 2
 | 
							if meta:get_string("virtual_items") == "1" then -- we are version 2
 | 
				
			||||||
			-- we allready dropped stuff, so lets remove the metadatasetting (we are not being called again for this node)
 | 
								-- we already dropped stuff, so lets remove the metadatasetting (we are not being called again for this node)
 | 
				
			||||||
			meta:set_string("virtual_items", "")
 | 
								meta:set_string("virtual_items", "")
 | 
				
			||||||
		else -- we are version 1
 | 
							else -- we are version 1
 | 
				
			||||||
			local recipe = inv:get_list("recipe")
 | 
								local recipe = inv:get_list("recipe")
 | 
				
			||||||
@@ -248,10 +289,11 @@ local function upgrade_autocrafter(pos, meta)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:autocrafter", {
 | 
					minetest.register_node("pipeworks:autocrafter", {
 | 
				
			||||||
	description = "Autocrafter",
 | 
						description = S("Autocrafter"),
 | 
				
			||||||
	drawtype = "normal",
 | 
						drawtype = "normal",
 | 
				
			||||||
	tiles = {"pipeworks_autocrafter.png"},
 | 
						tiles = {"pipeworks_autocrafter.png"},
 | 
				
			||||||
	groups = {snappy = 3, tubedevice = 1, tubedevice_receiver = 1},
 | 
						groups = {snappy = 3, tubedevice = 1, tubedevice_receiver = 1, dig_generic = 1, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
	tube = {insert_object = function(pos, node, stack, direction)
 | 
						tube = {insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = minetest.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
@@ -276,7 +318,9 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
		update_meta(meta, false)
 | 
							update_meta(meta, false)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_receive_fields = function(pos, formname, fields, sender)
 | 
						on_receive_fields = function(pos, formname, fields, sender)
 | 
				
			||||||
		if not pipeworks.may_configure(pos, sender) then return end
 | 
							if (fields.quit and not fields.key_enter_field) or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = minetest.get_meta(pos)
 | 
				
			||||||
		if fields.on then
 | 
							if fields.on then
 | 
				
			||||||
			update_meta(meta, false)
 | 
								update_meta(meta, false)
 | 
				
			||||||
@@ -285,8 +329,9 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
			if update_meta(meta, true) then
 | 
								if update_meta(meta, true) then
 | 
				
			||||||
				start_crafter(pos)
 | 
									start_crafter(pos)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		elseif fields.save then
 | 
							end
 | 
				
			||||||
			meta:set_string("channel",fields.channel)
 | 
							if fields.channel then
 | 
				
			||||||
 | 
								meta:set_string("channel", fields.channel)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	can_dig = function(pos, player)
 | 
						can_dig = function(pos, player)
 | 
				
			||||||
@@ -388,6 +433,27 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
						end
 | 
											end
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
					after_recipe_change(pos,inv)
 | 
										after_recipe_change(pos,inv)
 | 
				
			||||||
 | 
									elseif msg == "get_recipe" then
 | 
				
			||||||
 | 
										local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
										local inv = meta:get_inventory()
 | 
				
			||||||
 | 
										local recipe = {}
 | 
				
			||||||
 | 
										for y=0,2,1 do
 | 
				
			||||||
 | 
											local row = {}
 | 
				
			||||||
 | 
											for x=1,3,1 do
 | 
				
			||||||
 | 
												local slot = y*3+x
 | 
				
			||||||
 | 
												table.insert(row, inv:get_stack("recipe",slot):get_name())
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
											table.insert(recipe, row)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										local setchan = meta:get_string("channel")
 | 
				
			||||||
 | 
										local output = inv:get_stack("output", 1)
 | 
				
			||||||
 | 
										digiline:receptor_send(pos, digiline.rules.default, setchan, {
 | 
				
			||||||
 | 
											recipe = recipe,
 | 
				
			||||||
 | 
											result = {
 | 
				
			||||||
 | 
												name = output:get_name(),
 | 
				
			||||||
 | 
												count = output:get_count(),
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										  })
 | 
				
			||||||
				elseif msg == "off" then
 | 
									elseif msg == "off" then
 | 
				
			||||||
					update_meta(meta, false)
 | 
										update_meta(meta, false)
 | 
				
			||||||
					minetest.get_node_timer(pos):stop()
 | 
										minetest.get_node_timer(pos):stop()
 | 
				
			||||||
@@ -402,12 +468,4 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:autocrafter"
 | 
				
			||||||
minetest.register_craft( {
 | 
					 | 
				
			||||||
	output = "pipeworks:autocrafter 2",
 | 
					 | 
				
			||||||
	recipe = {
 | 
					 | 
				
			||||||
	        { "default:steel_ingot", "default:mese_crystal", "default:steel_ingot" },
 | 
					 | 
				
			||||||
	        { "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
	        { "default:steel_ingot", "default:mese_crystal", "default:steel_ingot" }
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								autodetect-finite-water.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					-- enable finite liquid in the presence of dynamic liquid to preserve water volume.
 | 
				
			||||||
 | 
					local enable = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("dynamic_liquid") then
 | 
				
			||||||
 | 
						pipeworks.logger("detected mod dynamic_liquid, enabling finite liquid flag")
 | 
				
			||||||
 | 
						enable = true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.toggles.finite_water = enable
 | 
				
			||||||
@@ -159,6 +159,18 @@ function pipeworks.scan_pipe_surroundings(pos)
 | 
				
			|||||||
		pzp = f or pzp
 | 
							pzp = f or pzp
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- ...straight-only pipe...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:straight_pipe")
 | 
				
			||||||
 | 
						if match then
 | 
				
			||||||
 | 
							pxm = a or pxm
 | 
				
			||||||
 | 
							pxp = b or pxp
 | 
				
			||||||
 | 
							pym = c or pym
 | 
				
			||||||
 | 
							pyp = d or pyp
 | 
				
			||||||
 | 
							pzm = e or pzm
 | 
				
			||||||
 | 
							pzp = f or pzp
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- ... other nodes
 | 
					-- ... other nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local def_left   = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the
 | 
						local def_left   = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,34 +53,35 @@ local function tube_autoroute(pos)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	-- xm = 1, xp = 2, ym = 3, yp = 4, zm = 5, zp = 6
 | 
						-- xm = 1, xp = 2, ym = 3, yp = 4, zm = 5, zp = 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local positions = {}
 | 
						local adjlist = {} -- this will be used in item_transport
 | 
				
			||||||
	local nodes = {}
 | 
					
 | 
				
			||||||
	for i, adj in ipairs(adjustments) do
 | 
						for i, adj in ipairs(adjustments) do
 | 
				
			||||||
		positions[i] = vector.add(pos, adj)
 | 
							local position = vector.add(pos, adj)
 | 
				
			||||||
		nodes[i] = minetest.get_node(positions[i])
 | 
							local node = minetest.get_node(position)
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i, node in ipairs(nodes) do
 | 
					 | 
				
			||||||
		local idef = minetest.registered_nodes[node.name]
 | 
							local idef = minetest.registered_nodes[node.name]
 | 
				
			||||||
		-- handle the tubes themselves
 | 
							-- handle the tubes themselves
 | 
				
			||||||
		if is_tube(node.name) then
 | 
							if is_tube(node.name) then
 | 
				
			||||||
			active[i] = 1
 | 
								active[i] = 1
 | 
				
			||||||
 | 
								table.insert(adjlist, adj)
 | 
				
			||||||
		-- handle new style connectors
 | 
							-- handle new style connectors
 | 
				
			||||||
		elseif idef and idef.tube and idef.tube.connect_sides then
 | 
							elseif idef and idef.tube and idef.tube.connect_sides then
 | 
				
			||||||
			local dir = adjustments[i]
 | 
								if idef.tube.connect_sides[nodeside(node, vector.multiply(adj, -1))] then
 | 
				
			||||||
			if idef.tube.connect_sides[nodeside(node, vector.multiply(dir, -1))] then
 | 
					 | 
				
			||||||
				active[i] = 1
 | 
									active[i] = 1
 | 
				
			||||||
 | 
									table.insert(adjlist, adj)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						minetest.get_meta(pos):set_string("adjlist", minetest.serialize(adjlist))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- all sides checked, now figure which tube to use.
 | 
						-- all sides checked, now figure which tube to use.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local nodedef = minetest.registered_nodes[nctr.name]
 | 
						local nodedef = minetest.registered_nodes[nctr.name]
 | 
				
			||||||
	local basename = nodedef.basename
 | 
						local basename = nodedef.basename
 | 
				
			||||||
	if nodedef.style == "old" then
 | 
						if nodedef.style == "old" then
 | 
				
			||||||
		local nsurround = ""
 | 
							local nsurround = ""
 | 
				
			||||||
		for i, n in ipairs(active) do
 | 
							for _, n in ipairs(active) do
 | 
				
			||||||
			nsurround = nsurround..n
 | 
								nsurround = nsurround..n
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		nctr.name = basename.."_"..nsurround
 | 
							nctr.name = basename.."_"..nsurround
 | 
				
			||||||
@@ -111,6 +112,22 @@ function pipeworks.after_dig(pos)
 | 
				
			|||||||
	pipeworks.scan_for_tube_objects(pos)
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Screwdriver calls this function before rotating a node.
 | 
				
			||||||
 | 
					-- However, connections must be updated *after* the node is rotated
 | 
				
			||||||
 | 
					-- So, this function does the rotation itself and returns `true`.
 | 
				
			||||||
 | 
					-- (Note: screwdriver already checks for protected areas.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- This should only be used for tubes that don't autoconnect.
 | 
				
			||||||
 | 
					-- (For example, one-way tubes.)
 | 
				
			||||||
 | 
					-- Autoconnecting tubes will just revert back to their original state
 | 
				
			||||||
 | 
					-- when they are updated.
 | 
				
			||||||
 | 
					function pipeworks.on_rotate(pos, node, user, mode, new_param2)
 | 
				
			||||||
 | 
						node.param2 = new_param2
 | 
				
			||||||
 | 
						minetest.swap_node(pos, node)
 | 
				
			||||||
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons_mvps") then
 | 
					if minetest.get_modpath("mesecons_mvps") then
 | 
				
			||||||
	mesecon.register_on_mvps_move(function(moved_nodes)
 | 
						mesecon.register_on_mvps_move(function(moved_nodes)
 | 
				
			||||||
		for _, n in ipairs(moved_nodes) do
 | 
							for _, n in ipairs(moved_nodes) do
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,55 @@
 | 
				
			|||||||
Changelog
 | 
					Changelog
 | 
				
			||||||
---------
 | 
					---------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2017-10-19 (thetaepsilon)
 | 
				
			||||||
 | 
					Directional flowables are now implemented.
 | 
				
			||||||
 | 
					All devices for which it is relevant (valve, flow sensor etc.) have been converted so that they only flow on their connecting sides, so pressure propogation now works as expected for these devices when pressure logic is enabled.
 | 
				
			||||||
 | 
					Classic mode continues to be preserved by default as before.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2017-10-14 (thetaepsilon, VanessaE)
 | 
				
			||||||
 | 
					Node breakers have been updated to not have a tool by default, and determine if the node that they are trying to break can be dug with the tool in it's inventory slot.
 | 
				
			||||||
 | 
					The crafting recipe for the node breakers has been updated, using a new gear crafting item that requires iron instead of mese, which should be a more accessible cost in most cases.
 | 
				
			||||||
 | 
					Existing node breakers in worlds will get their mese pick back if their slot is empty via LBM - the mese pick will show up in the inventory slot so you can reclaim your hard-earned mese crystals.
 | 
				
			||||||
 | 
					Gear item texture and updated node breaker textures provided by VanessaE.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2017-10-08 (thetaepsilon)
 | 
				
			||||||
 | 
					A lot more of the new flow logic work.
 | 
				
			||||||
 | 
					There are two sub-modes of this now,  non-finite and finite mode.
 | 
				
			||||||
 | 
					Non-finite mode most closely resembles "classic mode", whereas finite mode is more intended for use with mods such as dynamic_liquids which enable water sources to move themselves.
 | 
				
			||||||
 | 
					Everything that was functional in classic mode more or less works correctly now.
 | 
				
			||||||
 | 
					Still TODO:
 | 
				
			||||||
 | 
					+ Flow directionality - things like flow sensors and airtight panels will flow in directions that don't make sense from their visuals.
 | 
				
			||||||
 | 
					Possible feature requests:
 | 
				
			||||||
 | 
					+ Making tanks and gratings do something useful.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2017-09-27 (thetaepsilon)
 | 
				
			||||||
 | 
					Start of new flow logic re-implementation.
 | 
				
			||||||
 | 
					This mode is current *very* incomplete, and requires a per-world setting to enable.
 | 
				
			||||||
 | 
					Adds a pressure value stored in all pipe node metadata, and a mechanism to balance it out with nearby nodes on ABM trigger.
 | 
				
			||||||
 | 
					Currently, this inhibits the old behaviour when enabled, and (again WHEN ENABLED) breaks pretty much everything but normal pipes, spigots and pumps.
 | 
				
			||||||
 | 
					For this reason it is far from being intended as the default for some time to come yet.
 | 
				
			||||||
 | 
					What *does* work:
 | 
				
			||||||
 | 
					+ Pumps will try to take in water (and removes it!) as long as internal pressure does not exceed a threshold.
 | 
				
			||||||
 | 
						- a TODO is to make this pressure threshold configurable.
 | 
				
			||||||
 | 
					+ Pipes will balance this pressure between themselves, and will slowly average out over time.
 | 
				
			||||||
 | 
					+ Spigots will try to make the node beneath them a water source if the pressure is great enough and the existing node is flowing water or air.
 | 
				
			||||||
 | 
						- This is admittedly of fairly limited use with default water mechanics; those looking for more realistic mechanics might want to look at the dynamic_liquid mod, though that mod comes with it's own caveats (most notably drastic changes to previous worlds...).
 | 
				
			||||||
 | 
					What *does not* work:
 | 
				
			||||||
 | 
					+ Flow sensors, valves. Valves in particular currently do not function as a barrier to water's path under the experimental logic.
 | 
				
			||||||
 | 
						- TODO: internal code to allow this to be overriden.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*seems this hasn't been updated in a while*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2013-01-13: Tubes can transport items now! Namely, I added Novatux/Nore's item 
 | 
					2013-01-13: Tubes can transport items now! Namely, I added Novatux/Nore's item 
 | 
				
			||||||
transport mod as a default part of this mod, to make tubes do something useful!
 | 
					transport mod as a default part of this mod, to make tubes do something useful!
 | 
				
			||||||
Thanks to Nore and RealBadAngel for the code contributions!
 | 
					Thanks to Nore and RealBadAngel for the code contributions!
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										216
									
								
								common.lua
									
									
									
									
									
								
							
							
						
						@@ -86,10 +86,9 @@ function pipeworks.table_contains(tbl, element)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.table_extend(tbl, tbl2)
 | 
					function pipeworks.table_extend(tbl, tbl2)
 | 
				
			||||||
	local index = #tbl + 1
 | 
						local oldlength = #tbl
 | 
				
			||||||
	for _, elt in ipairs(tbl2) do
 | 
						for i = 1,#tbl2 do
 | 
				
			||||||
		tbl[index] = elt
 | 
							tbl[oldlength + i] = tbl2[i]
 | 
				
			||||||
		index = index + 1
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,7 +114,7 @@ local fs_helpers = {}
 | 
				
			|||||||
pipeworks.fs_helpers = fs_helpers
 | 
					pipeworks.fs_helpers = fs_helpers
 | 
				
			||||||
function fs_helpers.on_receive_fields(pos, fields)
 | 
					function fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
	for field, value in pairs(fields) do
 | 
						for field in pairs(fields) do
 | 
				
			||||||
		if pipeworks.string_startswith(field, "fs_helpers_cycling:") then
 | 
							if pipeworks.string_startswith(field, "fs_helpers_cycling:") then
 | 
				
			||||||
			local l = field:split(":")
 | 
								local l = field:split(":")
 | 
				
			||||||
			local new_value = tonumber(l[2])
 | 
								local new_value = tonumber(l[2])
 | 
				
			||||||
@@ -144,6 +143,81 @@ function fs_helpers.cycling_button(meta, base, meta_name, values)
 | 
				
			|||||||
	return base..";"..(texture_name and texture_name..";" or "")..field..";"..minetest.formspec_escape(text)..(addopts and ";"..addopts or "").."]"
 | 
						return base..";"..(texture_name and texture_name..";" or "")..field..";"..minetest.formspec_escape(text)..(addopts and ";"..addopts or "").."]"
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function fs_helpers.get_inv(y)
 | 
				
			||||||
 | 
						local fs = {}
 | 
				
			||||||
 | 
						if minetest.get_modpath("i3") then
 | 
				
			||||||
 | 
							local inv_x = i3.settings.legacy_inventory and 0.75 or 0.22
 | 
				
			||||||
 | 
							local inv_y = (y + 0.4) or 6.9
 | 
				
			||||||
 | 
							local size, spacing = 1, 0.1
 | 
				
			||||||
 | 
							local hotbar_len = i3.settings.hotbar_len or (i3.settings.legacy_inventory and 8 or 9)
 | 
				
			||||||
 | 
							local inv_size = i3.settings.inv_size or (hotbar_len * 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[box;colors=#77777710,#77777710,#777,#777]")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for i = 0, hotbar_len - 1 do
 | 
				
			||||||
 | 
								table.insert(fs, "box["..(i * size + inv_x + (i * spacing))..","..inv_y..";"..size..","..size..";]")
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[list;size="..size..";spacing="..spacing.."]")
 | 
				
			||||||
 | 
							table.insert(fs, "list[current_player;main;"..inv_x..","..inv_y..";"..hotbar_len..",1;]")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[box;colors=#666]")
 | 
				
			||||||
 | 
							for i=0, 2 do
 | 
				
			||||||
 | 
								for j=0, hotbar_len - 1 do
 | 
				
			||||||
 | 
									table.insert(fs, "box["..0.2+(j*0.1)+(j*size)..","..(inv_y+size+spacing+0.05)+(i*0.1)+(i*size)..";"..size..","..size..";]")
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[list;size="..size..";spacing="..spacing.."]")
 | 
				
			||||||
 | 
							table.insert(fs, "list[current_player;main;"..inv_x..","..(inv_y + 1.15)..";"..hotbar_len..","..(inv_size / hotbar_len)..";"..hotbar_len.."]")
 | 
				
			||||||
 | 
						elseif minetest.get_modpath("mcl_formspec") then
 | 
				
			||||||
 | 
							local inv_x = 0.22
 | 
				
			||||||
 | 
							local inv_y = (y + 0.4) or 6.9
 | 
				
			||||||
 | 
							local size, spacing = 1, 0.1
 | 
				
			||||||
 | 
							local hotbar_len = 9
 | 
				
			||||||
 | 
							local inv_size = hotbar_len * 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[box;colors=#77777710,#77777710,#777,#777]")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for i = 0, hotbar_len - 1 do
 | 
				
			||||||
 | 
								table.insert(fs, "box["..(i * size + inv_x + (i * spacing))..","..inv_y..";"..size..","..size..";]")
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[list;size="..size..";spacing="..spacing.."]")
 | 
				
			||||||
 | 
							table.insert(fs, "list[current_player;main;"..inv_x..","..inv_y..";"..hotbar_len..",1;]")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[box;colors=#666]")
 | 
				
			||||||
 | 
							for i=0, 2 do
 | 
				
			||||||
 | 
								for j=0, hotbar_len - 1 do
 | 
				
			||||||
 | 
									table.insert(fs, "box["..0.2+(j*0.1)+(j*size)..","..(inv_y+size+spacing+0.05)+(i*0.1)+(i*size)..";"..size..","..size..";]")
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(fs, "style_type[list;size="..size..";spacing="..spacing.."]")
 | 
				
			||||||
 | 
							table.insert(fs, "list[current_player;main;"..inv_x..","..(inv_y + 1.15)..";"..hotbar_len..","..(inv_size / hotbar_len)..";"..hotbar_len.."]")
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							table.insert(fs, "list[current_player;main;0.22,"..y..";8,4;]")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return table.concat(fs, "")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function fs_helpers.get_prepends(size)
 | 
				
			||||||
 | 
						local prepend = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if minetest.get_modpath("i3") then
 | 
				
			||||||
 | 
							prepend = {
 | 
				
			||||||
 | 
								"no_prepend[]",
 | 
				
			||||||
 | 
								"bgcolor[black;neither]",
 | 
				
			||||||
 | 
								"background9[0,0;"..size..";i3_bg_full.png;false;10]",
 | 
				
			||||||
 | 
								"style_type[button;border=false;bgimg=[combine:16x16^[noalpha^[colorize:#6b6b6b]",
 | 
				
			||||||
 | 
								"listcolors[#0000;#ffffff20]"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return table.concat(prepend, "")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---------
 | 
					---------
 | 
				
			||||||
-- Env --
 | 
					-- Env --
 | 
				
			||||||
---------
 | 
					---------
 | 
				
			||||||
@@ -157,3 +231,135 @@ function pipeworks.load_position(pos)
 | 
				
			|||||||
	local vm = minetest.get_voxel_manip()
 | 
						local vm = minetest.get_voxel_manip()
 | 
				
			||||||
	vm:read_from_map(pos, pos)
 | 
						vm:read_from_map(pos, pos)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function delay(...)
 | 
				
			||||||
 | 
						local args = {...}
 | 
				
			||||||
 | 
						return (function() return unpack(args) end)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function get_set_wrap(name, is_dynamic)
 | 
				
			||||||
 | 
						return (function(self)
 | 
				
			||||||
 | 
							return self["_" .. name]
 | 
				
			||||||
 | 
						end), (function(self, value)
 | 
				
			||||||
 | 
							if is_dynamic then
 | 
				
			||||||
 | 
								self["_" .. name] = type(value) == "table"
 | 
				
			||||||
 | 
									and table.copy(value) or value
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.create_fake_player(def, is_dynamic)
 | 
				
			||||||
 | 
						local wielded_item = ItemStack("")
 | 
				
			||||||
 | 
						if def.inventory and def.wield_list then
 | 
				
			||||||
 | 
							wielded_item = def.inventory:get_stack(def.wield_list, def.wield_index or 1)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local p = {
 | 
				
			||||||
 | 
							get_player_name = delay(def.name),
 | 
				
			||||||
 | 
							is_player = delay(true),
 | 
				
			||||||
 | 
							is_fake_player = true,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							_formspec = def.formspec or "",
 | 
				
			||||||
 | 
							_hp = def.hp or 20,
 | 
				
			||||||
 | 
							_breath = 11,
 | 
				
			||||||
 | 
							_pos = def.position and table.copy(def.position) or vector.new(),
 | 
				
			||||||
 | 
							_properties = def.properties or { eye_height = def.eye_height or 1.47 },
 | 
				
			||||||
 | 
							_inventory = def.inventory,
 | 
				
			||||||
 | 
							_wield_index = def.wield_index or 1,
 | 
				
			||||||
 | 
							_wielded_item = wielded_item,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- Model and view
 | 
				
			||||||
 | 
							_eye_offset1 = vector.new(),
 | 
				
			||||||
 | 
							_eye_offset3 = vector.new(),
 | 
				
			||||||
 | 
							set_eye_offset = function(self, first, third)
 | 
				
			||||||
 | 
								self._eye_offset1 = table.copy(first)
 | 
				
			||||||
 | 
								self._eye_offset3 = table.copy(third)
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							get_eye_offset = function(self)
 | 
				
			||||||
 | 
								return self._eye_offset1, self._eye_offset3
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							get_look_dir = delay(def.look_dir or {x=0, y=0, z=1}),
 | 
				
			||||||
 | 
							get_look_pitch = delay(def.look_pitch or 0),
 | 
				
			||||||
 | 
							get_look_yaw = delay(def.look_yaw or 0),
 | 
				
			||||||
 | 
							get_look_horizontal = delay(def.look_yaw or 0),
 | 
				
			||||||
 | 
							get_look_vertical = delay(-(def.look_pitch or 0)),
 | 
				
			||||||
 | 
							set_animation = delay(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- Controls
 | 
				
			||||||
 | 
							get_player_control = delay({
 | 
				
			||||||
 | 
								jump=false, right=false, left=false, LMB=false, RMB=false,
 | 
				
			||||||
 | 
								sneak=def.sneak, aux1=false, down=false, up=false
 | 
				
			||||||
 | 
							}),
 | 
				
			||||||
 | 
							get_player_control_bits = delay(def.sneak and 64 or 0),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- Inventory and ItemStacks
 | 
				
			||||||
 | 
							get_inventory = delay(def.inventory),
 | 
				
			||||||
 | 
							set_wielded_item = function(self, item)
 | 
				
			||||||
 | 
								if self._inventory and def.wield_list then
 | 
				
			||||||
 | 
									return self._inventory:set_stack(def.wield_list,
 | 
				
			||||||
 | 
										self._wield_index, item)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								self._wielded_item = ItemStack(item)
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							get_wielded_item = function(self, item)
 | 
				
			||||||
 | 
								if self._inventory and def.wield_list then
 | 
				
			||||||
 | 
									return self._inventory:get_stack(def.wield_list,
 | 
				
			||||||
 | 
										self._wield_index)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								return ItemStack(self._wielded_item)
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							get_wield_list = delay(def.wield_list),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							punch = delay(),
 | 
				
			||||||
 | 
							remove = delay(),
 | 
				
			||||||
 | 
							right_click = delay(),
 | 
				
			||||||
 | 
							set_attach = delay(),
 | 
				
			||||||
 | 
							set_detach = delay(),
 | 
				
			||||||
 | 
							set_bone_position = delay(),
 | 
				
			||||||
 | 
							hud_change = delay(),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						-- Getter & setter functions
 | 
				
			||||||
 | 
						p.get_inventory_formspec, p.set_inventory_formspec
 | 
				
			||||||
 | 
							= get_set_wrap("formspec", is_dynamic)
 | 
				
			||||||
 | 
						p.get_breath, p.set_breath = get_set_wrap("breath", is_dynamic)
 | 
				
			||||||
 | 
						p.get_hp, p.set_hp = get_set_wrap("hp", is_dynamic)
 | 
				
			||||||
 | 
						p.get_pos, p.set_pos = get_set_wrap("pos", is_dynamic)
 | 
				
			||||||
 | 
						p.get_wield_index, p.set_wield_index = get_set_wrap("wield_index", true)
 | 
				
			||||||
 | 
						p.get_properties, p.set_properties = get_set_wrap("properties", false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- For players, move_to and get_pos do the same
 | 
				
			||||||
 | 
						p.move_to = p.get_pos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- Backwards compatibilty
 | 
				
			||||||
 | 
						p.getpos = p.get_pos
 | 
				
			||||||
 | 
						p.setpos = p.set_pos
 | 
				
			||||||
 | 
						p.moveto = p.move_to
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- TODO "implement" all these
 | 
				
			||||||
 | 
						-- set_armor_groups
 | 
				
			||||||
 | 
						-- get_armor_groups
 | 
				
			||||||
 | 
						-- get_animation
 | 
				
			||||||
 | 
						-- get_bone_position
 | 
				
			||||||
 | 
						-- get_player_velocity
 | 
				
			||||||
 | 
						-- set_look_pitch
 | 
				
			||||||
 | 
						-- set_look_yaw
 | 
				
			||||||
 | 
						-- set_physics_override
 | 
				
			||||||
 | 
						-- get_physics_override
 | 
				
			||||||
 | 
						-- hud_add
 | 
				
			||||||
 | 
						-- hud_remove
 | 
				
			||||||
 | 
						-- hud_get
 | 
				
			||||||
 | 
						-- hud_set_flags
 | 
				
			||||||
 | 
						-- hud_get_flags
 | 
				
			||||||
 | 
						-- hud_set_hotbar_itemcount
 | 
				
			||||||
 | 
						-- hud_get_hotbar_itemcount
 | 
				
			||||||
 | 
						-- hud_set_hotbar_image
 | 
				
			||||||
 | 
						-- hud_get_hotbar_image
 | 
				
			||||||
 | 
						-- hud_set_hotbar_selected_image
 | 
				
			||||||
 | 
						-- hud_get_hotbar_selected_image
 | 
				
			||||||
 | 
						-- hud_replace_builtin
 | 
				
			||||||
 | 
						-- set_sky
 | 
				
			||||||
 | 
						-- get_sky
 | 
				
			||||||
 | 
						-- override_day_night_ratio
 | 
				
			||||||
 | 
						-- get_day_night_ratio
 | 
				
			||||||
 | 
						-- set_local_animation
 | 
				
			||||||
 | 
						return p
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,10 @@ local tube_entry = "^pipeworks_tube_connection_wooden.png"
 | 
				
			|||||||
-- Chest Locals
 | 
					-- Chest Locals
 | 
				
			||||||
local open_chests = {}
 | 
					local open_chests = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function get_chest_formspec(pos)
 | 
					local get_chest_formspec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("default") then
 | 
				
			||||||
 | 
						function get_chest_formspec(pos)
 | 
				
			||||||
		local spos = pos.x .. "," .. pos.y .. "," .. pos.z
 | 
							local spos = pos.x .. "," .. pos.y .. "," .. pos.z
 | 
				
			||||||
		local formspec =
 | 
							local formspec =
 | 
				
			||||||
			"size[8,9]" ..
 | 
								"size[8,9]" ..
 | 
				
			||||||
@@ -38,12 +41,49 @@ local function get_chest_formspec(pos)
 | 
				
			|||||||
			)..pipeworks.button_label
 | 
								)..pipeworks.button_label
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return formspec
 | 
							return formspec
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						local function get_hotbar_bg(x,y)
 | 
				
			||||||
 | 
							local out = ""
 | 
				
			||||||
 | 
							for i=0,7,1 do
 | 
				
			||||||
 | 
								out = out .."image["..x+i..","..y..";1,1;gui_hb_bg.png]"
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							return out
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function get_chest_formspec(pos)
 | 
				
			||||||
 | 
							local spos = pos.x .. "," .. pos.y .. "," .. pos.z
 | 
				
			||||||
 | 
							local formspec =
 | 
				
			||||||
 | 
								"size[10,9]" ..
 | 
				
			||||||
 | 
								"background9[8,8;8,9;hades_chests_chestui.png;true;8]"..
 | 
				
			||||||
 | 
								"list[nodemeta:" .. spos .. ";main;0,0.3;10,4;]" ..
 | 
				
			||||||
 | 
								"list[current_player;main;0,4.85;10,1;]" ..
 | 
				
			||||||
 | 
								"list[current_player;main;0,6.08;10,3;10]" ..
 | 
				
			||||||
 | 
								"listring[nodemeta:" .. spos .. ";main]" ..
 | 
				
			||||||
 | 
								"listring[current_player;main]" ..
 | 
				
			||||||
 | 
								get_hotbar_bg(0,4.85)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- Pipeworks Switch
 | 
				
			||||||
 | 
							formspec = formspec ..
 | 
				
			||||||
 | 
								fs_helpers.cycling_button(
 | 
				
			||||||
 | 
									minetest.get_meta(pos),
 | 
				
			||||||
 | 
									pipeworks.button_base,
 | 
				
			||||||
 | 
									"splitstacks",
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										pipeworks.button_off,
 | 
				
			||||||
 | 
										pipeworks.button_on
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								)..pipeworks.button_label
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return formspec
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function chest_lid_obstructed(pos)
 | 
					local function chest_lid_obstructed(pos)
 | 
				
			||||||
	local above = { x = pos.x, y = pos.y + 1, z = pos.z }
 | 
						local above = { x = pos.x, y = pos.y + 1, z = pos.z }
 | 
				
			||||||
	local def = minetest.registered_nodes[minetest.get_node(above).name]
 | 
						local def = minetest.registered_nodes[minetest.get_node(above).name]
 | 
				
			||||||
	-- allow ladders, signs, wallmounted things and torches to not obstruct
 | 
						-- allow ladders, signs, wallmounted things and torches to not obstruct
 | 
				
			||||||
 | 
						if not def then return true end
 | 
				
			||||||
	if def.drawtype == "airlike" or
 | 
						if def.drawtype == "airlike" or
 | 
				
			||||||
			def.drawtype == "signlike" or
 | 
								def.drawtype == "signlike" or
 | 
				
			||||||
			def.drawtype == "torchlike" or
 | 
								def.drawtype == "torchlike" or
 | 
				
			||||||
@@ -64,22 +104,22 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
				
			|||||||
				local node = minetest.get_node(pos)
 | 
									local node = minetest.get_node(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				open_chests[pn] = nil
 | 
									open_chests[pn] = nil
 | 
				
			||||||
				for k, v in pairs(open_chests) do
 | 
									for _, v in pairs(open_chests) do
 | 
				
			||||||
					if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
 | 
										if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
 | 
				
			||||||
						return true
 | 
											return true
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				minetest.after(0.2, function()
 | 
									minetest.after(0.2, function()
 | 
				
			||||||
 | 
										if minetest.get_modpath("default") then
 | 
				
			||||||
						minetest.swap_node(pos, { name = "default:" .. swap, param2 = node.param2 })
 | 
											minetest.swap_node(pos, { name = "default:" .. swap, param2 = node.param2 })
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					-- Pipeworks notification
 | 
										-- Pipeworks notification
 | 
				
			||||||
					pipeworks.after_place(pos)
 | 
										pipeworks.after_place(pos)
 | 
				
			||||||
				end)
 | 
									end)
 | 
				
			||||||
				minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10})
 | 
									minetest.sound_play(sound, {gain = 0.3, pos = pos, max_hear_distance = 10})
 | 
				
			||||||
			end
 | 
								elseif pipeworks.may_configure(pos, player) then
 | 
				
			||||||
			
 | 
					 | 
				
			||||||
				-- Pipeworks Switch
 | 
									-- Pipeworks Switch
 | 
				
			||||||
			if pipeworks.may_configure(pos, player) and not fields.quit then
 | 
					 | 
				
			||||||
				fs_helpers.on_receive_fields(pos, fields)
 | 
									fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
				minetest.show_formspec(player:get_player_name(), "pipeworks:chest_formspec", get_chest_formspec(pos))
 | 
									minetest.show_formspec(player:get_player_name(), "pipeworks:chest_formspec", get_chest_formspec(pos))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -89,10 +129,18 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
				
			|||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Original Definitions
 | 
					-- Original Definitions
 | 
				
			||||||
local old_chest_def = table.copy(minetest.registered_items["default:chest"])
 | 
					local old_chest_def, old_chest_open_def, old_chest_locked_def, old_chest_locked_open_def
 | 
				
			||||||
local old_chest_open_def = table.copy(minetest.registered_items["default:chest_open"])
 | 
					if minetest.get_modpath("default") then
 | 
				
			||||||
local old_chest_locked_def = table.copy(minetest.registered_items["default:chest_locked"])
 | 
						old_chest_def = table.copy(minetest.registered_items["default:chest"])
 | 
				
			||||||
local old_chest_locked_open_def = table.copy(minetest.registered_items["default:chest_locked_open"])
 | 
						old_chest_open_def = table.copy(minetest.registered_items["default:chest_open"])
 | 
				
			||||||
 | 
						old_chest_locked_def = table.copy(minetest.registered_items["default:chest_locked"])
 | 
				
			||||||
 | 
						old_chest_locked_open_def = table.copy(minetest.registered_items["default:chest_locked_open"])
 | 
				
			||||||
 | 
					elseif minetest.get_modpath("hades_chests") then
 | 
				
			||||||
 | 
						old_chest_def = table.copy(minetest.registered_items["hades_chests:chest"])
 | 
				
			||||||
 | 
						old_chest_open_def = table.copy(minetest.registered_items["hades_chests:chest"])
 | 
				
			||||||
 | 
						old_chest_locked_def = table.copy(minetest.registered_items["hades_chests:chest_locked"])
 | 
				
			||||||
 | 
						old_chest_locked_open_def = table.copy(minetest.registered_items["hades_chests:chest_locked"])
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Override Construction
 | 
					-- Override Construction
 | 
				
			||||||
local override_protected, override, override_open, override_protected_open
 | 
					local override_protected, override, override_open, override_protected_open
 | 
				
			||||||
@@ -117,10 +165,12 @@ override_protected = {
 | 
				
			|||||||
		minetest.sound_play(old_chest_locked_def.sound_open, {gain = 0.3,
 | 
							minetest.sound_play(old_chest_locked_def.sound_open, {gain = 0.3,
 | 
				
			||||||
				pos = pos, max_hear_distance = 10})
 | 
									pos = pos, max_hear_distance = 10})
 | 
				
			||||||
		if not chest_lid_obstructed(pos) then
 | 
							if not chest_lid_obstructed(pos) then
 | 
				
			||||||
 | 
								if minetest.get_modpath("default") then
 | 
				
			||||||
				minetest.swap_node(pos,
 | 
									minetest.swap_node(pos,
 | 
				
			||||||
						{ name = "default:" .. "chest_locked" .. "_open",
 | 
											{ name = "default:" .. "chest_locked" .. "_open",
 | 
				
			||||||
						param2 = node.param2 })
 | 
											param2 = node.param2 })
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
		minetest.after(0.2, minetest.show_formspec,
 | 
							minetest.after(0.2, minetest.show_formspec,
 | 
				
			||||||
				clicker:get_player_name(),
 | 
									clicker:get_player_name(),
 | 
				
			||||||
				"pipeworks:chest_formspec", get_chest_formspec(pos))
 | 
									"pipeworks:chest_formspec", get_chest_formspec(pos))
 | 
				
			||||||
@@ -142,9 +192,11 @@ override_protected = {
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
			return inv:room_for_item("main", stack)
 | 
								return inv:room_for_item("main", stack)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
 | 
							input_inventory = "main",
 | 
				
			||||||
		connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
							connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
 | 
						on_rotate = pipeworks.on_rotate
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
override = {
 | 
					override = {
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
@@ -159,10 +211,12 @@ override = {
 | 
				
			|||||||
		minetest.sound_play(old_chest_def.sound_open, {gain = 0.3, pos = pos,
 | 
							minetest.sound_play(old_chest_def.sound_open, {gain = 0.3, pos = pos,
 | 
				
			||||||
				max_hear_distance = 10})
 | 
									max_hear_distance = 10})
 | 
				
			||||||
		if not chest_lid_obstructed(pos) then
 | 
							if not chest_lid_obstructed(pos) then
 | 
				
			||||||
 | 
								if minetest.get_modpath("default") then
 | 
				
			||||||
				minetest.swap_node(pos, {
 | 
									minetest.swap_node(pos, {
 | 
				
			||||||
						name = "default:" .. "chest" .. "_open",
 | 
											name = "default:" .. "chest" .. "_open",
 | 
				
			||||||
						param2 = node.param2 })
 | 
											param2 = node.param2 })
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
		minetest.after(0.2, minetest.show_formspec,
 | 
							minetest.after(0.2, minetest.show_formspec,
 | 
				
			||||||
				clicker:get_player_name(),
 | 
									clicker:get_player_name(),
 | 
				
			||||||
				"pipeworks:chest_formspec", get_chest_formspec(pos))
 | 
									"pipeworks:chest_formspec", get_chest_formspec(pos))
 | 
				
			||||||
@@ -188,7 +242,8 @@ override = {
 | 
				
			|||||||
		connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
							connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	after_place_node = pipeworks.after_place,
 | 
						after_place_node = pipeworks.after_place,
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
 | 
						on_rotate = pipeworks.on_rotate
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
--[[local override_common = {
 | 
					--[[local override_common = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -228,14 +283,21 @@ override.tiles = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Add the extra groups
 | 
					-- Add the extra groups
 | 
				
			||||||
for i,v in ipairs({override_protected, override, override_open, override_protected_open}) do
 | 
					for _,v in ipairs({override_protected, override, override_open, override_protected_open}) do
 | 
				
			||||||
	v.groups.tubedevice = 1
 | 
						v.groups.tubedevice = 1
 | 
				
			||||||
	v.groups.tubedevice_receiver = 1
 | 
						v.groups.tubedevice_receiver = 1
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Override with the new modifications.
 | 
					-- Override with the new modifications.
 | 
				
			||||||
minetest.override_item("default:chest", override)
 | 
					if minetest.get_modpath("default") then
 | 
				
			||||||
minetest.override_item("default:chest_open", override_open)
 | 
						minetest.override_item("default:chest", override)
 | 
				
			||||||
minetest.override_item("default:chest_locked", override_protected)
 | 
						minetest.override_item("default:chest_open", override_open)
 | 
				
			||||||
minetest.override_item("default:chest_locked_open", override_protected_open)
 | 
						minetest.override_item("default:chest_locked", override_protected)
 | 
				
			||||||
 | 
					  minetest.override_item("default:chest_locked_open", override_protected_open)
 | 
				
			||||||
 | 
					elseif minetest.get_modpath("hades_chests") then
 | 
				
			||||||
 | 
						minetest.override_item("hades_chests:chest", override)
 | 
				
			||||||
 | 
						--minetest.override_item("hades_chests:chest_open", override_open)
 | 
				
			||||||
 | 
						minetest.override_item("hades_chests:chest_locked", override_protected)
 | 
				
			||||||
 | 
					  --minetest.override_item("hades_chests:chest_locked_open", override_protected_open)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,277 +1,28 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
-- this file is basically a modified copy of
 | 
					-- this file is basically a modified copy of
 | 
				
			||||||
-- minetest_game/mods/default/furnaces.lua
 | 
					-- minetest_game/mods/default/furnaces.lua
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local fs_helpers = pipeworks.fs_helpers
 | 
					local def--, def_active
 | 
				
			||||||
 | 
					if minetest.get_modpath("default") then
 | 
				
			||||||
tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
						def = table.copy(minetest.registered_nodes["default:furnace"])
 | 
				
			||||||
 | 
						--def_active = table.copy(minetest.registered_nodes["default:furnace_active"])
 | 
				
			||||||
local function active_formspec(fuel_percent, item_percent, pos, meta)
 | 
					elseif minetest.get_modpath("hades_furnaces") then
 | 
				
			||||||
	local formspec =
 | 
						def = table.copy(minetest.registered_nodes["hades_furnaces:furnace"])
 | 
				
			||||||
		"size[8,8.5]"..
 | 
						--def_active = table.copy(minetest.registered_nodes["hades_furnaces:furnace_active"])
 | 
				
			||||||
		default.gui_bg..
 | 
					 | 
				
			||||||
		default.gui_bg_img..
 | 
					 | 
				
			||||||
		default.gui_slots..
 | 
					 | 
				
			||||||
		"list[current_name;src;2.75,0.5;1,1;]"..
 | 
					 | 
				
			||||||
		"list[current_name;fuel;2.75,2.5;1,1;]"..
 | 
					 | 
				
			||||||
		"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
 | 
					 | 
				
			||||||
		(100-fuel_percent)..":default_furnace_fire_fg.png]"..
 | 
					 | 
				
			||||||
		"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
 | 
					 | 
				
			||||||
		(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
 | 
					 | 
				
			||||||
		"list[current_name;dst;4.75,0.96;2,2;]"..
 | 
					 | 
				
			||||||
		"list[current_player;main;0,4.25;8,1;]"..
 | 
					 | 
				
			||||||
		"list[current_player;main;0,5.5;8,3;8]"..
 | 
					 | 
				
			||||||
		"listring[current_name;dst]"..
 | 
					 | 
				
			||||||
		"listring[current_player;main]"..
 | 
					 | 
				
			||||||
		"listring[current_name;src]"..
 | 
					 | 
				
			||||||
		"listring[current_player;main]"..
 | 
					 | 
				
			||||||
		"listring[current_name;fuel]"..
 | 
					 | 
				
			||||||
		"listring[current_player;main]"..
 | 
					 | 
				
			||||||
		default.get_hotbar_bg(0, 4.25) ..
 | 
					 | 
				
			||||||
			fs_helpers.cycling_button(
 | 
					 | 
				
			||||||
				meta,
 | 
					 | 
				
			||||||
				"image_button[0,3.5;1,0.6",
 | 
					 | 
				
			||||||
				"split_material_stacks",
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					pipeworks.button_off,
 | 
					 | 
				
			||||||
					pipeworks.button_on
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]"
 | 
					 | 
				
			||||||
	return formspec
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function inactive_formspec(pos, meta)
 | 
					local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
				
			||||||
	local formspec = "size[8,8.5]"..
 | 
					 | 
				
			||||||
	default.gui_bg..
 | 
					 | 
				
			||||||
	default.gui_bg_img..
 | 
					 | 
				
			||||||
	default.gui_slots..
 | 
					 | 
				
			||||||
	"list[current_name;src;2.75,0.5;1,1;]"..
 | 
					 | 
				
			||||||
	"list[current_name;fuel;2.75,2.5;1,1;]"..
 | 
					 | 
				
			||||||
	"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
 | 
					 | 
				
			||||||
	"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
 | 
					 | 
				
			||||||
	"list[current_name;dst;4.75,0.96;2,2;]"..
 | 
					 | 
				
			||||||
	"list[current_player;main;0,4.25;8,1;]"..
 | 
					 | 
				
			||||||
	"list[current_player;main;0,5.5;8,3;8]"..
 | 
					 | 
				
			||||||
	"listring[current_name;dst]"..
 | 
					 | 
				
			||||||
	"listring[current_player;main]"..
 | 
					 | 
				
			||||||
	"listring[current_name;src]"..
 | 
					 | 
				
			||||||
	"listring[current_player;main]"..
 | 
					 | 
				
			||||||
	"listring[current_name;fuel]"..
 | 
					 | 
				
			||||||
	"listring[current_player;main]"..
 | 
					 | 
				
			||||||
	default.get_hotbar_bg(0, 4.25) ..
 | 
					 | 
				
			||||||
		fs_helpers.cycling_button(
 | 
					 | 
				
			||||||
			meta,
 | 
					 | 
				
			||||||
			"image_button[0,3.5;1,0.6",
 | 
					 | 
				
			||||||
			"split_material_stacks",
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				pipeworks.button_off,
 | 
					 | 
				
			||||||
				pipeworks.button_on
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]"
 | 
					 | 
				
			||||||
	return formspec
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
--
 | 
					local groups = def.groups
 | 
				
			||||||
-- Node callback functions that are the same for active and inactive furnace
 | 
					groups["tubedevice"] = 1
 | 
				
			||||||
--
 | 
					groups["tubedevice_receiver"] = 1
 | 
				
			||||||
 | 
					local groups_active = table.copy(groups)
 | 
				
			||||||
local function can_dig(pos, player)
 | 
					groups_active["not_in_creative_inventory"] = 1
 | 
				
			||||||
	local meta = minetest.get_meta(pos);
 | 
					 | 
				
			||||||
	local inv = meta:get_inventory()
 | 
					 | 
				
			||||||
	return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src")
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
 | 
					 | 
				
			||||||
	if minetest.is_protected(pos, player:get_player_name()) then
 | 
					 | 
				
			||||||
		return 0
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
	local inv = meta:get_inventory()
 | 
					 | 
				
			||||||
	if listname == "fuel" then
 | 
					 | 
				
			||||||
		if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
 | 
					 | 
				
			||||||
			if inv:is_empty("src") then
 | 
					 | 
				
			||||||
				meta:set_string("infotext", "Furnace is empty")
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			return stack:get_count()
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			return 0
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	elseif listname == "src" then
 | 
					 | 
				
			||||||
		return stack:get_count()
 | 
					 | 
				
			||||||
	elseif listname == "dst" then
 | 
					 | 
				
			||||||
		return 0
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
 | 
					 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
	local inv = meta:get_inventory()
 | 
					 | 
				
			||||||
	local stack = inv:get_stack(from_list, from_index)
 | 
					 | 
				
			||||||
	return allow_metadata_inventory_put(pos, to_list, to_index, stack, player)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
 | 
					 | 
				
			||||||
	if minetest.is_protected(pos, player:get_player_name()) then
 | 
					 | 
				
			||||||
		return 0
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	return stack:get_count()
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function swap_node(pos, name)
 | 
					 | 
				
			||||||
	local node = minetest.get_node(pos)
 | 
					 | 
				
			||||||
	if node.name == name then
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	node.name = name
 | 
					 | 
				
			||||||
	minetest.swap_node(pos, node)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function furnace_node_timer(pos, elapsed)
 | 
					 | 
				
			||||||
	--
 | 
					 | 
				
			||||||
	-- Inizialize metadata
 | 
					 | 
				
			||||||
	--
 | 
					 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
	local fuel_time = meta:get_float("fuel_time") or 0
 | 
					 | 
				
			||||||
	local src_time = meta:get_float("src_time") or 0
 | 
					 | 
				
			||||||
	local fuel_totaltime = meta:get_float("fuel_totaltime") or 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	local inv = meta:get_inventory()
 | 
					 | 
				
			||||||
	local srclist, fuellist
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	local cookable, cooked
 | 
					 | 
				
			||||||
	local fuel
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	local update = true
 | 
					 | 
				
			||||||
	while update do
 | 
					 | 
				
			||||||
		update = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		srclist = inv:get_list("src")
 | 
					 | 
				
			||||||
		fuellist = inv:get_list("fuel")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		--
 | 
					 | 
				
			||||||
		-- Cooking
 | 
					 | 
				
			||||||
		--
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		-- Check if we have cookable content
 | 
					 | 
				
			||||||
		local aftercooked
 | 
					 | 
				
			||||||
		cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
 | 
					 | 
				
			||||||
		cookable = cooked.time ~= 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		-- Check if we have enough fuel to burn
 | 
					 | 
				
			||||||
		if fuel_time < fuel_totaltime then
 | 
					 | 
				
			||||||
			-- The furnace is currently active and has enough fuel
 | 
					 | 
				
			||||||
			fuel_time = fuel_time + elapsed
 | 
					 | 
				
			||||||
			-- If there is a cookable item then check if it is ready yet
 | 
					 | 
				
			||||||
			if cookable then
 | 
					 | 
				
			||||||
				src_time = src_time + elapsed
 | 
					 | 
				
			||||||
				if src_time >= cooked.time then
 | 
					 | 
				
			||||||
					-- Place result in dst list if possible
 | 
					 | 
				
			||||||
					if inv:room_for_item("dst", cooked.item) then
 | 
					 | 
				
			||||||
						inv:add_item("dst", cooked.item)
 | 
					 | 
				
			||||||
						inv:set_stack("src", 1, aftercooked.items[1])
 | 
					 | 
				
			||||||
						src_time = src_time - cooked.time
 | 
					 | 
				
			||||||
						update = true
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			-- Furnace ran out of fuel
 | 
					 | 
				
			||||||
			if cookable then
 | 
					 | 
				
			||||||
				-- We need to get new fuel
 | 
					 | 
				
			||||||
				local afterfuel
 | 
					 | 
				
			||||||
				fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				if fuel.time == 0 then
 | 
					 | 
				
			||||||
					-- No valid fuel in fuel list
 | 
					 | 
				
			||||||
					fuel_totaltime = 0
 | 
					 | 
				
			||||||
					src_time = 0
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
					-- Take fuel from fuel list
 | 
					 | 
				
			||||||
					inv:set_stack("fuel", 1, afterfuel.items[1])
 | 
					 | 
				
			||||||
					update = true
 | 
					 | 
				
			||||||
					fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime)
 | 
					 | 
				
			||||||
					src_time = src_time + elapsed
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				-- We don't need to get new fuel since there is no cookable item
 | 
					 | 
				
			||||||
				fuel_totaltime = 0
 | 
					 | 
				
			||||||
				src_time = 0
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			fuel_time = 0
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		elapsed = 0
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if fuel and fuel_totaltime > fuel.time then
 | 
					 | 
				
			||||||
		fuel_totaltime = fuel.time
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	if srclist[1]:is_empty() then
 | 
					 | 
				
			||||||
		src_time = 0
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	--
 | 
					 | 
				
			||||||
	-- Update formspec, infotext and node
 | 
					 | 
				
			||||||
	--
 | 
					 | 
				
			||||||
	local formspec = inactive_formspec(pos, meta)
 | 
					 | 
				
			||||||
	local item_state
 | 
					 | 
				
			||||||
	local item_percent = 0
 | 
					 | 
				
			||||||
	if cookable then
 | 
					 | 
				
			||||||
		item_percent = math.floor(src_time / cooked.time * 100)
 | 
					 | 
				
			||||||
		if item_percent > 100 then
 | 
					 | 
				
			||||||
			item_state = "100% (output full)"
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			item_state = item_percent .. "%"
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		if srclist[1]:is_empty() then
 | 
					 | 
				
			||||||
			item_state = "Empty"
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			item_state = "Not cookable"
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	local fuel_state = "Empty"
 | 
					 | 
				
			||||||
	local active = "inactive "
 | 
					 | 
				
			||||||
	local result = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if fuel_totaltime ~= 0 then
 | 
					 | 
				
			||||||
		active = "active "
 | 
					 | 
				
			||||||
		local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
 | 
					 | 
				
			||||||
		fuel_state = fuel_percent .. "%"
 | 
					 | 
				
			||||||
		formspec = active_formspec(fuel_percent, item_percent, pos, meta)
 | 
					 | 
				
			||||||
		swap_node(pos, "default:furnace_active")
 | 
					 | 
				
			||||||
		-- make sure timer restarts automatically
 | 
					 | 
				
			||||||
		result = true
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		if not fuellist[1]:is_empty() then
 | 
					 | 
				
			||||||
			fuel_state = "0%"
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
		swap_node(pos, "default:furnace")
 | 
					 | 
				
			||||||
		-- stop timer on the inactive furnace
 | 
					 | 
				
			||||||
		minetest.get_node_timer(pos):stop()
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	--
 | 
					 | 
				
			||||||
	-- Set meta values
 | 
					 | 
				
			||||||
	--
 | 
					 | 
				
			||||||
	meta:set_float("fuel_totaltime", fuel_totaltime)
 | 
					 | 
				
			||||||
	meta:set_float("fuel_time", fuel_time)
 | 
					 | 
				
			||||||
	meta:set_float("src_time", src_time)
 | 
					 | 
				
			||||||
	meta:set_string("formspec", formspec)
 | 
					 | 
				
			||||||
	meta:set_string("infotext", infotext)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return result
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
-- Node definitions
 | 
					-- Node definitions
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node(":default:furnace", {
 | 
					local override = {
 | 
				
			||||||
	description = "Furnace",
 | 
					 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		"default_furnace_top.png"..tube_entry,
 | 
							"default_furnace_top.png"..tube_entry,
 | 
				
			||||||
		"default_furnace_bottom.png"..tube_entry,
 | 
							"default_furnace_bottom.png"..tube_entry,
 | 
				
			||||||
@@ -280,7 +31,7 @@ minetest.register_node(":default:furnace", {
 | 
				
			|||||||
		"default_furnace_side.png"..tube_entry,
 | 
							"default_furnace_side.png"..tube_entry,
 | 
				
			||||||
		"default_furnace_front.png"
 | 
							"default_furnace_front.png"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1},
 | 
						groups = groups,
 | 
				
			||||||
	tube = {
 | 
						tube = {
 | 
				
			||||||
		insert_object = function(pos, node, stack, direction)
 | 
							insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = minetest.get_meta(pos)
 | 
				
			||||||
@@ -308,58 +59,15 @@ minetest.register_node(":default:furnace", {
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		input_inventory = "dst",
 | 
							input_inventory = "dst",
 | 
				
			||||||
		connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
 | 
							connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
					 | 
				
			||||||
	legacy_facedir_simple = true,
 | 
					 | 
				
			||||||
	is_ground_content = false,
 | 
					 | 
				
			||||||
	sounds = default.node_sound_stone_defaults(),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	can_dig = can_dig,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	on_timer = furnace_node_timer,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	on_construct = function(pos)
 | 
					 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
		meta:set_string("formspec", inactive_formspec(pos, meta))
 | 
					 | 
				
			||||||
		local inv = meta:get_inventory()
 | 
					 | 
				
			||||||
		inv:set_size('src', 1)
 | 
					 | 
				
			||||||
		inv:set_size('fuel', 1)
 | 
					 | 
				
			||||||
		inv:set_size('dst', 4)
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	on_metadata_inventory_move = function(pos)
 | 
					 | 
				
			||||||
		minetest.get_node_timer(pos):start(1.0)
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
	on_metadata_inventory_put = function(pos)
 | 
					 | 
				
			||||||
		-- start timer function, it will sort out whether furnace can burn or not.
 | 
					 | 
				
			||||||
		minetest.get_node_timer(pos):start(1.0)
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
	on_blast = function(pos)
 | 
					 | 
				
			||||||
		local drops = {}
 | 
					 | 
				
			||||||
		default.get_inventory_drops(pos, "src", drops)
 | 
					 | 
				
			||||||
		default.get_inventory_drops(pos, "fuel", drops)
 | 
					 | 
				
			||||||
		default.get_inventory_drops(pos, "dst", drops)
 | 
					 | 
				
			||||||
		drops[#drops+1] = "default:furnace"
 | 
					 | 
				
			||||||
		minetest.remove_node(pos)
 | 
					 | 
				
			||||||
		return drops
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
	allow_metadata_inventory_put = allow_metadata_inventory_put,
 | 
					 | 
				
			||||||
	allow_metadata_inventory_move = allow_metadata_inventory_move,
 | 
					 | 
				
			||||||
	allow_metadata_inventory_take = allow_metadata_inventory_take,
 | 
					 | 
				
			||||||
	on_receive_fields = function(pos, formname, fields, sender)
 | 
					 | 
				
			||||||
		if not pipeworks.may_configure(pos, sender) then return end
 | 
					 | 
				
			||||||
		fs_helpers.on_receive_fields(pos, fields)
 | 
					 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
		local formspec = inactive_formspec(pos, meta)
 | 
					 | 
				
			||||||
		meta:set_string("formspec", formspec)
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
	after_place_node = pipeworks.after_place,
 | 
						after_place_node = pipeworks.after_place,
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
})
 | 
						on_rotate = pipeworks.on_rotate
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node(":default:furnace_active", {
 | 
					local override_active = {
 | 
				
			||||||
	description = "Furnace",
 | 
					 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		"default_furnace_top.png"..tube_entry,
 | 
							"default_furnace_top.png"..tube_entry,
 | 
				
			||||||
		"default_furnace_bottom.png"..tube_entry,
 | 
							"default_furnace_bottom.png"..tube_entry,
 | 
				
			||||||
@@ -377,7 +85,7 @@ minetest.register_node(":default:furnace_active", {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1, not_in_creative_inventory = 1},
 | 
						groups = groups_active,
 | 
				
			||||||
	tube = {
 | 
						tube = {
 | 
				
			||||||
		insert_object = function(pos,node,stack,direction)
 | 
							insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = minetest.get_meta(pos)
 | 
				
			||||||
@@ -398,36 +106,23 @@ minetest.register_node(":default:furnace_active", {
 | 
				
			|||||||
			if direction.y == 1 then
 | 
								if direction.y == 1 then
 | 
				
			||||||
				return inv:room_for_item("fuel", stack)
 | 
									return inv:room_for_item("fuel", stack)
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				if meta:get_int("split_material_stacks") == 1 then
 | 
					 | 
				
			||||||
					stack = stack:peek_item(1)
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
				return inv:room_for_item("src", stack)
 | 
									return inv:room_for_item("src", stack)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		input_inventory = "dst",
 | 
							input_inventory = "dst",
 | 
				
			||||||
		connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
 | 
							connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
					 | 
				
			||||||
	light_source = 8,
 | 
					 | 
				
			||||||
	drop = "default:furnace",
 | 
					 | 
				
			||||||
	legacy_facedir_simple = true,
 | 
					 | 
				
			||||||
	is_ground_content = false,
 | 
					 | 
				
			||||||
	sounds = default.node_sound_stone_defaults(),
 | 
					 | 
				
			||||||
	on_timer = furnace_node_timer,
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	can_dig = can_dig,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	allow_metadata_inventory_put = allow_metadata_inventory_put,
 | 
					 | 
				
			||||||
	allow_metadata_inventory_move = allow_metadata_inventory_move,
 | 
					 | 
				
			||||||
	allow_metadata_inventory_take = allow_metadata_inventory_take,
 | 
					 | 
				
			||||||
	on_receive_fields = function(pos, formname, fields, sender)
 | 
					 | 
				
			||||||
		if not pipeworks.may_configure(pos, sender) then return end
 | 
					 | 
				
			||||||
		fs_helpers.on_receive_fields(pos, fields)
 | 
					 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
		local formspec = active_formspec(0, 0, pos, meta)
 | 
					 | 
				
			||||||
		meta:set_string("formspec", formspec)
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
	after_place_node = pipeworks.after_place,
 | 
						after_place_node = pipeworks.after_place,
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
})
 | 
						on_rotate = pipeworks.on_rotate
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("default") then
 | 
				
			||||||
 | 
						minetest.override_item("default:furnace", override)
 | 
				
			||||||
 | 
						minetest.override_item("default:furnace_active", override_active)
 | 
				
			||||||
 | 
					elseif minetest.get_modpath("hades_furnaces") then
 | 
				
			||||||
 | 
						minetest.override_item("hades_furnaces:furnace", override)
 | 
				
			||||||
 | 
						minetest.override_item("hades_furnaces:furnace_active", override_active)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										379
									
								
								crafts.lua
									
									
									
									
									
								
							
							
						
						@@ -1,11 +1,84 @@
 | 
				
			|||||||
 | 
					local materials = {
 | 
				
			||||||
 | 
						stone = "default:stone",
 | 
				
			||||||
 | 
						desert_stone = "default:desert_stone",
 | 
				
			||||||
 | 
						desert_sand = "default:desert_sand",
 | 
				
			||||||
 | 
						chest = "default:chest",
 | 
				
			||||||
 | 
						copper_ingot = "default:copper_ingot",
 | 
				
			||||||
 | 
						steel_ingot = "default:steel_ingot",
 | 
				
			||||||
 | 
						gold_ingot = "default:gold_ingot",
 | 
				
			||||||
 | 
						mese = "default:mese",
 | 
				
			||||||
 | 
						mese_crystal = "default:mese_crystal",
 | 
				
			||||||
 | 
						mese_crystal_fragment = "default:mese_crystal_fragment",
 | 
				
			||||||
 | 
						teleporter = "default:mese",
 | 
				
			||||||
 | 
						glass = "default:glass",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("mcl_core") then
 | 
				
			||||||
 | 
						materials = {
 | 
				
			||||||
 | 
							stone = "mcl_core:stone",
 | 
				
			||||||
 | 
							desert_stone = "mcl_core:redsandstone",
 | 
				
			||||||
 | 
							desert_sand = "mcl_core:sand",
 | 
				
			||||||
 | 
							chest = "mcl_chests:chest",
 | 
				
			||||||
 | 
							steel_ingot = "mcl_core:iron_ingot",
 | 
				
			||||||
 | 
							gold_ingot = "mcl_core:gold_ingot",
 | 
				
			||||||
 | 
							mese = "mesecons_torch:redstoneblock",
 | 
				
			||||||
 | 
							mese_crystal = "mesecons:redstone",
 | 
				
			||||||
 | 
							mese_crystal_fragment = "mesecons:redstone",
 | 
				
			||||||
 | 
							teleporter = "mesecons_torch:redstoneblock",
 | 
				
			||||||
 | 
							copper_ingot = "mcl_copper:copper_ingot",
 | 
				
			||||||
 | 
							glass = "mcl_core:glass",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					elseif minetest.get_modpath("fl_ores") and minetest.get_modpath("fl_stone") then
 | 
				
			||||||
 | 
						materials = {
 | 
				
			||||||
 | 
							stone = "fl_stone:stone",
 | 
				
			||||||
 | 
							desert_stone = "fl_stone:desert_stone",
 | 
				
			||||||
 | 
							desert_sand = "fl_stone:desert_sand",
 | 
				
			||||||
 | 
							chest = "fl_storage:wood_chest",
 | 
				
			||||||
 | 
							steel_ingot = "fl_ores:iron_ingot",
 | 
				
			||||||
 | 
							gold_ingot = "fl_ores:gold_ingot",
 | 
				
			||||||
 | 
							mese = "fl_ores:iron_ingot",
 | 
				
			||||||
 | 
							mese_crystal = "fl_ores:iron_ingot",
 | 
				
			||||||
 | 
							mese_crystal_fragment = "fl_ores:iron_ingot",
 | 
				
			||||||
 | 
							teleporter = "fl_ores:iron_ingot",
 | 
				
			||||||
 | 
							copper_ingot = "fl_ores:copper_ingot",
 | 
				
			||||||
 | 
							glass = "fl_glass:framed_glass",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					elseif minetest.get_modpath("hades_core") then
 | 
				
			||||||
 | 
						materials = {
 | 
				
			||||||
 | 
							stone = "hades_core:stone",
 | 
				
			||||||
 | 
							desert_stone = "hades_core:stone_baked",
 | 
				
			||||||
 | 
							desert_sand = "hades_core:volcanic_sand",
 | 
				
			||||||
 | 
							chest = "hades_chests:chest";
 | 
				
			||||||
 | 
							steel_ingot = "hades_core:steel_ingot",
 | 
				
			||||||
 | 
							gold_ingot = "hades_core:gold_ingot",
 | 
				
			||||||
 | 
							mese = "hades_core:mese",
 | 
				
			||||||
 | 
							mese_crystal = "hades_core:mese_crystal",
 | 
				
			||||||
 | 
							mese_crystal_fragment = "hades_core:mese_crystal_fragment",
 | 
				
			||||||
 | 
							teleporter = "hades_materials:teleporter_device",
 | 
				
			||||||
 | 
							copper_ingot = "hades_core:copper_ingot",
 | 
				
			||||||
 | 
							tin_ingot = "hades_core:tin_ingot",
 | 
				
			||||||
 | 
							glass = "hades_core:glass",
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					  if minetest.get_modpath("hades_default") then
 | 
				
			||||||
 | 
							materials.desert_sand = "hades_default:desert_sand"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Crafting recipes for pipes
 | 
					-- Crafting recipes for pipes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					minetest.register_craft( {
 | 
				
			||||||
	output = "pipeworks:pipe_1_empty 12",
 | 
						output = "pipeworks:pipe_1_empty 12",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
                { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
 | 
								{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
			{ "", "", "" },
 | 
								{ "", "", "" },
 | 
				
			||||||
                { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
 | 
								{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft( {
 | 
				
			||||||
 | 
						output = "pipeworks:straight_pipe_empty 3",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
								{ "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty" },
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,12 +91,12 @@ minetest.register_craft( {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					minetest.register_craft( {
 | 
				
			||||||
	output = "pipeworks:entry_panel_empty 2",
 | 
					output = "pipeworks:entry_panel_empty 2",
 | 
				
			||||||
	recipe = {
 | 
					recipe = {
 | 
				
			||||||
		{ "", "default:steel_ingot", "" },
 | 
						{ "", materials.steel_ingot, "" },
 | 
				
			||||||
	{ "", "pipeworks:pipe_1_empty", "" },
 | 
						{ "", "pipeworks:pipe_1_empty", "" },
 | 
				
			||||||
		{ "", "default:steel_ingot", "" },
 | 
						{ "", materials.steel_ingot, "" },
 | 
				
			||||||
	},
 | 
					},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Various ancillary pipe devices
 | 
					-- Various ancillary pipe devices
 | 
				
			||||||
@@ -31,9 +104,9 @@ minetest.register_craft( {
 | 
				
			|||||||
minetest.register_craft( {
 | 
					minetest.register_craft( {
 | 
				
			||||||
	output = "pipeworks:pump_off 2",
 | 
						output = "pipeworks:pump_off 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
                { "default:stone", "default:steel_ingot", "default:stone" },
 | 
								{ materials.stone, materials.steel_ingot, materials.stone },
 | 
				
			||||||
                { "default:copper_ingot", "default:mese_crystal_fragment", "default:copper_ingot" },
 | 
								{ materials.copper_ingot, materials.mese_crystal_fragment, materials.copper_ingot },
 | 
				
			||||||
                { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
 | 
								{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,26 +114,26 @@ minetest.register_craft( {
 | 
				
			|||||||
	output = "pipeworks:valve_off_empty 2",
 | 
						output = "pipeworks:valve_off_empty 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "", "group:stick", "" },
 | 
								{ "", "group:stick", "" },
 | 
				
			||||||
                { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
 | 
								{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
                { "", "default:steel_ingot", "" }
 | 
								{ "", materials.steel_ingot, "" }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					minetest.register_craft( {
 | 
				
			||||||
	output = "pipeworks:storage_tank_0 2",
 | 
						output = "pipeworks:storage_tank_0 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
                { "", "default:steel_ingot", "default:steel_ingot" },
 | 
								{ "", materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
                { "default:steel_ingot", "default:glass", "default:steel_ingot" },
 | 
								{ materials.steel_ingot, materials.glass, materials.steel_ingot },
 | 
				
			||||||
                { "default:steel_ingot", "default:steel_ingot", "" }
 | 
								{ materials.steel_ingot, materials.steel_ingot, "" }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					minetest.register_craft( {
 | 
				
			||||||
	output = "pipeworks:grating 2",
 | 
						output = "pipeworks:grating 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
                { "default:steel_ingot", "", "default:steel_ingot" },
 | 
								{ materials.steel_ingot, "", materials.steel_ingot },
 | 
				
			||||||
			{ "", "pipeworks:pipe_1_empty", "" },
 | 
								{ "", "pipeworks:pipe_1_empty", "" },
 | 
				
			||||||
                { "default:steel_ingot", "", "default:steel_ingot" }
 | 
								{ materials.steel_ingot, "", materials.steel_ingot }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,73 +152,221 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- injectors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Crafting recipes for pneumatic tubes
 | 
					minetest.register_craft( {
 | 
				
			||||||
 | 
						output = "pipeworks:filter 2",
 | 
				
			||||||
-- If homedecor is not installed, we need to register its crafting chain for
 | 
					 | 
				
			||||||
-- plastic sheeting so that pipeworks remains compatible with it.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if minetest.get_modpath("homedecor") == nil then
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craftitem(":homedecor:oil_extract", {
 | 
					 | 
				
			||||||
		    description = "Oil extract",
 | 
					 | 
				
			||||||
		    inventory_image = "homedecor_oil_extract.png",
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craftitem(":homedecor:paraffin", {
 | 
					 | 
				
			||||||
		    description = "Unprocessed paraffin",
 | 
					 | 
				
			||||||
		    inventory_image = "homedecor_paraffin.png",
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_alias("homedecor:plastic_base", "homedecor:paraffin")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craftitem(":homedecor:plastic_sheeting", {
 | 
					 | 
				
			||||||
		    description = "Plastic sheet",
 | 
					 | 
				
			||||||
		    inventory_image = "homedecor_plastic_sheeting.png",
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craft({
 | 
					 | 
				
			||||||
		type = "shapeless",
 | 
					 | 
				
			||||||
		output = "homedecor:oil_extract 4",
 | 
					 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			"group:leaves",
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
			"group:leaves",
 | 
								{ "group:stick", materials.mese_crystal, "basic_materials:plastic_sheet" },
 | 
				
			||||||
			"group:leaves",
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" }
 | 
				
			||||||
			"group:leaves",
 | 
						},
 | 
				
			||||||
			"group:leaves",
 | 
					})
 | 
				
			||||||
			"group:leaves"
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft({
 | 
					minetest.register_craft( {
 | 
				
			||||||
		    type = "cooking",
 | 
						output = "pipeworks:mese_filter 2",
 | 
				
			||||||
		    output = "homedecor:paraffin",
 | 
						recipe = {
 | 
				
			||||||
		    recipe = "homedecor:oil_extract",
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
	})
 | 
								{ "group:stick", materials.mese, "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft({
 | 
					if minetest.get_modpath("digilines") then
 | 
				
			||||||
		    type = "cooking",
 | 
						minetest.register_craft( {
 | 
				
			||||||
		    output = "homedecor:plastic_sheeting",
 | 
							output = "pipeworks:digiline_filter 2",
 | 
				
			||||||
		    recipe = "homedecor:paraffin",
 | 
							recipe = {
 | 
				
			||||||
	})
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ "group:stick", "digilines:wire_std_00000000", "basic_materials:plastic_sheet" },
 | 
				
			||||||
	minetest.register_craft({
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" }
 | 
				
			||||||
		    type = "fuel",
 | 
							},
 | 
				
			||||||
		    recipe = "homedecor:oil_extract",
 | 
					 | 
				
			||||||
		    burntime = 30,
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craft({
 | 
					 | 
				
			||||||
		    type = "fuel",
 | 
					 | 
				
			||||||
		    recipe = "homedecor:paraffin",
 | 
					 | 
				
			||||||
		    burntime = 30,
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craft({
 | 
					 | 
				
			||||||
		    type = "fuel",
 | 
					 | 
				
			||||||
		    recipe = "homedecor:plastic_sheeting",
 | 
					 | 
				
			||||||
		    burntime = 30,
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- other
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft( {
 | 
				
			||||||
 | 
						output = "pipeworks:autocrafter 2",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
								{ materials.steel_ingot, materials.mese_crystal, materials.steel_ingot },
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ materials.steel_ingot, materials.mese_crystal, materials.steel_ingot }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft( {
 | 
				
			||||||
 | 
						output = "pipeworks:steel_block_embedded_tube 1",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
							{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
 | 
							{ materials.steel_ingot, "pipeworks:tube_1", materials.steel_ingot },
 | 
				
			||||||
 | 
							{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft( {
 | 
				
			||||||
 | 
						output = "pipeworks:steel_pane_embedded_tube 1",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
							{ "", materials.steel_ingot, "" },
 | 
				
			||||||
 | 
							{ "", "pipeworks:tube_1", "" },
 | 
				
			||||||
 | 
							{ "", materials.steel_ingot, "" }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
						output = "pipeworks:trashcan",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
							{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
							{ materials.steel_ingot, "", materials.steel_ingot },
 | 
				
			||||||
 | 
							{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft( {
 | 
				
			||||||
 | 
						output = "pipeworks:teleport_tube_1 2",
 | 
				
			||||||
 | 
						recipe = {
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ materials.desert_stone, materials.teleporter, materials.desert_stone },
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_priority_tube then
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:priority_tube_1 6",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ materials.gold_ingot, "", materials.gold_ingot },
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_accelerator_tube then
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:accelerator_tube_1 2",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ materials.mese_crystal_fragment, materials.steel_ingot, materials.mese_crystal_fragment },
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_crossing_tube then
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:crossing_tube_1 5",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "", "pipeworks:tube_1", "" },
 | 
				
			||||||
 | 
								{ "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" },
 | 
				
			||||||
 | 
								{ "", "pipeworks:tube_1", "" }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_one_way_tube then
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							output = "pipeworks:one_way_tube 2",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ "group:stick", materials.mese_crystal, "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_mese_tube then
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:mese_tube_000000 2",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{ "", materials.mese_crystal, "" },
 | 
				
			||||||
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							type = "shapeless",
 | 
				
			||||||
 | 
							output = "pipeworks:mese_tube_000000",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								"pipeworks:tube_1",
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_sand_tube then
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:sand_tube_1 2",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"},
 | 
				
			||||||
 | 
								{"group:sand",                 "group:sand",                 "group:sand"},
 | 
				
			||||||
 | 
								{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:sand_tube_1",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{"group:sand", "pipeworks:tube_1", "group:sand"},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_mese_sand_tube then
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							output = "pipeworks:mese_sand_tube_1 2",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
 | 
								{"group:sand",				 materials.mese_crystal,	   "group:sand" },
 | 
				
			||||||
 | 
								{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						minetest.register_craft( {
 | 
				
			||||||
 | 
							type = "shapeless",
 | 
				
			||||||
 | 
							output = "pipeworks:mese_sand_tube_1",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								"pipeworks:sand_tube_1",
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
								materials.mese_crystal_fragment,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_deployer then
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							output = "pipeworks:deployer_off",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "group:wood",	materials.chest,	"group:wood"	},
 | 
				
			||||||
 | 
								{ materials.stone, "mesecons:piston",  materials.stone },
 | 
				
			||||||
 | 
								{ materials.stone, "mesecons:mesecon", materials.stone },
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_dispenser then
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							output = "pipeworks:dispenser_off",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ materials.desert_sand, materials.chest,	materials.desert_sand },
 | 
				
			||||||
 | 
								{ materials.stone,	   "mesecons:piston",  materials.stone	   },
 | 
				
			||||||
 | 
								{ materials.stone,	   "mesecons:mesecon", materials.stone	  },
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_node_breaker then
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							output = "pipeworks:nodebreaker_off",
 | 
				
			||||||
 | 
							recipe = {
 | 
				
			||||||
 | 
								{ "basic_materials:gear_steel", "basic_materials:gear_steel",   "basic_materials:gear_steel"	},
 | 
				
			||||||
 | 
								{ materials.stone, "mesecons:piston",   materials.stone },
 | 
				
			||||||
 | 
								{ "group:wood",	"mesecons:mesecon",  "group:wood" },
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,18 +1,25 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local straight = function(pos, node, velocity, stack) return {velocity} end
 | 
					local straight = function(pos, node, velocity, stack) return {velocity} end
 | 
				
			||||||
 | 
					local steel_tex = "[combine:16x16^[noalpha^[colorize:#D3D3D3"
 | 
				
			||||||
 | 
					if minetest.get_modpath("default") then steel_tex = "default_steel_block.png" end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:steel_block_embedded_tube", {
 | 
					minetest.register_node("pipeworks:steel_block_embedded_tube", {
 | 
				
			||||||
	description = "Airtight steelblock embedded tube",
 | 
						description = S("Airtight steelblock embedded tube"),
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		"default_steel_block.png", "default_steel_block.png",
 | 
							steel_tex, steel_tex,
 | 
				
			||||||
		"default_steel_block.png", "default_steel_block.png",
 | 
							steel_tex, steel_tex,
 | 
				
			||||||
		"default_steel_block.png^pipeworks_tube_connection_metallic.png",
 | 
							steel_tex .. "^pipeworks_tube_connection_metallic.png",
 | 
				
			||||||
		"default_steel_block.png^pipeworks_tube_connection_metallic.png",
 | 
							steel_tex .. "^pipeworks_tube_connection_metallic.png",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1},
 | 
						groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1, dig_glass = 2, pickaxey=1, handy=1},
 | 
				
			||||||
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
	legacy_facedir_simple = true,
 | 
						legacy_facedir_simple = true,
 | 
				
			||||||
	sounds = default.node_sound_stone_defaults(),
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_stone_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	tube = {
 | 
						tube = {
 | 
				
			||||||
		connect_sides = {front = 1, back = 1,},
 | 
							connect_sides = {front = 1, back = 1,},
 | 
				
			||||||
		priority = 50,
 | 
							priority = 50,
 | 
				
			||||||
@@ -24,16 +31,9 @@ minetest.register_node("pipeworks:steel_block_embedded_tube", {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	after_place_node = pipeworks.after_place,
 | 
						after_place_node = pipeworks.after_place,
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig,
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
 | 
						on_rotate = pipeworks.on_rotate,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:steel_block_embedded_tube"
 | 
				
			||||||
minetest.register_craft( {
 | 
					 | 
				
			||||||
	output = "pipeworks:steel_block_embedded_tube 1",
 | 
					 | 
				
			||||||
	recipe = {
 | 
					 | 
				
			||||||
		{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" },
 | 
					 | 
				
			||||||
		{ "default:steel_ingot", "pipeworks:tube_1", "default:steel_ingot" },
 | 
					 | 
				
			||||||
		{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
local pane_box = {
 | 
					local pane_box = {
 | 
				
			||||||
	type = "fixed",
 | 
						type = "fixed",
 | 
				
			||||||
@@ -42,24 +42,33 @@ local pane_box = {
 | 
				
			|||||||
		{ -8/16, -8/16, -1/16, 8/16, 8/16, 1/16 } -- pane
 | 
							{ -8/16, -8/16, -1/16, 8/16, 8/16, 1/16 } -- pane
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
				
			||||||
 | 
						and "clip" or true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
					minetest.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
				
			||||||
	drawtype = "nodebox",
 | 
						drawtype = "nodebox",
 | 
				
			||||||
	description = "Airtight panel embedded tube ",
 | 
						description = S("Airtight panel embedded tube"),
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		"pipeworks_pane_embedded_tube_sides.png^[transformR90",
 | 
							pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png^[transformR90"),
 | 
				
			||||||
		"pipeworks_pane_embedded_tube_sides.png^[transformR90",
 | 
							pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png^[transformR90"),
 | 
				
			||||||
		"pipeworks_pane_embedded_tube_sides.png",
 | 
							pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png"),
 | 
				
			||||||
		"pipeworks_pane_embedded_tube_sides.png",
 | 
							pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_sides.png"),
 | 
				
			||||||
		"pipeworks_pane_embedded_tube_ends.png", "pipeworks_pane_embedded_tube_ends.png",
 | 
							pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_ends.png"),
 | 
				
			||||||
 | 
							pipeworks.make_tube_tile("pipeworks_pane_embedded_tube_ends.png"),
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						use_texture_alpha = texture_alpha_mode,
 | 
				
			||||||
	node_box = pane_box,
 | 
						node_box = pane_box,
 | 
				
			||||||
	selection_box = pane_box,
 | 
						selection_box = pane_box,
 | 
				
			||||||
	collision_box = pane_box,
 | 
						collision_box = pane_box,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1},
 | 
						groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1, dig_glass = 2, pickaxey=1, handy=1},
 | 
				
			||||||
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
	legacy_facedir_simple = true,
 | 
						legacy_facedir_simple = true,
 | 
				
			||||||
	sounds = default.node_sound_stone_defaults(),
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_stone_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	tube = {
 | 
						tube = {
 | 
				
			||||||
		connect_sides = {front = 1, back = 1,},
 | 
							connect_sides = {front = 1, back = 1,},
 | 
				
			||||||
		priority = 50,
 | 
							priority = 50,
 | 
				
			||||||
@@ -71,13 +80,6 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	after_place_node = pipeworks.after_place,
 | 
						after_place_node = pipeworks.after_place,
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig,
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
 | 
						on_rotate = pipeworks.on_rotate,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:steel_pane_embedded_tube"
 | 
				
			||||||
minetest.register_craft( {
 | 
					 | 
				
			||||||
	output = "pipeworks:steel_pane_embedded_tube 1",
 | 
					 | 
				
			||||||
	recipe = {
 | 
					 | 
				
			||||||
		{ "", "default:steel_ingot", "" },
 | 
					 | 
				
			||||||
		{ "", "pipeworks:tube_1", "" },
 | 
					 | 
				
			||||||
		{ "", "default:steel_ingot", "" }
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ local prefix = "pipeworks_"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local settings = {
 | 
					local settings = {
 | 
				
			||||||
	enable_pipes = true,
 | 
						enable_pipes = true,
 | 
				
			||||||
 | 
						enable_lowpoly = false,
 | 
				
			||||||
	enable_autocrafter = true,
 | 
						enable_autocrafter = true,
 | 
				
			||||||
	enable_deployer = true,
 | 
						enable_deployer = true,
 | 
				
			||||||
	enable_dispenser = true,
 | 
						enable_dispenser = true,
 | 
				
			||||||
@@ -15,25 +16,57 @@ local settings = {
 | 
				
			|||||||
	enable_detector_tube = true,
 | 
						enable_detector_tube = true,
 | 
				
			||||||
	enable_digiline_detector_tube = true,
 | 
						enable_digiline_detector_tube = true,
 | 
				
			||||||
	enable_conductor_tube = true,
 | 
						enable_conductor_tube = true,
 | 
				
			||||||
 | 
						enable_digiline_conductor_tube = true,
 | 
				
			||||||
	enable_accelerator_tube = true,
 | 
						enable_accelerator_tube = true,
 | 
				
			||||||
	enable_crossing_tube = true,
 | 
						enable_crossing_tube = true,
 | 
				
			||||||
	enable_sand_tube = true,
 | 
						enable_sand_tube = true,
 | 
				
			||||||
	enable_mese_sand_tube = true,
 | 
						enable_mese_sand_tube = true,
 | 
				
			||||||
	enable_one_way_tube = true,
 | 
						enable_one_way_tube = true,
 | 
				
			||||||
	enable_priority_tube = true,
 | 
						enable_priority_tube = true,
 | 
				
			||||||
 | 
						enable_lua_tube = true,
 | 
				
			||||||
	enable_cyclic_mode = true,
 | 
						enable_cyclic_mode = true,
 | 
				
			||||||
	drop_on_routing_fail = false,
 | 
						drop_on_routing_fail = false,
 | 
				
			||||||
 | 
					 | 
				
			||||||
	delete_item_on_clearobject = true,
 | 
						delete_item_on_clearobject = true,
 | 
				
			||||||
 | 
						use_real_entities = true,
 | 
				
			||||||
 | 
						entity_update_interval = 0,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.toggles = {}
 | 
				
			||||||
 | 
					-- documentation for toggles controlling pressure logic features.
 | 
				
			||||||
 | 
					-- do not edit this file directly;
 | 
				
			||||||
 | 
					-- instead, create pipeworks_settings.txt in your world directory,
 | 
				
			||||||
 | 
					-- and copy the uncommented lines from the block comments below into it.
 | 
				
			||||||
 | 
					--[[
 | 
				
			||||||
 | 
					-- flow logic implementation.
 | 
				
			||||||
 | 
					-- set to one of the following strings.
 | 
				
			||||||
 | 
					-- "classic": classic mode written by VanessaE
 | 
				
			||||||
 | 
					-- "pressure": pressure metadata based, written by thetaepsilon.
 | 
				
			||||||
 | 
					--	has caveats such as water speed issues though.
 | 
				
			||||||
 | 
					-- setting to nil inhibits all flow logic, useful for debugging ABM crashes,
 | 
				
			||||||
 | 
					-- or for rendering the pipes purely decorative.
 | 
				
			||||||
 | 
					]]
 | 
				
			||||||
 | 
					pipeworks.toggles.pipe_mode = "classic"
 | 
				
			||||||
 | 
					--[[
 | 
				
			||||||
 | 
					-- force-enable finite water handling mode.
 | 
				
			||||||
 | 
					-- this changes the way that water node placement is handled;
 | 
				
			||||||
 | 
					-- volume will always be preserved,
 | 
				
			||||||
 | 
					-- and water is assumed to move itself downwards.
 | 
				
			||||||
 | 
					-- nil (the default) means autodetect from installed finite liquid mods,
 | 
				
			||||||
 | 
					-- true is force-on, false is force-off.
 | 
				
			||||||
 | 
					-- note that you should NOT normally explicitly set this to true/false,
 | 
				
			||||||
 | 
					-- unless the mod you want this for is not covered by auto-detection
 | 
				
			||||||
 | 
					-- (please see autodetect-finite-water.lua).
 | 
				
			||||||
 | 
					-- please file an issue if you have a finite water mod not covered there,
 | 
				
			||||||
 | 
					-- and feel it necessary to explicitly set this toggle
 | 
				
			||||||
 | 
					pipeworks.toggles.finite_water = nil
 | 
				
			||||||
 | 
					]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for name, value in pairs(settings) do
 | 
					for name, value in pairs(settings) do
 | 
				
			||||||
	local setting_type = type(value)
 | 
						local setting_type = type(value)
 | 
				
			||||||
	if setting_type == "boolean" then
 | 
						if setting_type == "boolean" then
 | 
				
			||||||
		pipeworks[name] = minetest.settings:get_bool(prefix..name)
 | 
							pipeworks[name] = minetest.settings:get_bool(prefix..name, value)
 | 
				
			||||||
		if pipeworks[name] == nil then
 | 
						elseif setting_type == "number" then
 | 
				
			||||||
			pipeworks[name] = value
 | 
							pipeworks[name] = tonumber(minetest.settings:get(prefix..name) or value)
 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		pipeworks[name] = value
 | 
							pipeworks[name] = value
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
default
 | 
					 | 
				
			||||||
mesecons?
 | 
					 | 
				
			||||||
mesecons_mvps?
 | 
					 | 
				
			||||||
digilines?
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
This mod uses mesh nodes and nodeboxes to supply a complete set of 3D pipes and tubes, along with devices that work with them.
 | 
					 | 
				
			||||||
							
								
								
									
										397
									
								
								devices.lua
									
									
									
									
									
								
							
							
						
						@@ -1,3 +1,10 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
 | 
					local new_flow_logic_register = pipeworks.flowables.register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local polys = ""
 | 
				
			||||||
 | 
					if pipeworks.enable_lowpoly then polys = "_lowpoly" end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- rotation handlers
 | 
					-- rotation handlers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -5,7 +12,7 @@ function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
 | 
						if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	newnode = string.gsub(node.name, "_on", "_off")
 | 
						local newnode = string.gsub(node.name, "_on", "_off")
 | 
				
			||||||
	minetest.swap_node(pos, { name = newnode, param2 = new_param2 })
 | 
						minetest.swap_node(pos, { name = newnode, param2 = new_param2 })
 | 
				
			||||||
	pipeworks.scan_for_pipe_objects(pos)
 | 
						pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,17 +30,17 @@ function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
 | 
				
			|||||||
		if (not placer:get_player_control().sneak)
 | 
							if (not placer:get_player_control().sneak)
 | 
				
			||||||
		  and minetest.registered_nodes[node.name]
 | 
							  and minetest.registered_nodes[node.name]
 | 
				
			||||||
		  and minetest.registered_nodes[node.name].on_rightclick then
 | 
							  and minetest.registered_nodes[node.name].on_rightclick then
 | 
				
			||||||
			minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
 | 
								minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under,
 | 
				
			||||||
 | 
									node, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			local pitch = placer:get_look_pitch()
 | 
								local pitch = -placer:get_look_vertical()
 | 
				
			||||||
			local above = pointed_thing.above
 | 
								local above = pointed_thing.above
 | 
				
			||||||
			local under = pointed_thing.under
 | 
								local under = pointed_thing.under
 | 
				
			||||||
			local fdir = minetest.dir_to_facedir(placer:get_look_dir())
 | 
								local fdir = minetest.dir_to_facedir(placer:get_look_dir())
 | 
				
			||||||
			local undernode = minetest.get_node(under)
 | 
								local undernode = minetest.get_node(under)
 | 
				
			||||||
			local abovenode = minetest.get_node(above)
 | 
					 | 
				
			||||||
			local uname = undernode.name
 | 
								local uname = undernode.name
 | 
				
			||||||
			local aname = abovenode.name
 | 
					 | 
				
			||||||
			local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
 | 
								local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
 | 
				
			||||||
			local pos1 = above
 | 
								local pos1 = above
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,7 +75,7 @@ function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
 | 
				
			|||||||
			local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
 | 
								local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
 | 
				
			||||||
			placednode = string.gsub(placednode, "_on", "_off")
 | 
								placednode = string.gsub(placednode, "_on", "_off")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			minetest.add_node(pos1, {name = placednode, param2 = fdir })
 | 
								minetest.swap_node(pos1, {name = placednode, param2 = fdir })
 | 
				
			||||||
			pipeworks.scan_for_pipe_objects(pos1)
 | 
								pipeworks.scan_for_pipe_objects(pos1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if not pipeworks.expect_infinite_stacks then
 | 
								if not pipeworks.expect_infinite_stacks then
 | 
				
			||||||
@@ -100,6 +107,7 @@ if minetest.get_modpath("mesecons") then
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--[[
 | 
				
			||||||
local pipes_devicelist = {
 | 
					local pipes_devicelist = {
 | 
				
			||||||
	"pump",
 | 
						"pump",
 | 
				
			||||||
	"valve",
 | 
						"valve",
 | 
				
			||||||
@@ -115,29 +123,35 @@ local pipes_devicelist = {
 | 
				
			|||||||
	"storage_tank_9",
 | 
						"storage_tank_9",
 | 
				
			||||||
	"storage_tank_10"
 | 
						"storage_tank_10"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					--]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Now define the nodes.
 | 
					-- Now define the nodes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local states = { "on", "off" }
 | 
					local states = { "on", "off" }
 | 
				
			||||||
local dgroups = ""
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
for s in ipairs(states) do
 | 
					for s in ipairs(states) do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local dgroups
 | 
				
			||||||
	if states[s] == "off" then
 | 
						if states[s] == "off" then
 | 
				
			||||||
		dgroups = {snappy=3, pipe=1}
 | 
							dgroups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1}
 | 
							dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:pump_"..states[s], {
 | 
						local pumpname = "pipeworks:pump_"..states[s]
 | 
				
			||||||
		description = "Pump/Intake Module",
 | 
						minetest.register_node(pumpname, {
 | 
				
			||||||
 | 
							description = S("Pump/Intake Module"),
 | 
				
			||||||
		drawtype = "mesh",
 | 
							drawtype = "mesh",
 | 
				
			||||||
		mesh = "pipeworks_pump.obj",
 | 
							mesh = "pipeworks_pump"..polys..".obj",
 | 
				
			||||||
		tiles = { "pipeworks_pump_"..states[s]..".png" },
 | 
							tiles = { "pipeworks_pump_"..states[s]..".png" },
 | 
				
			||||||
 | 
							use_texture_alpha = texture_alpha_mode and "clip" or true,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		groups = dgroups,
 | 
							groups = dgroups,
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		pipe_connections = { top = 1 },
 | 
							pipe_connections = { top = 1 },
 | 
				
			||||||
		after_place_node = function(pos)
 | 
							after_place_node = function(pos)
 | 
				
			||||||
@@ -149,23 +163,33 @@ for s in ipairs(states) do
 | 
				
			|||||||
		drop = "pipeworks:pump_off",
 | 
							drop = "pipeworks:pump_off",
 | 
				
			||||||
		mesecons = {effector = {
 | 
							mesecons = {effector = {
 | 
				
			||||||
			action_on = function (pos, node)
 | 
								action_on = function (pos, node)
 | 
				
			||||||
				minetest.add_node(pos,{name="pipeworks:pump_on", param2 = node.param2}) 
 | 
									minetest.swap_node(pos,{name="pipeworks:pump_on", param2 = node.param2})
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			action_off = function (pos, node)
 | 
								action_off = function (pos, node)
 | 
				
			||||||
				minetest.add_node(pos,{name="pipeworks:pump_off", param2 = node.param2}) 
 | 
									minetest.swap_node(pos,{name="pipeworks:pump_off", param2 = node.param2})
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		}},
 | 
							}},
 | 
				
			||||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
							on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
				
			||||||
			local fdir = node.param2
 | 
								local fdir = node.param2
 | 
				
			||||||
			minetest.add_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
 | 
								minetest.swap_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		on_rotate = screwdriver.rotate_simple
 | 
							on_rotate = screwdriver and screwdriver.rotate_simple or nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:valve_"..states[s].."_empty", {
 | 
						-- FIXME: this currently assumes that pumps can only rotate around the fixed axis pointing Y+.
 | 
				
			||||||
		description = "Valve",
 | 
						new_flow_logic_register.directional_vertical_fixed(pumpname, true)
 | 
				
			||||||
 | 
						local pump_drive = 4
 | 
				
			||||||
 | 
						if states[s] ~= "off" then
 | 
				
			||||||
 | 
							new_flow_logic_register.intake_simple(pumpname, pump_drive)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local nodename_valve_empty = "pipeworks:valve_"..states[s].."_empty"
 | 
				
			||||||
 | 
						minetest.register_node(nodename_valve_empty, {
 | 
				
			||||||
 | 
							description = S("Valve"),
 | 
				
			||||||
		drawtype = "mesh",
 | 
							drawtype = "mesh",
 | 
				
			||||||
		mesh = "pipeworks_valve_"..states[s]..".obj",
 | 
							mesh = "pipeworks_valve_"..states[s]..polys..".obj",
 | 
				
			||||||
		tiles = { "pipeworks_valve.png" },
 | 
							tiles = { "pipeworks_valve.png" },
 | 
				
			||||||
		sunlight_propagates = true,
 | 
							sunlight_propagates = true,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
@@ -179,7 +203,10 @@ for s in ipairs(states) do
 | 
				
			|||||||
			fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
 | 
								fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		groups = dgroups,
 | 
							groups = dgroups,
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		on_place = pipeworks.rotate_on_place,
 | 
							on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
		after_dig_node = function(pos)
 | 
							after_dig_node = function(pos)
 | 
				
			||||||
@@ -188,24 +215,32 @@ for s in ipairs(states) do
 | 
				
			|||||||
		drop = "pipeworks:valve_off_empty",
 | 
							drop = "pipeworks:valve_off_empty",
 | 
				
			||||||
		mesecons = {effector = {
 | 
							mesecons = {effector = {
 | 
				
			||||||
			action_on = function (pos, node)
 | 
								action_on = function (pos, node)
 | 
				
			||||||
				minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2}) 
 | 
									minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			action_off = function (pos, node)
 | 
								action_off = function (pos, node)
 | 
				
			||||||
				minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2}) 
 | 
									minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		}},
 | 
							}},
 | 
				
			||||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
							on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
				
			||||||
			local fdir = node.param2
 | 
								local fdir = node.param2
 | 
				
			||||||
			minetest.add_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
 | 
								minetest.swap_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		on_rotate = pipeworks.fix_after_rotation
 | 
							on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						-- only register flow logic for the "on" ABM.
 | 
				
			||||||
 | 
						-- this means that the off state automatically blocks flow by not participating in the balancing operation.
 | 
				
			||||||
 | 
						if states[s] ~= "off" then
 | 
				
			||||||
 | 
							new_flow_logic_register.directional_horizonal_rotate(nodename_valve_empty, true)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:pump_off"
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:valve_off_empty"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:valve_on_loaded", {
 | 
					local nodename_valve_loaded = "pipeworks:valve_on_loaded"
 | 
				
			||||||
	description = "Valve",
 | 
					minetest.register_node(nodename_valve_loaded, {
 | 
				
			||||||
 | 
						description = S("Valve"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_valve_on.obj",
 | 
						mesh = "pipeworks_valve_on"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_valve.png" },
 | 
						tiles = { "pipeworks_valve.png" },
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
@@ -218,8 +253,11 @@ minetest.register_node("pipeworks:valve_on_loaded", {
 | 
				
			|||||||
		type = "fixed",
 | 
							type = "fixed",
 | 
				
			||||||
		fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
 | 
							fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
 | 
						groups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	on_place = pipeworks.rotate_on_place,
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -228,23 +266,30 @@ minetest.register_node("pipeworks:valve_on_loaded", {
 | 
				
			|||||||
	drop = "pipeworks:valve_off_empty",
 | 
						drop = "pipeworks:valve_off_empty",
 | 
				
			||||||
	mesecons = {effector = {
 | 
						mesecons = {effector = {
 | 
				
			||||||
		action_on = function (pos, node)
 | 
							action_on = function (pos, node)
 | 
				
			||||||
			minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2}) 
 | 
								minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		action_off = function (pos, node)
 | 
							action_off = function (pos, node)
 | 
				
			||||||
			minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2}) 
 | 
								minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	}},
 | 
						}},
 | 
				
			||||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
						on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
				
			||||||
		local fdir = node.param2
 | 
							local fdir = node.param2
 | 
				
			||||||
		minetest.add_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
 | 
							minetest.swap_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					-- register this the same as the on-but-empty variant, so existing nodes of this type work also.
 | 
				
			||||||
 | 
					-- note that as new_flow_logic code does not distinguish empty/full in node states,
 | 
				
			||||||
 | 
					-- right-clicking a "loaded" valve (becoming an off valve) then turning it on again will yield a on-but-empty valve,
 | 
				
			||||||
 | 
					-- but the flow logic will still function.
 | 
				
			||||||
 | 
					-- thus under new_flow_logic this serves as a kind of migration.
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_valve_loaded, true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- grating
 | 
					-- grating
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- FIXME: should this do anything useful in the new flow logic?
 | 
				
			||||||
minetest.register_node("pipeworks:grating", {
 | 
					minetest.register_node("pipeworks:grating", {
 | 
				
			||||||
	description = "Decorative grating",
 | 
						description = S("Decorative grating"),
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		"pipeworks_grating_top.png",
 | 
							"pipeworks_grating_top.png",
 | 
				
			||||||
		"pipeworks_grating_sides.png",
 | 
							"pipeworks_grating_sides.png",
 | 
				
			||||||
@@ -253,6 +298,7 @@ minetest.register_node("pipeworks:grating", {
 | 
				
			|||||||
		"pipeworks_grating_sides.png",
 | 
							"pipeworks_grating_sides.png",
 | 
				
			||||||
		"pipeworks_grating_sides.png"
 | 
							"pipeworks_grating_sides.png"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						use_texture_alpha = texture_alpha_mode and "clip" or true,
 | 
				
			||||||
	drawtype = "nodebox",
 | 
						drawtype = "nodebox",
 | 
				
			||||||
	node_box = {
 | 
						node_box = {
 | 
				
			||||||
		type = "fixed",
 | 
							type = "fixed",
 | 
				
			||||||
@@ -260,8 +306,11 @@ minetest.register_node("pipeworks:grating", {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	groups = {snappy=3, pipe=1},
 | 
						groups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	pipe_connections = { top = 1 },
 | 
						pipe_connections = { top = 1 },
 | 
				
			||||||
	after_place_node = function(pos)
 | 
						after_place_node = function(pos)
 | 
				
			||||||
@@ -272,19 +321,24 @@ minetest.register_node("pipeworks:grating", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_rotate = false
 | 
						on_rotate = false
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:grating"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- outlet spigot
 | 
					-- outlet spigot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:spigot", {
 | 
					local nodename_spigot_empty = "pipeworks:spigot"
 | 
				
			||||||
	description = "Spigot outlet",
 | 
					minetest.register_node(nodename_spigot_empty, {
 | 
				
			||||||
 | 
						description = S("Spigot outlet"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_spigot.obj",
 | 
						mesh = "pipeworks_spigot"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_spigot.png" },
 | 
						tiles = { "pipeworks_spigot.png" },
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {snappy=3, pipe=1},
 | 
						groups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	pipe_connections = { left=1, right=1, front=1, back=1,
 | 
						pipe_connections = { left=1, right=1, front=1, back=1,
 | 
				
			||||||
						 left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
 | 
											 left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
 | 
				
			||||||
@@ -305,27 +359,24 @@ minetest.register_node("pipeworks:spigot", {
 | 
				
			|||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:spigot_pouring", {
 | 
					local nodename_spigot_loaded = "pipeworks:spigot_pouring"
 | 
				
			||||||
	description = "Spigot outlet",
 | 
					minetest.register_node(nodename_spigot_loaded, {
 | 
				
			||||||
 | 
						description = S("Spigot outlet"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_spigot_pouring.obj",
 | 
						mesh = "pipeworks_spigot_pouring"..polys..".obj",
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		{
 | 
							minetest.registered_nodes[pipeworks.liquids.water.source].tiles[1],
 | 
				
			||||||
			name = "default_water_flowing_animated.png",
 | 
					 | 
				
			||||||
			animation = {
 | 
					 | 
				
			||||||
				type = "vertical_frames",
 | 
					 | 
				
			||||||
				aspect_w = 16,
 | 
					 | 
				
			||||||
				aspect_h = 16,
 | 
					 | 
				
			||||||
				length = 0.8,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{ name = "pipeworks_spigot.png" }
 | 
							{ name = "pipeworks_spigot.png" }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						use_texture_alpha = texture_alpha_mode and "blend" or true,
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
 | 
						groups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	pipe_connections = { left=1, right=1, front=1, back=1,
 | 
						pipe_connections = { left=1, right=1, front=1, back=1,
 | 
				
			||||||
						 left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
 | 
											 left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
 | 
				
			||||||
@@ -347,6 +398,19 @@ minetest.register_node("pipeworks:spigot_pouring", {
 | 
				
			|||||||
	drop = "pipeworks:spigot",
 | 
						drop = "pipeworks:spigot",
 | 
				
			||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:spigot"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- new flow logic does not currently distinguish between these two visual states.
 | 
				
			||||||
 | 
					-- register both so existing flowing spigots continue to work (even if the visual doesn't match the spigot's behaviour).
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_spigot_empty, false)
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_spigot_loaded, false)
 | 
				
			||||||
 | 
					local spigot_upper = 1.0
 | 
				
			||||||
 | 
					local spigot_lower = 1.0
 | 
				
			||||||
 | 
					local spigot_neighbours={{x=0, y=-1, z=0}}
 | 
				
			||||||
 | 
					new_flow_logic_register.output_simple(nodename_spigot_empty, spigot_upper, spigot_lower, spigot_neighbours)
 | 
				
			||||||
 | 
					new_flow_logic_register.output_simple(nodename_spigot_loaded, spigot_upper, spigot_lower, spigot_neighbours)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- sealed pipe entry/exit (horizontal pipe passing through a metal
 | 
					-- sealed pipe entry/exit (horizontal pipe passing through a metal
 | 
				
			||||||
-- wall, for use in places where walls should look like they're airtight)
 | 
					-- wall, for use in places where walls should look like they're airtight)
 | 
				
			||||||
@@ -359,15 +423,19 @@ local panel_cbox = {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:entry_panel_empty", {
 | 
					local nodename_panel_empty = "pipeworks:entry_panel_empty"
 | 
				
			||||||
	description = "Airtight Pipe entry/exit",
 | 
					minetest.register_node(nodename_panel_empty, {
 | 
				
			||||||
 | 
						description = S("Airtight Pipe entry/exit"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_entry_panel.obj",
 | 
						mesh = "pipeworks_entry_panel"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_entry_panel.png" },
 | 
						tiles = { "pipeworks_entry_panel.png" },
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {snappy=3, pipe=1},
 | 
						groups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	on_place = pipeworks.rotate_on_place,
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -378,15 +446,19 @@ minetest.register_node("pipeworks:entry_panel_empty", {
 | 
				
			|||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:entry_panel_loaded", {
 | 
					local nodename_panel_loaded = "pipeworks:entry_panel_loaded"
 | 
				
			||||||
	description = "Airtight Pipe entry/exit",
 | 
					minetest.register_node(nodename_panel_loaded, {
 | 
				
			||||||
 | 
						description = S("Airtight Pipe entry/exit"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_entry_panel.obj",
 | 
						mesh = "pipeworks_entry_panel"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_entry_panel.png" },
 | 
						tiles = { "pipeworks_entry_panel.png" },
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
 | 
						groups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	on_place = pipeworks.rotate_on_place,
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -398,16 +470,28 @@ minetest.register_node("pipeworks:entry_panel_loaded", {
 | 
				
			|||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:flow_sensor_empty", {
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:entry_panel_empty"
 | 
				
			||||||
	description = "Flow Sensor",
 | 
					
 | 
				
			||||||
 | 
					-- TODO: AFAIK the two panels have no visual difference, so are redundant under new flow logic - alias?
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_panel_empty, true)
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_panel_loaded, true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local nodename_sensor_empty = "pipeworks:flow_sensor_empty"
 | 
				
			||||||
 | 
					minetest.register_node(nodename_sensor_empty, {
 | 
				
			||||||
 | 
						description = S("Flow Sensor"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_flow_sensor.obj",
 | 
						mesh = "pipeworks_flow_sensor"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_flow_sensor_off.png" },
 | 
						tiles = { "pipeworks_flow_sensor_off.png" },
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {snappy=3, pipe=1},
 | 
						groups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	on_place = pipeworks.rotate_on_place,
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -415,7 +499,7 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		if mesecon then
 | 
							if mesecon then
 | 
				
			||||||
			mesecon.receptor_off(pos, rules) 
 | 
								mesecon.receptor_off(pos, pipeworks.mesecons_rules)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	selection_box = {
 | 
						selection_box = {
 | 
				
			||||||
@@ -436,16 +520,20 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
 | 
				
			|||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:flow_sensor_loaded", {
 | 
					local nodename_sensor_loaded = "pipeworks:flow_sensor_loaded"
 | 
				
			||||||
	description = "Flow sensor (on)",
 | 
					minetest.register_node(nodename_sensor_loaded, {
 | 
				
			||||||
 | 
						description = S("Flow sensor (on)"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_flow_sensor.obj",
 | 
						mesh = "pipeworks_flow_sensor"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_flow_sensor_on.png" },
 | 
						tiles = { "pipeworks_flow_sensor_on.png" },
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
 | 
						groups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	on_place = pipeworks.rotate_on_place,
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -453,7 +541,7 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		if mesecon then
 | 
							if mesecon then
 | 
				
			||||||
			mesecon.receptor_on(pos, rules) 
 | 
								mesecon.receptor_on(pos, pipeworks.mesecons_rules)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	selection_box = {
 | 
						selection_box = {
 | 
				
			||||||
@@ -474,22 +562,32 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
 | 
				
			|||||||
	mesecons = pipereceptor_on,
 | 
						mesecons = pipereceptor_on,
 | 
				
			||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:flow_sensor_empty"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_sensor_empty, true)
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_sensor_loaded, true)
 | 
				
			||||||
 | 
					-- activate flow sensor at roughly half the pressure pumps drive pipes
 | 
				
			||||||
 | 
					local sensor_pressure_set = { { nodename_sensor_empty, 0.0 }, { nodename_sensor_loaded, 1.0 } }
 | 
				
			||||||
 | 
					new_flow_logic_register.transition_simple_set(sensor_pressure_set, { mesecons=pipeworks.mesecons_rules })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- tanks
 | 
					-- tanks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- TODO flow-logic-stub: these don't currently do anything under the new flow logic.
 | 
				
			||||||
for fill = 0, 10 do
 | 
					for fill = 0, 10 do
 | 
				
			||||||
	local filldesc="empty"
 | 
						local filldesc=S("empty")
 | 
				
			||||||
	local sgroups = {snappy=3, pipe=1, tankfill=fill+1}
 | 
						local sgroups = {snappy=3, pipe=1, tankfill=fill+1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
	local image = nil
 | 
						local image = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if fill ~= 0 then
 | 
						if fill ~= 0 then
 | 
				
			||||||
		filldesc=fill.."0% full"
 | 
							filldesc=S("@1% full", 10*fill)
 | 
				
			||||||
		sgroups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1}
 | 
							sgroups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
		image = "pipeworks_storage_tank_fittings.png"
 | 
							image = "pipeworks_storage_tank_fittings.png"
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:expansion_tank_"..fill, {
 | 
						minetest.register_node("pipeworks:expansion_tank_"..fill, {
 | 
				
			||||||
		description = "Expansion Tank ("..filldesc..")... You hacker, you.",
 | 
							description = S("Expansion Tank (@1)", filldesc),
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"pipeworks_storage_tank_fittings.png",
 | 
								"pipeworks_storage_tank_fittings.png",
 | 
				
			||||||
			"pipeworks_storage_tank_fittings.png",
 | 
								"pipeworks_storage_tank_fittings.png",
 | 
				
			||||||
@@ -501,8 +599,11 @@ for fill = 0, 10 do
 | 
				
			|||||||
		inventory_image = image,
 | 
							inventory_image = image,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1},
 | 
							groups = {snappy=3, pipe=1, tankfill=fill+1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		drop = "pipeworks:storage_tank_0",
 | 
							drop = "pipeworks:storage_tank_0",
 | 
				
			||||||
		pipe_connections = { top = 1, bottom = 1},
 | 
							pipe_connections = { top = 1, bottom = 1},
 | 
				
			||||||
@@ -517,7 +618,7 @@ for fill = 0, 10 do
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:storage_tank_"..fill, {
 | 
						minetest.register_node("pipeworks:storage_tank_"..fill, {
 | 
				
			||||||
		description = "Fluid Storage Tank ("..filldesc..")",
 | 
							description = S("Fluid Storage Tank (@1)", filldesc),
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"pipeworks_storage_tank_fittings.png",
 | 
								"pipeworks_storage_tank_fittings.png",
 | 
				
			||||||
			"pipeworks_storage_tank_fittings.png",
 | 
								"pipeworks_storage_tank_fittings.png",
 | 
				
			||||||
@@ -530,7 +631,10 @@ for fill = 0, 10 do
 | 
				
			|||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		groups = sgroups,
 | 
							groups = sgroups,
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		drop = "pipeworks:storage_tank_0",
 | 
							drop = "pipeworks:storage_tank_0",
 | 
				
			||||||
		pipe_connections = { top = 1, bottom = 1},
 | 
							pipe_connections = { top = 1, bottom = 1},
 | 
				
			||||||
@@ -544,18 +648,23 @@ for fill = 0, 10 do
 | 
				
			|||||||
		on_rotate = false
 | 
							on_rotate = false
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:storage_tank_0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- fountainhead
 | 
					-- fountainhead
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:fountainhead", {
 | 
					local nodename_fountain_empty = "pipeworks:fountainhead"
 | 
				
			||||||
	description = "Fountainhead",
 | 
					minetest.register_node(nodename_fountain_empty, {
 | 
				
			||||||
 | 
						description = S("Fountainhead"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_fountainhead.obj",
 | 
						mesh = "pipeworks_fountainhead"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_fountainhead.png" },
 | 
						tiles = { "pipeworks_fountainhead.png" },
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	groups = {snappy=3, pipe=1},
 | 
						groups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	pipe_connections = { bottom = 1 },
 | 
						pipe_connections = { bottom = 1 },
 | 
				
			||||||
	after_place_node = function(pos)
 | 
						after_place_node = function(pos)
 | 
				
			||||||
@@ -566,7 +675,7 @@ minetest.register_node("pipeworks:fountainhead", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		if mesecon then
 | 
							if mesecon then
 | 
				
			||||||
			mesecon.receptor_on(pos, rules) 
 | 
								mesecon.receptor_on(pos, pipeworks.mesecons_rules)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	selection_box = {
 | 
						selection_box = {
 | 
				
			||||||
@@ -579,16 +688,21 @@ minetest.register_node("pipeworks:fountainhead", {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	on_rotate = false
 | 
						on_rotate = false
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:fountainhead"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:fountainhead_pouring", {
 | 
					local nodename_fountain_loaded = "pipeworks:fountainhead_pouring"
 | 
				
			||||||
	description = "Fountainhead",
 | 
					minetest.register_node(nodename_fountain_loaded, {
 | 
				
			||||||
 | 
						description = S("Fountainhead"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_fountainhead.obj",
 | 
						mesh = "pipeworks_fountainhead"..polys..".obj",
 | 
				
			||||||
	tiles = { "pipeworks_fountainhead.png" },
 | 
						tiles = { "pipeworks_fountainhead.png" },
 | 
				
			||||||
	sunlight_propagates = true,
 | 
						sunlight_propagates = true,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
 | 
						groups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
	sounds = default.node_sound_wood_defaults(),
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	pipe_connections = { bottom = 1 },
 | 
						pipe_connections = { bottom = 1 },
 | 
				
			||||||
	after_place_node = function(pos)
 | 
						after_place_node = function(pos)
 | 
				
			||||||
@@ -600,7 +714,7 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		if mesecon then
 | 
							if mesecon then
 | 
				
			||||||
			mesecon.receptor_on(pos, rules) 
 | 
								mesecon.receptor_on(pos, pipeworks.mesecons_rules)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	selection_box = {
 | 
						selection_box = {
 | 
				
			||||||
@@ -614,25 +728,78 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
 | 
				
			|||||||
	drop = "pipeworks:fountainhead",
 | 
						drop = "pipeworks:fountainhead",
 | 
				
			||||||
	on_rotate = false
 | 
						on_rotate = false
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_vertical_fixed(nodename_fountain_empty, false)
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_vertical_fixed(nodename_fountain_loaded, false)
 | 
				
			||||||
 | 
					local fountain_upper = 1.0
 | 
				
			||||||
 | 
					local fountain_lower = 1.0
 | 
				
			||||||
 | 
					local fountain_neighbours={{x=0, y=1, z=0}}
 | 
				
			||||||
 | 
					new_flow_logic_register.output_simple(nodename_fountain_empty, fountain_upper, fountain_lower, fountain_neighbours)
 | 
				
			||||||
 | 
					new_flow_logic_register.output_simple(nodename_fountain_loaded, fountain_upper, fountain_lower, fountain_neighbours)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local sp_cbox = {
 | 
				
			||||||
 | 
						type = "fixed",
 | 
				
			||||||
 | 
						fixed = {
 | 
				
			||||||
 | 
							{ -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local nodename_sp_empty = "pipeworks:straight_pipe_empty"
 | 
				
			||||||
 | 
					minetest.register_node(nodename_sp_empty, {
 | 
				
			||||||
 | 
						description = S("Straight-only Pipe"),
 | 
				
			||||||
 | 
						drawtype = "mesh",
 | 
				
			||||||
 | 
						mesh = "pipeworks_straight_pipe"..polys..".obj",
 | 
				
			||||||
 | 
						tiles = { "pipeworks_straight_pipe_empty.png" },
 | 
				
			||||||
 | 
						paramtype = "light",
 | 
				
			||||||
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
 | 
						groups = {snappy=3, pipe=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
						walkable = true,
 | 
				
			||||||
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
 | 
							pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
						selection_box = sp_cbox,
 | 
				
			||||||
 | 
						collision_box = sp_cbox,
 | 
				
			||||||
 | 
						on_rotate = pipeworks.fix_after_rotation,
 | 
				
			||||||
 | 
						check_for_pole = pipeworks.check_for_vert_pipe,
 | 
				
			||||||
 | 
						check_for_horiz_pole = pipeworks.check_for_horiz_pipe
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local nodename_sp_loaded = "pipeworks:straight_pipe_loaded"
 | 
				
			||||||
 | 
					minetest.register_node(nodename_sp_loaded, {
 | 
				
			||||||
 | 
						description = S("Straight-only Pipe"),
 | 
				
			||||||
 | 
						drawtype = "mesh",
 | 
				
			||||||
 | 
						mesh = "pipeworks_straight_pipe"..polys..".obj",
 | 
				
			||||||
 | 
						tiles = { "pipeworks_straight_pipe_loaded.png" },
 | 
				
			||||||
 | 
						paramtype = "light",
 | 
				
			||||||
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
 | 
						groups = {snappy=3, pipe=1, not_in_creative_inventory=1, dig_generic = 4, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
 | 
						_sound_def = {
 | 
				
			||||||
 | 
					        key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
						walkable = true,
 | 
				
			||||||
 | 
						on_place = pipeworks.rotate_on_place,
 | 
				
			||||||
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
 | 
							pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
						selection_box = sp_cbox,
 | 
				
			||||||
 | 
						collision_box = sp_cbox,
 | 
				
			||||||
 | 
						drop = "pipeworks:straight_pipe_empty",
 | 
				
			||||||
 | 
						on_rotate = pipeworks.fix_after_rotation,
 | 
				
			||||||
 | 
						check_for_pole = pipeworks.check_for_vert_pipe,
 | 
				
			||||||
 | 
						check_for_horiz_pole = pipeworks.check_for_horiz_pipe
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:straight_pipe_empty"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_sp_empty, true)
 | 
				
			||||||
 | 
					new_flow_logic_register.directional_horizonal_rotate(nodename_sp_loaded, true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Other misc stuff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
 | 
					minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
 | 
				
			||||||
minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")
 | 
					minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_lbm({
 | 
					 | 
				
			||||||
	name = "pipeworks:rotate_valves_flowsensors",
 | 
					 | 
				
			||||||
	label = "Flip pipeworks valves and flow sensors around X/Z",
 | 
					 | 
				
			||||||
	run_at_every_load = false,
 | 
					 | 
				
			||||||
	nodenames = {
 | 
					 | 
				
			||||||
		"pipeworks:flow_sensor_empty",
 | 
					 | 
				
			||||||
		"pipeworks:flow_sensor_loaded",
 | 
					 | 
				
			||||||
		"pipeworks:valve_off_empty",
 | 
					 | 
				
			||||||
		"pipeworks:valve_on_empty",
 | 
					 | 
				
			||||||
		"pipeworks:valve_off_loaded",
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	action = function(pos, node)
 | 
					 | 
				
			||||||
		local dir = minetest.facedir_to_dir(node.param2)
 | 
					 | 
				
			||||||
		local newdir = { x=dir.z, y=dir.y, z=dir.x }
 | 
					 | 
				
			||||||
		local newfdir = minetest.dir_to_facedir(newdir)
 | 
					 | 
				
			||||||
		minetest.swap_node(pos, { name = node.name, param2 = newfdir })
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,187 +1,86 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
local fs_helpers = pipeworks.fs_helpers
 | 
					local fs_helpers = pipeworks.fs_helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function delay(x)
 | 
					 | 
				
			||||||
	return (function() return x end)
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function set_filter_infotext(data, meta)
 | 
					local function set_filter_infotext(data, meta)
 | 
				
			||||||
	local infotext = data.wise_desc.." Filter-Injector"
 | 
						local infotext = S("@1 Filter-Injector", data.wise_desc)
 | 
				
			||||||
	if meta:get_int("slotseq_mode") == 2 then
 | 
						if meta:get_int("slotseq_mode") == 2 then
 | 
				
			||||||
		infotext = infotext .. " (slot #"..meta:get_int("slotseq_index").." next)"
 | 
							infotext = infotext .. " "..S("(slot #@1 next)", meta:get_int("slotseq_index"))
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	meta:set_string("infotext", infotext)
 | 
						meta:set_string("infotext", infotext)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function set_filter_formspec(data, meta)
 | 
					local function set_filter_formspec(data, meta)
 | 
				
			||||||
	local itemname = data.wise_desc.." Filter-Injector"
 | 
						local itemname = S("@1 Filter-Injector", data.wise_desc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local formspec
 | 
						local formspec
 | 
				
			||||||
	if data.digiline then
 | 
						if data.digiline then
 | 
				
			||||||
		formspec = "size[8,2.7]"..
 | 
							formspec =
 | 
				
			||||||
			"item_image[0,0;1,1;pipeworks:"..data.name.."]"..
 | 
								"size[8.5,3]"..
 | 
				
			||||||
			"label[1,0;"..minetest.formspec_escape(itemname).."]"..
 | 
								"item_image[0.2,0;1,1;pipeworks:"..data.name.."]"..
 | 
				
			||||||
			"field[0.3,1.5;8.0,1;channel;Channel;${channel}]"..
 | 
								"label[1.2,0.2;"..minetest.formspec_escape(itemname).."]"..
 | 
				
			||||||
			fs_helpers.cycling_button(meta, "button[0,2;4,1", "slotseq_mode",
 | 
								"field[0.5,1.6;4.6,1;channel;"..S("Channel")..";${channel}]"..
 | 
				
			||||||
				{"Sequence slots by Priority",
 | 
								"button[4.8,1.3;1.5,1;set_channel;"..S("Set").."]"..
 | 
				
			||||||
				 "Sequence slots Randomly",
 | 
								fs_helpers.cycling_button(meta, "button[0.2,2.3;4.05,1", "slotseq_mode",
 | 
				
			||||||
				 "Sequence slots by Rotation"})..
 | 
									{S("Sequence slots by Priority"),
 | 
				
			||||||
			fs_helpers.cycling_button(meta, "button[4,2;4,1", "exmatch_mode",
 | 
									 S("Sequence slots Randomly"),
 | 
				
			||||||
				{"Exact match - off",
 | 
									 S("Sequence slots by Rotation")})..
 | 
				
			||||||
				 "Exact match - on "})
 | 
								fs_helpers.cycling_button(meta, "button[4.25,2.3;4.05,1", "exmatch_mode",
 | 
				
			||||||
 | 
									{S("Exact match - off"),
 | 
				
			||||||
 | 
									 S("Exact match - on")})..
 | 
				
			||||||
 | 
								"button_exit[6.3,1.3;2,1;close;"..S("Close").."]"
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		local exmatch_button = ""
 | 
							local exmatch_button = ""
 | 
				
			||||||
		if data.stackwise then
 | 
							if data.stackwise then
 | 
				
			||||||
			exmatch_button =
 | 
								exmatch_button =
 | 
				
			||||||
				fs_helpers.cycling_button(meta, "button[4,3.5;4,1", "exmatch_mode",
 | 
									fs_helpers.cycling_button(meta, "button["..(10.2-(0.22)-4)..",4.5;4,1", "exmatch_mode",
 | 
				
			||||||
					{"Exact match - off",
 | 
										{S("Exact match - off"),
 | 
				
			||||||
					 "Exact match - on "})
 | 
										 S("Exact match - on")})
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
							local size = "10.2,11"
 | 
				
			||||||
		formspec = "size[8,8.5]"..
 | 
							local list_backgrounds = ""
 | 
				
			||||||
			"item_image[0,0;1,1;pipeworks:"..data.name.."]"..
 | 
							if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
				
			||||||
			"label[1,0;"..minetest.formspec_escape(itemname).."]"..
 | 
								list_backgrounds = "style_type[box;colors=#666]"
 | 
				
			||||||
			"label[0,1;Prefer item types:]"..
 | 
								for i=0, 7 do
 | 
				
			||||||
			"list[context;main;0,1.5;8,2;]"..
 | 
									for j=0, 1 do
 | 
				
			||||||
			fs_helpers.cycling_button(meta, "button[0,3.5;4,1", "slotseq_mode",
 | 
										list_backgrounds = list_backgrounds .. "box[".. 0.22+(i*1.25) ..",".. 1.75+(j*1.25) ..";1,1;]"
 | 
				
			||||||
				{"Sequence slots by Priority",
 | 
									end
 | 
				
			||||||
				 "Sequence slots Randomly",
 | 
								end
 | 
				
			||||||
				 "Sequence slots by Rotation"})..
 | 
							end
 | 
				
			||||||
 | 
							formspec =
 | 
				
			||||||
 | 
								"formspec_version[2]"..
 | 
				
			||||||
 | 
								"size["..size.."]"..
 | 
				
			||||||
 | 
								pipeworks.fs_helpers.get_prepends(size)..
 | 
				
			||||||
 | 
								"item_image[0.22,0.22;1,1;pipeworks:"..data.name.."]"..
 | 
				
			||||||
 | 
								"label[1.22,0.72;"..minetest.formspec_escape(itemname).."]"..
 | 
				
			||||||
 | 
								"label[0.22,1.5;"..S("Prefer item types:").."]"..
 | 
				
			||||||
 | 
								list_backgrounds..
 | 
				
			||||||
 | 
								"list[context;main;0.22,1.75;8,2;]"..
 | 
				
			||||||
 | 
								fs_helpers.cycling_button(meta, "button[0.22,4.5;4,1", "slotseq_mode",
 | 
				
			||||||
 | 
									{S("Sequence slots by Priority"),
 | 
				
			||||||
 | 
									 S("Sequence slots Randomly"),
 | 
				
			||||||
 | 
									 S("Sequence slots by Rotation")})..
 | 
				
			||||||
			exmatch_button..
 | 
								exmatch_button..
 | 
				
			||||||
			"list[current_player;main;0,4.5;8,4;]" ..
 | 
								pipeworks.fs_helpers.get_inv(6)..
 | 
				
			||||||
			"listring[]"
 | 
								"listring[]"
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	meta:set_string("formspec", formspec)
 | 
						meta:set_string("formspec", formspec)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- todo SOON: this function has *way too many* parameters
 | 
					 | 
				
			||||||
local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all,digiline)
 | 
					 | 
				
			||||||
	local sposes = {}
 | 
					 | 
				
			||||||
	if not frominvname or not frominv:get_list(frominvname) then return end
 | 
					 | 
				
			||||||
	for spos,stack in ipairs(frominv:get_list(frominvname)) do
 | 
					 | 
				
			||||||
		local matches
 | 
					 | 
				
			||||||
		if filterfor == "" then
 | 
					 | 
				
			||||||
			matches = stack:get_name() ~= ""
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			local fname = filterfor.name
 | 
					 | 
				
			||||||
			local fgroup = filterfor.group
 | 
					 | 
				
			||||||
			local fwear = filterfor.wear
 | 
					 | 
				
			||||||
			local fmetadata = filterfor.metadata
 | 
					 | 
				
			||||||
			matches = (not fname                                             -- If there's a name filter,
 | 
					 | 
				
			||||||
			           or stack:get_name() == fname)                         --  it must match.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			          and (not fgroup                                        -- If there's a group filter,
 | 
					 | 
				
			||||||
			               or (type(fgroup) == "string"                      --  it must be a string
 | 
					 | 
				
			||||||
			                   and minetest.get_item_group(                  --  and it must match.
 | 
					 | 
				
			||||||
			                                stack:get_name(), fgroup) ~= 0))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			          and (not fwear                                         -- If there's a wear filter:
 | 
					 | 
				
			||||||
			               or (type(fwear) == "number"                       --  If it's a number,
 | 
					 | 
				
			||||||
			                   and stack:get_wear() == fwear)                --   it must match.
 | 
					 | 
				
			||||||
			               or (type(fwear) == "table"                        --  If it's a table:
 | 
					 | 
				
			||||||
			                   and (not fwear[1]                             --   If there's a lower bound,
 | 
					 | 
				
			||||||
			                        or (type(fwear[1]) == "number"           --    it must be a number
 | 
					 | 
				
			||||||
			                            and fwear[1] <= stack:get_wear()))   --    and it must be <= the actual wear.
 | 
					 | 
				
			||||||
			                   and (not fwear[2]                             --   If there's an upper bound
 | 
					 | 
				
			||||||
			                        or (type(fwear[2]) == "number"           --    it must be a number
 | 
					 | 
				
			||||||
			                            and stack:get_wear() < fwear[2]))))  --    and it must be > the actual wear.
 | 
					 | 
				
			||||||
			                                                                 --  If the wear filter is of any other type, fail.
 | 
					 | 
				
			||||||
			                                                                 --
 | 
					 | 
				
			||||||
			          and (not fmetadata                                     -- If there's a matadata filter,
 | 
					 | 
				
			||||||
			               or (type(fmetadata) == "string"                   --  it must be a string
 | 
					 | 
				
			||||||
			                   and stack:get_metadata() == fmetadata))       --  and it must match.
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
		if matches then table.insert(sposes, spos) end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	if #sposes == 0 then return false end
 | 
					 | 
				
			||||||
	if slotseq_mode == 1 then
 | 
					 | 
				
			||||||
		for i = #sposes, 2, -1 do
 | 
					 | 
				
			||||||
			local j = math.random(i)
 | 
					 | 
				
			||||||
			local t = sposes[j]
 | 
					 | 
				
			||||||
			sposes[j] = sposes[i]
 | 
					 | 
				
			||||||
			sposes[i] = t
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	elseif slotseq_mode == 2 then
 | 
					 | 
				
			||||||
		local headpos = filtmeta:get_int("slotseq_index")
 | 
					 | 
				
			||||||
		table.sort(sposes, function (a, b)
 | 
					 | 
				
			||||||
			if a >= headpos then
 | 
					 | 
				
			||||||
				if b < headpos then return true end
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				if b >= headpos then return false end
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			return a < b
 | 
					 | 
				
			||||||
		end)
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	for _, spos in ipairs(sposes) do
 | 
					 | 
				
			||||||
			local stack = frominv:get_stack(frominvname, spos)
 | 
					 | 
				
			||||||
			local doRemove = stack:get_count()
 | 
					 | 
				
			||||||
			if fromtube.can_remove then
 | 
					 | 
				
			||||||
				doRemove = fromtube.can_remove(frompos, fromnode, stack, dir)
 | 
					 | 
				
			||||||
			elseif fromdef.allow_metadata_inventory_take then
 | 
					 | 
				
			||||||
				doRemove = fromdef.allow_metadata_inventory_take(frompos, frominvname,spos, stack, fakePlayer)
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			-- stupid lack of continue statements grumble
 | 
					 | 
				
			||||||
			if doRemove > 0 then
 | 
					 | 
				
			||||||
				if slotseq_mode == 2 then
 | 
					 | 
				
			||||||
					local nextpos = spos + 1
 | 
					 | 
				
			||||||
					if nextpos > frominv:get_size(frominvname) then
 | 
					 | 
				
			||||||
						nextpos = 1
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
					filtmeta:set_int("slotseq_index", nextpos)
 | 
					 | 
				
			||||||
					set_filter_infotext(data, filtmeta)
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
				local item
 | 
					 | 
				
			||||||
				local count
 | 
					 | 
				
			||||||
				if all then
 | 
					 | 
				
			||||||
					count = math.min(stack:get_count(), doRemove)
 | 
					 | 
				
			||||||
					if filterfor.count and (filterfor.count > 1 or digiline) then
 | 
					 | 
				
			||||||
						if exmatch_mode ~= 0 and filterfor.count > count then
 | 
					 | 
				
			||||||
							return false -- not enough, fail
 | 
					 | 
				
			||||||
						else
 | 
					 | 
				
			||||||
							-- limit quantity to filter amount
 | 
					 | 
				
			||||||
							count = math.min(filterfor.count, count)
 | 
					 | 
				
			||||||
						end
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
					count = 1
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
				if fromtube.remove_items then
 | 
					 | 
				
			||||||
					-- it could be the entire stack...
 | 
					 | 
				
			||||||
					item = fromtube.remove_items(frompos, fromnode, stack, dir, count)
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
					item = stack:take_item(count)
 | 
					 | 
				
			||||||
					frominv:set_stack(frominvname, spos, stack)
 | 
					 | 
				
			||||||
					if fromdef.on_metadata_inventory_take then
 | 
					 | 
				
			||||||
						fromdef.on_metadata_inventory_take(frompos, frominvname, spos, item, fakePlayer)
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
				local pos = vector.add(frompos, vector.multiply(dir, 1.4))
 | 
					 | 
				
			||||||
				local start_pos = vector.add(frompos, dir)
 | 
					 | 
				
			||||||
				local item1 = pipeworks.tube_inject_item(pos, start_pos, dir, item)
 | 
					 | 
				
			||||||
				return true-- only fire one item, please
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	return false
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function punch_filter(data, filtpos, filtnode, msg)
 | 
					local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			||||||
	local filtmeta = minetest.get_meta(filtpos)
 | 
						local filtmeta = minetest.get_meta(filtpos)
 | 
				
			||||||
	local filtinv = filtmeta:get_inventory()
 | 
						local filtinv = filtmeta:get_inventory()
 | 
				
			||||||
	local owner = filtmeta:get_string("owner")
 | 
						local owner = filtmeta:get_string("owner")
 | 
				
			||||||
	local fakePlayer = {
 | 
						local fakePlayer = pipeworks.create_fake_player({
 | 
				
			||||||
		get_player_name = delay(owner),
 | 
							name = owner
 | 
				
			||||||
		is_fake_player = ":pipeworks",
 | 
						})
 | 
				
			||||||
		get_wielded_item = delay(ItemStack(nil))
 | 
					 | 
				
			||||||
	} -- TODO: use a mechanism as the wielder one
 | 
					 | 
				
			||||||
	local dir = pipeworks.facedir_to_right_dir(filtnode.param2)
 | 
						local dir = pipeworks.facedir_to_right_dir(filtnode.param2)
 | 
				
			||||||
	local frompos = vector.subtract(filtpos, dir)
 | 
						local frompos = vector.subtract(filtpos, dir)
 | 
				
			||||||
	local fromnode = minetest.get_node(frompos)
 | 
						local fromnode = minetest.get_node(frompos)
 | 
				
			||||||
	if not fromnode then return end
 | 
						if not fromnode then return end
 | 
				
			||||||
	local fromdef = minetest.registered_nodes[fromnode.name]
 | 
						local fromdef = minetest.registered_nodes[fromnode.name]
 | 
				
			||||||
	if not fromdef then return end
 | 
						if not fromdef or not fromdef.tube then return end
 | 
				
			||||||
	local fromtube = fromdef.tube
 | 
						local fromtube = table.copy(fromdef.tube)
 | 
				
			||||||
	local input_special_cases = {
 | 
						local input_special_cases = {
 | 
				
			||||||
		["technic:mv_furnace"] = "dst",
 | 
					 | 
				
			||||||
		["technic:mv_furnace_active"] = "dst",
 | 
					 | 
				
			||||||
		["technic:mv_electric_furnace"] = "dst",
 | 
							["technic:mv_electric_furnace"] = "dst",
 | 
				
			||||||
		["technic:mv_electric_furnace_active"] = "dst",
 | 
							["technic:mv_electric_furnace_active"] = "dst",
 | 
				
			||||||
		["technic:mv_alloy_furnace"] = "dst",
 | 
							["technic:mv_alloy_furnace"] = "dst",
 | 
				
			||||||
@@ -195,6 +94,14 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
		["technic:mv_grinder"] = "dst",
 | 
							["technic:mv_grinder"] = "dst",
 | 
				
			||||||
		["technic:mv_grinder_active"] = "dst",
 | 
							["technic:mv_grinder_active"] = "dst",
 | 
				
			||||||
		["technic:tool_workshop"] = "src",
 | 
							["technic:tool_workshop"] = "src",
 | 
				
			||||||
 | 
							["technic:mv_freezer"] = "dst",
 | 
				
			||||||
 | 
							["technic:mv_freezer_active"] = "dst",
 | 
				
			||||||
 | 
							["technic:hv_electric_furnace"] = "dst",
 | 
				
			||||||
 | 
							["technic:hv_electric_furnace_active"] = "dst",
 | 
				
			||||||
 | 
							["technic:hv_compressor"] = "dst",
 | 
				
			||||||
 | 
							["technic:hv_compressor_active"] = "dst",
 | 
				
			||||||
 | 
							["technic:hv_grinder"] = "dst",
 | 
				
			||||||
 | 
							["technic:hv_grinder_active"] = "dst"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- make sure there's something appropriate to inject the item into
 | 
						-- make sure there's something appropriate to inject the item into
 | 
				
			||||||
@@ -214,12 +121,12 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
	if not (fromtube and fromtube.input_inventory) then return end
 | 
						if not (fromtube and fromtube.input_inventory) then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local slotseq_mode
 | 
						local slotseq_mode
 | 
				
			||||||
	local exact_match
 | 
						local exmatch_mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local filters = {}
 | 
						local filters = {}
 | 
				
			||||||
	if data.digiline then
 | 
						if data.digiline then
 | 
				
			||||||
		local function add_filter(name, group, count, wear, metadata)
 | 
							local function add_filter(name, group, count, wear, metadata)
 | 
				
			||||||
			table.insert(filters, {name = name, group = group, count = count, wear = wear, metadata = metadata})
 | 
								table.insert(filters, {name = name, group = group, count = tonumber(count), wear = wear, metadata = metadata})
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local function add_itemstring_filter(filter)
 | 
							local function add_itemstring_filter(filter)
 | 
				
			||||||
@@ -251,10 +158,10 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			local exmatch = msg.exmatch
 | 
								local exmatch = msg.exmatch
 | 
				
			||||||
			local t_exmatch = type(exmatch)
 | 
								local t_exmatch = type(exmatch)
 | 
				
			||||||
			if t_exmatch == "number" and exmatch >= 0 and exmatch <= 1 then
 | 
								if t_exmatch == "number" and (exmatch == 0 or exmatch == 1) then
 | 
				
			||||||
				exact_match = exmatch
 | 
									exmatch_mode = exmatch
 | 
				
			||||||
			elseif t_exmatch == "boolean" then
 | 
								elseif t_exmatch == "boolean" then
 | 
				
			||||||
				exact_match = exmatch and 1 or 0
 | 
									exmatch_mode = exmatch and 1 or 0
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			local slotseq_index = msg.slotseq_index
 | 
								local slotseq_index = msg.slotseq_index
 | 
				
			||||||
@@ -271,11 +178,11 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
				filtmeta:set_int("slotseq_mode", slotseq_mode)
 | 
									filtmeta:set_int("slotseq_mode", slotseq_mode)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if exact_match ~= nil then
 | 
								if exmatch_mode ~= nil then
 | 
				
			||||||
				filtmeta:set_int("exmatch_mode", exact_match)
 | 
									filtmeta:set_int("exmatch_mode", exmatch_mode)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if slotseq_mode ~= nil or exact_match ~= nil then
 | 
								if slotseq_mode ~= nil or exmatch_mode ~= nil then
 | 
				
			||||||
				set_filter_formspec(data, filtmeta)
 | 
									set_filter_formspec(data, filtmeta)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -313,17 +220,136 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
		slotseq_mode = filtmeta:get_int("slotseq_mode")
 | 
							slotseq_mode = filtmeta:get_int("slotseq_mode")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if exact_match == nil then
 | 
						if exmatch_mode == nil then
 | 
				
			||||||
		exact_match = filtmeta:get_int("exmatch_mode")
 | 
							exmatch_mode = filtmeta:get_int("exmatch_mode")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local frominv
 | 
				
			||||||
 | 
						if fromtube.return_input_invref then
 | 
				
			||||||
 | 
							frominv = fromtube.return_input_invref(frompos, fromnode, dir, owner)
 | 
				
			||||||
 | 
							if not frominv then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
		local frommeta = minetest.get_meta(frompos)
 | 
							local frommeta = minetest.get_meta(frompos)
 | 
				
			||||||
	local frominv = frommeta:get_inventory()
 | 
							frominv = frommeta:get_inventory()
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	if fromtube.before_filter then fromtube.before_filter(frompos) end
 | 
						if fromtube.before_filter then fromtube.before_filter(frompos) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local function grabAndFire(frominvname, filterfor)
 | 
				
			||||||
 | 
							local sposes = {}
 | 
				
			||||||
 | 
							if not frominvname or not frominv:get_list(frominvname) then return end
 | 
				
			||||||
 | 
							for spos,stack in ipairs(frominv:get_list(frominvname)) do
 | 
				
			||||||
 | 
								local matches
 | 
				
			||||||
 | 
								if filterfor == "" then
 | 
				
			||||||
 | 
									matches = stack:get_name() ~= ""
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									local fname = filterfor.name
 | 
				
			||||||
 | 
									local fgroup = filterfor.group
 | 
				
			||||||
 | 
									local fwear = filterfor.wear
 | 
				
			||||||
 | 
									local fmetadata = filterfor.metadata
 | 
				
			||||||
 | 
									matches = (not fname                                             -- If there's a name filter,
 | 
				
			||||||
 | 
									           or stack:get_name() == fname)                         --  it must match.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									          and (not fgroup                                        -- If there's a group filter,
 | 
				
			||||||
 | 
									               or (type(fgroup) == "string"                      --  it must be a string
 | 
				
			||||||
 | 
									                   and minetest.get_item_group(                  --  and it must match.
 | 
				
			||||||
 | 
									                                stack:get_name(), fgroup) ~= 0))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									          and (not fwear                                         -- If there's a wear filter:
 | 
				
			||||||
 | 
									               or (type(fwear) == "number"                       --  If it's a number,
 | 
				
			||||||
 | 
									                   and stack:get_wear() == fwear)                --   it must match.
 | 
				
			||||||
 | 
									               or (type(fwear) == "table"                        --  If it's a table:
 | 
				
			||||||
 | 
									                   and (not fwear[1]                             --   If there's a lower bound,
 | 
				
			||||||
 | 
									                        or (type(fwear[1]) == "number"           --    it must be a number
 | 
				
			||||||
 | 
									                            and fwear[1] <= stack:get_wear()))   --    and it must be <= the actual wear.
 | 
				
			||||||
 | 
									                   and (not fwear[2]                             --   If there's an upper bound
 | 
				
			||||||
 | 
									                        or (type(fwear[2]) == "number"           --    it must be a number
 | 
				
			||||||
 | 
									                            and stack:get_wear() < fwear[2]))))  --    and it must be > the actual wear.
 | 
				
			||||||
 | 
									                                                                 --  If the wear filter is of any other type, fail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									          and (not fmetadata                                     -- If there's a metadata filter,
 | 
				
			||||||
 | 
									               or (type(fmetadata) == "string"                   --  it must be a string
 | 
				
			||||||
 | 
									                   and stack:get_metadata() == fmetadata))       --  and it must match.
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								if matches then table.insert(sposes, spos) end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							if #sposes == 0 then return false end
 | 
				
			||||||
 | 
							if slotseq_mode == 1 then
 | 
				
			||||||
 | 
								for i = #sposes, 2, -1 do
 | 
				
			||||||
 | 
									local j = math.random(i)
 | 
				
			||||||
 | 
									local t = sposes[j]
 | 
				
			||||||
 | 
									sposes[j] = sposes[i]
 | 
				
			||||||
 | 
									sposes[i] = t
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							elseif slotseq_mode == 2 then
 | 
				
			||||||
 | 
								local headpos = filtmeta:get_int("slotseq_index")
 | 
				
			||||||
 | 
								table.sort(sposes, function (a, b)
 | 
				
			||||||
 | 
									if a >= headpos then
 | 
				
			||||||
 | 
										if b < headpos then return true end
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										if b >= headpos then return false end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									return a < b
 | 
				
			||||||
 | 
								end)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							for _, spos in ipairs(sposes) do
 | 
				
			||||||
 | 
								local stack = frominv:get_stack(frominvname, spos)
 | 
				
			||||||
 | 
								local doRemove = stack:get_count()
 | 
				
			||||||
 | 
								if fromtube.can_remove then
 | 
				
			||||||
 | 
									doRemove = fromtube.can_remove(frompos, fromnode, stack, dir, frominvname, spos)
 | 
				
			||||||
 | 
								elseif fromdef.allow_metadata_inventory_take then
 | 
				
			||||||
 | 
									doRemove = fromdef.allow_metadata_inventory_take(frompos, frominvname,spos, stack, fakePlayer)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								-- stupid lack of continue statements grumble
 | 
				
			||||||
 | 
								if doRemove > 0 then
 | 
				
			||||||
 | 
									if slotseq_mode == 2 then
 | 
				
			||||||
 | 
										local nextpos = spos + 1
 | 
				
			||||||
 | 
										if nextpos > frominv:get_size(frominvname) then
 | 
				
			||||||
 | 
											nextpos = 1
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										filtmeta:set_int("slotseq_index", nextpos)
 | 
				
			||||||
 | 
										set_filter_infotext(data, filtmeta)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									local item
 | 
				
			||||||
 | 
									local count
 | 
				
			||||||
 | 
									if data.stackwise then
 | 
				
			||||||
 | 
										count = math.min(stack:get_count(), doRemove)
 | 
				
			||||||
 | 
										if filterfor.count and (filterfor.count > 1 or data.digiline) then
 | 
				
			||||||
 | 
											if exmatch_mode ~= 0 and filterfor.count > count then
 | 
				
			||||||
 | 
												return false -- not enough, fail
 | 
				
			||||||
 | 
											else
 | 
				
			||||||
 | 
												-- limit quantity to filter amount
 | 
				
			||||||
 | 
												count = math.min(filterfor.count, count)
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										count = 1
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									if fromtube.remove_items then
 | 
				
			||||||
 | 
										-- it could be the entire stack...
 | 
				
			||||||
 | 
										item = fromtube.remove_items(frompos, fromnode, stack, dir, count, frominvname, spos)
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										item = stack:take_item(count)
 | 
				
			||||||
 | 
										frominv:set_stack(frominvname, spos, stack)
 | 
				
			||||||
 | 
										if fromdef.on_metadata_inventory_take then
 | 
				
			||||||
 | 
											fromdef.on_metadata_inventory_take(frompos, frominvname, spos, item, fakePlayer)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									local pos = vector.add(frompos, vector.multiply(dir, 1.4))
 | 
				
			||||||
 | 
									local start_pos = vector.add(frompos, dir)
 | 
				
			||||||
 | 
									pipeworks.tube_inject_item(pos, start_pos, dir, item,
 | 
				
			||||||
 | 
										fakePlayer:get_player_name())
 | 
				
			||||||
 | 
									return true -- only fire one item, please
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do
 | 
						for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do
 | 
				
			||||||
		local done = false
 | 
							local done = false
 | 
				
			||||||
		for _, filterfor in ipairs(filters) do
 | 
							for _, filterfor in ipairs(filters) do
 | 
				
			||||||
			if grabAndFire(data, slotseq_mode, exact_match, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise, data.digiline) then
 | 
								if grabAndFire(frominvname, filterfor) then
 | 
				
			||||||
				done = true
 | 
									done = true
 | 
				
			||||||
				break
 | 
									break
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -336,23 +362,23 @@ end
 | 
				
			|||||||
for _, data in ipairs({
 | 
					for _, data in ipairs({
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		name = "filter",
 | 
							name = "filter",
 | 
				
			||||||
		wise_desc = "Itemwise",
 | 
							wise_desc = S("Itemwise"),
 | 
				
			||||||
		stackwise = false,
 | 
							stackwise = false,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		name = "mese_filter",
 | 
							name = "mese_filter",
 | 
				
			||||||
		wise_desc = "Stackwise",
 | 
							wise_desc = S("Stackwise"),
 | 
				
			||||||
		stackwise = true,
 | 
							stackwise = true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{ -- register even if no digilines
 | 
						{ -- register even if no digilines
 | 
				
			||||||
		name = "digiline_filter",
 | 
							name = "digiline_filter",
 | 
				
			||||||
		wise_desc = "Digiline",
 | 
							wise_desc = S("Digiline"),
 | 
				
			||||||
		stackwise = true,
 | 
							stackwise = true,
 | 
				
			||||||
		digiline = true,
 | 
							digiline = true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
}) do
 | 
					}) do
 | 
				
			||||||
	local node = {
 | 
						local node = {
 | 
				
			||||||
		description = data.wise_desc.." Filter-Injector",
 | 
							description = S("@1 Filter-Injector", data.wise_desc),
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"pipeworks_"..data.name.."_top.png",
 | 
								"pipeworks_"..data.name.."_top.png",
 | 
				
			||||||
			"pipeworks_"..data.name.."_top.png",
 | 
								"pipeworks_"..data.name.."_top.png",
 | 
				
			||||||
@@ -362,9 +388,12 @@ for _, data in ipairs({
 | 
				
			|||||||
			"pipeworks_"..data.name.."_top.png",
 | 
								"pipeworks_"..data.name.."_top.png",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, mesecon = 2},
 | 
							groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, mesecon = 2, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
		legacy_facedir_simple = true,
 | 
							legacy_facedir_simple = true,
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_wood_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		on_construct = function(pos)
 | 
							on_construct = function(pos)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = minetest.get_meta(pos)
 | 
				
			||||||
			set_filter_formspec(data, meta)
 | 
								set_filter_formspec(data, meta)
 | 
				
			||||||
@@ -377,13 +406,24 @@ for _, data in ipairs({
 | 
				
			|||||||
			pipeworks.after_place(pos)
 | 
								pipeworks.after_place(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_dig_node = pipeworks.after_dig,
 | 
							after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
 | 
							on_rotate = pipeworks.on_rotate,
 | 
				
			||||||
		allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
							allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
				
			||||||
			if not pipeworks.may_configure(pos, player) then return 0 end
 | 
								if not pipeworks.may_configure(pos, player) then
 | 
				
			||||||
			return stack:get_count()
 | 
									return 0
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								local inv = minetest.get_meta(pos):get_inventory()
 | 
				
			||||||
 | 
								inv:set_stack("main", index, stack)
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
							allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
				
			||||||
			if not pipeworks.may_configure(pos, player) then return 0 end
 | 
								if not pipeworks.may_configure(pos, player) then
 | 
				
			||||||
			return stack:get_count()
 | 
									return 0
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								local inv = minetest.get_meta(pos):get_inventory()
 | 
				
			||||||
 | 
								local fake_stack = inv:get_stack("main", index)
 | 
				
			||||||
 | 
								fake_stack:take_item(stack:get_count())
 | 
				
			||||||
 | 
								inv:set_stack("main", index, fake_stack)
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
 | 
							allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
 | 
				
			||||||
			if not pipeworks.may_configure(pos, player) then return 0 end
 | 
								if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
@@ -404,10 +444,14 @@ for _, data in ipairs({
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		node.on_receive_fields = function(pos, formname, fields, sender)
 | 
							node.on_receive_fields = function(pos, formname, fields, sender)
 | 
				
			||||||
			if not pipeworks.may_configure(pos, sender) then return end
 | 
								if (fields.quit and not fields.key_enter_field)
 | 
				
			||||||
 | 
								or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			fs_helpers.on_receive_fields(pos, fields)
 | 
								fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if fields.channel then
 | 
								if fields.channel and (fields.key_enter_field == "channel" or fields.set_channel) then
 | 
				
			||||||
				minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
									minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -451,33 +495,66 @@ for _, data in ipairs({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:"..data.name, node)
 | 
						minetest.register_node("pipeworks:"..data.name, node)
 | 
				
			||||||
 | 
						pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:"..data.name
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					--[[
 | 
				
			||||||
	output = "pipeworks:filter 2",
 | 
					In the past the filter-injectors had real items in their inventories. This code
 | 
				
			||||||
	recipe = {
 | 
					puts them to the input to the filter-injector if possible. Else the items are
 | 
				
			||||||
	        { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" },
 | 
					dropped.
 | 
				
			||||||
	        { "group:stick", "default:mese_crystal", "homedecor:plastic_sheeting" },
 | 
					]]
 | 
				
			||||||
	        { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }
 | 
					local function put_to_inputinv(pos, node, filtmeta, list)
 | 
				
			||||||
	},
 | 
						local dir = pipeworks.facedir_to_right_dir(node.param2)
 | 
				
			||||||
})
 | 
						local frompos = vector.subtract(pos, dir)
 | 
				
			||||||
 | 
						local fromnode = minetest.get_node(frompos)
 | 
				
			||||||
minetest.register_craft( {
 | 
						local fromdef = minetest.registered_nodes[fromnode.name]
 | 
				
			||||||
	output = "pipeworks:mese_filter 2",
 | 
						if not fromdef or not fromdef.tube then
 | 
				
			||||||
	recipe = {
 | 
							return
 | 
				
			||||||
	        { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" },
 | 
						end
 | 
				
			||||||
	        { "group:stick", "default:mese", "homedecor:plastic_sheeting" },
 | 
						local fromtube = fromdef.tube
 | 
				
			||||||
	        { "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }
 | 
						local frominv
 | 
				
			||||||
	},
 | 
						if fromtube.return_input_invref then
 | 
				
			||||||
})
 | 
							local owner = filtmeta:get_string("owner")
 | 
				
			||||||
 | 
							frominv = fromtube.return_input_invref(frompos, fromnode, dir, owner)
 | 
				
			||||||
if minetest.get_modpath("digilines") then
 | 
							if not frominv then
 | 
				
			||||||
	minetest.register_craft( {
 | 
								return
 | 
				
			||||||
		output = "pipeworks:digiline_filter 2",
 | 
							end
 | 
				
			||||||
		recipe = {
 | 
						else
 | 
				
			||||||
			{ "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" },
 | 
							frominv = minetest.get_meta(frompos):get_inventory()
 | 
				
			||||||
			{ "group:stick", "digilines:wire_std_00000000", "homedecor:plastic_sheeting" },
 | 
						end
 | 
				
			||||||
			{ "default:steel_ingot", "default:steel_ingot", "homedecor:plastic_sheeting" }
 | 
						local listname = type(fromtube.input_inventory) == "table" and
 | 
				
			||||||
		},
 | 
								fromtube.input_inventory[1] or fromtube.input_inventory
 | 
				
			||||||
	})
 | 
						if not listname then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						for i = 1, #list do
 | 
				
			||||||
 | 
							local item = list[i]
 | 
				
			||||||
 | 
							if not item:is_empty() then
 | 
				
			||||||
 | 
								local leftover = frominv:add_item(listname, item)
 | 
				
			||||||
 | 
								if not leftover:is_empty() then
 | 
				
			||||||
 | 
									minetest.add_item(pos, leftover)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					minetest.register_lbm({
 | 
				
			||||||
 | 
						label = "Give back items of old filters that had real inventories",
 | 
				
			||||||
 | 
						name = "pipeworks:give_back_old_filter_items",
 | 
				
			||||||
 | 
						nodenames = {"pipeworks:filter", "pipeworks:mese_filter"},
 | 
				
			||||||
 | 
						run_at_every_load = false,
 | 
				
			||||||
 | 
						action = function(pos, node)
 | 
				
			||||||
 | 
							local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
							local list = meta:get_inventory():get_list("main")
 | 
				
			||||||
 | 
							if put_to_inputinv(pos, node, meta, list) then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							pos.y = pos.y + 1
 | 
				
			||||||
 | 
							for i = 1, #list do
 | 
				
			||||||
 | 
								local item = list[i]
 | 
				
			||||||
 | 
								if not item:is_empty() then
 | 
				
			||||||
 | 
									minetest.add_item(pos, item)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,8 @@ pipeworks.check_for_inflows = function(pos,node)
 | 
				
			|||||||
				source = minetest.get_meta(coords[i]):get_string("source")
 | 
									source = minetest.get_meta(coords[i]):get_string("source")
 | 
				
			||||||
				if source == minetest.pos_to_string(pos) then break end
 | 
									if source == minetest.pos_to_string(pos) then break end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			if string.find(name, "valve") or string.find(name, "sensor") then
 | 
								if string.find(name, "valve") or string.find(name, "sensor")
 | 
				
			||||||
 | 
								  or string.find(name, "straight_pipe") or string.find(name, "panel") then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if ((i == 3 or i == 4) and minetest.facedir_to_dir(testnode.param2).x ~= 0)
 | 
									if ((i == 3 or i == 4) and minetest.facedir_to_dir(testnode.param2).x ~= 0)
 | 
				
			||||||
				  or ((i == 5 or i == 6) and minetest.facedir_to_dir(testnode.param2).z ~= 0)
 | 
									  or ((i == 5 or i == 6) and minetest.facedir_to_dir(testnode.param2).z ~= 0)
 | 
				
			||||||
@@ -82,7 +83,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pipeworks.spigot_check = function(pos, node)
 | 
					pipeworks.spigot_check = function(pos, node)
 | 
				
			||||||
	local belowname = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
 | 
						local belowname = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
 | 
				
			||||||
	if belowname and (belowname == "air" or belowname == "default:water_flowing" or belowname == "default:water_source") then 
 | 
						if belowname and (belowname == "air" or belowname == pipeworks.liquids.water.flowing or belowname == pipeworks.liquids.water.source) then
 | 
				
			||||||
		local spigotname = minetest.get_node(pos).name
 | 
							local spigotname = minetest.get_node(pos).name
 | 
				
			||||||
		local fdir=node.param2 % 4
 | 
							local fdir=node.param2 % 4
 | 
				
			||||||
		local check = {
 | 
							local check = {
 | 
				
			||||||
@@ -95,14 +96,14 @@ pipeworks.spigot_check = function(pos, node)
 | 
				
			|||||||
		if near_node and string.find(near_node.name, "_loaded") then
 | 
							if near_node and string.find(near_node.name, "_loaded") then
 | 
				
			||||||
			if spigotname and spigotname == "pipeworks:spigot" then
 | 
								if spigotname and spigotname == "pipeworks:spigot" then
 | 
				
			||||||
				minetest.add_node(pos,{name = "pipeworks:spigot_pouring", param2 = fdir})
 | 
									minetest.add_node(pos,{name = "pipeworks:spigot_pouring", param2 = fdir})
 | 
				
			||||||
				if finitewater or belowname ~= "default:water_source" then
 | 
									if finitewater or belowname ~= pipeworks.liquids.water.source then
 | 
				
			||||||
					minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z},{name = "default:water_source"})
 | 
										minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z},{name = pipeworks.liquids.water.source})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			if spigotname == "pipeworks:spigot_pouring" then
 | 
								if spigotname == "pipeworks:spigot_pouring" then
 | 
				
			||||||
				minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:spigot", param2 = fdir})
 | 
									minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:spigot", param2 = fdir})
 | 
				
			||||||
				if belowname == "default:water_source" and not finitewater then
 | 
									if belowname == pipeworks.liquids.water.source and not finitewater then
 | 
				
			||||||
					minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
										minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -112,20 +113,20 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pipeworks.fountainhead_check = function(pos, node)
 | 
					pipeworks.fountainhead_check = function(pos, node)
 | 
				
			||||||
	local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
 | 
						local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
 | 
				
			||||||
	if abovename and (abovename == "air" or abovename == "default:water_flowing" or abovename == "default:water_source") then 
 | 
						if abovename and (abovename == "air" or abovename == pipeworks.liquids.water.flowing or abovename == pipeworks.liquids.water.source) then
 | 
				
			||||||
		local fountainhead_name = minetest.get_node(pos).name
 | 
							local fountainhead_name = minetest.get_node(pos).name
 | 
				
			||||||
		local near_node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
							local near_node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
				
			||||||
		if near_node and string.find(near_node.name, "_loaded") then
 | 
							if near_node and string.find(near_node.name, "_loaded") then
 | 
				
			||||||
			if fountainhead_name and fountainhead_name == "pipeworks:fountainhead" then
 | 
								if fountainhead_name and fountainhead_name == "pipeworks:fountainhead" then
 | 
				
			||||||
				minetest.add_node(pos,{name = "pipeworks:fountainhead_pouring"})
 | 
									minetest.add_node(pos,{name = "pipeworks:fountainhead_pouring"})
 | 
				
			||||||
				if finitewater or abovename ~= "default:water_source" then
 | 
									if finitewater or abovename ~= pipeworks.liquids.water.source then
 | 
				
			||||||
					minetest.add_node({x=pos.x,y=pos.y+1,z=pos.z},{name = "default:water_source"})
 | 
										minetest.add_node({x=pos.x,y=pos.y+1,z=pos.z},{name = pipeworks.liquids.water.source})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			if fountainhead_name == "pipeworks:fountainhead_pouring" then
 | 
								if fountainhead_name == "pipeworks:fountainhead_pouring" then
 | 
				
			||||||
				minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:fountainhead"})
 | 
									minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:fountainhead"})
 | 
				
			||||||
				if abovename == "default:water_source" and not finitewater then
 | 
									if abovename == pipeworks.liquids.water.source and not finitewater then
 | 
				
			||||||
					minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z})
 | 
										minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										126
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						@@ -3,18 +3,25 @@
 | 
				
			|||||||
-- This mod supplies various steel pipes and plastic pneumatic tubes
 | 
					-- This mod supplies various steel pipes and plastic pneumatic tubes
 | 
				
			||||||
-- and devices that they can connect to.
 | 
					-- and devices that they can connect to.
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
-- License: WTFPL
 | 
					 | 
				
			||||||
--
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks = {}
 | 
					pipeworks = {}
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list = {}
 | 
				
			||||||
local DEBUG = false
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.worldpath = minetest.get_worldpath()
 | 
					pipeworks.worldpath = minetest.get_worldpath()
 | 
				
			||||||
pipeworks.modpath = minetest.get_modpath("pipeworks")
 | 
					pipeworks.modpath = minetest.get_modpath("pipeworks")
 | 
				
			||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.liquids = {}
 | 
				
			||||||
 | 
					pipeworks.liquids.water = {
 | 
				
			||||||
 | 
						source = minetest.registered_nodes["mapgen_water_source"].name,
 | 
				
			||||||
 | 
						flowing = minetest.registered_nodes["mapgen_water_source"].liquid_alternative_flowing
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					pipeworks.liquids.river_water = {
 | 
				
			||||||
 | 
						source = minetest.registered_nodes["mapgen_river_water_source"].name,
 | 
				
			||||||
 | 
						flowing = minetest.registered_nodes["mapgen_river_water_source"].liquid_alternative_flowing
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dofile(pipeworks.modpath.."/default_settings.lua")
 | 
					dofile(pipeworks.modpath.."/default_settings.lua")
 | 
				
			||||||
 | 
					 | 
				
			||||||
-- Read the external config file if it exists.
 | 
					-- Read the external config file if it exists.
 | 
				
			||||||
local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt"
 | 
					local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt"
 | 
				
			||||||
local worldsettingsfile = io.open(worldsettingspath, "r")
 | 
					local worldsettingsfile = io.open(worldsettingspath, "r")
 | 
				
			||||||
@@ -22,6 +29,12 @@ if worldsettingsfile then
 | 
				
			|||||||
	worldsettingsfile:close()
 | 
						worldsettingsfile:close()
 | 
				
			||||||
	dofile(worldsettingspath)
 | 
						dofile(worldsettingspath)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.toggles.pipe_mode == "pressure" then
 | 
				
			||||||
 | 
						minetest.log("warning", "pipeworks pressure logic mode comes with caveats and differences in behaviour, you have been warned!")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.entity_update_interval >= 0.2 and pipeworks.enable_accelerator_tube then
 | 
				
			||||||
 | 
						minetest.log("warning", "pipeworks accelerator tubes will not entirely work with an entity update interval 0.2 or above.")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Random variables
 | 
					-- Random variables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,13 +51,15 @@ pipeworks.rules_all = {{x=0, y=0, z=1},{x=0, y=0, z=-1},{x=1, y=0, z=0},{x=-1, y
 | 
				
			|||||||
		{x=0, y=1, z=0}, {x=0, y=-1, z=0}}
 | 
							{x=0, y=1, z=0}, {x=0, y=-1, z=0}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.mesecons_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}}
 | 
					pipeworks.mesecons_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}}
 | 
				
			||||||
 | 
					pipeworks.digilines_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.liquid_texture = "default_water.png"
 | 
					pipeworks.liquid_texture = minetest.registered_nodes[pipeworks.liquids.water.flowing].tiles[1]
 | 
				
			||||||
 | 
					if type(pipeworks.liquid_texture) == "table" then pipeworks.liquid_texture = pipeworks.liquid_texture.name end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.button_off   = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}
 | 
					pipeworks.button_off   = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}
 | 
				
			||||||
pipeworks.button_on    = {text="", texture="pipeworks_button_on.png",  addopts="false;false;pipeworks_button_interm.png"}
 | 
					pipeworks.button_on    = {text="", texture="pipeworks_button_on.png",  addopts="false;false;pipeworks_button_interm.png"}
 | 
				
			||||||
pipeworks.button_base  = "image_button[0,4.3;1,0.6"
 | 
					pipeworks.button_base  = "image_button[0,4.3;1,0.6"
 | 
				
			||||||
pipeworks.button_label = "label[0.9,4.31;Allow splitting incoming stacks from tubes]"
 | 
					pipeworks.button_label = "label[0.9,4.31;"..S("Allow splitting incoming stacks from tubes").."]"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Helper functions
 | 
					-- Helper functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,6 +72,29 @@ function pipeworks.fix_image_names(table, replacement)
 | 
				
			|||||||
	return outtable
 | 
						return outtable
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function overlay_tube_texture(texture)
 | 
				
			||||||
 | 
						-- The texture appears the first time to be colorized as the opaque background.
 | 
				
			||||||
 | 
						return ("(%s)^[noalpha^[colorize:#dadada^(%s)"):format(texture, texture)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.make_tube_tile(tile)
 | 
				
			||||||
 | 
						if pipeworks.use_real_entities then
 | 
				
			||||||
 | 
							return tile
 | 
				
			||||||
 | 
						elseif type(tile) == "string" then
 | 
				
			||||||
 | 
							return overlay_tube_texture(tile)
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							tile = table.copy(tile)
 | 
				
			||||||
 | 
							if tile.color then
 | 
				
			||||||
 | 
								-- Won't work 100% of the time, but good enough.
 | 
				
			||||||
 | 
								tile.name = tile.name .. "^[multiply:" .. minetest.colorspec_to_colorstring(tile.color)
 | 
				
			||||||
 | 
								tile.color = nil
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							tile.name = overlay_tube_texture(tile.name)
 | 
				
			||||||
 | 
							tile.backface_culling = nil -- The texture is opaque
 | 
				
			||||||
 | 
							return tile
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.add_node_box(t, b)
 | 
					function pipeworks.add_node_box(t, b)
 | 
				
			||||||
	if not t or not b then return end
 | 
						if not t or not b then return end
 | 
				
			||||||
	for i in ipairs(b)
 | 
						for i in ipairs(b)
 | 
				
			||||||
@@ -69,8 +107,8 @@ function pipeworks.may_configure(pos, player)
 | 
				
			|||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
	local owner = meta:get_string("owner")
 | 
						local owner = meta:get_string("owner")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if owner ~= "" then -- wielders and filters
 | 
						if owner ~= "" and owner == name then -- wielders and filters
 | 
				
			||||||
		return owner == name
 | 
							return true
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	return not minetest.is_protected(pos, name)
 | 
						return not minetest.is_protected(pos, name)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -89,9 +127,22 @@ function pipeworks.replace_name(tbl,tr,name)
 | 
				
			|||||||
	return ntbl
 | 
						return ntbl
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.logger = function(msg)
 | 
				
			||||||
 | 
						minetest.log("action", "[pipeworks] "..msg)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-------------------------------------------
 | 
					-------------------------------------------
 | 
				
			||||||
-- Load the various other parts of the mod
 | 
					-- Load the various other parts of the mod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- early auto-detection for finite water mode if not explicitly disabled
 | 
				
			||||||
 | 
					if pipeworks.toggles.finite_water == nil then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/autodetect-finite-water.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("signs_lib") then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/signs_compat.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dofile(pipeworks.modpath.."/common.lua")
 | 
					dofile(pipeworks.modpath.."/common.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/models.lua")
 | 
					dofile(pipeworks.modpath.."/models.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/autoplace_pipes.lua")
 | 
					dofile(pipeworks.modpath.."/autoplace_pipes.lua")
 | 
				
			||||||
@@ -99,27 +150,68 @@ dofile(pipeworks.modpath.."/autoplace_tubes.lua")
 | 
				
			|||||||
dofile(pipeworks.modpath.."/luaentity.lua")
 | 
					dofile(pipeworks.modpath.."/luaentity.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/item_transport.lua")
 | 
					dofile(pipeworks.modpath.."/item_transport.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/flowing_logic.lua")
 | 
					dofile(pipeworks.modpath.."/flowing_logic.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/crafts.lua")
 | 
					 | 
				
			||||||
dofile(pipeworks.modpath.."/tube_registration.lua")
 | 
					dofile(pipeworks.modpath.."/tube_registration.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/routing_tubes.lua")
 | 
					dofile(pipeworks.modpath.."/routing_tubes.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/sorting_tubes.lua")
 | 
					dofile(pipeworks.modpath.."/sorting_tubes.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/vacuum_tubes.lua")
 | 
					 | 
				
			||||||
dofile(pipeworks.modpath.."/signal_tubes.lua")
 | 
					dofile(pipeworks.modpath.."/signal_tubes.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/decorative_tubes.lua")
 | 
					dofile(pipeworks.modpath.."/decorative_tubes.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/filter-injector.lua")
 | 
					dofile(pipeworks.modpath.."/filter-injector.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/trashcan.lua")
 | 
					dofile(pipeworks.modpath.."/trashcan.lua")
 | 
				
			||||||
dofile(pipeworks.modpath.."/wielder.lua")
 | 
					dofile(pipeworks.modpath.."/wielder.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_pipes then dofile(pipeworks.modpath.."/pipes.lua") end
 | 
					local logicdir = "/pressure_logic/"
 | 
				
			||||||
if pipeworks.enable_teleport_tube then dofile(pipeworks.modpath.."/teleport_tube.lua") end
 | 
					
 | 
				
			||||||
if pipeworks.enable_pipe_devices then dofile(pipeworks.modpath.."/devices.lua") end
 | 
					-- note that even with these files the new flow logic is not yet default.
 | 
				
			||||||
if pipeworks.enable_redefines then
 | 
					-- registration will take place but no actual ABMs/node logic will be installed,
 | 
				
			||||||
 | 
					-- unless the toggle flag is specifically enabled in the per-world settings flag.
 | 
				
			||||||
 | 
					dofile(pipeworks.modpath..logicdir.."flowable_node_registry.lua")
 | 
				
			||||||
 | 
					dofile(pipeworks.modpath..logicdir.."abms.lua")
 | 
				
			||||||
 | 
					dofile(pipeworks.modpath..logicdir.."abm_register.lua")
 | 
				
			||||||
 | 
					dofile(pipeworks.modpath..logicdir.."flowable_node_registry_install.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.enable_pipes then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/pipes.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_teleport_tube then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/teleport_tube.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_pipe_devices then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/devices.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_redefines and (minetest.get_modpath("default") or minetest.get_modpath("hades_core")) then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/compat-chests.lua")
 | 
						dofile(pipeworks.modpath.."/compat-chests.lua")
 | 
				
			||||||
	dofile(pipeworks.modpath.."/compat-furnaces.lua")
 | 
						dofile(pipeworks.modpath.."/compat-furnaces.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.enable_autocrafter then dofile(pipeworks.modpath.."/autocrafter.lua") end
 | 
					if pipeworks.enable_redefines and minetest.get_modpath("mcl_barrels") then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/mcl_barrels.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_redefines and minetest.get_modpath("mcl_furnaces") then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/mcl_furnaces.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_autocrafter then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/autocrafter.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_lua_tube and minetest.get_modpath("mesecons") then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/lua_tube.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					if pipeworks.enable_sand_tube or pipeworks.enable_mese_sand_tube then
 | 
				
			||||||
 | 
						dofile(pipeworks.modpath.."/vacuum_tubes.lua")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dofile(pipeworks.modpath.."/crafts.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
 | 
					minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
print("Pipeworks loaded!")
 | 
					-- Unified Inventory categories integration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("unified_inventory") and unified_inventory.registered_categories then
 | 
				
			||||||
 | 
						if not unified_inventory.registered_categories["automation"] then
 | 
				
			||||||
 | 
							unified_inventory.register_category("automation", {
 | 
				
			||||||
 | 
								symbol = "pipeworks:lua_tube000000",
 | 
				
			||||||
 | 
								label = "Automation components"
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						unified_inventory.add_category_items("automation", pipeworks.ui_cat_tube_list)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.log("info", "Pipeworks loaded!")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
local luaentity = pipeworks.luaentity
 | 
					local luaentity = pipeworks.luaentity
 | 
				
			||||||
local enable_max_limit = minetest.settings:get("pipeworks_enable_items_per_tube_limit")
 | 
					local enable_max_limit = minetest.settings:get_bool("pipeworks_enable_items_per_tube_limit")
 | 
				
			||||||
local max_tube_limit = tonumber(minetest.settings:get("pipeworks_max_items_per_tube")) or 30
 | 
					local max_tube_limit = tonumber(minetest.settings:get("pipeworks_max_items_per_tube")) or 30
 | 
				
			||||||
if enable_max_limit == nil then enable_max_limit = true end
 | 
					if enable_max_limit == nil then enable_max_limit = true end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -7,13 +7,14 @@ function pipeworks.tube_item(pos, item)
 | 
				
			|||||||
	error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead")
 | 
						error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.tube_inject_item(pos, start_pos, velocity, item)
 | 
					function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner)
 | 
				
			||||||
	-- Take item in any format
 | 
						-- Take item in any format
 | 
				
			||||||
	local stack = ItemStack(item)
 | 
						local stack = ItemStack(item)
 | 
				
			||||||
	local obj = luaentity.add_entity(pos, "pipeworks:tubed_item")
 | 
						local obj = luaentity.add_entity(pos, "pipeworks:tubed_item")
 | 
				
			||||||
	obj:set_item(stack:to_string())
 | 
						obj:set_item(stack:to_string())
 | 
				
			||||||
	obj.start_pos = vector.new(start_pos)
 | 
						obj.start_pos = vector.new(start_pos)
 | 
				
			||||||
	obj:setvelocity(velocity)
 | 
						obj:set_velocity(velocity)
 | 
				
			||||||
 | 
						obj.owner = owner
 | 
				
			||||||
	--obj:set_color("red") -- todo: this is test-only code
 | 
						--obj:set_color("red") -- todo: this is test-only code
 | 
				
			||||||
	return obj
 | 
						return obj
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -24,7 +25,7 @@ end
 | 
				
			|||||||
-- both optional w/ sensible defaults and fallback to normal allow_* function
 | 
					-- both optional w/ sensible defaults and fallback to normal allow_* function
 | 
				
			||||||
-- XXX: possibly change insert_object to insert_item
 | 
					-- XXX: possibly change insert_object to insert_item
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}}
 | 
					local default_adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.notvel(tbl, vel)
 | 
					function pipeworks.notvel(tbl, vel)
 | 
				
			||||||
	local tbl2={}
 | 
						local tbl2={}
 | 
				
			||||||
@@ -41,7 +42,7 @@ minetest.register_globalstep(function(dtime)
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	tube_item_count = {}
 | 
						tube_item_count = {}
 | 
				
			||||||
	for id, entity in pairs(luaentity.entities) do
 | 
						for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
		if entity.name == "pipeworks:tubed_item" then
 | 
							if entity.name == "pipeworks:tubed_item" then
 | 
				
			||||||
			local h = minetest.hash_node_position(vector.round(entity._pos))
 | 
								local h = minetest.hash_node_position(vector.round(entity._pos))
 | 
				
			||||||
			tube_item_count[h] = (tube_item_count[h] or 0) + 1
 | 
								tube_item_count[h] = (tube_item_count[h] or 0) + 1
 | 
				
			||||||
@@ -49,12 +50,103 @@ minetest.register_globalstep(function(dtime)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function go_next(pos, velocity, stack)
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- tube overload mechanism:
 | 
				
			||||||
 | 
					-- when the tube's item count (tracked in the above tube_item_count table)
 | 
				
			||||||
 | 
					-- exceeds the limit configured per tube, replace it with a broken one.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.break_tube(pos)
 | 
				
			||||||
 | 
						local node = minetest.get_node(pos)
 | 
				
			||||||
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						meta:set_string("the_tube_was", minetest.serialize(node))
 | 
				
			||||||
 | 
						minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
				
			||||||
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local crunch_tube = function(pos, cnode, cmeta)
 | 
				
			||||||
 | 
						if enable_max_limit then
 | 
				
			||||||
 | 
							local h = minetest.hash_node_position(pos)
 | 
				
			||||||
 | 
							local itemcount = tube_item_count[h] or 0
 | 
				
			||||||
 | 
							if itemcount > max_tube_limit then
 | 
				
			||||||
 | 
								pipeworks.logger("Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")")
 | 
				
			||||||
 | 
								pipeworks.break_tube(pos)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- compatibility behaviour for the existing can_go() callbacks,
 | 
				
			||||||
 | 
					-- which can only specify a list of possible positions.
 | 
				
			||||||
 | 
					local function go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner)
 | 
				
			||||||
	local next_positions = {}
 | 
						local next_positions = {}
 | 
				
			||||||
	local max_priority = 0
 | 
						local max_priority = 0
 | 
				
			||||||
 | 
						local can_go
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if minetest.registered_nodes[cnode.name] and minetest.registered_nodes[cnode.name].tube and minetest.registered_nodes[cnode.name].tube.can_go then
 | 
				
			||||||
 | 
							can_go = minetest.registered_nodes[cnode.name].tube.can_go(pos, cnode, vel, stack)
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							local adjlist_string = minetest.get_meta(pos):get_string("adjlist")
 | 
				
			||||||
 | 
							local adjlist = minetest.deserialize(adjlist_string) or default_adjlist -- backward compat: if not found, use old behavior: all directions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							can_go = pipeworks.notvel(adjlist, vel)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						-- can_go() is expected to return an array-like table of candidate offsets.
 | 
				
			||||||
 | 
						-- for each one, look at the node at that offset and determine if it can accept the item.
 | 
				
			||||||
 | 
						-- also note the prioritisation:
 | 
				
			||||||
 | 
						-- if any tube is found with a greater priority than previously discovered,
 | 
				
			||||||
 | 
						-- then the valid positions are reset and and subsequent positions under this are skipped.
 | 
				
			||||||
 | 
						-- this has the effect of allowing only equal priorities to co-exist.
 | 
				
			||||||
 | 
						for _, vect in ipairs(can_go) do
 | 
				
			||||||
 | 
							local npos = vector.add(pos, vect)
 | 
				
			||||||
 | 
							pipeworks.load_position(npos)
 | 
				
			||||||
 | 
							local node = minetest.get_node(npos)
 | 
				
			||||||
 | 
							local reg_node = minetest.registered_nodes[node.name]
 | 
				
			||||||
 | 
							if reg_node then
 | 
				
			||||||
 | 
								local tube_def = reg_node.tube
 | 
				
			||||||
 | 
								local tubedevice = minetest.get_item_group(node.name, "tubedevice")
 | 
				
			||||||
 | 
								local tube_priority = (tube_def and tube_def.priority) or 100
 | 
				
			||||||
 | 
								if tubedevice > 0 and tube_priority >= max_priority then
 | 
				
			||||||
 | 
									if not tube_def or not tube_def.can_insert or
 | 
				
			||||||
 | 
											tube_def.can_insert(npos, node, stack, vect, owner) then
 | 
				
			||||||
 | 
										if tube_priority > max_priority then
 | 
				
			||||||
 | 
											max_priority = tube_priority
 | 
				
			||||||
 | 
											next_positions = {}
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										next_positions[#next_positions + 1] = {pos = npos, vect = vect}
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- indicate not found if no valid rules were picked up,
 | 
				
			||||||
 | 
						-- and don't change the counter.
 | 
				
			||||||
 | 
						if not next_positions[1] then
 | 
				
			||||||
 | 
							return cycledir, false, nil, nil
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- otherwise rotate to the next output direction and return that
 | 
				
			||||||
 | 
						local n = (cycledir % (#next_positions)) + 1
 | 
				
			||||||
 | 
						local new_velocity = vector.multiply(next_positions[n].vect, vel.speed)
 | 
				
			||||||
 | 
						return n, true, new_velocity, nil
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- function called by the on_step callback of the pipeworks tube luaentity.
 | 
				
			||||||
 | 
					-- the routine is passed the current node position, velocity, itemstack,
 | 
				
			||||||
 | 
					-- and owner name.
 | 
				
			||||||
 | 
					-- returns three values:
 | 
				
			||||||
 | 
					-- * a boolean "found destination" status;
 | 
				
			||||||
 | 
					-- * a new velocity vector that the tubed item should use, or nil if not found;
 | 
				
			||||||
 | 
					-- * a "multi-mode" data table (or nil if N/A) where a stack was split apart.
 | 
				
			||||||
 | 
					--	if this is not nil, the luaentity spawns new tubed items for each new fragment stack,
 | 
				
			||||||
 | 
					--	then deletes itself (i.e. the original item stack).
 | 
				
			||||||
 | 
					local function go_next(pos, velocity, stack, owner)
 | 
				
			||||||
	local cnode = minetest.get_node(pos)
 | 
						local cnode = minetest.get_node(pos)
 | 
				
			||||||
	local cmeta = minetest.get_meta(pos)
 | 
						local cmeta = minetest.get_meta(pos)
 | 
				
			||||||
	local can_go
 | 
					 | 
				
			||||||
	local speed = math.abs(velocity.x + velocity.y + velocity.z)
 | 
						local speed = math.abs(velocity.x + velocity.y + velocity.z)
 | 
				
			||||||
	if speed == 0 then
 | 
						if speed == 0 then
 | 
				
			||||||
		speed = 1
 | 
							speed = 1
 | 
				
			||||||
@@ -68,56 +160,30 @@ local function go_next(pos, velocity, stack)
 | 
				
			|||||||
		speed = 1
 | 
							speed = 1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	vel.speed = speed
 | 
						vel.speed = speed
 | 
				
			||||||
	if minetest.registered_nodes[cnode.name] and minetest.registered_nodes[cnode.name].tube and minetest.registered_nodes[cnode.name].tube.can_go then
 | 
					 | 
				
			||||||
		can_go = minetest.registered_nodes[cnode.name].tube.can_go(pos, cnode, vel, stack)
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		can_go = pipeworks.notvel(adjlist, vel)
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	for _, vect in ipairs(can_go) do
 | 
					 | 
				
			||||||
		local npos = vector.add(pos, vect)
 | 
					 | 
				
			||||||
		pipeworks.load_position(npos)
 | 
					 | 
				
			||||||
		local node = minetest.get_node(npos)
 | 
					 | 
				
			||||||
		local reg_node = minetest.registered_nodes[node.name]
 | 
					 | 
				
			||||||
		if reg_node then
 | 
					 | 
				
			||||||
			local tube_def = reg_node.tube
 | 
					 | 
				
			||||||
			local tubedevice = minetest.get_item_group(node.name, "tubedevice")
 | 
					 | 
				
			||||||
			local tube_priority = (tube_def and tube_def.priority) or 100
 | 
					 | 
				
			||||||
			if tubedevice > 0 and tube_priority >= max_priority then
 | 
					 | 
				
			||||||
				if not tube_def or not tube_def.can_insert or
 | 
					 | 
				
			||||||
						tube_def.can_insert(npos, node, stack, vect) then
 | 
					 | 
				
			||||||
					if tube_priority > max_priority then
 | 
					 | 
				
			||||||
						max_priority = tube_priority
 | 
					 | 
				
			||||||
						next_positions = {}
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
					next_positions[#next_positions + 1] = {pos = npos, vect = vect}
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if enable_max_limit then
 | 
						crunch_tube(pos, cnode, cmeta)
 | 
				
			||||||
		local h = minetest.hash_node_position(pos)
 | 
						-- cycling of outputs:
 | 
				
			||||||
		local itemcount = tube_item_count[h] or 0
 | 
						-- an integer counter is kept in each pipe's metadata,
 | 
				
			||||||
		if itemcount > max_tube_limit then
 | 
						-- which allows tracking which output was previously chosen.
 | 
				
			||||||
			cmeta:set_string("the_tube_was", minetest.serialize(cnode))
 | 
						-- note reliance on get_int returning 0 for uninitialised.
 | 
				
			||||||
			print("[Pipeworks] Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")")
 | 
						local cycledir = cmeta:get_int("tubedir")
 | 
				
			||||||
			minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
					 | 
				
			||||||
			pipeworks.scan_for_tube_objects(pos)
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if not next_positions[1] then
 | 
						-- pulled out and factored out into go_next_compat() above.
 | 
				
			||||||
		return false, nil
 | 
						-- n is the new value of the cycle counter.
 | 
				
			||||||
	end
 | 
						-- XXX: this probably needs cleaning up after being split out,
 | 
				
			||||||
 | 
						-- seven args is a bit too many
 | 
				
			||||||
 | 
						local n, found, new_velocity, multimode = go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local n = (cmeta:get_int("tubedir") % (#next_positions)) + 1
 | 
						-- if not using output cycling,
 | 
				
			||||||
 | 
						-- don't update the field so it stays the same for the next item.
 | 
				
			||||||
	if pipeworks.enable_cyclic_mode then
 | 
						if pipeworks.enable_cyclic_mode then
 | 
				
			||||||
		cmeta:set_int("tubedir", n)
 | 
							cmeta:set_int("tubedir", n)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local new_velocity = vector.multiply(next_positions[n].vect, vel.speed)
 | 
						return found, new_velocity, multimode
 | 
				
			||||||
	return true, new_velocity
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_entity("pipeworks:tubed_item", {
 | 
					minetest.register_entity("pipeworks:tubed_item", {
 | 
				
			||||||
	initial_properties = {
 | 
						initial_properties = {
 | 
				
			||||||
		hp_max = 1,
 | 
							hp_max = 1,
 | 
				
			||||||
@@ -135,6 +201,7 @@ minetest.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	from_data = function(self, itemstring)
 | 
						from_data = function(self, itemstring)
 | 
				
			||||||
		local stack = ItemStack(itemstring)
 | 
							local stack = ItemStack(itemstring)
 | 
				
			||||||
 | 
							--[[
 | 
				
			||||||
		local itemtable = stack:to_table()
 | 
							local itemtable = stack:to_table()
 | 
				
			||||||
		local itemname = nil
 | 
							local itemname = nil
 | 
				
			||||||
		if itemtable then
 | 
							if itemtable then
 | 
				
			||||||
@@ -146,12 +213,13 @@ minetest.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
			item_texture = minetest.registered_items[itemname].inventory_image
 | 
								item_texture = minetest.registered_items[itemname].inventory_image
 | 
				
			||||||
			item_type = minetest.registered_items[itemname].type
 | 
								item_type = minetest.registered_items[itemname].type
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
							--]]
 | 
				
			||||||
		self.object:set_properties({
 | 
							self.object:set_properties({
 | 
				
			||||||
			is_visible = true,
 | 
								is_visible = true,
 | 
				
			||||||
			textures = {stack:get_name()}
 | 
								textures = {stack:get_name()}
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		local def = stack:get_definition()
 | 
							local def = stack:get_definition()
 | 
				
			||||||
		self.object:setyaw((def and def.type == "node") and 0 or math.pi * 0.25)
 | 
							self.object:set_yaw((def and def.type == "node") and 0 or math.pi * 0.25)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	get_staticdata = luaentity.get_staticdata,
 | 
						get_staticdata = luaentity.get_staticdata,
 | 
				
			||||||
@@ -164,7 +232,7 @@ minetest.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local item = minetest.deserialize(staticdata)
 | 
							local item = minetest.deserialize(staticdata)
 | 
				
			||||||
		pipeworks.tube_inject_item(self.object:getpos(), item.start_pos, item.velocity, item.itemstring)
 | 
							pipeworks.tube_inject_item(self.object:get_pos(), item.start_pos, item.velocity, item.itemstring)
 | 
				
			||||||
		self.object:remove()
 | 
							self.object:remove()
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -196,6 +264,12 @@ minetest.register_entity("pipeworks:color_entity", {
 | 
				
			|||||||
	on_activate = luaentity.on_activate,
 | 
						on_activate = luaentity.on_activate,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- see below for usage:
 | 
				
			||||||
 | 
					-- determine if go_next returned a multi-mode set.
 | 
				
			||||||
 | 
					local is_multimode = function(v)
 | 
				
			||||||
 | 
						return (type(v) == "table") and (v.__multimode)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
luaentity.register_entity("pipeworks:tubed_item", {
 | 
					luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			||||||
	itemstring = '',
 | 
						itemstring = '',
 | 
				
			||||||
	item_entity = nil,
 | 
						item_entity = nil,
 | 
				
			||||||
@@ -231,15 +305,13 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	on_step = function(self, dtime)
 | 
						on_step = function(self, dtime)
 | 
				
			||||||
		local pos = self:getpos()
 | 
							local pos = self:get_pos()
 | 
				
			||||||
		if self.start_pos == nil then
 | 
							if self.start_pos == nil then
 | 
				
			||||||
			self.start_pos = vector.round(pos)
 | 
								self.start_pos = vector.round(pos)
 | 
				
			||||||
			self:setpos(pos)
 | 
								self:set_pos(pos)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local stack = ItemStack(self.itemstring)
 | 
							local velocity = self:get_velocity()
 | 
				
			||||||
 | 
					 | 
				
			||||||
		local velocity = self:getvelocity()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local moved = false
 | 
							local moved = false
 | 
				
			||||||
		local speed = math.abs(velocity.x + velocity.y + velocity.z)
 | 
							local speed = math.abs(velocity.x + velocity.y + velocity.z)
 | 
				
			||||||
@@ -255,12 +327,18 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
			moved = true
 | 
								moved = true
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if not moved then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local stack = ItemStack(self.itemstring)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pipeworks.load_position(self.start_pos)
 | 
							pipeworks.load_position(self.start_pos)
 | 
				
			||||||
		local node = minetest.get_node(self.start_pos)
 | 
							local node = minetest.get_node(self.start_pos)
 | 
				
			||||||
		if moved and minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then
 | 
							if minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then
 | 
				
			||||||
			local leftover
 | 
								local leftover
 | 
				
			||||||
			if minetest.registered_nodes[node.name].tube and minetest.registered_nodes[node.name].tube.insert_object then
 | 
								if minetest.registered_nodes[node.name].tube and minetest.registered_nodes[node.name].tube.insert_object then
 | 
				
			||||||
				leftover = minetest.registered_nodes[node.name].tube.insert_object(self.start_pos, node, stack, vel)
 | 
									leftover = minetest.registered_nodes[node.name].tube.insert_object(self.start_pos, node, stack, vel, self.owner)
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				leftover = stack
 | 
									leftover = stack
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -269,14 +347,13 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			velocity = vector.multiply(velocity, -1)
 | 
								velocity = vector.multiply(velocity, -1)
 | 
				
			||||||
			self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1)))
 | 
								self:set_pos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1)))
 | 
				
			||||||
			self:setvelocity(velocity)
 | 
								self:set_velocity(velocity)
 | 
				
			||||||
			self:set_item(leftover:to_string())
 | 
								self:set_item(leftover:to_string())
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if moved then
 | 
							local found_next, new_velocity, multimode = go_next(self.start_pos, velocity, stack, self.owner) -- todo: color
 | 
				
			||||||
			local found_next, new_velocity = go_next(self.start_pos, velocity, stack) -- todo: color
 | 
					 | 
				
			||||||
		local rev_vel = vector.multiply(velocity, -1)
 | 
							local rev_vel = vector.multiply(velocity, -1)
 | 
				
			||||||
		local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel))
 | 
							local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel))
 | 
				
			||||||
		local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir)))
 | 
							local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir)))
 | 
				
			||||||
@@ -288,21 +365,31 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
				-- compatible with Minetest 0.4.13.
 | 
									-- compatible with Minetest 0.4.13.
 | 
				
			||||||
				-- Using item_drop here makes Minetest 0.4.13 crash.
 | 
									-- Using item_drop here makes Minetest 0.4.13 crash.
 | 
				
			||||||
				local dropped_item = minetest.add_item(self.start_pos, stack)
 | 
									local dropped_item = minetest.add_item(self.start_pos, stack)
 | 
				
			||||||
					dropped_item:setvelocity(vector.multiply(velocity, 5))
 | 
									if dropped_item then
 | 
				
			||||||
 | 
										dropped_item:set_velocity(vector.multiply(velocity, 5))
 | 
				
			||||||
					self:remove()
 | 
										self:remove()
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				velocity = vector.multiply(velocity, -1)
 | 
									velocity = vector.multiply(velocity, -1)
 | 
				
			||||||
					self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1)))
 | 
									self:set_pos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1)))
 | 
				
			||||||
					self:setvelocity(velocity)
 | 
									self:set_velocity(velocity)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
							elseif is_multimode(multimode) then
 | 
				
			||||||
 | 
								-- create new stacks according to returned data.
 | 
				
			||||||
 | 
								local s = self.start_pos
 | 
				
			||||||
 | 
								for _, split in ipairs(multimode) do
 | 
				
			||||||
 | 
									pipeworks.tube_inject_item(s, s, split.velocity, split.itemstack, self.owner)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								-- remove ourself now the splits are sent
 | 
				
			||||||
 | 
								self:remove()
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if new_velocity and not vector.equals(velocity, new_velocity) then
 | 
							if new_velocity and not vector.equals(velocity, new_velocity) then
 | 
				
			||||||
			local nvelr = math.abs(new_velocity.x + new_velocity.y + new_velocity.z)
 | 
								local nvelr = math.abs(new_velocity.x + new_velocity.y + new_velocity.z)
 | 
				
			||||||
				self:setpos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr)))
 | 
								self:set_pos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr)))
 | 
				
			||||||
				self:setvelocity(new_velocity)
 | 
								self:set_velocity(new_velocity)
 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -315,13 +402,13 @@ if minetest.get_modpath("mesecons_mvps") then
 | 
				
			|||||||
		for _, n in ipairs(moved_nodes) do
 | 
							for _, n in ipairs(moved_nodes) do
 | 
				
			||||||
			moved[minetest.hash_node_position(n.oldpos)] = vector.subtract(n.pos, n.oldpos)
 | 
								moved[minetest.hash_node_position(n.oldpos)] = vector.subtract(n.pos, n.oldpos)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		for id, entity in pairs(luaentity.entities) do
 | 
							for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
			if entity.name == "pipeworks:tubed_item" then
 | 
								if entity.name == "pipeworks:tubed_item" then
 | 
				
			||||||
				local pos = entity:getpos()
 | 
									local pos = entity:get_pos()
 | 
				
			||||||
				local rpos = vector.round(pos)
 | 
									local rpos = vector.round(pos)
 | 
				
			||||||
				local dir = moved[minetest.hash_node_position(rpos)]
 | 
									local dir = moved[minetest.hash_node_position(rpos)]
 | 
				
			||||||
				if dir then
 | 
									if dir then
 | 
				
			||||||
					entity:setpos(vector.add(pos, dir))
 | 
										entity:set_pos(vector.add(pos, dir))
 | 
				
			||||||
					entity.start_pos = vector.add(entity.start_pos, dir)
 | 
										entity.start_pos = vector.add(entity.start_pos, dir)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								legacy.lua
									
									
									
									
									
								
							
							
						
						@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if not minetest.get_modpath("auto_tree_tap") and
 | 
					if not minetest.get_modpath("auto_tree_tap") and
 | 
				
			||||||
  minetest.get_modpath("technic") then
 | 
					  minetest.get_modpath("technic") then
 | 
				
			||||||
@@ -20,13 +21,16 @@ if not minetest.get_modpath("auto_tree_tap") and
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node(":auto_tree_tap:off", {
 | 
						minetest.register_node(":auto_tree_tap:off", {
 | 
				
			||||||
		description = "Auto-Tap",
 | 
							description = S("Auto-Tap"),
 | 
				
			||||||
		tiles = {"pipeworks_nodebreaker_top_off.png","pipeworks_nodebreaker_bottom_off.png","pipeworks_nodebreaker_side2_off.png","pipeworks_nodebreaker_side1_off.png",
 | 
							tiles = {"pipeworks_nodebreaker_top_off.png","pipeworks_nodebreaker_bottom_off.png","pipeworks_nodebreaker_side2_off.png","pipeworks_nodebreaker_side1_off.png",
 | 
				
			||||||
			"pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_off.png"},
 | 
								"pipeworks_nodebreaker_back.png","pipeworks_nodebreaker_front_off.png"},
 | 
				
			||||||
		is_ground_content = true,
 | 
							is_ground_content = true,
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, not_in_creative_inventory=1 },
 | 
							groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon = 2,tubedevice=1, not_in_creative_inventory=1, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
		sounds = default.node_sound_stone_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_stone_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		tube = {connect_sides={back=1}},
 | 
							tube = {connect_sides={back=1}},
 | 
				
			||||||
		on_construct = function(pos)
 | 
							on_construct = function(pos)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = minetest.get_meta(pos)
 | 
				
			||||||
@@ -36,7 +40,7 @@ if not minetest.get_modpath("auto_tree_tap") and
 | 
				
			|||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_place_node = function (pos, placer)
 | 
							after_place_node = function (pos, placer)
 | 
				
			||||||
			pipeworks.scan_for_tube_objects(pos, placer)
 | 
								pipeworks.scan_for_tube_objects(pos, placer)
 | 
				
			||||||
			local placer_pos = placer:getpos()
 | 
								local placer_pos = placer:get_pos()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			--correct for the player's height
 | 
								--correct for the player's height
 | 
				
			||||||
			if placer:is_player() then placer_pos.y = placer_pos.y + 1.5 end
 | 
								if placer:is_player() then placer_pos.y = placer_pos.y + 1.5 end
 | 
				
			||||||
@@ -51,7 +55,6 @@ if not minetest.get_modpath("auto_tree_tap") and
 | 
				
			|||||||
				local node = minetest.get_node(pos)
 | 
									local node = minetest.get_node(pos)
 | 
				
			||||||
				node.param2 = minetest.dir_to_facedir(dir, true)
 | 
									node.param2 = minetest.dir_to_facedir(dir, true)
 | 
				
			||||||
				minetest.set_node(pos, node)
 | 
									minetest.set_node(pos, node)
 | 
				
			||||||
				minetest.log("action", "real (6d) facedir: " .. node.param2)
 | 
					 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_dig_node = pipeworks.scan_for_tube_objects,
 | 
							after_dig_node = pipeworks.scan_for_tube_objects,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										119
									
								
								locale/pipeworks.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					# textdomain: pipeworks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# License: CC-by-SA 4.0
 | 
				
			||||||
 | 
					# Author: Louis Royer <4259825-lroyer@users.noreply.gitlab.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## generic interaction
 | 
				
			||||||
 | 
					Set=Fixer
 | 
				
			||||||
 | 
					Close=Fermer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## digilines interfacing
 | 
				
			||||||
 | 
					Channel=Canal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## init
 | 
				
			||||||
 | 
					Allow splitting incoming stacks from tubes=Séparer les piles venant des tubes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## autocrafter
 | 
				
			||||||
 | 
					Unknown item=Item inconnu
 | 
				
			||||||
 | 
					unconfigured Autocrafter: unknown recipe=Autocrafteur non-configuré : recette inconnue
 | 
				
			||||||
 | 
					unconfigured Autocrafter=Autocrafteur non-configuré
 | 
				
			||||||
 | 
					'@1' Autocrafter (@2)=Autocrafteur de '@1' (@2)
 | 
				
			||||||
 | 
					Save=Valider
 | 
				
			||||||
 | 
					paused '@1' Autocrafter=Autocrafteur de '@1' en pause
 | 
				
			||||||
 | 
					Autocrafter=Autocrafteur
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## compat-furnaces
 | 
				
			||||||
 | 
					Allow splitting incoming material (not fuel) stacks from tubes=Séparer les piles (sauf le carburant) venant des tubes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## decorative tubes
 | 
				
			||||||
 | 
					Airtight steelblock embedded tube=Tube hermétique intégré à un bloc d’acier
 | 
				
			||||||
 | 
					Airtight panel embedded tube=Tube hermétique intégré à un panneau
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## devices
 | 
				
			||||||
 | 
					Pump/Intake Module=Module de pompage et d’admission
 | 
				
			||||||
 | 
					Valve=Vanne
 | 
				
			||||||
 | 
					Decorative grating=Grillage décoratif
 | 
				
			||||||
 | 
					Spigot outlet=Sortie de robinet
 | 
				
			||||||
 | 
					Airtight Pipe entry/exit=Extrémité de tube hermétique
 | 
				
			||||||
 | 
					Flow Sensor=Détecteur de débit
 | 
				
			||||||
 | 
					Flow sensor (on)=Détecteur de débit (actif)
 | 
				
			||||||
 | 
					empty=vide
 | 
				
			||||||
 | 
					@1% full=plein à @1 %
 | 
				
			||||||
 | 
					Expansion Tank (@1)=Réservoir d’expansion (@1)
 | 
				
			||||||
 | 
					Fluid Storage Tank (@1)=Réservoir de liquides (@1)
 | 
				
			||||||
 | 
					Fountainhead=Tête de fontaine
 | 
				
			||||||
 | 
					Straight-only Pipe=Tuyau droit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## filter-injector
 | 
				
			||||||
 | 
					(slot #@1 next)=(slot suivant : #@1)
 | 
				
			||||||
 | 
					@1 Filter-Injector=Filtre-injecteur @1
 | 
				
			||||||
 | 
					Sequence slots by Priority=Ordonner par priorité
 | 
				
			||||||
 | 
					Sequence slots Randomly=Ordonner aléatoirement
 | 
				
			||||||
 | 
					Sequence slots by Rotation=Ordonner en rotation
 | 
				
			||||||
 | 
					Exact match - off=Filtrage inactif
 | 
				
			||||||
 | 
					Exact match - on=Filtrage actif
 | 
				
			||||||
 | 
					Prefer item types:=Items à filtrer :
 | 
				
			||||||
 | 
					Itemwise=par item
 | 
				
			||||||
 | 
					Stackwise=par piles d’items
 | 
				
			||||||
 | 
					Digiline=digiline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## legacy
 | 
				
			||||||
 | 
					Auto-Tap=Robinet d’arbre automatique
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## pipes
 | 
				
			||||||
 | 
					Pipe Segment=Segment de tuyau
 | 
				
			||||||
 | 
					Pipe Segment (legacy)=Segment de tuyau (obsolète)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## routing tubes
 | 
				
			||||||
 | 
					Pneumatic tube segment=Segment de tuyau pneumatique
 | 
				
			||||||
 | 
					Broken Tube=Tuyau cassé
 | 
				
			||||||
 | 
					High Priority Tube Segment=Segment de tuyau haute priorité
 | 
				
			||||||
 | 
					Accelerating Pneumatic Tube Segment=Segment de tuyau pneumatique accélérante
 | 
				
			||||||
 | 
					Crossing Pneumatic Tube Segment=Intersection de tuyau pneumatique
 | 
				
			||||||
 | 
					One way tube=Tuyau unidirectionnel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## signal tubes
 | 
				
			||||||
 | 
					Detecting Pneumatic Tube Segment on=Segment de tuyau pneumatique avec détecteur (actif)
 | 
				
			||||||
 | 
					Detecting Pneumatic Tube Segment=Segment de tuyau pneumatique avec détecteur
 | 
				
			||||||
 | 
					Digiline Detecting Pneumatic Tube Segment=Segment de tuyau pneumatique avec détecteur digiline
 | 
				
			||||||
 | 
					Digiline Detecting Tube=Tuyau avec détecteur digiline
 | 
				
			||||||
 | 
					Conducting Pneumatic Tube Segment=Segment de tuyau pneumatique conducteur
 | 
				
			||||||
 | 
					Conducting Pneumatic Tube Segment on=Segment de tuyau pneumatique conducteur actif
 | 
				
			||||||
 | 
					Digiline Conducting Pneumatic Tube Segment=Segment de tuyau pneumatique conducteur digiline
 | 
				
			||||||
 | 
					Mesecon and Digiline Conducting Pneumatic Tube Segment=Segment de tuyau pneumatique conducteur mesecon et digiline
 | 
				
			||||||
 | 
					Mesecon and Digiline Conducting Pneumatic Tube Segment on=Segment de tuyau pneumatique conducteur mesecon et digiline (actif)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## sorting tubes
 | 
				
			||||||
 | 
					Sorting Pneumatic Tube Segment=Segment de tuyau pneumatique triant
 | 
				
			||||||
 | 
					Sorting pneumatic tube=Tuyau pneumatique triant
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## teleport tube
 | 
				
			||||||
 | 
					Receive=Reception
 | 
				
			||||||
 | 
					Channels are public by default=Les canaux sont publics par défaut
 | 
				
			||||||
 | 
					Use <player>:<channel> for fully private channels=Utilisez <joueur>:<canal> pour un canal entièrement privé
 | 
				
			||||||
 | 
					Use <player>;<channel> for private receivers=Utilisez <joueur>;<canal> pour une réception privée
 | 
				
			||||||
 | 
					Teleporting Pneumatic Tube Segment=Segment de tuyau pneumatique téléporteur
 | 
				
			||||||
 | 
					Teleporting Tube=Tuyau pneumatique téléporteur
 | 
				
			||||||
 | 
					Unconfigured Teleportation Tube=Tuyau téléporteur non-configuré
 | 
				
			||||||
 | 
					Sorry, channel '@1' is reserved for exclusive use by @2=Désolé, le canal '@1' est réservé exclusivement à l’utilisateur @2.
 | 
				
			||||||
 | 
					Sorry, receiving from channel '@1' is reserved for @2=Désolé, la réception depuis le canal '@1' est réservée pour @2.
 | 
				
			||||||
 | 
					Teleportation Tube @1 on '@2'=Tuyau de téléportation @1 sur '@2'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## trashcan
 | 
				
			||||||
 | 
					Trash Can=Poubelle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## tube registration
 | 
				
			||||||
 | 
					Pneumatic tube segment (legacy)=Segment de tuyau pneumatique (obsolète)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## vacuum tubes
 | 
				
			||||||
 | 
					Radius=Rayon
 | 
				
			||||||
 | 
					Vacuuming Pneumatic Tube Segment=Segment de tuyau pneumatique aspirant
 | 
				
			||||||
 | 
					Adjustable Vacuuming Tube=Tuyau pneumatique aspirant réglable
 | 
				
			||||||
 | 
					Adjustable Vacuuming Pneumatic Tube Segment=Segment de tuyau pneumatique aspirant réglable
 | 
				
			||||||
 | 
					Adjustable Vacuuming Pneumatic Tube Segment (@1m)=Segment de tuyau pneumatique aspirant réglable (@1 m)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## wielder
 | 
				
			||||||
 | 
					Node Breaker=Casseur de blocs
 | 
				
			||||||
 | 
					Deployer=Poseur de blocs
 | 
				
			||||||
 | 
					Dispenser=Distributeur
 | 
				
			||||||
							
								
								
									
										117
									
								
								locale/pipeworks.zh_CN.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,117 @@
 | 
				
			|||||||
 | 
					# textdomain: pipeworks
 | 
				
			||||||
 | 
					# License: CC-by-SA 4.0
 | 
				
			||||||
 | 
					# Author: pevernow <3450354617@qq.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## generic interaction
 | 
				
			||||||
 | 
					Set=
 | 
				
			||||||
 | 
					Cancel=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## digilines interfacing
 | 
				
			||||||
 | 
					Channel=频道
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## init
 | 
				
			||||||
 | 
					Allow splitting incoming stacks from tubes=允许从管道中拆分传入堆栈
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## autocrafter
 | 
				
			||||||
 | 
					Unknown item=通道
 | 
				
			||||||
 | 
					unconfigured Autocrafter: unknown recipe=未配置的自动工作台: 未知配方
 | 
				
			||||||
 | 
					unconfigured Autocrafter=未配置的自动工作台
 | 
				
			||||||
 | 
					'@1' Autocrafter (@2)=自动工作台 '@1' (@2)
 | 
				
			||||||
 | 
					Save=保存
 | 
				
			||||||
 | 
					paused '@1' Autocrafter=暂停的自动工作台
 | 
				
			||||||
 | 
					Autocrafter=自动工作台
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## compat-furnaces
 | 
				
			||||||
 | 
					Allow splitting incoming material (not fuel) stacks from tubes=允许从管子中分离进来的材料(不是燃料)堆
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## decorative tubes
 | 
				
			||||||
 | 
					Airtight steelblock embedded tube=密封嵌入式铁块管道
 | 
				
			||||||
 | 
					Airtight panel embedded tube=密封嵌入式片状管道
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## devices
 | 
				
			||||||
 | 
					Pump/Intake Module=泵/进气模块
 | 
				
			||||||
 | 
					Valve=阀门
 | 
				
			||||||
 | 
					Decorative grating=Decorative grating
 | 
				
			||||||
 | 
					Spigot outlet=龙头
 | 
				
			||||||
 | 
					Airtight Pipe entry/exit=密闭管进/出
 | 
				
			||||||
 | 
					Flow Sensor=流量传感器
 | 
				
			||||||
 | 
					Flow sensor (on)=流量传感器(上)
 | 
				
			||||||
 | 
					empty=空的
 | 
				
			||||||
 | 
					@1% full=满的@1 %
 | 
				
			||||||
 | 
					Expansion Tank (@1)=扩展水箱 (@1)
 | 
				
			||||||
 | 
					Fluid Storage Tank (@1)=储液罐 (@1)
 | 
				
			||||||
 | 
					Fountainhead=源泉
 | 
				
			||||||
 | 
					Straight-only Pipe=直管
 | 
				
			||||||
 | 
					## filter-injector
 | 
				
			||||||
 | 
					(slot #@1 next)=(下一个插槽 : #@1)
 | 
				
			||||||
 | 
					@1 Filter-Injector=@1取物器
 | 
				
			||||||
 | 
					Sequence slots by Priority=优先顺序排列
 | 
				
			||||||
 | 
					Sequence slots Randomly=随机排列时隙
 | 
				
			||||||
 | 
					Sequence slots by Rotation=旋转顺序槽
 | 
				
			||||||
 | 
					Exact match - off=完全匹配-关闭
 | 
				
			||||||
 | 
					Exact match - on=完全匹配-开启
 | 
				
			||||||
 | 
					Prefer item types:=偏好物品类型 :
 | 
				
			||||||
 | 
					Itemwise=逐项
 | 
				
			||||||
 | 
					Stackwise=堆叠方式
 | 
				
			||||||
 | 
					Digiline=Digiline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## legacy
 | 
				
			||||||
 | 
					Auto-Tap=自动轴阀
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## pipes
 | 
				
			||||||
 | 
					Pipe Segment=管道
 | 
				
			||||||
 | 
					Pipe Segment (legacy)=管道(旧版)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## routing tubes
 | 
				
			||||||
 | 
					Pneumatic tube segment=普通管道
 | 
				
			||||||
 | 
					Broken Tube=断管
 | 
				
			||||||
 | 
					High Priority Tube Segment=高优先级管段
 | 
				
			||||||
 | 
					Accelerating Pneumatic Tube Segment=加速管道
 | 
				
			||||||
 | 
					Crossing Pneumatic Tube Segment=定向管道
 | 
				
			||||||
 | 
					One way tube=单向管
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## signal tubes
 | 
				
			||||||
 | 
					Detecting Pneumatic Tube Segment on=检测管道(运行中)
 | 
				
			||||||
 | 
					Detecting Pneumatic Tube Segment=检测管道
 | 
				
			||||||
 | 
					Digiline Detecting Pneumatic Tube Segment=Digiline检测管道
 | 
				
			||||||
 | 
					Digiline Detecting Tube=Digiline检测管
 | 
				
			||||||
 | 
					Conducting Pneumatic Tube Segment=传导管道
 | 
				
			||||||
 | 
					Conducting Pneumatic Tube Segment on=传导管道(运行中)
 | 
				
			||||||
 | 
					Digiline Conducting Pneumatic Tube Segment=Digiline传导式气动管道
 | 
				
			||||||
 | 
					Mesecon and Digiline Conducting Pneumatic Tube Segment=Mesecon和Digiline传导管道
 | 
				
			||||||
 | 
					Mesecon and Digiline Conducting Pneumatic Tube Segment on=Mesecon和Digiline传导管道(运行中)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## sorting tubes
 | 
				
			||||||
 | 
					Sorting Pneumatic Tube Segment=分类管道
 | 
				
			||||||
 | 
					Sorting pneumatic tube=分类管道
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## teleport tube
 | 
				
			||||||
 | 
					Receive=接收
 | 
				
			||||||
 | 
					Channels are public by default=频道默认为公开
 | 
				
			||||||
 | 
					Use <player>:<channel> for fully private channels=将<player>:<channel>用于完全私人的频道
 | 
				
			||||||
 | 
					Use <player>;<channel> for private receivers=使用<player>;<channel>作为私人接收器
 | 
				
			||||||
 | 
					Teleporting Pneumatic Tube Segment=传送管道
 | 
				
			||||||
 | 
					Teleporting Tube=
 | 
				
			||||||
 | 
					Unconfigured Teleportation Tube=未配置的传送管道
 | 
				
			||||||
 | 
					Sorry, channel '@1' is reserved for exclusive use by @2=抱歉,频道‘@1’保留供‘@2’专用
 | 
				
			||||||
 | 
					Sorry, receiving from channel '@1' is reserved for @2=抱歉,从频道'@1'接收的内容已保留给'@2'
 | 
				
			||||||
 | 
					Teleportation Tube @1 on '@2'=传送管'@1'在'@2'上
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## trashcan
 | 
				
			||||||
 | 
					Trash Can=垃圾箱
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## tube registration
 | 
				
			||||||
 | 
					Pneumatic tube segment (legacy)=普通管道(旧式)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## vacuum tubes
 | 
				
			||||||
 | 
					Radius=
 | 
				
			||||||
 | 
					Vacuuming Pneumatic Tube Segment=拾取管道
 | 
				
			||||||
 | 
					Adjustable Vacuuming Tube=
 | 
				
			||||||
 | 
					Adjustable Vacuuming Pneumatic Tube Segment=高级拾取管道
 | 
				
			||||||
 | 
					Adjustable Vacuuming Pneumatic Tube Segment (@1m)=高级拾取管道(@1m)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## wielder
 | 
				
			||||||
 | 
					Node Breaker=方块破坏器
 | 
				
			||||||
 | 
					Deployer=放置器
 | 
				
			||||||
 | 
					Dispenser=投掷器
 | 
				
			||||||
							
								
								
									
										119
									
								
								locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					# textdomain: pipeworks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# License: CC-by-SA 4.0
 | 
				
			||||||
 | 
					# Author:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## generic interaction
 | 
				
			||||||
 | 
					Set=
 | 
				
			||||||
 | 
					Cancel=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## digilines interfacing
 | 
				
			||||||
 | 
					Channel=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## init
 | 
				
			||||||
 | 
					Allow splitting incoming stacks from tubes=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## autocrafter
 | 
				
			||||||
 | 
					Unknown item=
 | 
				
			||||||
 | 
					unconfigured Autocrafter: unknown recipe=
 | 
				
			||||||
 | 
					unconfigured Autocrafter=
 | 
				
			||||||
 | 
					'@1' Autocrafter (@2)=
 | 
				
			||||||
 | 
					Save=
 | 
				
			||||||
 | 
					paused '@1' Autocrafter=
 | 
				
			||||||
 | 
					Autocrafter=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## compat-furnaces
 | 
				
			||||||
 | 
					Allow splitting incoming material (not fuel) stacks from tubes=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## decorative tubes
 | 
				
			||||||
 | 
					Airtight steelblock embedded tube=
 | 
				
			||||||
 | 
					Airtight panel embedded tube=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## devices
 | 
				
			||||||
 | 
					Pump/Intake Module=
 | 
				
			||||||
 | 
					Valve=
 | 
				
			||||||
 | 
					Decorative grating=
 | 
				
			||||||
 | 
					Spigot outlet=
 | 
				
			||||||
 | 
					Airtight Pipe entry/exit=
 | 
				
			||||||
 | 
					Flow Sensor=
 | 
				
			||||||
 | 
					Flow sensor (on)=
 | 
				
			||||||
 | 
					empty=
 | 
				
			||||||
 | 
					@1% full=
 | 
				
			||||||
 | 
					Expansion Tank (@1)=
 | 
				
			||||||
 | 
					Fluid Storage Tank (@1)=
 | 
				
			||||||
 | 
					Fountainhead=
 | 
				
			||||||
 | 
					Straight-only Pipe=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## filter-injector
 | 
				
			||||||
 | 
					(slot #@1 next)=
 | 
				
			||||||
 | 
					@1 Filter-Injector=
 | 
				
			||||||
 | 
					Sequence slots by Priority=
 | 
				
			||||||
 | 
					Sequence slots Randomly=
 | 
				
			||||||
 | 
					Sequence slots by Rotation=
 | 
				
			||||||
 | 
					Exact match - off=
 | 
				
			||||||
 | 
					Exact match - on=
 | 
				
			||||||
 | 
					Prefer item types:=
 | 
				
			||||||
 | 
					Itemwise=
 | 
				
			||||||
 | 
					Stackwise=
 | 
				
			||||||
 | 
					Digiline=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## legacy
 | 
				
			||||||
 | 
					Auto-Tap=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## pipes
 | 
				
			||||||
 | 
					Pipe Segment=
 | 
				
			||||||
 | 
					Pipe Segment (legacy)=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## routing tubes
 | 
				
			||||||
 | 
					Pneumatic tube segment=
 | 
				
			||||||
 | 
					Broken Tube=
 | 
				
			||||||
 | 
					High Priority Tube Segment=
 | 
				
			||||||
 | 
					Accelerating Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Crossing Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					One way tube=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## signal tubes
 | 
				
			||||||
 | 
					Detecting Pneumatic Tube Segment on=
 | 
				
			||||||
 | 
					Detecting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Digiline Detecting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Digiline Detecting Tube=
 | 
				
			||||||
 | 
					Conducting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Conducting Pneumatic Tube Segment on=
 | 
				
			||||||
 | 
					Digiline Conducting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Mesecon and Digiline Conducting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Mesecon and Digiline Conducting Pneumatic Tube Segment on=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## sorting tubes
 | 
				
			||||||
 | 
					Sorting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Sorting pneumatic tube=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## teleport tube
 | 
				
			||||||
 | 
					Receive=
 | 
				
			||||||
 | 
					Channels are public by default=
 | 
				
			||||||
 | 
					Use <player>:<channel> for fully private channels=
 | 
				
			||||||
 | 
					Use <player>;<channel> for private receivers=
 | 
				
			||||||
 | 
					Teleporting Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Teleporting Tube=
 | 
				
			||||||
 | 
					Unconfigured Teleportation Tube=
 | 
				
			||||||
 | 
					Sorry, channel '@1' is reserved for exclusive use by @2=
 | 
				
			||||||
 | 
					Sorry, receiving from channel '@1' is reserved for @2=
 | 
				
			||||||
 | 
					Teleportation Tube @1 on '@2'=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## trashcan
 | 
				
			||||||
 | 
					Trash Can=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## tube registration
 | 
				
			||||||
 | 
					Pneumatic tube segment (legacy)=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## vacuum tubes
 | 
				
			||||||
 | 
					Radius=
 | 
				
			||||||
 | 
					Vacuuming Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Adjustable Vacuuming Tube=
 | 
				
			||||||
 | 
					Adjustable Vacuuming Pneumatic Tube Segment=
 | 
				
			||||||
 | 
					Adjustable Vacuuming Pneumatic Tube Segment (@1m)=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## wielder
 | 
				
			||||||
 | 
					Node Breaker=
 | 
				
			||||||
 | 
					Deployer=
 | 
				
			||||||
 | 
					Dispenser=
 | 
				
			||||||
							
								
								
									
										1073
									
								
								lua_tube.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										113
									
								
								luaentity.lua
									
									
									
									
									
								
							
							
						
						@@ -46,6 +46,11 @@ local function read_entities()
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function write_entities()
 | 
					local function write_entities()
 | 
				
			||||||
 | 
						if not luaentity.entities then
 | 
				
			||||||
 | 
							-- This can happen if crashing on startup, causing another error that
 | 
				
			||||||
 | 
							-- masks the original one. Return gracefully in that case instead.
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	for _, entity in pairs(luaentity.entities) do
 | 
						for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
		setmetatable(entity, nil)
 | 
							setmetatable(entity, nil)
 | 
				
			||||||
		for _, attached in pairs(entity._attached_entities) do
 | 
							for _, attached in pairs(entity._attached_entities) do
 | 
				
			||||||
@@ -68,13 +73,17 @@ local function get_blockpos(pos)
 | 
				
			|||||||
	        z = math.floor(pos.z / 16)}
 | 
						        z = math.floor(pos.z / 16)}
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local active_blocks = {} -- These only contain active blocks near players (i.e., not forceloaded ones)
 | 
					local move_entities_globalstep_part1
 | 
				
			||||||
 | 
					local is_active
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local move_entities_globalstep_part1 = function(dtime)
 | 
					if pipeworks.use_real_entities then
 | 
				
			||||||
 | 
						local active_blocks = {} -- These only contain active blocks near players (i.e., not forceloaded ones)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						move_entities_globalstep_part1 = function(dtime)
 | 
				
			||||||
		local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2
 | 
							local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2
 | 
				
			||||||
		local new_active_blocks = {}
 | 
							local new_active_blocks = {}
 | 
				
			||||||
		for _, player in ipairs(minetest.get_connected_players()) do
 | 
							for _, player in ipairs(minetest.get_connected_players()) do
 | 
				
			||||||
		local blockpos = get_blockpos(player:getpos())
 | 
								local blockpos = get_blockpos(player:get_pos())
 | 
				
			||||||
			local minp = vector.subtract(blockpos, active_block_range)
 | 
								local minp = vector.subtract(blockpos, active_block_range)
 | 
				
			||||||
			local maxp = vector.add(blockpos, active_block_range)
 | 
								local maxp = vector.add(blockpos, active_block_range)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,10 +98,18 @@ local move_entities_globalstep_part1 = function(dtime)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		active_blocks = new_active_blocks
 | 
							active_blocks = new_active_blocks
 | 
				
			||||||
		-- todo: callbacks on block load/unload
 | 
							-- todo: callbacks on block load/unload
 | 
				
			||||||
end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function is_active(pos)
 | 
						is_active = function(pos)
 | 
				
			||||||
		return active_blocks[minetest.hash_node_position(get_blockpos(pos))] ~= nil
 | 
							return active_blocks[minetest.hash_node_position(get_blockpos(pos))] ~= nil
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						move_entities_globalstep_part1 = function()
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						is_active = function()
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local entitydef_default = {
 | 
					local entitydef_default = {
 | 
				
			||||||
@@ -114,9 +131,9 @@ local entitydef_default = {
 | 
				
			|||||||
		if not def.entity then
 | 
							if not def.entity then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		def.entity:setpos(vector.add(self._pos, def.offset))
 | 
							def.entity:set_pos(vector.add(self._pos, def.offset))
 | 
				
			||||||
		def.entity:setvelocity(self._velocity)
 | 
							def.entity:set_velocity(self._velocity)
 | 
				
			||||||
		def.entity:setacceleration(self._acceleration)
 | 
							def.entity:set_acceleration(self._acceleration)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	_attach_all = function(self)
 | 
						_attach_all = function(self)
 | 
				
			||||||
		local master = self._attached_entities_master
 | 
							local master = self._attached_entities_master
 | 
				
			||||||
@@ -146,11 +163,15 @@ local entitydef_default = {
 | 
				
			|||||||
		if not is_active(entity_pos) then
 | 
							if not is_active(entity_pos) then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local ent = minetest.add_entity(entity_pos, entity.name):get_luaentity()
 | 
							local object = minetest.add_entity(entity_pos, entity.name)
 | 
				
			||||||
 | 
							if not object then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							local ent = object:get_luaentity()
 | 
				
			||||||
		ent:from_data(entity.data)
 | 
							ent:from_data(entity.data)
 | 
				
			||||||
		ent.parent_id = self._id
 | 
							ent.parent_id = self._id
 | 
				
			||||||
		ent.attached_id = index
 | 
							ent.attached_id = index
 | 
				
			||||||
		entity.entity = ent.object
 | 
							entity.entity = object
 | 
				
			||||||
		local master = self._attached_entities_master
 | 
							local master = self._attached_entities_master
 | 
				
			||||||
		if master then
 | 
							if master then
 | 
				
			||||||
			self:_attach(index, master)
 | 
								self:_attach(index, master)
 | 
				
			||||||
@@ -186,43 +207,43 @@ local entitydef_default = {
 | 
				
			|||||||
			self:_add_attached(id)
 | 
								self:_add_attached(id)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	getid = function(self)
 | 
						get_id = function(self)
 | 
				
			||||||
		return self._id
 | 
							return self._id
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	getpos = function(self)
 | 
						get_pos = function(self)
 | 
				
			||||||
		return vector.new(self._pos)
 | 
							return vector.new(self._pos)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	setpos = function(self, pos)
 | 
						set_pos = function(self, pos)
 | 
				
			||||||
		self._pos = vector.new(pos)
 | 
							self._pos = vector.new(pos)
 | 
				
			||||||
		--for _, entity in pairs(self._attached_entities) do
 | 
							--for _, entity in pairs(self._attached_entities) do
 | 
				
			||||||
		--	if entity.entity then
 | 
							--	if entity.entity then
 | 
				
			||||||
		--		entity.entity:setpos(vector.add(self._pos, entity.offset))
 | 
							--		entity.entity:set_pos(vector.add(self._pos, entity.offset))
 | 
				
			||||||
		--	end
 | 
							--	end
 | 
				
			||||||
		--end
 | 
							--end
 | 
				
			||||||
		local master = self._attached_entities_master
 | 
							local master = self._attached_entities_master
 | 
				
			||||||
		if master then
 | 
							if master then
 | 
				
			||||||
			local master_def = self._attached_entities[master]
 | 
								local master_def = self._attached_entities[master]
 | 
				
			||||||
			master_def.entity:setpos(vector.add(self._pos, master_def.offset))
 | 
								master_def.entity:set_pos(vector.add(self._pos, master_def.offset))
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	getvelocity = function(self)
 | 
						get_velocity = function(self)
 | 
				
			||||||
		return vector.new(self._velocity)
 | 
							return vector.new(self._velocity)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	setvelocity = function(self, velocity)
 | 
						set_velocity = function(self, velocity)
 | 
				
			||||||
		self._velocity = vector.new(velocity)
 | 
							self._velocity = vector.new(velocity)
 | 
				
			||||||
		local master = self._attached_entities_master
 | 
							local master = self._attached_entities_master
 | 
				
			||||||
		if master then
 | 
							if master then
 | 
				
			||||||
			self._attached_entities[master].entity:setvelocity(self._velocity)
 | 
								self._attached_entities[master].entity:set_velocity(self._velocity)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	getacceleration = function(self)
 | 
						get_acceleration = function(self)
 | 
				
			||||||
		return vector.new(self._acceleration)
 | 
							return vector.new(self._acceleration)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	setacceleration = function(self, acceleration)
 | 
						set_acceleration = function(self, acceleration)
 | 
				
			||||||
		self._acceleration = vector.new(acceleration)
 | 
							self._acceleration = vector.new(acceleration)
 | 
				
			||||||
		local master = self._attached_entities_master
 | 
							local master = self._attached_entities_master
 | 
				
			||||||
		if master then
 | 
							if master then
 | 
				
			||||||
			self._attached_entities[master].entity:setacceleration(self._acceleration)
 | 
								self._attached_entities[master].entity:set_acceleration(self._acceleration)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	remove = function(self)
 | 
						remove = function(self)
 | 
				
			||||||
@@ -313,28 +334,31 @@ end
 | 
				
			|||||||
function luaentity.get_objects_inside_radius(pos, radius)
 | 
					function luaentity.get_objects_inside_radius(pos, radius)
 | 
				
			||||||
	local objects = {}
 | 
						local objects = {}
 | 
				
			||||||
	local index = 1
 | 
						local index = 1
 | 
				
			||||||
	for id, entity in pairs(luaentity.entities) do
 | 
						for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
		if vector.distance(pos, entity:getpos()) <= radius then
 | 
							if vector.distance(pos, entity:get_pos()) <= radius then
 | 
				
			||||||
			objects[index] = entity
 | 
								objects[index] = entity
 | 
				
			||||||
			index = index + 1
 | 
								index = index + 1
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						return objects
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local move_entities_globalstep_part2 = function(dtime)
 | 
					local move_entities_globalstep_part2 = function(dtime)
 | 
				
			||||||
	if not luaentity.entities then
 | 
						if not luaentity.entities then
 | 
				
			||||||
		luaentity.entities = read_entities()
 | 
							luaentity.entities = read_entities()
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	for id, entity in pairs(luaentity.entities) do
 | 
						for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
		local master = entity._attached_entities_master
 | 
							local master = entity._attached_entities_master
 | 
				
			||||||
		local master_def = master and entity._attached_entities[master]
 | 
							local master_def = master and entity._attached_entities[master]
 | 
				
			||||||
		local master_entity = master_def and master_def.entity
 | 
							local master_entity = master_def and master_def.entity
 | 
				
			||||||
		local master_entity_pos = master_entity and master_entity:getpos()
 | 
							local master_entity_pos = master_entity and master_entity:get_pos()
 | 
				
			||||||
		if master_entity_pos then
 | 
							if master_entity_pos then
 | 
				
			||||||
			entity._pos = vector.subtract(master_entity_pos, master_def.offset)
 | 
								entity._pos = vector.subtract(master_entity_pos, master_def.offset)
 | 
				
			||||||
			entity._velocity = master_entity:getvelocity()
 | 
								entity._velocity = master_entity:get_velocity()
 | 
				
			||||||
			entity._acceleration = master_entity:getacceleration()
 | 
								entity._acceleration = master_entity:get_acceleration()
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 | 
								entity._velocity = entity._velocity or vector.new(0,0,0)
 | 
				
			||||||
 | 
								entity._acceleration = entity._acceleration or vector.new(0,0,0)
 | 
				
			||||||
			entity._pos = vector.add(vector.add(
 | 
								entity._pos = vector.add(vector.add(
 | 
				
			||||||
				entity._pos,
 | 
									entity._pos,
 | 
				
			||||||
				vector.multiply(entity._velocity, dtime)),
 | 
									vector.multiply(entity._velocity, dtime)),
 | 
				
			||||||
@@ -362,13 +386,36 @@ local move_entities_globalstep_part2 = function(dtime)
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local handle_active_blocks_timer = 0.1
 | 
					-- dtime after which there is an update (or skip).
 | 
				
			||||||
 | 
					local dtime_threshold = pipeworks.entity_update_interval
 | 
				
			||||||
 | 
					-- Accumulated dtime since last update (or skip).
 | 
				
			||||||
 | 
					local dtime_accum = 0
 | 
				
			||||||
 | 
					-- Delayed dtime accumulated due to skipped updates.
 | 
				
			||||||
 | 
					local dtime_delayed = 0
 | 
				
			||||||
 | 
					local skip_update = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_globalstep(function(dtime)
 | 
					minetest.register_globalstep(function(dtime)
 | 
				
			||||||
	handle_active_blocks_timer = handle_active_blocks_timer + dtime
 | 
						if dtime >= 0.2 and dtime_delayed < 1 then
 | 
				
			||||||
	if dtime < 0.2 or handle_active_blocks_timer >= (dtime * 3) then
 | 
							-- Reduce activity when the server is lagging.
 | 
				
			||||||
		handle_active_blocks_timer = 0.1
 | 
							skip_update = true
 | 
				
			||||||
		move_entities_globalstep_part1(dtime)
 | 
					 | 
				
			||||||
		move_entities_globalstep_part2(dtime)
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dtime_accum = dtime_accum + dtime
 | 
				
			||||||
 | 
						if dtime_accum < dtime_threshold then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if skip_update then
 | 
				
			||||||
 | 
							dtime_delayed = dtime_delayed + dtime_accum
 | 
				
			||||||
 | 
							skip_update = false
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							move_entities_globalstep_part1(dtime_accum + dtime_delayed)
 | 
				
			||||||
 | 
							move_entities_globalstep_part2(dtime_accum + dtime_delayed)
 | 
				
			||||||
 | 
							dtime_delayed = 0
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- Tune the threshold so that the average interval is pipeworks.entity_update_interval.
 | 
				
			||||||
 | 
						dtime_threshold = math.max(dtime_threshold + (pipeworks.entity_update_interval - dtime_accum) / 10, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dtime_accum = 0
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										72
									
								
								mcl_barrels.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					-- this bit of code modifies the mcl barrels to be compatible with
 | 
				
			||||||
 | 
					-- pipeworks.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Pipeworks Specific
 | 
				
			||||||
 | 
					local tube_entry = "^pipeworks_tube_connection_wooden.png"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Original Definitions
 | 
				
			||||||
 | 
					local old_barrel = table.copy(minetest.registered_items["mcl_barrels:barrel_closed"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local groups = old_barrel.groups
 | 
				
			||||||
 | 
					groups["tubedevice"] = 1
 | 
				
			||||||
 | 
					groups["tubedevice_receiver"] = 1
 | 
				
			||||||
 | 
					local groups_open = table.copy(groups)
 | 
				
			||||||
 | 
					groups_open["not_in_creative_inventory"] = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Override Construction
 | 
				
			||||||
 | 
					local override_barrel = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel.tiles = {
 | 
				
			||||||
 | 
					   "mcl_barrels_barrel_top.png^[transformR270",
 | 
				
			||||||
 | 
					   "mcl_barrels_barrel_bottom.png"..tube_entry,
 | 
				
			||||||
 | 
					   "mcl_barrels_barrel_side.png"..tube_entry
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel.after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					   old_barrel.after_place_node(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					   pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      return inv:add_item("main", stack)
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if meta:get_int("splitstacks") == 1 then
 | 
				
			||||||
 | 
						 stack = stack:peek_item(1)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      return inv:room_for_item("main", stack)
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "main",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   old_barrel.after_dig_node(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   pipeworks.after_dig(pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel.groups = table.copy(old_barrel.groups)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel.on_rotate = pipeworks.on_rotate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override_barrel_open = table.copy(override_barrel)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel_open.tiles = {
 | 
				
			||||||
 | 
					   "mcl_barrels_barrel_top_open.png",
 | 
				
			||||||
 | 
					   "mcl_barrels_barrel_bottom.png"..tube_entry,
 | 
				
			||||||
 | 
					   "mcl_barrels_barrel_side.png"..tube_entry
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_barrel_open.groups = groups_open
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Override with the new modifications.
 | 
				
			||||||
 | 
					minetest.override_item("mcl_barrels:barrel_closed", override_barrel)
 | 
				
			||||||
 | 
					minetest.override_item("mcl_barrels:barrel_open", override_barrel_open)
 | 
				
			||||||
							
								
								
									
										376
									
								
								mcl_furnaces.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,376 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					local old_furnace = table.copy(minetest.registered_nodes["mcl_furnaces:furnace"])
 | 
				
			||||||
 | 
					local old_blast_furnace = table.copy(minetest.registered_nodes["mcl_blast_furnace:blast_furnace"])
 | 
				
			||||||
 | 
					local old_smoker = table.copy(minetest.registered_nodes["mcl_smoker:smoker"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- groups
 | 
				
			||||||
 | 
					local furnace_groups = old_furnace.groups
 | 
				
			||||||
 | 
					furnace_groups["tubedevice"] = 1
 | 
				
			||||||
 | 
					furnace_groups["tubedevice_receiver"] = 1
 | 
				
			||||||
 | 
					local furnace_groups_active = table.copy(furnace_groups)
 | 
				
			||||||
 | 
					furnace_groups_active["not_in_creative_inventory"] = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local blast_furnace_groups = old_blast_furnace.groups
 | 
				
			||||||
 | 
					blast_furnace_groups["tubedevice"] = 1
 | 
				
			||||||
 | 
					blast_furnace_groups["tubedevice_receiver"] = 1
 | 
				
			||||||
 | 
					local blast_furnace_groups_active = table.copy(blast_furnace_groups)
 | 
				
			||||||
 | 
					blast_furnace_groups_active["not_in_creative_inventory"] = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local smoker_groups = old_smoker.groups
 | 
				
			||||||
 | 
					smoker_groups["tubedevice"] = 1
 | 
				
			||||||
 | 
					smoker_groups["tubedevice_receiver"] = 1
 | 
				
			||||||
 | 
					local smoker_groups_active = table.copy(smoker_groups)
 | 
				
			||||||
 | 
					smoker_groups_active["not_in_creative_inventory"] = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- a hack to give the exp to fake players it's be dropped instead added to (fake) player inv
 | 
				
			||||||
 | 
					local function give_xp(pos, player)
 | 
				
			||||||
 | 
					   local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					   local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2), -1.95)
 | 
				
			||||||
 | 
					   local xp = meta:get_int("xp")
 | 
				
			||||||
 | 
					   if xp > 0 then
 | 
				
			||||||
 | 
					      mcl_experience.throw_xp(vector.add(pos, dir), xp)
 | 
				
			||||||
 | 
					      meta:set_int("xp", 0)
 | 
				
			||||||
 | 
					   end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.tiles = {
 | 
				
			||||||
 | 
					   "default_furnace_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_bottom.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_front.png"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.groups = furnace_groups
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer(pos)
 | 
				
			||||||
 | 
					      if not timer:is_started() then
 | 
				
			||||||
 | 
						 timer:start(1.0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:add_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:add_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 if meta:get_int("split_material_stacks") == 1 then
 | 
				
			||||||
 | 
						    stack = stack:peek_item(1)
 | 
				
			||||||
 | 
						 end
 | 
				
			||||||
 | 
						 return inv:room_for_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "dst",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					   pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   old_furnace.after_dig_node(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   pipeworks.after_dig(pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.on_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
				
			||||||
 | 
					   if listname == "dst" then
 | 
				
			||||||
 | 
					      if stack:get_name() == "mcl_core:iron_ingot" then
 | 
				
			||||||
 | 
						 awards.unlock(player:get_player_name(), "mcl:acquireIron")
 | 
				
			||||||
 | 
					      elseif stack:get_name() == "mcl_fishing:fish_cooked" then
 | 
				
			||||||
 | 
						 awards.unlock(player:get_player_name(), "mcl:cookFish")
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      give_xp(pos, player)
 | 
				
			||||||
 | 
					   end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override.on_rotate = pipeworks.on_rotate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override_active = table.copy(override)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_active.tiles = {
 | 
				
			||||||
 | 
					   "default_furnace_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_bottom.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "default_furnace_front_active.png",
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_active.groups = furnace_groups_active
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_active.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer(pos)
 | 
				
			||||||
 | 
					      if not timer:is_started() then
 | 
				
			||||||
 | 
						 timer:start(1.0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:add_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:add_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:room_for_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "dst",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--blast furnace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override_blast_furnace = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.tiles = {
 | 
				
			||||||
 | 
					   "blast_furnace_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_front.png"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.groups = blast_furnace_groups
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer(pos)
 | 
				
			||||||
 | 
					      if not timer:is_started() then
 | 
				
			||||||
 | 
						 timer:start(1.0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:add_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:add_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 if meta:get_int("split_material_stacks") == 1 then
 | 
				
			||||||
 | 
						    stack = stack:peek_item(1)
 | 
				
			||||||
 | 
						 end
 | 
				
			||||||
 | 
						 return inv:room_for_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "dst",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					   pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   old_blast_furnace.after_dig_node(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   pipeworks.after_dig(pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.on_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
				
			||||||
 | 
					   -- Award smelting achievements
 | 
				
			||||||
 | 
					   if listname == "dst" then
 | 
				
			||||||
 | 
					      if stack:get_name() == "mcl_core:iron_ingot" then
 | 
				
			||||||
 | 
						 awards.unlock(player:get_player_name(), "mcl:acquireIron")
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      give_xp(pos, player)
 | 
				
			||||||
 | 
					   end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_furnace.on_rotate = pipeworks.on_rotate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override_blast_active = table.copy(override)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_active.tiles = {
 | 
				
			||||||
 | 
					   "blast_furnace_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "blast_furnace_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      name = "blast_furnace_front_on.png",
 | 
				
			||||||
 | 
					      animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 48 }
 | 
				
			||||||
 | 
					   },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_active.groups = blast_furnace_groups_active
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_blast_active.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer(pos)
 | 
				
			||||||
 | 
					      if not timer:is_started() then
 | 
				
			||||||
 | 
						 timer:start(1.0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:add_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:add_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:room_for_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "dst",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- smoker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override_smoker = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.tiles = {
 | 
				
			||||||
 | 
					   "smoker_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_bottom.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_front.png"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.groups = smoker_groups
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer(pos)
 | 
				
			||||||
 | 
					      if not timer:is_started() then
 | 
				
			||||||
 | 
						 timer:start(1.0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:add_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:add_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 if meta:get_int("split_material_stacks") == 1 then
 | 
				
			||||||
 | 
						    stack = stack:peek_item(1)
 | 
				
			||||||
 | 
						 end
 | 
				
			||||||
 | 
						 return inv:room_for_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "dst",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					   pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   old_smoker.after_dig_node(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
 | 
					   pipeworks.after_dig(pos)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.on_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
				
			||||||
 | 
					   -- Award fish achievements
 | 
				
			||||||
 | 
					   if listname == "dst" then
 | 
				
			||||||
 | 
					      if stack:get_name() == "mcl_fishing:fish_cooked" then
 | 
				
			||||||
 | 
						 awards.unlock(player:get_player_name(), "mcl:cookFish")
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      give_xp(pos, player)
 | 
				
			||||||
 | 
					   end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker.on_rotate = pipeworks.on_rotate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local override_smoker_active = table.copy(override)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker_active.tiles = {
 | 
				
			||||||
 | 
					   "smoker_top.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_bottom.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   "smoker_side.png"..tube_entry,
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      name = "smoker_front_on.png",
 | 
				
			||||||
 | 
					      animation = { type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 48 }
 | 
				
			||||||
 | 
					   },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker_active.groups = smoker_groups_active
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_smoker_active.tube = {
 | 
				
			||||||
 | 
					   insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer(pos)
 | 
				
			||||||
 | 
					      if not timer:is_started() then
 | 
				
			||||||
 | 
						 timer:start(1.0)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:add_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:add_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
 | 
					      local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					      if direction.y == 1 then
 | 
				
			||||||
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						 return inv:room_for_item("src", stack)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					   end,
 | 
				
			||||||
 | 
					   input_inventory = "dst",
 | 
				
			||||||
 | 
					   connect_sides = {left = 1, right = 1, back = 1, bottom = 1, top = 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- override
 | 
				
			||||||
 | 
					minetest.override_item("mcl_furnaces:furnace", override)
 | 
				
			||||||
 | 
					minetest.override_item("mcl_furnaces:furnace_active", override_active)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.override_item("mcl_blast_furnace:blast_furnace", override_blast_furnace)
 | 
				
			||||||
 | 
					minetest.override_item("mcl_blast_furnace:blast_furnace_active", override_blast_active)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.override_item("mcl_smoker:smoker", override_smoker)
 | 
				
			||||||
 | 
					minetest.override_item("mcl_smoker:smoker_active", override_smoker_active)
 | 
				
			||||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						@@ -1 +1,5 @@
 | 
				
			|||||||
name = pipeworks
 | 
					name = pipeworks
 | 
				
			||||||
 | 
					description = This mod uses mesh nodes and nodeboxes to supply a complete set of 3D pipes and tubes, along with devices that work with them.
 | 
				
			||||||
 | 
					depends = basic_materials
 | 
				
			||||||
 | 
					optional_depends = mesecons, mesecons_mvps, digilines, signs_lib, unified_inventory, default, screwdriver, fl_mapgen, sound_api, i3, hades_core, hades_furnaces, hades_chests, mcl_mapgen_core, mcl_barrels, mcl_furnaces, mcl_experience
 | 
				
			||||||
 | 
					min_minetest_version = 5.4.0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ pipeworks.tube_frontstub = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.tube_backstub = {
 | 
					pipeworks.tube_backstub = {
 | 
				
			||||||
	{ -9/64, -9/64, -9/64,   9/64, 9/64, 32/64 },	-- tube segment against -Z face
 | 
						{ -9/64, -9/64, -9/64,   9/64, 9/64, 32/64 },	-- tube segment against +Z face
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.tube_boxes = {pipeworks.tube_leftstub, pipeworks.tube_rightstub, pipeworks.tube_bottomstub, pipeworks.tube_topstub, pipeworks.tube_frontstub, pipeworks.tube_backstub}
 | 
					pipeworks.tube_boxes = {pipeworks.tube_leftstub, pipeworks.tube_rightstub, pipeworks.tube_bottomstub, pipeworks.tube_topstub, pipeworks.tube_frontstub, pipeworks.tube_backstub}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										236
									
								
								models/pipeworks_entry_panel_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,236 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-entry-panel-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000
 | 
				
			||||||
 | 
					v -0.500000 0.500000 -0.062500
 | 
				
			||||||
 | 
					v 0.500000 0.500000 -0.062500
 | 
				
			||||||
 | 
					v 0.500000 -0.500000 -0.062500
 | 
				
			||||||
 | 
					v -0.500000 -0.500000 -0.062500
 | 
				
			||||||
 | 
					v 0.500000 0.500000 0.062500
 | 
				
			||||||
 | 
					v 0.500000 -0.500000 0.062500
 | 
				
			||||||
 | 
					v -0.500000 0.500000 0.062500
 | 
				
			||||||
 | 
					v -0.500000 -0.500000 0.062500
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					vt 0.5076 0.5076
 | 
				
			||||||
 | 
					vt 0.9924 0.5076
 | 
				
			||||||
 | 
					vt 0.9924 0.9924
 | 
				
			||||||
 | 
					vt 0.5076 0.9924
 | 
				
			||||||
 | 
					vt 0.0682 0.4924
 | 
				
			||||||
 | 
					vt 0.0076 0.4924
 | 
				
			||||||
 | 
					vt 0.0076 0.0076
 | 
				
			||||||
 | 
					vt 0.0682 0.0076
 | 
				
			||||||
 | 
					vt 0.4924 0.9924
 | 
				
			||||||
 | 
					vt 0.0076 0.9924
 | 
				
			||||||
 | 
					vt 0.0076 0.5076
 | 
				
			||||||
 | 
					vt 0.4924 0.5076
 | 
				
			||||||
 | 
					vt 0.2955 0.4924
 | 
				
			||||||
 | 
					vt 0.2348 0.4924
 | 
				
			||||||
 | 
					vt 0.2348 0.0076
 | 
				
			||||||
 | 
					vt 0.2955 0.0076
 | 
				
			||||||
 | 
					vt 0.2197 0.0076
 | 
				
			||||||
 | 
					vt 0.2197 0.4924
 | 
				
			||||||
 | 
					vt 0.1591 0.4924
 | 
				
			||||||
 | 
					vt 0.1591 0.0076
 | 
				
			||||||
 | 
					vt 0.0833 0.4924
 | 
				
			||||||
 | 
					vt 0.0833 0.0076
 | 
				
			||||||
 | 
					vt 0.1439 0.0076
 | 
				
			||||||
 | 
					vt 0.1439 0.4924
 | 
				
			||||||
 | 
					vt 0.8561 0.4318
 | 
				
			||||||
 | 
					vt 0.8106 0.4773
 | 
				
			||||||
 | 
					vt 0.7500 0.4773
 | 
				
			||||||
 | 
					vt 0.7045 0.4318
 | 
				
			||||||
 | 
					vt 0.7045 0.3712
 | 
				
			||||||
 | 
					vt 0.7500 0.3258
 | 
				
			||||||
 | 
					vt 0.8106 0.3258
 | 
				
			||||||
 | 
					vt 0.8561 0.3712
 | 
				
			||||||
 | 
					vt 0.6288 0.4773
 | 
				
			||||||
 | 
					vt 0.6742 0.4318
 | 
				
			||||||
 | 
					vt 0.6742 0.3712
 | 
				
			||||||
 | 
					vt 0.6288 0.3258
 | 
				
			||||||
 | 
					vt 0.5682 0.3258
 | 
				
			||||||
 | 
					vt 0.5227 0.3712
 | 
				
			||||||
 | 
					vt 0.5227 0.4318
 | 
				
			||||||
 | 
					vt 0.5682 0.4773
 | 
				
			||||||
 | 
					vt 0.6742 0.4318
 | 
				
			||||||
 | 
					vt 0.6288 0.4773
 | 
				
			||||||
 | 
					vt 0.5682 0.4773
 | 
				
			||||||
 | 
					vt 0.5227 0.4318
 | 
				
			||||||
 | 
					vt 0.5227 0.3712
 | 
				
			||||||
 | 
					vt 0.5682 0.3258
 | 
				
			||||||
 | 
					vt 0.6288 0.3258
 | 
				
			||||||
 | 
					vt 0.6742 0.3712
 | 
				
			||||||
 | 
					vt 0.8106 0.4773
 | 
				
			||||||
 | 
					vt 0.8561 0.4318
 | 
				
			||||||
 | 
					vt 0.8561 0.3712
 | 
				
			||||||
 | 
					vt 0.8106 0.3258
 | 
				
			||||||
 | 
					vt 0.7500 0.3258
 | 
				
			||||||
 | 
					vt 0.7045 0.3712
 | 
				
			||||||
 | 
					vt 0.7045 0.4318
 | 
				
			||||||
 | 
					vt 0.7500 0.4773
 | 
				
			||||||
 | 
					vt 0.9015 0.2879
 | 
				
			||||||
 | 
					vt 0.9015 0.2727
 | 
				
			||||||
 | 
					vt 0.9318 0.2727
 | 
				
			||||||
 | 
					vt 0.9318 0.2879
 | 
				
			||||||
 | 
					vt 0.9621 0.2727
 | 
				
			||||||
 | 
					vt 0.9621 0.2879
 | 
				
			||||||
 | 
					vt 0.9924 0.2727
 | 
				
			||||||
 | 
					vt 0.9924 0.2879
 | 
				
			||||||
 | 
					vt 0.7500 0.2879
 | 
				
			||||||
 | 
					vt 0.7500 0.2727
 | 
				
			||||||
 | 
					vt 0.7803 0.2727
 | 
				
			||||||
 | 
					vt 0.7803 0.2879
 | 
				
			||||||
 | 
					vt 0.8106 0.2727
 | 
				
			||||||
 | 
					vt 0.8106 0.2879
 | 
				
			||||||
 | 
					vt 0.8409 0.2727
 | 
				
			||||||
 | 
					vt 0.8409 0.2879
 | 
				
			||||||
 | 
					vt 0.8712 0.2727
 | 
				
			||||||
 | 
					vt 0.8712 0.2879
 | 
				
			||||||
 | 
					vt 0.6894 0.2879
 | 
				
			||||||
 | 
					vt 0.6894 0.2727
 | 
				
			||||||
 | 
					vt 0.7197 0.2727
 | 
				
			||||||
 | 
					vt 0.7197 0.2879
 | 
				
			||||||
 | 
					vt 0.6591 0.2879
 | 
				
			||||||
 | 
					vt 0.6591 0.2727
 | 
				
			||||||
 | 
					vt 0.7500 0.2727
 | 
				
			||||||
 | 
					vt 0.7500 0.2879
 | 
				
			||||||
 | 
					vt 0.5076 0.2879
 | 
				
			||||||
 | 
					vt 0.5076 0.2727
 | 
				
			||||||
 | 
					vt 0.5379 0.2727
 | 
				
			||||||
 | 
					vt 0.5379 0.2879
 | 
				
			||||||
 | 
					vt 0.5682 0.2727
 | 
				
			||||||
 | 
					vt 0.5682 0.2879
 | 
				
			||||||
 | 
					vt 0.5985 0.2727
 | 
				
			||||||
 | 
					vt 0.5985 0.2879
 | 
				
			||||||
 | 
					vt 0.6288 0.2727
 | 
				
			||||||
 | 
					vt 0.6288 0.2879
 | 
				
			||||||
 | 
					vt 0.5227 0.2197
 | 
				
			||||||
 | 
					vt 0.5227 0.1894
 | 
				
			||||||
 | 
					vt 0.9924 0.1894
 | 
				
			||||||
 | 
					vt 0.9924 0.2197
 | 
				
			||||||
 | 
					vt 0.9924 0.2500
 | 
				
			||||||
 | 
					vt 0.5227 0.2500
 | 
				
			||||||
 | 
					vt 0.9924 0.0379
 | 
				
			||||||
 | 
					vt 0.9924 0.0682
 | 
				
			||||||
 | 
					vt 0.5227 0.0682
 | 
				
			||||||
 | 
					vt 0.5227 0.0379
 | 
				
			||||||
 | 
					vt 0.5227 0.1591
 | 
				
			||||||
 | 
					vt 0.9924 0.1591
 | 
				
			||||||
 | 
					vt 0.5227 0.1288
 | 
				
			||||||
 | 
					vt 0.5227 0.0985
 | 
				
			||||||
 | 
					vt 0.9924 0.0985
 | 
				
			||||||
 | 
					vt 0.9924 0.1288
 | 
				
			||||||
 | 
					vt 0.9924 0.0076
 | 
				
			||||||
 | 
					vt 0.5227 0.0076
 | 
				
			||||||
 | 
					vn 0.0000 -0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 1.0000 -0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn -1.0000 -0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1
 | 
				
			||||||
 | 
					f 2/5/2 5/6/2 6/7/2 3/8/2
 | 
				
			||||||
 | 
					f 5/9/3 7/10/3 8/11/3 6/12/3
 | 
				
			||||||
 | 
					f 7/13/4 1/14/4 4/15/4 8/16/4
 | 
				
			||||||
 | 
					f 4/17/5 3/18/5 6/19/5 8/20/5
 | 
				
			||||||
 | 
					f 7/21/6 5/22/6 2/23/6 1/24/6
 | 
				
			||||||
 | 
					f 12/25/1 10/26/1 24/27/1 22/28/1 20/29/1 18/30/1 16/31/1 14/32/1
 | 
				
			||||||
 | 
					f 9/33/3 11/34/3 13/35/3 15/36/3 17/37/3 19/38/3 21/39/3 23/40/3
 | 
				
			||||||
 | 
					f 44/41/1 42/42/1 56/43/1 54/44/1 52/45/1 50/46/1 48/47/1 46/48/1
 | 
				
			||||||
 | 
					f 41/49/3 43/50/3 45/51/3 47/52/3 49/53/3 51/54/3 53/55/3 55/56/3
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/57/7 10/58/8 12/59/9 11/60/10
 | 
				
			||||||
 | 
					f 11/60/10 12/59/9 14/61/11 13/62/12
 | 
				
			||||||
 | 
					f 13/62/12 14/61/11 16/63/13 15/64/14
 | 
				
			||||||
 | 
					f 15/65/14 16/66/13 18/67/15 17/68/16
 | 
				
			||||||
 | 
					f 17/68/16 18/67/15 20/69/17 19/70/18
 | 
				
			||||||
 | 
					f 19/70/18 20/69/17 22/71/19 21/72/20
 | 
				
			||||||
 | 
					f 21/72/20 22/71/19 24/73/21 23/74/22
 | 
				
			||||||
 | 
					f 23/74/22 24/73/21 10/58/8 9/57/7
 | 
				
			||||||
 | 
					f 43/75/10 44/76/9 46/77/11 45/78/12
 | 
				
			||||||
 | 
					f 41/79/7 42/80/8 44/76/9 43/75/10
 | 
				
			||||||
 | 
					f 45/78/12 46/77/11 48/81/13 47/82/14
 | 
				
			||||||
 | 
					f 47/83/14 48/84/13 50/85/15 49/86/16
 | 
				
			||||||
 | 
					f 49/86/16 50/85/15 52/87/17 51/88/18
 | 
				
			||||||
 | 
					f 51/88/18 52/87/17 54/89/19 53/90/20
 | 
				
			||||||
 | 
					f 53/90/20 54/89/19 56/91/21 55/92/22
 | 
				
			||||||
 | 
					f 55/92/22 56/91/21 42/80/8 41/79/7
 | 
				
			||||||
 | 
					f 32/93/23 34/94/24 33/95/24 31/96/23
 | 
				
			||||||
 | 
					f 32/93/23 31/96/23 29/97/25 30/98/25
 | 
				
			||||||
 | 
					f 27/99/26 25/100/27 26/101/27 28/102/26
 | 
				
			||||||
 | 
					f 34/94/24 36/103/28 35/104/28 33/95/24
 | 
				
			||||||
 | 
					f 38/105/29 40/106/30 39/107/30 37/108/29
 | 
				
			||||||
 | 
					f 38/105/29 37/108/29 35/104/28 36/103/28
 | 
				
			||||||
 | 
					f 29/109/25 27/99/26 28/102/26 30/110/25
 | 
				
			||||||
 | 
					f 25/100/27 39/107/30 40/106/30 26/101/27
 | 
				
			||||||
							
								
								
									
										220
									
								
								models/pipeworks_flow_sensor_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,220 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-flow-sensor-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cube.001_Cube.001_None
 | 
				
			||||||
 | 
					v -0.187500 0.187500 0.250000
 | 
				
			||||||
 | 
					v -0.187500 0.187500 -0.250000
 | 
				
			||||||
 | 
					v -0.187500 -0.187500 -0.250000
 | 
				
			||||||
 | 
					v -0.187500 -0.187500 0.250000
 | 
				
			||||||
 | 
					v 0.187500 0.187500 -0.250000
 | 
				
			||||||
 | 
					v 0.187500 -0.187500 -0.250000
 | 
				
			||||||
 | 
					v 0.187500 0.187500 0.250000
 | 
				
			||||||
 | 
					v 0.187500 -0.187500 0.250000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					vt 0.0098 0.5000
 | 
				
			||||||
 | 
					vt 0.3235 0.5000
 | 
				
			||||||
 | 
					vt 0.3235 0.7353
 | 
				
			||||||
 | 
					vt 0.0098 0.7353
 | 
				
			||||||
 | 
					vt 0.2647 0.9902
 | 
				
			||||||
 | 
					vt 0.2647 0.7549
 | 
				
			||||||
 | 
					vt 0.5000 0.7549
 | 
				
			||||||
 | 
					vt 0.5000 0.9902
 | 
				
			||||||
 | 
					vt 0.0098 0.5000
 | 
				
			||||||
 | 
					vt 0.3235 0.5000
 | 
				
			||||||
 | 
					vt 0.3235 0.7353
 | 
				
			||||||
 | 
					vt 0.0098 0.7353
 | 
				
			||||||
 | 
					vt 0.2451 0.7549
 | 
				
			||||||
 | 
					vt 0.2451 0.9902
 | 
				
			||||||
 | 
					vt 0.0098 0.9902
 | 
				
			||||||
 | 
					vt 0.0098 0.7549
 | 
				
			||||||
 | 
					vt 0.3235 0.2451
 | 
				
			||||||
 | 
					vt 0.0098 0.2451
 | 
				
			||||||
 | 
					vt 0.0098 0.0098
 | 
				
			||||||
 | 
					vt 0.3235 0.0098
 | 
				
			||||||
 | 
					vt 0.0098 0.2549
 | 
				
			||||||
 | 
					vt 0.3235 0.2549
 | 
				
			||||||
 | 
					vt 0.3235 0.4902
 | 
				
			||||||
 | 
					vt 0.0098 0.4902
 | 
				
			||||||
 | 
					vt 0.7941 0.6765
 | 
				
			||||||
 | 
					vt 0.7353 0.7353
 | 
				
			||||||
 | 
					vt 0.6569 0.7353
 | 
				
			||||||
 | 
					vt 0.5980 0.6765
 | 
				
			||||||
 | 
					vt 0.5980 0.5980
 | 
				
			||||||
 | 
					vt 0.6569 0.5392
 | 
				
			||||||
 | 
					vt 0.7353 0.5392
 | 
				
			||||||
 | 
					vt 0.7941 0.5980
 | 
				
			||||||
 | 
					vt 0.5000 0.7353
 | 
				
			||||||
 | 
					vt 0.5588 0.6765
 | 
				
			||||||
 | 
					vt 0.5588 0.5980
 | 
				
			||||||
 | 
					vt 0.5000 0.5392
 | 
				
			||||||
 | 
					vt 0.4216 0.5392
 | 
				
			||||||
 | 
					vt 0.3627 0.5980
 | 
				
			||||||
 | 
					vt 0.3627 0.6765
 | 
				
			||||||
 | 
					vt 0.4216 0.7353
 | 
				
			||||||
 | 
					vt 0.5588 0.6765
 | 
				
			||||||
 | 
					vt 0.5000 0.7353
 | 
				
			||||||
 | 
					vt 0.4216 0.7353
 | 
				
			||||||
 | 
					vt 0.3627 0.6765
 | 
				
			||||||
 | 
					vt 0.3627 0.5980
 | 
				
			||||||
 | 
					vt 0.4216 0.5392
 | 
				
			||||||
 | 
					vt 0.5000 0.5392
 | 
				
			||||||
 | 
					vt 0.5588 0.5980
 | 
				
			||||||
 | 
					vt 0.7353 0.7353
 | 
				
			||||||
 | 
					vt 0.7941 0.6765
 | 
				
			||||||
 | 
					vt 0.7941 0.5980
 | 
				
			||||||
 | 
					vt 0.7353 0.5392
 | 
				
			||||||
 | 
					vt 0.6569 0.5392
 | 
				
			||||||
 | 
					vt 0.5980 0.5980
 | 
				
			||||||
 | 
					vt 0.5980 0.6765
 | 
				
			||||||
 | 
					vt 0.6569 0.7353
 | 
				
			||||||
 | 
					vt 0.8529 0.4902
 | 
				
			||||||
 | 
					vt 0.8529 0.4706
 | 
				
			||||||
 | 
					vt 0.8922 0.4706
 | 
				
			||||||
 | 
					vt 0.8922 0.4902
 | 
				
			||||||
 | 
					vt 0.9314 0.4706
 | 
				
			||||||
 | 
					vt 0.9314 0.4902
 | 
				
			||||||
 | 
					vt 0.9706 0.4706
 | 
				
			||||||
 | 
					vt 0.9706 0.4902
 | 
				
			||||||
 | 
					vt 0.6569 0.4902
 | 
				
			||||||
 | 
					vt 0.6569 0.4706
 | 
				
			||||||
 | 
					vt 0.6961 0.4706
 | 
				
			||||||
 | 
					vt 0.6961 0.4902
 | 
				
			||||||
 | 
					vt 0.7353 0.4706
 | 
				
			||||||
 | 
					vt 0.7353 0.4902
 | 
				
			||||||
 | 
					vt 0.7745 0.4706
 | 
				
			||||||
 | 
					vt 0.7745 0.4902
 | 
				
			||||||
 | 
					vt 0.8137 0.4706
 | 
				
			||||||
 | 
					vt 0.8137 0.4902
 | 
				
			||||||
 | 
					vt 0.5784 0.4902
 | 
				
			||||||
 | 
					vt 0.5784 0.4706
 | 
				
			||||||
 | 
					vt 0.6176 0.4706
 | 
				
			||||||
 | 
					vt 0.6176 0.4902
 | 
				
			||||||
 | 
					vt 0.5392 0.4902
 | 
				
			||||||
 | 
					vt 0.5392 0.4706
 | 
				
			||||||
 | 
					vt 0.6569 0.4706
 | 
				
			||||||
 | 
					vt 0.6569 0.4902
 | 
				
			||||||
 | 
					vt 0.3431 0.4902
 | 
				
			||||||
 | 
					vt 0.3431 0.4706
 | 
				
			||||||
 | 
					vt 0.3824 0.4706
 | 
				
			||||||
 | 
					vt 0.3824 0.4902
 | 
				
			||||||
 | 
					vt 0.4216 0.4706
 | 
				
			||||||
 | 
					vt 0.4216 0.4902
 | 
				
			||||||
 | 
					vt 0.4608 0.4706
 | 
				
			||||||
 | 
					vt 0.4608 0.4902
 | 
				
			||||||
 | 
					vt 0.5000 0.4706
 | 
				
			||||||
 | 
					vt 0.5000 0.4902
 | 
				
			||||||
 | 
					vt 0.3431 0.2843
 | 
				
			||||||
 | 
					vt 0.3431 0.2451
 | 
				
			||||||
 | 
					vt 0.9706 0.2451
 | 
				
			||||||
 | 
					vt 0.9706 0.2843
 | 
				
			||||||
 | 
					vt 0.3431 0.3627
 | 
				
			||||||
 | 
					vt 0.3431 0.3235
 | 
				
			||||||
 | 
					vt 0.9706 0.3235
 | 
				
			||||||
 | 
					vt 0.9706 0.3627
 | 
				
			||||||
 | 
					vt 0.3431 0.4020
 | 
				
			||||||
 | 
					vt 0.9706 0.4020
 | 
				
			||||||
 | 
					vt 0.9706 0.4412
 | 
				
			||||||
 | 
					vt 0.3431 0.4412
 | 
				
			||||||
 | 
					vt 0.9706 0.1667
 | 
				
			||||||
 | 
					vt 0.9706 0.2059
 | 
				
			||||||
 | 
					vt 0.3431 0.2059
 | 
				
			||||||
 | 
					vt 0.3431 0.1667
 | 
				
			||||||
 | 
					vt 0.9706 0.1275
 | 
				
			||||||
 | 
					vt 0.3431 0.1275
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 -0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					g Cube.001_Cube.001_None_Cube.001_Cube.001_None_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1
 | 
				
			||||||
 | 
					f 2/5/2 5/6/2 6/7/2 3/8/2
 | 
				
			||||||
 | 
					f 5/9/3 7/10/3 8/11/3 6/12/3
 | 
				
			||||||
 | 
					f 7/13/4 1/14/4 4/15/4 8/16/4
 | 
				
			||||||
 | 
					f 4/17/5 3/18/5 6/19/5 8/20/5
 | 
				
			||||||
 | 
					f 7/21/6 5/22/6 2/23/6 1/24/6
 | 
				
			||||||
 | 
					f 12/25/2 10/26/2 24/27/2 22/28/2 20/29/2 18/30/2 16/31/2 14/32/2
 | 
				
			||||||
 | 
					f 9/33/4 11/34/4 13/35/4 15/36/4 17/37/4 19/38/4 21/39/4 23/40/4
 | 
				
			||||||
 | 
					f 44/41/2 42/42/2 56/43/2 54/44/2 52/45/2 50/46/2 48/47/2 46/48/2
 | 
				
			||||||
 | 
					f 41/49/4 43/50/4 45/51/4 47/52/4 49/53/4 51/54/4 53/55/4 55/56/4
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/57/7 10/58/7 12/59/8 11/60/8
 | 
				
			||||||
 | 
					f 11/60/8 12/59/8 14/61/9 13/62/9
 | 
				
			||||||
 | 
					f 13/62/9 14/61/9 16/63/10 15/64/10
 | 
				
			||||||
 | 
					f 15/65/10 16/66/10 18/67/11 17/68/11
 | 
				
			||||||
 | 
					f 17/68/11 18/67/11 20/69/12 19/70/12
 | 
				
			||||||
 | 
					f 19/70/12 20/69/12 22/71/13 21/72/13
 | 
				
			||||||
 | 
					f 21/72/13 22/71/13 24/73/14 23/74/14
 | 
				
			||||||
 | 
					f 23/74/14 24/73/14 10/58/7 9/57/7
 | 
				
			||||||
 | 
					f 43/75/8 44/76/8 46/77/9 45/78/9
 | 
				
			||||||
 | 
					f 41/79/7 42/80/7 44/76/8 43/75/8
 | 
				
			||||||
 | 
					f 45/78/9 46/77/9 48/81/10 47/82/10
 | 
				
			||||||
 | 
					f 47/83/10 48/84/10 50/85/11 49/86/11
 | 
				
			||||||
 | 
					f 49/86/11 50/85/11 52/87/12 51/88/12
 | 
				
			||||||
 | 
					f 51/88/12 52/87/12 54/89/13 53/90/13
 | 
				
			||||||
 | 
					f 53/90/13 54/89/13 56/91/14 55/92/14
 | 
				
			||||||
 | 
					f 55/92/14 56/91/14 42/80/7 41/79/7
 | 
				
			||||||
 | 
					f 38/93/13 40/94/14 39/95/14 37/96/13
 | 
				
			||||||
 | 
					f 34/97/11 36/98/12 35/99/12 33/100/11
 | 
				
			||||||
 | 
					f 32/101/10 31/102/10 29/103/9 30/104/9
 | 
				
			||||||
 | 
					f 38/93/13 37/96/13 35/99/12 36/98/12
 | 
				
			||||||
 | 
					f 27/105/8 25/106/7 26/107/7 28/108/8
 | 
				
			||||||
 | 
					f 29/109/9 27/105/8 28/108/8 30/110/9
 | 
				
			||||||
 | 
					f 32/101/10 34/97/11 33/100/11 31/102/10
 | 
				
			||||||
 | 
					f 25/106/7 39/95/14 40/94/14 26/107/7
 | 
				
			||||||
							
								
								
									
										194
									
								
								models/pipeworks_fountainhead_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,194 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-fountainhead-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.312500 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.312500 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.312500 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.312500 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.312500 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.312500 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.312500 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.312500 0.125000
 | 
				
			||||||
 | 
					v -0.064721 0.312500 0.156250
 | 
				
			||||||
 | 
					v -0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.312500 0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.312500 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.312500 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.312500 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.312500 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.312500 0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.312500 0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					vt 0.6389 0.9028
 | 
				
			||||||
 | 
					vt 0.5556 0.9861
 | 
				
			||||||
 | 
					vt 0.4444 0.9861
 | 
				
			||||||
 | 
					vt 0.3611 0.9028
 | 
				
			||||||
 | 
					vt 0.3611 0.7917
 | 
				
			||||||
 | 
					vt 0.4444 0.7083
 | 
				
			||||||
 | 
					vt 0.5556 0.7083
 | 
				
			||||||
 | 
					vt 0.6389 0.7917
 | 
				
			||||||
 | 
					vt 0.2222 0.9861
 | 
				
			||||||
 | 
					vt 0.3056 0.9028
 | 
				
			||||||
 | 
					vt 0.3056 0.7917
 | 
				
			||||||
 | 
					vt 0.2222 0.7083
 | 
				
			||||||
 | 
					vt 0.1111 0.7083
 | 
				
			||||||
 | 
					vt 0.0278 0.7917
 | 
				
			||||||
 | 
					vt 0.0278 0.9028
 | 
				
			||||||
 | 
					vt 0.1111 0.9861
 | 
				
			||||||
 | 
					vt 0.9722 0.8958
 | 
				
			||||||
 | 
					vt 0.8889 0.9792
 | 
				
			||||||
 | 
					vt 0.7778 0.9792
 | 
				
			||||||
 | 
					vt 0.6944 0.8958
 | 
				
			||||||
 | 
					vt 0.6944 0.7847
 | 
				
			||||||
 | 
					vt 0.7778 0.7014
 | 
				
			||||||
 | 
					vt 0.8889 0.7014
 | 
				
			||||||
 | 
					vt 0.9722 0.7847
 | 
				
			||||||
 | 
					vt 0.5556 0.9861
 | 
				
			||||||
 | 
					vt 0.6389 0.9028
 | 
				
			||||||
 | 
					vt 0.6389 0.7917
 | 
				
			||||||
 | 
					vt 0.5556 0.7083
 | 
				
			||||||
 | 
					vt 0.4444 0.7083
 | 
				
			||||||
 | 
					vt 0.3611 0.7917
 | 
				
			||||||
 | 
					vt 0.3611 0.9028
 | 
				
			||||||
 | 
					vt 0.4444 0.9861
 | 
				
			||||||
 | 
					vt 0.5694 0.6389
 | 
				
			||||||
 | 
					vt 0.5694 0.6111
 | 
				
			||||||
 | 
					vt 0.6806 0.6111
 | 
				
			||||||
 | 
					vt 0.6806 0.6389
 | 
				
			||||||
 | 
					vt 0.7917 0.6111
 | 
				
			||||||
 | 
					vt 0.7917 0.6389
 | 
				
			||||||
 | 
					vt 0.9028 0.6111
 | 
				
			||||||
 | 
					vt 0.9028 0.6389
 | 
				
			||||||
 | 
					vt 0.0139 0.6389
 | 
				
			||||||
 | 
					vt 0.0139 0.6111
 | 
				
			||||||
 | 
					vt 0.1250 0.6111
 | 
				
			||||||
 | 
					vt 0.1250 0.6389
 | 
				
			||||||
 | 
					vt 0.2361 0.6111
 | 
				
			||||||
 | 
					vt 0.2361 0.6389
 | 
				
			||||||
 | 
					vt 0.3472 0.6111
 | 
				
			||||||
 | 
					vt 0.3472 0.6389
 | 
				
			||||||
 | 
					vt 0.4583 0.6111
 | 
				
			||||||
 | 
					vt 0.4583 0.6389
 | 
				
			||||||
 | 
					vt 0.6806 0.5972
 | 
				
			||||||
 | 
					vt 0.6806 0.5139
 | 
				
			||||||
 | 
					vt 0.7917 0.5139
 | 
				
			||||||
 | 
					vt 0.7917 0.5972
 | 
				
			||||||
 | 
					vt 0.5694 0.5972
 | 
				
			||||||
 | 
					vt 0.5694 0.5139
 | 
				
			||||||
 | 
					vt 0.9028 0.5139
 | 
				
			||||||
 | 
					vt 0.9028 0.5972
 | 
				
			||||||
 | 
					vt 0.0139 0.5972
 | 
				
			||||||
 | 
					vt 0.0139 0.5139
 | 
				
			||||||
 | 
					vt 0.1250 0.5139
 | 
				
			||||||
 | 
					vt 0.1250 0.5972
 | 
				
			||||||
 | 
					vt 0.2361 0.5139
 | 
				
			||||||
 | 
					vt 0.2361 0.5972
 | 
				
			||||||
 | 
					vt 0.3472 0.5139
 | 
				
			||||||
 | 
					vt 0.3472 0.5972
 | 
				
			||||||
 | 
					vt 0.4583 0.5139
 | 
				
			||||||
 | 
					vt 0.4583 0.5972
 | 
				
			||||||
 | 
					vt 0.0139 0.2361
 | 
				
			||||||
 | 
					vt 0.0139 0.1806
 | 
				
			||||||
 | 
					vt 0.9028 0.1806
 | 
				
			||||||
 | 
					vt 0.9028 0.2361
 | 
				
			||||||
 | 
					vt 0.0139 0.3472
 | 
				
			||||||
 | 
					vt 0.0139 0.2917
 | 
				
			||||||
 | 
					vt 0.9028 0.2917
 | 
				
			||||||
 | 
					vt 0.9028 0.3472
 | 
				
			||||||
 | 
					vt 0.0139 0.4028
 | 
				
			||||||
 | 
					vt 0.9028 0.4028
 | 
				
			||||||
 | 
					vt 0.9028 0.4583
 | 
				
			||||||
 | 
					vt 0.0139 0.4583
 | 
				
			||||||
 | 
					vt 0.9028 0.0694
 | 
				
			||||||
 | 
					vt 0.9028 0.1250
 | 
				
			||||||
 | 
					vt 0.0139 0.1250
 | 
				
			||||||
 | 
					vt 0.0139 0.0694
 | 
				
			||||||
 | 
					vt 0.9028 0.0139
 | 
				
			||||||
 | 
					vt 0.0139 0.0139
 | 
				
			||||||
 | 
					vn -0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn 0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					vn 0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn 0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 4/1/1 2/2/1 16/3/1 14/4/1 12/5/1 10/6/1 8/7/1 6/8/1
 | 
				
			||||||
 | 
					f 1/9/2 3/10/2 5/11/2 7/12/2 9/13/2 11/14/2 13/15/2 15/16/2
 | 
				
			||||||
 | 
					f 36/17/1 34/18/1 48/19/1 46/20/1 44/21/1 42/22/1 40/23/1 38/24/1
 | 
				
			||||||
 | 
					f 33/25/2 35/26/2 37/27/2 39/28/2 41/29/2 43/30/2 45/31/2 47/32/2
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 1/33/3 2/34/4 4/35/5 3/36/6
 | 
				
			||||||
 | 
					f 3/36/6 4/35/5 6/37/7 5/38/8
 | 
				
			||||||
 | 
					f 5/38/8 6/37/7 8/39/9 7/40/10
 | 
				
			||||||
 | 
					f 7/41/10 8/42/9 10/43/11 9/44/12
 | 
				
			||||||
 | 
					f 9/44/12 10/43/11 12/45/13 11/46/14
 | 
				
			||||||
 | 
					f 11/46/14 12/45/13 14/47/15 13/48/16
 | 
				
			||||||
 | 
					f 13/48/16 14/47/15 16/49/17 15/50/18
 | 
				
			||||||
 | 
					f 15/50/18 16/49/17 2/34/4 1/33/3
 | 
				
			||||||
 | 
					f 35/51/6 36/52/5 38/53/7 37/54/8
 | 
				
			||||||
 | 
					f 33/55/3 34/56/4 36/52/5 35/51/6
 | 
				
			||||||
 | 
					f 37/54/8 38/53/7 40/57/9 39/58/10
 | 
				
			||||||
 | 
					f 39/59/10 40/60/9 42/61/11 41/62/12
 | 
				
			||||||
 | 
					f 41/62/12 42/61/11 44/63/13 43/64/14
 | 
				
			||||||
 | 
					f 43/64/14 44/63/13 46/65/15 45/66/16
 | 
				
			||||||
 | 
					f 45/66/16 46/65/15 48/67/17 47/68/18
 | 
				
			||||||
 | 
					f 47/68/18 48/67/17 34/56/4 33/55/3
 | 
				
			||||||
 | 
					f 30/69/19 32/70/20 31/71/20 29/72/19
 | 
				
			||||||
 | 
					f 26/73/21 28/74/22 27/75/22 25/76/21
 | 
				
			||||||
 | 
					f 24/77/23 23/78/23 21/79/24 22/80/24
 | 
				
			||||||
 | 
					f 30/69/19 29/72/19 27/75/22 28/74/22
 | 
				
			||||||
 | 
					f 19/81/25 17/82/26 18/83/26 20/84/25
 | 
				
			||||||
 | 
					f 21/85/24 19/81/25 20/84/25 22/86/24
 | 
				
			||||||
 | 
					f 24/77/23 26/73/21 25/76/21 23/78/23
 | 
				
			||||||
 | 
					f 17/82/26 31/71/20 32/70/20 18/83/26
 | 
				
			||||||
							
								
								
									
										812
									
								
								models/pipeworks_pipe_10_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,812 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.002_Cylinder.006_None.005
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.064721 0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.088388 0.088388 0.088388
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.088388 -0.088388 0.088388
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.088388 0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.088388 -0.088388 0.088388
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.088388 0.088388 0.088389
 | 
				
			||||||
 | 
					v -0.125000 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.088388 0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt 0.6875 0.3125
 | 
				
			||||||
 | 
					vt 0.7500 0.3281
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.3281
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.4375 0.3125
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 0.8750 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2031
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt 0.6875 0.3125
 | 
				
			||||||
 | 
					vt 0.7500 0.3281
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.3281
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.4375 0.3125
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 0.8750 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2031
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt 0.7500 0.3281
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.3281
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.4375 0.3125
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 0.8750 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2031
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 -0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn -0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.5789 0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.5789 0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5774 0.5774 0.5774
 | 
				
			||||||
 | 
					vn 0.5789 0.5743 0.5789
 | 
				
			||||||
 | 
					vn 0.5789 -0.5743 0.5789
 | 
				
			||||||
 | 
					vn 0.5774 -0.5774 0.5774
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn 0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.5774 0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn -0.5774 -0.5774 0.5774
 | 
				
			||||||
 | 
					vn -0.5789 -0.5743 0.5789
 | 
				
			||||||
 | 
					vn -0.5789 0.5743 0.5789
 | 
				
			||||||
 | 
					vn -0.5774 0.5774 0.5773
 | 
				
			||||||
 | 
					vn -0.5789 0.5789 0.5743
 | 
				
			||||||
 | 
					vn -0.5789 0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.5774 0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn -0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn -0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 0.5789
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 0.5789
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn -0.5743 0.5789 0.5789
 | 
				
			||||||
 | 
					vn 0.5743 0.5789 0.5789
 | 
				
			||||||
 | 
					vn 0.5743 0.5789 -0.5789
 | 
				
			||||||
 | 
					vn -0.5743 0.5789 -0.5789
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6303
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6303
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6303
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6303
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6303
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6303
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6303
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6303
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6303
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6303
 | 
				
			||||||
 | 
					g Cylinder.002_Cylinder.006_None.005_Cylinder.002_Cylinder.006_None.005_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1
 | 
				
			||||||
 | 
					f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2
 | 
				
			||||||
 | 
					f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3
 | 
				
			||||||
 | 
					f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4
 | 
				
			||||||
 | 
					f 49/49/3 50/50/3 51/51/3 52/52/3 53/53/3 54/54/3 55/55/3 56/56/3
 | 
				
			||||||
 | 
					f 57/57/4 58/58/4 59/59/4 60/60/4 61/61/4 62/62/4 63/63/4 64/64/4
 | 
				
			||||||
 | 
					f 65/65/5 66/66/5 67/67/5 68/68/5 69/69/5 70/70/5 71/71/5 72/72/5
 | 
				
			||||||
 | 
					f 73/73/6 74/74/6 75/75/6 76/76/6 77/77/6 78/78/6 79/79/6 80/80/6
 | 
				
			||||||
 | 
					f 81/81/5 82/82/5 83/83/5 84/84/5 85/85/5 86/86/5 87/87/5 88/88/5
 | 
				
			||||||
 | 
					f 89/89/6 90/90/6 91/91/6 92/92/6 93/93/6 94/94/6 95/95/6 96/96/6
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/97/7 2/98/8 1/99/9 10/100/10
 | 
				
			||||||
 | 
					f 10/100/10 1/99/9 8/101/11 11/102/12
 | 
				
			||||||
 | 
					f 11/102/12 8/101/11 7/103/13 12/104/14
 | 
				
			||||||
 | 
					f 12/105/14 7/106/13 6/107/15 13/108/16
 | 
				
			||||||
 | 
					f 13/108/16 6/107/15 5/109/17 14/110/18
 | 
				
			||||||
 | 
					f 14/110/18 5/109/17 4/111/19 15/112/20
 | 
				
			||||||
 | 
					f 15/112/20 4/111/19 3/113/21 16/114/22
 | 
				
			||||||
 | 
					f 16/114/22 3/113/21 2/98/8 9/97/7
 | 
				
			||||||
 | 
					f 26/115/10 17/116/9 24/117/11 27/118/12
 | 
				
			||||||
 | 
					f 25/119/7 18/120/8 17/116/9 26/115/10
 | 
				
			||||||
 | 
					f 27/118/12 24/117/11 23/121/13 28/122/14
 | 
				
			||||||
 | 
					f 28/123/14 23/124/13 22/125/15 29/126/16
 | 
				
			||||||
 | 
					f 29/126/16 22/125/15 21/127/17 30/128/18
 | 
				
			||||||
 | 
					f 30/128/18 21/127/17 20/129/19 31/130/20
 | 
				
			||||||
 | 
					f 31/130/20 20/129/19 19/131/21 32/132/22
 | 
				
			||||||
 | 
					f 32/132/22 19/131/21 18/120/8 25/119/7
 | 
				
			||||||
 | 
					f 97/133/23 98/134/24 99/135/25 100/136/26 101/137/27 102/138/28 103/139/29 104/140/30
 | 
				
			||||||
 | 
					f 105/141/31 106/142/32 107/143/33 108/144/34 109/145/35 110/146/36 111/147/37 112/148/38
 | 
				
			||||||
 | 
					f 109/149/35 108/150/34 113/151/39 114/152/40
 | 
				
			||||||
 | 
					f 109/149/35 114/152/40 115/153/41 116/154/42 110/155/36
 | 
				
			||||||
 | 
					f 111/156/37 110/155/36 116/154/42 117/157/43
 | 
				
			||||||
 | 
					f 112/158/38 111/156/37 117/157/43 118/159/44 119/160/45
 | 
				
			||||||
 | 
					f 105/161/31 112/162/38 119/163/45 120/164/46
 | 
				
			||||||
 | 
					f 105/161/31 120/164/46 121/165/47 122/166/48 106/167/32
 | 
				
			||||||
 | 
					f 106/167/32 122/166/48 123/168/49 107/169/33
 | 
				
			||||||
 | 
					f 107/169/33 123/168/49 124/170/50 113/151/39 108/150/34
 | 
				
			||||||
 | 
					f 99/171/25 125/172/51 126/173/52 127/174/53 100/175/26
 | 
				
			||||||
 | 
					f 100/175/26 127/174/53 128/176/54 101/177/27
 | 
				
			||||||
 | 
					f 102/178/28 101/177/27 128/176/54 129/179/55 130/180/56
 | 
				
			||||||
 | 
					f 102/178/28 130/180/56 131/181/57 103/182/29
 | 
				
			||||||
 | 
					f 103/182/29 131/181/57 132/183/58 133/184/59 104/185/30
 | 
				
			||||||
 | 
					f 97/186/23 104/185/30 133/184/59 134/187/60
 | 
				
			||||||
 | 
					f 98/188/24 97/186/23 134/187/60 135/189/61 136/190/62
 | 
				
			||||||
 | 
					f 98/188/24 136/190/62 125/191/51 99/192/25
 | 
				
			||||||
 | 
					f 41/193/63 34/194/64 33/195/65 42/196/66
 | 
				
			||||||
 | 
					f 42/196/66 33/195/65 40/197/67 43/198/68
 | 
				
			||||||
 | 
					f 43/198/68 40/197/67 39/199/69 44/200/70
 | 
				
			||||||
 | 
					f 44/201/70 39/202/69 38/203/71 45/204/72
 | 
				
			||||||
 | 
					f 45/204/72 38/203/71 37/205/73 46/206/74
 | 
				
			||||||
 | 
					f 46/206/74 37/205/73 36/207/75 47/208/76
 | 
				
			||||||
 | 
					f 47/208/76 36/207/75 35/209/77 48/210/78
 | 
				
			||||||
 | 
					f 48/210/78 35/209/77 34/194/64 41/193/63
 | 
				
			||||||
 | 
					f 58/211/66 49/212/65 56/213/67 59/214/68
 | 
				
			||||||
 | 
					f 57/215/63 50/216/64 49/212/65 58/211/66
 | 
				
			||||||
 | 
					f 59/214/68 56/213/67 55/217/69 60/218/70
 | 
				
			||||||
 | 
					f 60/219/70 55/220/69 54/221/71 61/222/72
 | 
				
			||||||
 | 
					f 61/222/72 54/221/71 53/223/73 62/224/74
 | 
				
			||||||
 | 
					f 62/224/74 53/223/73 52/225/75 63/226/76
 | 
				
			||||||
 | 
					f 63/226/76 52/225/75 51/227/77 64/228/78
 | 
				
			||||||
 | 
					f 64/228/78 51/227/77 50/216/64 57/215/63
 | 
				
			||||||
 | 
					f 137/229/79 138/230/80 139/231/81 140/232/82 141/233/83 142/234/84 143/235/85 144/236/86
 | 
				
			||||||
 | 
					f 145/237/87 146/238/88 147/239/89 148/240/90 149/241/91 150/242/92 151/243/93 152/244/94
 | 
				
			||||||
 | 
					f 149/245/91 148/246/90 120/247/46 119/248/45
 | 
				
			||||||
 | 
					f 149/245/91 119/248/45 118/249/44 153/250/95 150/251/92
 | 
				
			||||||
 | 
					f 151/252/93 150/251/92 153/250/95 154/253/96
 | 
				
			||||||
 | 
					f 152/254/94 151/252/93 154/253/96 126/255/52 125/256/51
 | 
				
			||||||
 | 
					f 145/257/87 152/258/94 125/259/51 136/260/62
 | 
				
			||||||
 | 
					f 145/257/87 136/260/62 135/261/61 155/262/97 146/263/88
 | 
				
			||||||
 | 
					f 146/263/88 155/262/97 156/264/98 147/265/89
 | 
				
			||||||
 | 
					f 147/265/89 156/264/98 121/266/47 120/247/46 148/246/90
 | 
				
			||||||
 | 
					f 139/267/81 130/268/56 129/269/55 157/270/99 140/271/82
 | 
				
			||||||
 | 
					f 140/271/82 157/270/99 158/272/100 141/273/83
 | 
				
			||||||
 | 
					f 142/274/84 141/273/83 158/272/100 115/275/41 114/276/40
 | 
				
			||||||
 | 
					f 142/274/84 114/276/40 113/277/39 143/278/85
 | 
				
			||||||
 | 
					f 143/278/85 113/277/39 124/279/50 159/280/101 144/281/86
 | 
				
			||||||
 | 
					f 137/282/79 144/281/86 159/280/101 160/283/102
 | 
				
			||||||
 | 
					f 138/284/80 137/282/79 160/283/102 132/285/58 131/286/57
 | 
				
			||||||
 | 
					f 138/284/80 131/286/57 130/287/56 139/288/81
 | 
				
			||||||
 | 
					f 73/289/103 66/290/104 65/291/105 74/292/106
 | 
				
			||||||
 | 
					f 74/292/106 65/291/105 72/293/107 75/294/108
 | 
				
			||||||
 | 
					f 75/294/108 72/293/107 71/295/109 76/296/110
 | 
				
			||||||
 | 
					f 76/297/110 71/298/109 70/299/111 77/300/112
 | 
				
			||||||
 | 
					f 77/300/112 70/299/111 69/301/113 78/302/114
 | 
				
			||||||
 | 
					f 78/302/114 69/301/113 68/303/115 79/304/116
 | 
				
			||||||
 | 
					f 79/304/116 68/303/115 67/305/117 80/306/118
 | 
				
			||||||
 | 
					f 80/306/118 67/305/117 66/290/104 73/289/103
 | 
				
			||||||
 | 
					f 90/307/106 81/308/105 88/309/107 91/310/108
 | 
				
			||||||
 | 
					f 89/311/103 82/312/104 81/308/105 90/307/106
 | 
				
			||||||
 | 
					f 91/310/108 88/309/107 87/313/109 92/314/110
 | 
				
			||||||
 | 
					f 92/315/110 87/316/109 86/317/111 93/318/112
 | 
				
			||||||
 | 
					f 93/318/112 86/317/111 85/319/113 94/320/114
 | 
				
			||||||
 | 
					f 94/320/114 85/319/113 84/321/115 95/322/116
 | 
				
			||||||
 | 
					f 95/322/116 84/321/115 83/323/117 96/324/118
 | 
				
			||||||
 | 
					f 96/324/118 83/323/117 82/312/104 89/311/103
 | 
				
			||||||
 | 
					f 161/325/119 162/326/120 163/327/121 164/328/122 165/329/123 166/330/124 167/331/125 168/332/126
 | 
				
			||||||
 | 
					f 169/333/127 170/334/128 171/335/129 172/336/130 173/337/131 174/338/132 175/339/133 176/340/134
 | 
				
			||||||
 | 
					f 173/341/131 172/342/130 117/343/43 116/344/42
 | 
				
			||||||
 | 
					f 173/341/131 116/344/42 115/153/41 158/345/100 174/346/132
 | 
				
			||||||
 | 
					f 175/347/133 174/346/132 158/345/100 157/348/99
 | 
				
			||||||
 | 
					f 176/349/134 175/347/133 157/348/99 129/350/55 128/351/54
 | 
				
			||||||
 | 
					f 169/352/127 176/353/134 128/354/54 127/355/53
 | 
				
			||||||
 | 
					f 169/352/127 127/355/53 126/356/52 154/357/96 170/358/128
 | 
				
			||||||
 | 
					f 170/358/128 154/357/96 153/359/95 171/360/129
 | 
				
			||||||
 | 
					f 171/360/129 153/359/95 118/361/44 117/343/43 172/342/130
 | 
				
			||||||
 | 
					f 163/362/121 133/363/59 132/364/58 160/365/102 164/366/122
 | 
				
			||||||
 | 
					f 164/366/122 160/365/102 159/367/101 165/368/123
 | 
				
			||||||
 | 
					f 166/369/124 165/368/123 159/367/101 124/370/50 123/371/49
 | 
				
			||||||
 | 
					f 166/369/124 123/371/49 122/372/48 167/373/125
 | 
				
			||||||
 | 
					f 167/373/125 122/372/48 121/374/47 156/375/98 168/376/126
 | 
				
			||||||
 | 
					f 161/377/119 168/376/126 156/375/98 155/378/97
 | 
				
			||||||
 | 
					f 162/379/120 161/377/119 155/378/97 135/189/61 134/380/60
 | 
				
			||||||
 | 
					f 162/379/120 134/380/60 133/381/59 163/382/121
 | 
				
			||||||
							
								
								
									
										192
									
								
								models/pipeworks_pipe_2_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,192 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.002_Cylinder.006_None
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.000000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.000000 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.000000 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.000000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.000000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.000000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.062500 -0.062500 0.025888
 | 
				
			||||||
 | 
					v -0.062500 -0.062500 -0.025888
 | 
				
			||||||
 | 
					v -0.062500 -0.025888 -0.062500
 | 
				
			||||||
 | 
					v -0.062500 0.025888 -0.062500
 | 
				
			||||||
 | 
					v -0.062500 0.062500 -0.025888
 | 
				
			||||||
 | 
					v -0.062500 0.062500 0.025888
 | 
				
			||||||
 | 
					v -0.062500 0.025888 0.062500
 | 
				
			||||||
 | 
					v -0.062500 -0.025888 0.062500
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.5000 0.2656
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.1250 0.2656
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt 0.0000 0.2656
 | 
				
			||||||
 | 
					vt 0.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.4619 0.1625
 | 
				
			||||||
 | 
					vt 0.5652 0.1625
 | 
				
			||||||
 | 
					vt 0.5393 0.2248
 | 
				
			||||||
 | 
					vt 0.4877 0.2248
 | 
				
			||||||
 | 
					vt 0.3889 0.2355
 | 
				
			||||||
 | 
					vt 0.4512 0.2613
 | 
				
			||||||
 | 
					vt 0.4619 0.4118
 | 
				
			||||||
 | 
					vt 0.3889 0.3388
 | 
				
			||||||
 | 
					vt 0.4512 0.3130
 | 
				
			||||||
 | 
					vt 0.4877 0.3495
 | 
				
			||||||
 | 
					vt 0.5652 0.4118
 | 
				
			||||||
 | 
					vt 0.5393 0.3495
 | 
				
			||||||
 | 
					vt 0.6382 0.2355
 | 
				
			||||||
 | 
					vt 0.6382 0.3388
 | 
				
			||||||
 | 
					vt 0.5759 0.3130
 | 
				
			||||||
 | 
					vt 0.5759 0.2613
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.3689 0.3557 -0.8587
 | 
				
			||||||
 | 
					vn -0.3689 0.8587 -0.3557
 | 
				
			||||||
 | 
					vn -0.3689 0.3557 0.8587
 | 
				
			||||||
 | 
					vn -0.3689 0.8587 0.3557
 | 
				
			||||||
 | 
					vn -0.3689 -0.3557 0.8587
 | 
				
			||||||
 | 
					vn -0.3689 -0.8587 0.3557
 | 
				
			||||||
 | 
					vn -0.3689 -0.8587 -0.3557
 | 
				
			||||||
 | 
					vn -0.3689 -0.3557 -0.8587
 | 
				
			||||||
 | 
					vn -0.8991 -0.4044 0.1675
 | 
				
			||||||
 | 
					vn -0.8991 -0.4044 -0.1675
 | 
				
			||||||
 | 
					vn -0.8991 -0.1675 -0.4044
 | 
				
			||||||
 | 
					vn -0.8991 0.1675 -0.4044
 | 
				
			||||||
 | 
					vn -0.8991 0.4044 -0.1675
 | 
				
			||||||
 | 
					vn -0.8991 0.4044 0.1675
 | 
				
			||||||
 | 
					vn -0.8991 0.1675 0.4044
 | 
				
			||||||
 | 
					vn -0.8991 -0.1675 0.4044
 | 
				
			||||||
 | 
					g Cylinder.002_Cylinder.006_None_Cylinder.002_Cylinder.006_None_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 10/17/3 1/18/4 8/19/5 11/20/6
 | 
				
			||||||
 | 
					f 9/21/7 2/22/8 1/18/4 10/17/3
 | 
				
			||||||
 | 
					f 11/20/6 8/19/5 7/23/9 12/24/10
 | 
				
			||||||
 | 
					f 12/25/10 7/26/9 6/27/11 13/28/12
 | 
				
			||||||
 | 
					f 13/28/12 6/27/11 5/29/13 14/30/14
 | 
				
			||||||
 | 
					f 14/30/14 5/29/13 4/31/15 15/32/16
 | 
				
			||||||
 | 
					f 15/32/16 4/31/15 3/33/17 16/34/18
 | 
				
			||||||
 | 
					f 16/34/18 3/33/17 2/22/8 9/21/7
 | 
				
			||||||
 | 
					f 17/35/19 18/36/20 19/37/21 20/38/22 21/39/23 22/40/24 23/41/25 24/42/26
 | 
				
			||||||
 | 
					f 25/43/27 26/44/28 20/45/22 19/46/21
 | 
				
			||||||
 | 
					f 27/47/29 22/48/24 21/49/23 28/50/30
 | 
				
			||||||
 | 
					f 29/51/31 30/52/32 24/53/26 23/54/25
 | 
				
			||||||
 | 
					f 31/55/33 32/56/34 18/57/20 17/58/19
 | 
				
			||||||
 | 
					f 32/56/34 25/43/27 19/46/21 18/57/20
 | 
				
			||||||
 | 
					f 27/47/29 29/51/31 23/54/25 22/48/24
 | 
				
			||||||
 | 
					f 30/59/32 31/55/33 17/58/19 24/60/26
 | 
				
			||||||
 | 
					f 20/45/22 26/44/28 28/50/30 21/49/23
 | 
				
			||||||
 | 
					f 31/61/33 30/62/32 33/63/35 34/64/36
 | 
				
			||||||
 | 
					f 32/65/34 31/61/33 34/64/36 35/66/37
 | 
				
			||||||
 | 
					f 26/67/28 25/68/27 36/69/38 37/70/39
 | 
				
			||||||
 | 
					f 28/71/30 26/67/28 37/70/39 38/72/40
 | 
				
			||||||
 | 
					f 25/68/27 32/65/34 35/66/37 36/69/38
 | 
				
			||||||
 | 
					f 29/73/31 27/74/29 39/75/41 40/76/42
 | 
				
			||||||
 | 
					f 27/74/29 28/71/30 38/72/40 39/75/41
 | 
				
			||||||
 | 
					f 30/62/32 29/73/31 40/76/42 33/63/35
 | 
				
			||||||
 | 
					f 36/69/38 35/66/37 34/64/36 33/63/35 40/76/42 39/75/41 38/72/40 37/70/39
 | 
				
			||||||
							
								
								
									
										194
									
								
								models/pipeworks_pipe_3_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,194 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0625 0.5156
 | 
				
			||||||
 | 
					vt 0.9375 0.5156
 | 
				
			||||||
 | 
					vt 0.9375 0.0156
 | 
				
			||||||
 | 
					vt 1.0625 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.5156
 | 
				
			||||||
 | 
					vt 0.5625 0.5156
 | 
				
			||||||
 | 
					vt 0.5625 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5156
 | 
				
			||||||
 | 
					vt 0.8125 0.0156
 | 
				
			||||||
 | 
					vt 0.0625 0.5156
 | 
				
			||||||
 | 
					vt 0.0625 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.5156
 | 
				
			||||||
 | 
					vt 0.3125 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.5156
 | 
				
			||||||
 | 
					vt 0.3125 0.5156
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.0000 -0.3827 -0.9239
 | 
				
			||||||
 | 
					vn 0.0000 0.3827 -0.9239
 | 
				
			||||||
 | 
					vn 0.0000 0.9239 0.3827
 | 
				
			||||||
 | 
					vn 0.0000 0.3827 0.9239
 | 
				
			||||||
 | 
					vn 0.0000 0.9239 -0.3827
 | 
				
			||||||
 | 
					vn 0.0000 -0.9239 -0.3827
 | 
				
			||||||
 | 
					vn 0.0000 -0.9239 0.3827
 | 
				
			||||||
 | 
					vn 0.0000 -0.3827 0.9239
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 4/1/1 2/2/1 16/3/1 14/4/1 12/5/1 10/6/1 8/7/1 6/8/1
 | 
				
			||||||
 | 
					f 1/9/2 3/10/2 5/11/2 7/12/2 9/13/2 11/14/2 13/15/2 15/16/2
 | 
				
			||||||
 | 
					f 36/17/1 34/18/1 48/19/1 46/20/1 44/21/1 42/22/1 40/23/1 38/24/1
 | 
				
			||||||
 | 
					f 33/25/2 35/26/2 37/27/2 39/28/2 41/29/2 43/30/2 45/31/2 47/32/2
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 1/33/3 2/34/4 4/35/5 3/36/6
 | 
				
			||||||
 | 
					f 3/36/6 4/35/5 6/37/7 5/38/8
 | 
				
			||||||
 | 
					f 5/38/8 6/37/7 8/39/9 7/40/10
 | 
				
			||||||
 | 
					f 7/41/10 8/42/9 10/43/11 9/44/12
 | 
				
			||||||
 | 
					f 9/44/12 10/43/11 12/45/13 11/46/14
 | 
				
			||||||
 | 
					f 11/46/14 12/45/13 14/47/15 13/48/16
 | 
				
			||||||
 | 
					f 13/48/16 14/47/15 16/49/17 15/50/18
 | 
				
			||||||
 | 
					f 15/50/18 16/49/17 2/34/4 1/33/3
 | 
				
			||||||
 | 
					f 35/51/6 36/52/5 38/53/7 37/54/8
 | 
				
			||||||
 | 
					f 33/55/3 34/56/4 36/52/5 35/51/6
 | 
				
			||||||
 | 
					f 37/54/8 38/53/7 40/57/9 39/58/10
 | 
				
			||||||
 | 
					f 39/59/10 40/60/9 42/61/11 41/62/12
 | 
				
			||||||
 | 
					f 41/62/12 42/61/11 44/63/13 43/64/14
 | 
				
			||||||
 | 
					f 43/64/14 44/63/13 46/65/15 45/66/16
 | 
				
			||||||
 | 
					f 45/66/16 46/65/15 48/67/17 47/68/18
 | 
				
			||||||
 | 
					f 47/68/18 48/67/17 34/56/4 33/55/3
 | 
				
			||||||
 | 
					f 24/69/19 26/70/20 25/71/20 23/72/19
 | 
				
			||||||
 | 
					f 30/73/21 32/74/22 31/75/22 29/76/21
 | 
				
			||||||
 | 
					f 26/70/20 28/77/23 27/78/23 25/71/20
 | 
				
			||||||
 | 
					f 24/79/19 23/80/19 21/81/24 22/82/24
 | 
				
			||||||
 | 
					f 19/83/25 17/84/26 18/85/26 20/86/25
 | 
				
			||||||
 | 
					f 21/81/24 19/83/25 20/86/25 22/82/24
 | 
				
			||||||
 | 
					f 30/73/21 29/76/21 27/78/23 28/77/23
 | 
				
			||||||
 | 
					f 17/84/26 31/75/22 32/74/22 18/85/26
 | 
				
			||||||
							
								
								
									
										358
									
								
								models/pipeworks_pipe_4_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,358 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000_Cylinder.000_None.001
 | 
				
			||||||
 | 
					v -0.125000 0.000000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.000000 0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.088388 0.088388 0.088388
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.000000 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.088388 0.088389 -0.088388
 | 
				
			||||||
 | 
					v -0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.000000 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.000000 0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.000000 0.000000
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.000000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.000000 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.000000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2656
 | 
				
			||||||
 | 
					vt 0.1250 0.2344
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.3125 0.2344
 | 
				
			||||||
 | 
					vt 0.3125 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.0625 0.2344
 | 
				
			||||||
 | 
					vt 0.0625 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.0625 0.2969
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 1.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.2969
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.2344
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.5000 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt 0.6250 0.2656
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.5625 0.2656
 | 
				
			||||||
 | 
					vt 0.8125 0.2344
 | 
				
			||||||
 | 
					vt 0.3125 0.2344
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					vn -0.5441 0.5441 0.6386
 | 
				
			||||||
 | 
					vn -0.8881 0.3251 0.3251
 | 
				
			||||||
 | 
					vn -0.9054 0.3002 0.3002
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn -0.9054 0.3002 -0.3002
 | 
				
			||||||
 | 
					vn -0.3251 0.3251 -0.8881
 | 
				
			||||||
 | 
					vn -0.3119 -0.1343 -0.9406
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn -0.0783 0.5712 -0.8171
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn -0.2288 0.3725 0.8994
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.3119 0.9406 -0.1343
 | 
				
			||||||
 | 
					vn -0.5441 0.6386 -0.5441
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 -0.9878
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None.001_Cylinder.000_Cylinder.000_None.001_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 19/1/1 20/2/1 21/3/1 22/4/1 23/5/1 24/6/1 25/7/1 26/8/1
 | 
				
			||||||
 | 
					f 27/9/2 28/10/2 29/11/2 30/12/2 31/13/2 32/14/2 33/15/2 34/16/2
 | 
				
			||||||
 | 
					f 35/17/3 36/18/3 37/19/3 38/20/3 39/21/3 40/22/3 41/23/3 42/24/3
 | 
				
			||||||
 | 
					f 43/25/4 44/26/4 45/27/4 46/28/4 47/29/4 48/30/4 49/31/4 50/32/4
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 1/33/5 2/34/6 3/35/7 4/36/8 5/37/9
 | 
				
			||||||
 | 
					f 6/38/10 7/39/11 8/40/12 9/41/13 10/42/14
 | 
				
			||||||
 | 
					f 9/41/13 11/43/15 12/44/16 10/42/14
 | 
				
			||||||
 | 
					f 3/45/7 2/46/6 13/47/17 14/48/18
 | 
				
			||||||
 | 
					f 7/49/11 6/50/10 15/51/2 16/52/19
 | 
				
			||||||
 | 
					f 5/53/9 16/52/19 15/51/2 1/54/5
 | 
				
			||||||
 | 
					f 4/55/8 17/56/20 18/57/21 8/58/12 7/59/11 16/60/19 5/61/9
 | 
				
			||||||
 | 
					f 28/62/22 19/63/23 26/64/24 29/65/25
 | 
				
			||||||
 | 
					f 27/66/26 20/67/27 19/63/23 28/62/22
 | 
				
			||||||
 | 
					f 29/65/25 26/64/24 25/68/28 30/69/29
 | 
				
			||||||
 | 
					f 30/70/29 25/71/28 24/72/30 31/73/31
 | 
				
			||||||
 | 
					f 31/73/31 24/72/30 23/74/32 32/75/33
 | 
				
			||||||
 | 
					f 32/75/33 23/74/32 22/76/34 33/77/35
 | 
				
			||||||
 | 
					f 33/77/35 22/76/34 21/78/36 34/79/37
 | 
				
			||||||
 | 
					f 34/79/37 21/78/36 20/67/27 27/66/26
 | 
				
			||||||
 | 
					f 51/80/38 52/81/39 53/82/40 54/83/41 55/84/42 56/85/43 57/86/44 58/87/45
 | 
				
			||||||
 | 
					f 59/88/46 60/89/47 61/90/48 62/91/49
 | 
				
			||||||
 | 
					f 63/92/50 64/93/51 65/94/52 66/95/53
 | 
				
			||||||
 | 
					f 57/96/44 56/97/43 14/48/18 13/47/17 67/98/17 61/99/48
 | 
				
			||||||
 | 
					f 58/100/45 57/96/44 61/99/48 60/101/47
 | 
				
			||||||
 | 
					f 65/102/52 68/103/16 12/44/16 11/104/15 53/105/40 52/106/39
 | 
				
			||||||
 | 
					f 56/97/43 55/107/42 17/108/20 4/109/8 3/45/7 14/48/18
 | 
				
			||||||
 | 
					f 51/110/38 58/111/45 60/112/47 66/113/53
 | 
				
			||||||
 | 
					f 55/107/42 54/114/41 18/115/21 17/108/20
 | 
				
			||||||
 | 
					f 43/116/54 36/117/55 35/118/56 44/119/57
 | 
				
			||||||
 | 
					f 44/119/57 35/118/56 42/120/58 45/121/59
 | 
				
			||||||
 | 
					f 45/121/59 42/120/58 41/122/60 46/123/61
 | 
				
			||||||
 | 
					f 46/124/61 41/125/60 40/126/62 47/127/63
 | 
				
			||||||
 | 
					f 47/127/63 40/126/62 39/128/64 48/129/65
 | 
				
			||||||
 | 
					f 48/129/65 39/128/64 38/130/66 49/131/67
 | 
				
			||||||
 | 
					f 49/131/67 38/130/66 37/132/68 50/133/69
 | 
				
			||||||
 | 
					f 50/133/69 37/132/68 36/117/55 43/116/54
 | 
				
			||||||
 | 
					f 64/134/51 63/135/50 59/136/46 62/137/49 69/138/70 70/139/71 71/140/72 72/141/73
 | 
				
			||||||
 | 
					f 6/142/10 10/143/14 73/144/14 72/145/73 71/146/72
 | 
				
			||||||
 | 
					f 74/147/6 2/148/6 1/149/5 70/150/71 69/151/70
 | 
				
			||||||
 | 
					f 51/110/38 66/113/53 65/102/52 52/106/39
 | 
				
			||||||
 | 
					f 70/150/71 1/149/5 15/152/2 6/142/10 71/146/72
 | 
				
			||||||
 | 
					f 62/91/49 61/90/48 67/153/17 74/147/6 69/151/70
 | 
				
			||||||
 | 
					f 64/93/51 72/145/73 73/144/14 68/154/16 65/94/52
 | 
				
			||||||
 | 
					f 63/92/50 66/95/53 60/155/47 59/156/46
 | 
				
			||||||
 | 
					f 10/143/14 12/44/16 68/154/16 73/144/14
 | 
				
			||||||
 | 
					f 74/147/6 67/153/17 13/47/17 2/148/6
 | 
				
			||||||
 | 
					f 53/105/40 11/104/15 9/157/13 8/158/12 18/115/21 54/114/41
 | 
				
			||||||
							
								
								
									
										461
									
								
								models/pipeworks_pipe_5_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,461 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000_Cylinder.000_None_pipeworks_pipe_plain.png.000
 | 
				
			||||||
 | 
					v -0.051777 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.088388 0.088388 0.088388
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v 0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.2969
 | 
				
			||||||
 | 
					vt 0.6250 0.2344
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt 0.6875 0.3125
 | 
				
			||||||
 | 
					vt 0.6250 0.2969
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.6250 0.2656
 | 
				
			||||||
 | 
					vt 0.5000 0.2656
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.2969
 | 
				
			||||||
 | 
					vt 0.6250 0.2969
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt 0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt -0.0000 0.2344
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn -0.3002 0.3002 0.9054
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.0000 0.9239 0.3826
 | 
				
			||||||
 | 
					vn -0.3002 0.9054 0.3002
 | 
				
			||||||
 | 
					vn -0.5774 0.5774 0.5774
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 0.3826
 | 
				
			||||||
 | 
					vn -0.9054 0.3002 0.3002
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2972 -0.6302
 | 
				
			||||||
 | 
					vn -0.9878 -0.1100 -0.1100
 | 
				
			||||||
 | 
					vn -0.3826 0.0000 0.9239
 | 
				
			||||||
 | 
					vn 0.1100 -0.1100 0.9878
 | 
				
			||||||
 | 
					vn 0.6302 -0.2972 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.1100 0.9878 -0.1100
 | 
				
			||||||
 | 
					vn 0.2972 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None_pipeworks_pipe_plain.png.000_Cylinder.000_Cylinder.000_None_pipeworks_pipe_plain.png.000_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 20/1/1 21/2/1 22/3/1 23/4/1 24/5/1 25/6/1 26/7/1 27/8/1
 | 
				
			||||||
 | 
					f 28/9/2 29/10/2 30/11/2 31/12/2 32/13/2 33/14/2 34/15/2 35/16/2
 | 
				
			||||||
 | 
					f 36/17/3 37/18/3 38/19/3 39/20/3 40/21/3 41/22/3 42/23/3 43/24/3
 | 
				
			||||||
 | 
					f 44/25/4 45/26/4 46/27/4 47/28/4 48/29/4 49/30/4 50/31/4 51/32/4
 | 
				
			||||||
 | 
					f 52/33/5 53/34/5 54/35/5 55/36/5 56/37/5 57/38/5 58/39/5 59/40/5
 | 
				
			||||||
 | 
					f 60/41/6 61/42/6 62/43/6 63/44/6 64/45/6 65/46/6 66/47/6 67/48/6
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 1/49/7 2/50/8 3/51/9 4/52/10 5/53/11 6/54/12
 | 
				
			||||||
 | 
					f 7/55/13 8/56/14 9/57/15 10/58/16 11/59/17
 | 
				
			||||||
 | 
					f 12/60/18 13/61/19 14/62/20 2/50/8 1/63/7
 | 
				
			||||||
 | 
					f 6/64/12 5/65/11 15/66/21 9/57/15 8/67/14
 | 
				
			||||||
 | 
					f 1/68/7 6/69/12 8/70/14 7/71/13 16/72/22 17/73/23 12/74/18
 | 
				
			||||||
 | 
					f 5/75/11 4/76/10 18/77/24 19/78/25 15/66/21
 | 
				
			||||||
 | 
					f 68/79/13 69/80/17 70/81/26 71/82/22
 | 
				
			||||||
 | 
					f 72/83/27 73/84/28 74/85/29 75/86/30
 | 
				
			||||||
 | 
					f 76/87/31 77/88/32 78/89/33 74/85/29 73/84/28
 | 
				
			||||||
 | 
					f 29/90/34 20/91/35 27/92/36 30/93/37
 | 
				
			||||||
 | 
					f 28/94/38 21/95/39 20/91/35 29/90/34
 | 
				
			||||||
 | 
					f 30/93/37 27/92/36 26/96/40 31/97/41
 | 
				
			||||||
 | 
					f 31/98/41 26/99/40 25/100/8 32/101/42
 | 
				
			||||||
 | 
					f 32/101/42 25/100/8 24/102/9 33/103/43
 | 
				
			||||||
 | 
					f 33/103/43 24/102/9 23/104/44 34/105/45
 | 
				
			||||||
 | 
					f 34/105/45 23/104/44 22/106/46 35/107/47
 | 
				
			||||||
 | 
					f 35/107/47 22/106/46 21/95/39 28/94/38
 | 
				
			||||||
 | 
					f 79/108/48 80/109/49 77/88/32 76/87/31
 | 
				
			||||||
 | 
					f 81/110/50 82/111/51 83/112/52 84/113/53 85/114/9 86/115/8 87/116/40 88/117/54
 | 
				
			||||||
 | 
					f 89/118/55 90/119/24 91/120/56 92/121/57
 | 
				
			||||||
 | 
					f 93/122/58 80/123/49 69/124/17 94/125/59
 | 
				
			||||||
 | 
					f 79/108/48 70/81/26 69/80/17 80/109/49
 | 
				
			||||||
 | 
					f 88/126/54 87/127/40 95/128/19 75/129/30
 | 
				
			||||||
 | 
					f 85/130/9 84/131/53 90/132/24 96/133/10
 | 
				
			||||||
 | 
					f 81/134/50 88/135/54 75/136/30 74/137/29
 | 
				
			||||||
 | 
					f 81/134/50 74/137/29 78/138/33 97/139/60 82/140/51
 | 
				
			||||||
 | 
					f 82/140/51 97/139/60 91/141/56 83/142/52
 | 
				
			||||||
 | 
					f 72/143/27 98/144/61 99/145/23 71/146/22 70/147/26 79/148/48 76/149/31 73/150/28
 | 
				
			||||||
 | 
					f 43/151/62 46/152/63 45/153/64 36/154/65
 | 
				
			||||||
 | 
					f 42/155/66 47/156/67 46/152/63 43/151/62
 | 
				
			||||||
 | 
					f 41/157/68 48/158/69 47/156/67 42/155/66
 | 
				
			||||||
 | 
					f 40/159/70 49/160/71 48/158/69 41/157/68
 | 
				
			||||||
 | 
					f 39/161/22 50/162/72 49/160/71 40/159/70
 | 
				
			||||||
 | 
					f 38/163/23 51/164/73 50/165/72 39/166/22
 | 
				
			||||||
 | 
					f 37/167/74 44/168/75 51/164/73 38/163/23
 | 
				
			||||||
 | 
					f 98/169/61 72/83/27 75/86/30 95/170/19
 | 
				
			||||||
 | 
					f 36/154/65 45/153/64 44/168/75 37/167/74
 | 
				
			||||||
 | 
					f 60/171/76 53/172/77 52/173/78 61/174/79
 | 
				
			||||||
 | 
					f 61/174/79 52/173/78 59/175/80 62/176/81
 | 
				
			||||||
 | 
					f 62/176/81 59/175/80 58/177/82 63/178/59
 | 
				
			||||||
 | 
					f 63/179/59 58/180/82 57/181/83 64/182/15
 | 
				
			||||||
 | 
					f 64/182/15 57/181/83 56/183/84 65/184/21
 | 
				
			||||||
 | 
					f 65/184/21 56/183/84 55/185/85 66/186/55
 | 
				
			||||||
 | 
					f 66/186/55 55/185/85 54/187/86 67/188/87
 | 
				
			||||||
 | 
					f 67/188/87 54/187/86 53/172/77 60/171/76
 | 
				
			||||||
 | 
					f 100/189/88 101/190/89 93/191/58 94/192/59 102/193/15 103/194/21 89/195/55 92/196/57
 | 
				
			||||||
 | 
					f 104/197/18 99/198/23 98/169/61 95/170/19
 | 
				
			||||||
 | 
					f 100/199/88 92/121/57 91/120/56 97/200/60
 | 
				
			||||||
 | 
					f 101/201/89 100/199/88 97/200/60 78/202/33 77/203/32
 | 
				
			||||||
 | 
					f 101/201/89 77/203/32 80/204/49 93/205/58
 | 
				
			||||||
 | 
					f 83/142/52 91/141/56 90/132/24 84/131/53
 | 
				
			||||||
							
								
								
									
										378
									
								
								models/pipeworks_pipe_6_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,378 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.002_Cylinder.006_None.001
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0022 0.5135
 | 
				
			||||||
 | 
					vt 0.8768 0.5135
 | 
				
			||||||
 | 
					vt 0.8768 0.2909
 | 
				
			||||||
 | 
					vt 1.0022 0.3300
 | 
				
			||||||
 | 
					vt 0.1242 0.5135
 | 
				
			||||||
 | 
					vt 0.1242 0.3300
 | 
				
			||||||
 | 
					vt 0.2498 0.2909
 | 
				
			||||||
 | 
					vt 0.2498 0.5135
 | 
				
			||||||
 | 
					vt 0.2498 0.5135
 | 
				
			||||||
 | 
					vt 0.2498 0.2909
 | 
				
			||||||
 | 
					vt 0.3752 0.2909
 | 
				
			||||||
 | 
					vt 0.3752 0.5135
 | 
				
			||||||
 | 
					vt 0.6260 0.5135
 | 
				
			||||||
 | 
					vt 0.5006 0.5135
 | 
				
			||||||
 | 
					vt 0.5006 0.0130
 | 
				
			||||||
 | 
					vt 0.6259 0.0130
 | 
				
			||||||
 | 
					vt 0.7514 0.0130
 | 
				
			||||||
 | 
					vt 0.7514 0.5135
 | 
				
			||||||
 | 
					vt 0.8767 0.0130
 | 
				
			||||||
 | 
					vt 0.8768 0.2356
 | 
				
			||||||
 | 
					vt -0.0012 0.5135
 | 
				
			||||||
 | 
					vt -0.0012 0.3300
 | 
				
			||||||
 | 
					vt 0.8768 0.5135
 | 
				
			||||||
 | 
					vt 0.7514 0.5135
 | 
				
			||||||
 | 
					vt 0.7514 0.2909
 | 
				
			||||||
 | 
					vt 0.8768 0.2909
 | 
				
			||||||
 | 
					vt 0.3752 0.5135
 | 
				
			||||||
 | 
					vt 0.3751 0.0130
 | 
				
			||||||
 | 
					vt 0.1242 0.0130
 | 
				
			||||||
 | 
					vt 0.1242 0.1965
 | 
				
			||||||
 | 
					vt -0.0012 0.1965
 | 
				
			||||||
 | 
					vt -0.0013 0.0130
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.1242 0.5135
 | 
				
			||||||
 | 
					vt 0.1242 0.3300
 | 
				
			||||||
 | 
					vt 1.0022 0.5135
 | 
				
			||||||
 | 
					vt 1.0022 0.3300
 | 
				
			||||||
 | 
					vt 0.2498 0.2356
 | 
				
			||||||
 | 
					vt 0.2498 0.0130
 | 
				
			||||||
 | 
					vt 0.5006 0.3300
 | 
				
			||||||
 | 
					vt 0.5006 0.5135
 | 
				
			||||||
 | 
					vt 0.6260 0.5135
 | 
				
			||||||
 | 
					vt 0.6260 0.3300
 | 
				
			||||||
 | 
					vt -0.0012 0.5135
 | 
				
			||||||
 | 
					vt -0.0012 0.3300
 | 
				
			||||||
 | 
					vt 1.0021 0.0130
 | 
				
			||||||
 | 
					vt 1.0022 0.1965
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 -0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 -0.9878
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.1101 -0.1101 -0.9878
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					g Cylinder.002_Cylinder.006_None.001_Cylinder.002_Cylinder.006_None.001_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1
 | 
				
			||||||
 | 
					f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2
 | 
				
			||||||
 | 
					f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3
 | 
				
			||||||
 | 
					f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/49/5 2/50/6 1/51/7 10/52/8
 | 
				
			||||||
 | 
					f 10/52/8 1/51/7 8/53/9 11/54/10
 | 
				
			||||||
 | 
					f 11/54/10 8/53/9 7/55/11 12/56/12
 | 
				
			||||||
 | 
					f 12/57/12 7/58/11 6/59/13 13/60/14
 | 
				
			||||||
 | 
					f 13/60/14 6/59/13 5/61/15 14/62/16
 | 
				
			||||||
 | 
					f 14/62/16 5/61/15 4/63/17 15/64/18
 | 
				
			||||||
 | 
					f 15/64/18 4/63/17 3/65/19 16/66/20
 | 
				
			||||||
 | 
					f 16/66/20 3/65/19 2/50/6 9/49/5
 | 
				
			||||||
 | 
					f 26/67/8 17/68/7 24/69/9 27/70/10
 | 
				
			||||||
 | 
					f 25/71/5 18/72/6 17/68/7 26/67/8
 | 
				
			||||||
 | 
					f 27/70/10 24/69/9 23/73/11 28/74/12
 | 
				
			||||||
 | 
					f 28/75/12 23/76/11 22/77/13 29/78/14
 | 
				
			||||||
 | 
					f 29/78/14 22/77/13 21/79/15 30/80/16
 | 
				
			||||||
 | 
					f 30/80/16 21/79/15 20/81/17 31/82/18
 | 
				
			||||||
 | 
					f 31/82/18 20/81/17 19/83/19 32/84/20
 | 
				
			||||||
 | 
					f 32/84/20 19/83/19 18/72/6 25/71/5
 | 
				
			||||||
 | 
					f 49/85/21 50/86/22 51/87/23 52/88/24 53/89/25 54/90/26 55/91/27 56/92/28
 | 
				
			||||||
 | 
					f 57/93/29 58/94/30 59/95/31 60/96/32 61/97/33 62/98/34 63/99/35 64/100/36
 | 
				
			||||||
 | 
					f 64/101/36 63/102/35 65/103/37 66/104/38
 | 
				
			||||||
 | 
					f 57/105/29 67/106/39 68/107/40 58/108/30
 | 
				
			||||||
 | 
					f 69/109/41 70/110/42 68/111/40 71/112/43
 | 
				
			||||||
 | 
					f 61/113/33 60/114/32 55/115/27 54/116/26
 | 
				
			||||||
 | 
					f 53/117/25 62/118/34 61/113/33 54/116/26
 | 
				
			||||||
 | 
					f 53/117/25 52/119/24 72/120/44 65/103/37 63/102/35 62/118/34
 | 
				
			||||||
 | 
					f 57/105/29 64/121/36 66/122/38 67/106/39
 | 
				
			||||||
 | 
					f 73/123/45 74/124/46 65/125/37 72/126/44
 | 
				
			||||||
 | 
					f 55/115/27 60/114/32 59/127/31 56/128/28
 | 
				
			||||||
 | 
					f 50/129/22 75/130/47 76/131/48 51/132/23
 | 
				
			||||||
 | 
					f 42/133/49 33/134/50 40/135/51 43/136/52
 | 
				
			||||||
 | 
					f 41/137/53 34/138/54 33/134/50 42/133/49
 | 
				
			||||||
 | 
					f 43/136/52 40/135/51 39/139/55 44/140/56
 | 
				
			||||||
 | 
					f 44/141/56 39/142/55 38/143/57 45/144/58
 | 
				
			||||||
 | 
					f 45/144/58 38/143/57 37/145/59 46/146/60
 | 
				
			||||||
 | 
					f 46/146/60 37/145/59 36/147/61 47/148/62
 | 
				
			||||||
 | 
					f 47/148/62 36/147/61 35/149/63 48/150/64
 | 
				
			||||||
 | 
					f 48/150/64 35/149/63 34/138/54 41/137/53
 | 
				
			||||||
 | 
					f 77/151/65 69/152/41 71/153/43 78/154/66 79/155/67 74/156/46 73/157/45 80/158/68
 | 
				
			||||||
 | 
					f 77/159/65 75/160/47 70/110/42 69/109/41
 | 
				
			||||||
 | 
					f 80/161/68 73/123/45 72/126/44 76/162/48
 | 
				
			||||||
 | 
					f 58/108/30 68/107/40 70/163/42 49/164/21 56/128/28 59/127/31
 | 
				
			||||||
 | 
					f 71/112/43 68/111/40 67/165/39 78/166/66
 | 
				
			||||||
 | 
					f 79/167/67 66/168/38 65/125/37 74/124/46
 | 
				
			||||||
 | 
					f 50/129/22 49/164/21 70/163/42 75/130/47
 | 
				
			||||||
 | 
					f 79/167/67 78/166/66 67/165/39 66/168/38
 | 
				
			||||||
 | 
					f 77/159/65 80/169/68 76/170/48 75/160/47
 | 
				
			||||||
 | 
					f 51/171/23 76/172/48 72/120/44 52/119/24
 | 
				
			||||||
							
								
								
									
										535
									
								
								models/pipeworks_pipe_7_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,535 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.002_Cylinder.006_None.002
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.2344
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.1875
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.1875
 | 
				
			||||||
 | 
					vt 0.1250 0.2344
 | 
				
			||||||
 | 
					vt 0.5000 0.2969
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt -0.0000 0.2344
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.1875
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.1875
 | 
				
			||||||
 | 
					vt 0.2500 0.1875
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.1875
 | 
				
			||||||
 | 
					vt -0.0000 0.1875
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.1875
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 0.8750 0.1875
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.1875
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.1875
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.1875
 | 
				
			||||||
 | 
					vt -0.0000 0.1875
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.1875
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.1875
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.6250 0.1875
 | 
				
			||||||
 | 
					vt 0.5000 0.1875
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.1875
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 -0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.1101 0.9878 -0.1101
 | 
				
			||||||
 | 
					vn 0.1101 0.9878 -0.1101
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn 0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn -0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn -0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					g Cylinder.002_Cylinder.006_None.002_Cylinder.002_Cylinder.006_None.002_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1
 | 
				
			||||||
 | 
					f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2
 | 
				
			||||||
 | 
					f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3
 | 
				
			||||||
 | 
					f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4
 | 
				
			||||||
 | 
					f 49/49/5 50/50/5 51/51/5 52/52/5 53/53/5 54/54/5 55/55/5 56/56/5
 | 
				
			||||||
 | 
					f 57/57/6 58/58/6 59/59/6 60/60/6 61/61/6 62/62/6 63/63/6 64/64/6
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/65/7 2/66/8 1/67/9 10/68/10
 | 
				
			||||||
 | 
					f 10/68/10 1/67/9 8/69/11 11/70/12
 | 
				
			||||||
 | 
					f 11/70/12 8/69/11 7/71/13 12/72/14
 | 
				
			||||||
 | 
					f 12/73/14 7/74/13 6/75/15 13/76/16
 | 
				
			||||||
 | 
					f 13/76/16 6/75/15 5/77/17 14/78/18
 | 
				
			||||||
 | 
					f 14/78/18 5/77/17 4/79/19 15/80/20
 | 
				
			||||||
 | 
					f 15/80/20 4/79/19 3/81/21 16/82/22
 | 
				
			||||||
 | 
					f 16/82/22 3/81/21 2/66/8 9/65/7
 | 
				
			||||||
 | 
					f 26/83/10 17/84/9 24/85/11 27/86/12
 | 
				
			||||||
 | 
					f 25/87/7 18/88/8 17/84/9 26/83/10
 | 
				
			||||||
 | 
					f 27/86/12 24/85/11 23/89/13 28/90/14
 | 
				
			||||||
 | 
					f 28/91/14 23/92/13 22/93/15 29/94/16
 | 
				
			||||||
 | 
					f 29/94/16 22/93/15 21/95/17 30/96/18
 | 
				
			||||||
 | 
					f 30/96/18 21/95/17 20/97/19 31/98/20
 | 
				
			||||||
 | 
					f 31/98/20 20/97/19 19/99/21 32/100/22
 | 
				
			||||||
 | 
					f 32/100/22 19/99/21 18/88/8 25/87/7
 | 
				
			||||||
 | 
					f 65/101/23 66/102/24 67/103/25 68/104/26 69/105/27 70/106/28 71/107/29 72/108/30
 | 
				
			||||||
 | 
					f 73/109/31 74/110/32 75/111/33 76/112/34 77/113/35 78/114/36 79/115/37 80/116/38
 | 
				
			||||||
 | 
					f 81/117/39 82/118/40 83/119/41 84/120/42
 | 
				
			||||||
 | 
					f 77/121/35 70/122/28 69/123/27 78/124/36
 | 
				
			||||||
 | 
					f 85/125/43 86/126/44 87/127/45 88/128/46
 | 
				
			||||||
 | 
					f 89/129/47 90/130/48 91/131/49 92/132/50
 | 
				
			||||||
 | 
					f 83/133/41 76/134/34 75/135/33 93/136/51
 | 
				
			||||||
 | 
					f 89/129/47 92/132/50 86/137/44 85/138/43
 | 
				
			||||||
 | 
					f 73/139/31 80/140/38 91/141/49 94/142/52
 | 
				
			||||||
 | 
					f 73/139/31 94/142/52 95/143/53 96/144/54 74/145/32
 | 
				
			||||||
 | 
					f 74/145/32 96/144/54 93/136/51 75/135/33
 | 
				
			||||||
 | 
					f 77/121/35 76/134/34 83/133/41 82/146/40 71/147/29 70/122/28
 | 
				
			||||||
 | 
					f 83/119/41 93/148/51 97/149/55 84/120/42
 | 
				
			||||||
 | 
					f 65/150/23 72/151/30 98/152/56 99/153/57
 | 
				
			||||||
 | 
					f 66/154/24 65/150/23 99/153/57 100/155/58 101/156/59
 | 
				
			||||||
 | 
					f 66/154/24 101/156/59 87/157/45 67/158/25
 | 
				
			||||||
 | 
					f 41/159/60 34/160/61 33/161/62 42/162/63
 | 
				
			||||||
 | 
					f 42/162/63 33/161/62 40/163/64 43/164/65
 | 
				
			||||||
 | 
					f 43/164/65 40/163/64 39/165/66 44/166/67
 | 
				
			||||||
 | 
					f 44/167/67 39/168/66 38/169/68 45/170/69
 | 
				
			||||||
 | 
					f 45/170/69 38/169/68 37/171/70 46/172/71
 | 
				
			||||||
 | 
					f 46/172/71 37/171/70 36/173/72 47/174/73
 | 
				
			||||||
 | 
					f 47/174/73 36/173/72 35/175/74 48/176/75
 | 
				
			||||||
 | 
					f 48/176/75 35/175/74 34/160/61 41/159/60
 | 
				
			||||||
 | 
					f 102/177/76 103/178/77 104/179/78 105/180/79 106/181/80 81/182/39 84/183/42 97/184/55
 | 
				
			||||||
 | 
					f 104/185/78 107/186/81 100/187/58 99/188/57 105/189/79
 | 
				
			||||||
 | 
					f 105/189/79 99/188/57 98/190/56 106/191/80
 | 
				
			||||||
 | 
					f 82/118/40 81/117/39 106/191/80 98/190/56
 | 
				
			||||||
 | 
					f 102/192/76 97/149/55 93/148/51 96/193/54
 | 
				
			||||||
 | 
					f 103/194/77 102/192/76 96/193/54 95/195/53 108/196/82
 | 
				
			||||||
 | 
					f 103/194/77 108/196/82 107/197/81 104/198/78
 | 
				
			||||||
 | 
					f 57/199/83 50/200/84 49/201/85 58/202/86
 | 
				
			||||||
 | 
					f 58/202/86 49/201/85 56/203/87 59/204/88
 | 
				
			||||||
 | 
					f 59/204/88 56/203/87 55/205/89 60/206/90
 | 
				
			||||||
 | 
					f 60/207/90 55/208/89 54/209/91 61/210/92
 | 
				
			||||||
 | 
					f 61/210/92 54/209/91 53/211/93 62/212/94
 | 
				
			||||||
 | 
					f 62/212/94 53/211/93 52/213/95 63/214/96
 | 
				
			||||||
 | 
					f 63/214/96 52/213/95 51/215/97 64/216/98
 | 
				
			||||||
 | 
					f 64/216/98 51/215/97 50/200/84 57/199/83
 | 
				
			||||||
 | 
					f 90/217/48 89/218/47 85/219/43 88/220/46 109/221/99 110/222/100 111/223/101 112/224/102
 | 
				
			||||||
 | 
					f 82/146/40 98/152/56 72/151/30 71/147/29
 | 
				
			||||||
 | 
					f 80/225/38 79/226/37 92/227/50 91/228/49
 | 
				
			||||||
 | 
					f 67/229/25 87/230/45 86/231/44 68/232/26
 | 
				
			||||||
 | 
					f 86/231/44 92/227/50 79/226/37 78/124/36 69/123/27 68/232/26
 | 
				
			||||||
 | 
					f 88/128/46 87/127/45 101/233/59 109/234/99
 | 
				
			||||||
 | 
					f 110/235/100 109/234/99 101/233/59 100/236/58 107/237/81
 | 
				
			||||||
 | 
					f 110/235/100 107/237/81 108/238/82 111/239/101
 | 
				
			||||||
 | 
					f 111/239/101 108/238/82 95/240/53 94/241/52 112/242/102
 | 
				
			||||||
 | 
					f 90/130/48 112/242/102 94/241/52 91/131/49
 | 
				
			||||||
							
								
								
									
										520
									
								
								models/pipeworks_pipe_8_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,520 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: ''
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.002_Cylinder.006_None.003_Cylinder.002_Cylinder.00.000
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.064721 0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 -0.125000
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.2969
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt 0.7500 0.2969
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.2969
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.2969
 | 
				
			||||||
 | 
					vt 0.7500 0.2969
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.2969
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.5789 0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.1101 0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.1101 0.1101 -0.9878
 | 
				
			||||||
 | 
					vn 0.5789 0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.1101 -0.1101 -0.9878
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn -0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn -0.5789 0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.1101 0.1101 -0.9878
 | 
				
			||||||
 | 
					vn -0.5789 0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.1101 0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 -0.9878
 | 
				
			||||||
 | 
					g Cylinder.002_Cylinder.006_None.003_Cylinder.002_Cylinder.00.000_Cylinder.002_Cylinder.006_None.003_Cylinder.002_Cylinder.00.000_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1
 | 
				
			||||||
 | 
					f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2
 | 
				
			||||||
 | 
					f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3
 | 
				
			||||||
 | 
					f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4
 | 
				
			||||||
 | 
					f 49/49/3 50/50/3 51/51/3 52/52/3 53/53/3 54/54/3 55/55/3 56/56/3
 | 
				
			||||||
 | 
					f 57/57/4 58/58/4 59/59/4 60/60/4 61/61/4 62/62/4 63/63/4 64/64/4
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/65/5 2/66/6 1/67/7 10/68/8
 | 
				
			||||||
 | 
					f 10/68/8 1/67/7 8/69/9 11/70/10
 | 
				
			||||||
 | 
					f 11/70/10 8/69/9 7/71/11 12/72/12
 | 
				
			||||||
 | 
					f 12/73/12 7/74/11 6/75/13 13/76/14
 | 
				
			||||||
 | 
					f 13/76/14 6/75/13 5/77/15 14/78/16
 | 
				
			||||||
 | 
					f 14/78/16 5/77/15 4/79/17 15/80/18
 | 
				
			||||||
 | 
					f 15/80/18 4/79/17 3/81/19 16/82/20
 | 
				
			||||||
 | 
					f 16/82/20 3/81/19 2/66/6 9/65/5
 | 
				
			||||||
 | 
					f 26/83/8 17/84/7 24/85/9 27/86/10
 | 
				
			||||||
 | 
					f 25/87/5 18/88/6 17/84/7 26/83/8
 | 
				
			||||||
 | 
					f 27/86/10 24/85/9 23/89/11 28/90/12
 | 
				
			||||||
 | 
					f 28/91/12 23/92/11 22/93/13 29/94/14
 | 
				
			||||||
 | 
					f 29/94/14 22/93/13 21/95/15 30/96/16
 | 
				
			||||||
 | 
					f 30/96/16 21/95/15 20/97/17 31/98/18
 | 
				
			||||||
 | 
					f 31/98/18 20/97/17 19/99/19 32/100/20
 | 
				
			||||||
 | 
					f 32/100/20 19/99/19 18/88/6 25/87/5
 | 
				
			||||||
 | 
					f 65/101/21 66/102/22 67/103/23 68/104/24 69/105/25 70/106/26 71/107/27 72/108/28
 | 
				
			||||||
 | 
					f 73/109/29 74/110/30 75/111/31 76/112/32 77/113/33 78/114/34 79/115/35 80/116/36
 | 
				
			||||||
 | 
					f 71/117/27 81/118/37 82/119/38 72/120/28
 | 
				
			||||||
 | 
					f 66/121/22 65/122/21 83/123/39 84/124/40
 | 
				
			||||||
 | 
					f 70/125/26 69/126/25 85/127/41 86/128/42
 | 
				
			||||||
 | 
					f 80/129/36 79/130/35 87/131/43 88/132/44
 | 
				
			||||||
 | 
					f 73/133/29 89/134/45 90/135/46 74/136/30
 | 
				
			||||||
 | 
					f 77/137/33 91/138/47 92/139/48 78/140/34
 | 
				
			||||||
 | 
					f 77/137/33 76/141/32 93/142/49 91/138/47
 | 
				
			||||||
 | 
					f 73/133/29 80/143/36 88/144/44 89/134/45
 | 
				
			||||||
 | 
					f 70/125/26 86/128/42 81/118/37 71/117/27
 | 
				
			||||||
 | 
					f 66/121/22 84/124/40 94/145/50 67/146/23
 | 
				
			||||||
 | 
					f 41/147/51 34/148/52 33/149/53 42/150/54
 | 
				
			||||||
 | 
					f 42/150/54 33/149/53 40/151/55 43/152/56
 | 
				
			||||||
 | 
					f 43/152/56 40/151/55 39/153/57 44/154/58
 | 
				
			||||||
 | 
					f 44/155/58 39/156/57 38/157/59 45/158/60
 | 
				
			||||||
 | 
					f 45/158/60 38/157/59 37/159/61 46/160/62
 | 
				
			||||||
 | 
					f 46/160/62 37/159/61 36/161/63 47/162/64
 | 
				
			||||||
 | 
					f 47/162/64 36/161/63 35/163/65 48/164/66
 | 
				
			||||||
 | 
					f 48/164/66 35/163/65 34/148/52 41/147/51
 | 
				
			||||||
 | 
					f 58/165/54 49/166/53 56/167/55 59/168/56
 | 
				
			||||||
 | 
					f 57/169/51 50/170/52 49/166/53 58/165/54
 | 
				
			||||||
 | 
					f 59/168/56 56/167/55 55/171/57 60/172/58
 | 
				
			||||||
 | 
					f 60/173/58 55/174/57 54/175/59 61/176/60
 | 
				
			||||||
 | 
					f 61/176/60 54/175/59 53/177/61 62/178/62
 | 
				
			||||||
 | 
					f 62/178/62 53/177/61 52/179/63 63/180/64
 | 
				
			||||||
 | 
					f 63/180/64 52/179/63 51/181/65 64/182/66
 | 
				
			||||||
 | 
					f 64/182/66 51/181/65 50/170/52 57/169/51
 | 
				
			||||||
 | 
					f 95/183/67 96/184/68 97/185/69 98/186/70 99/187/71 100/188/72 101/189/73 102/190/74
 | 
				
			||||||
 | 
					f 103/191/75 104/192/76 105/193/77 106/194/78 107/195/79 108/196/80 109/197/81 110/198/82
 | 
				
			||||||
 | 
					f 101/199/73 93/200/49 111/201/83 102/202/74
 | 
				
			||||||
 | 
					f 96/203/68 95/204/67 82/205/38 81/206/37
 | 
				
			||||||
 | 
					f 100/207/72 99/208/71 92/209/48 91/210/47
 | 
				
			||||||
 | 
					f 97/211/69 86/212/42 85/213/41 98/214/70
 | 
				
			||||||
 | 
					f 110/215/82 109/216/81 112/217/84 94/218/50
 | 
				
			||||||
 | 
					f 103/219/75 84/220/40 83/221/39 104/222/76
 | 
				
			||||||
 | 
					f 67/223/23 94/224/50 112/225/84 68/226/24
 | 
				
			||||||
 | 
					f 107/227/79 106/228/78 89/229/45 88/230/44
 | 
				
			||||||
 | 
					f 103/219/75 110/231/82 94/232/50 84/220/40
 | 
				
			||||||
 | 
					f 105/233/77 90/234/46 89/229/45 106/228/78
 | 
				
			||||||
 | 
					f 107/227/79 88/230/44 87/235/43 108/236/80
 | 
				
			||||||
 | 
					f 100/207/72 91/210/47 93/200/49 101/199/73
 | 
				
			||||||
 | 
					f 96/203/68 81/206/37 86/237/42 97/238/69
 | 
				
			||||||
 | 
					f 75/239/31 111/240/83 93/142/49 76/141/32
 | 
				
			||||||
 | 
					f 68/226/24 112/217/84 85/127/41 69/126/25
 | 
				
			||||||
 | 
					f 108/236/80 87/131/43 112/217/84 109/216/81
 | 
				
			||||||
 | 
					f 87/131/43 79/130/35 78/140/34 92/209/48
 | 
				
			||||||
 | 
					f 112/217/84 87/131/43 92/209/48 85/127/41
 | 
				
			||||||
 | 
					f 104/222/76 83/123/39 90/234/46 105/233/77
 | 
				
			||||||
 | 
					f 72/120/28 82/205/38 83/123/39 65/122/21
 | 
				
			||||||
 | 
					f 82/205/38 95/204/67 102/202/74 111/240/83
 | 
				
			||||||
 | 
					f 83/123/39 82/205/38 111/240/83 90/234/46
 | 
				
			||||||
 | 
					f 92/209/48 99/208/71 98/214/70 85/127/41
 | 
				
			||||||
 | 
					f 111/240/83 75/239/31 74/136/30 90/234/46
 | 
				
			||||||
							
								
								
									
										682
									
								
								models/pipeworks_pipe_9_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,682 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: ''
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.002_Cylinder.006_None.004_Cylinder.002_Cylinder.006_No
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v -0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v -0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.500000 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.500000 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.500000 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 -0.156250
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 -0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.064721 0.156250
 | 
				
			||||||
 | 
					v 0.468750 0.156250 0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.156250 -0.064721
 | 
				
			||||||
 | 
					v 0.468750 0.064721 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.468750 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.064721 0.468750 0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.064721 0.500000 0.156250
 | 
				
			||||||
 | 
					v 0.156250 0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.156250 0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 0.500000 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 -0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.500000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.500000 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.468750 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.468750 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.468750 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.468750 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.468750 -0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.125000 0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.088388 0.088388 -0.088388
 | 
				
			||||||
 | 
					v 0.051777 -0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.051777 0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.468750 0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.088388 0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.088388 -0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.125000 -0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.468750 0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.468750 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.468750 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.468750 -0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.468750 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.468750 0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.4375 0.3125
 | 
				
			||||||
 | 
					vt 0.7500 0.2969
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.3281
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 0.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 1.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.3281
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.1875 0.3125
 | 
				
			||||||
 | 
					vt 0.2500 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.3750 0.3281
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.4375 0.3125
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 1.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.0000 0.0000
 | 
				
			||||||
 | 
					vt 0.7500 0.2969
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 0.8750 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2031
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.6250 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.2031
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vt 0.3750 0.2031
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2031
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 -0.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -0.0000 1.0000
 | 
				
			||||||
 | 
					vn -0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn -0.6302 -0.2972 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2970 -0.7174
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6302 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6302 0.2972 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2970 -0.7174
 | 
				
			||||||
 | 
					vn -0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6302 -0.2972 0.7173
 | 
				
			||||||
 | 
					vn -0.6302 -0.2970 0.7174
 | 
				
			||||||
 | 
					vn 0.6302 0.2970 0.7174
 | 
				
			||||||
 | 
					vn -0.6302 0.2972 0.7173
 | 
				
			||||||
 | 
					vn 0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6302 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn -0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 -0.7173
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 -0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.7173 0.2971
 | 
				
			||||||
 | 
					vn 0.6303 0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.2971 0.7173
 | 
				
			||||||
 | 
					vn 0.6303 -0.7173 0.2971
 | 
				
			||||||
 | 
					vn -0.1100 0.1101 0.9878
 | 
				
			||||||
 | 
					vn -0.5789 0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5789 0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.5789 0.5789 0.5743
 | 
				
			||||||
 | 
					vn -0.1100 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 0.5743
 | 
				
			||||||
 | 
					vn 0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn 0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn 0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn 0.5774 0.5774 -0.5774
 | 
				
			||||||
 | 
					vn 0.1101 -0.1101 0.9878
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.5789 0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.5774 0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.5789 0.5743 -0.5789
 | 
				
			||||||
 | 
					vn -0.5789 -0.5743 -0.5789
 | 
				
			||||||
 | 
					vn -0.5774 -0.5774 -0.5774
 | 
				
			||||||
 | 
					vn -0.5789 -0.5789 -0.5743
 | 
				
			||||||
 | 
					vn -0.2972 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2970 -0.6302 -0.7174
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2972
 | 
				
			||||||
 | 
					vn -0.7174 0.6302 -0.2970
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2970 -0.6302 0.7174
 | 
				
			||||||
 | 
					vn 0.2972 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2972
 | 
				
			||||||
 | 
					vn 0.7174 0.6302 0.2970
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6303 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6303 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6303 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6303 -0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6303 -0.7173
 | 
				
			||||||
 | 
					vn 0.7173 -0.6303 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6303 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 -0.6303 0.2971
 | 
				
			||||||
 | 
					vn 0.1101 0.1101 0.9878
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 -0.5789
 | 
				
			||||||
 | 
					vn 0.5743 0.5789 -0.5789
 | 
				
			||||||
 | 
					vn -0.5743 0.5789 -0.5789
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2972 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2970 0.7174 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6303
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6303
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6303
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6303
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6303
 | 
				
			||||||
 | 
					g Cylinder.002_Cylinder.006_None.004_Cylinder.002_Cylinder.006_No_Cylinder.002_Cylinder.006_None.004_Cylinder.002_Cylinder.006_No_None
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1
 | 
				
			||||||
 | 
					f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2
 | 
				
			||||||
 | 
					f 33/33/3 34/34/3 35/35/3 36/36/3 37/37/3 38/38/3 39/39/3 40/40/3
 | 
				
			||||||
 | 
					f 41/41/4 42/42/4 43/43/4 44/44/4 45/45/4 46/46/4 47/47/4 48/48/4
 | 
				
			||||||
 | 
					f 49/49/3 50/50/3 51/51/3 52/52/3 53/53/3 54/54/3 55/55/3 56/56/3
 | 
				
			||||||
 | 
					f 57/57/4 58/58/4 59/59/4 60/60/4 61/61/4 62/62/4 63/63/4 64/64/4
 | 
				
			||||||
 | 
					f 65/65/5 66/66/5 67/67/5 68/68/5 69/69/5 70/70/5 71/71/5 72/72/5
 | 
				
			||||||
 | 
					f 73/73/6 74/74/6 75/75/6 76/76/6 77/77/6 78/78/6 79/79/6 80/80/6
 | 
				
			||||||
 | 
					f 9/81/7 2/82/8 1/83/9 10/84/10
 | 
				
			||||||
 | 
					f 10/84/10 1/83/9 8/85/11 11/86/12
 | 
				
			||||||
 | 
					f 11/86/12 8/85/11 7/87/13 12/88/14
 | 
				
			||||||
 | 
					f 12/89/14 7/90/13 6/91/15 13/92/16
 | 
				
			||||||
 | 
					f 13/92/16 6/91/15 5/93/17 14/94/18
 | 
				
			||||||
 | 
					f 14/94/18 5/93/17 4/95/19 15/96/20
 | 
				
			||||||
 | 
					f 15/96/20 4/95/19 3/97/21 16/98/22
 | 
				
			||||||
 | 
					f 16/98/22 3/97/21 2/82/8 9/81/7
 | 
				
			||||||
 | 
					f 26/99/10 17/100/9 24/101/11 27/102/12
 | 
				
			||||||
 | 
					f 25/103/23 18/104/24 17/100/9 26/99/10
 | 
				
			||||||
 | 
					f 27/102/12 24/101/11 23/105/25 28/106/26
 | 
				
			||||||
 | 
					f 28/107/26 23/108/25 22/109/27 29/110/28
 | 
				
			||||||
 | 
					f 29/110/28 22/109/27 21/111/17 30/112/18
 | 
				
			||||||
 | 
					f 30/112/18 21/111/17 20/113/19 31/114/20
 | 
				
			||||||
 | 
					f 31/114/20 20/113/19 19/115/29 32/116/30
 | 
				
			||||||
 | 
					f 32/116/30 19/115/29 18/104/24 25/103/23
 | 
				
			||||||
 | 
					f 81/117/31 82/118/32 83/119/33 84/120/34 85/121/35 86/122/36 87/123/37 88/124/38
 | 
				
			||||||
 | 
					f 89/125/39 90/126/40 91/127/41 92/128/42 93/129/43 94/130/44 95/131/45 96/132/46
 | 
				
			||||||
 | 
					f 97/133/47 98/134/48 86/135/36 85/136/35
 | 
				
			||||||
 | 
					f 93/137/43 92/138/42 99/139/49 100/140/50
 | 
				
			||||||
 | 
					f 101/141/51 84/142/34 83/143/33 102/144/52
 | 
				
			||||||
 | 
					f 89/145/39 96/146/46 103/147/53 104/148/54
 | 
				
			||||||
 | 
					f 89/145/39 104/148/54 105/149/55 106/150/56 90/151/40
 | 
				
			||||||
 | 
					f 90/151/40 106/150/56 107/152/57 91/153/41
 | 
				
			||||||
 | 
					f 91/153/41 107/152/57 108/154/58 99/139/49 92/138/42
 | 
				
			||||||
 | 
					f 109/155/59 110/156/60 111/157/61 103/158/53
 | 
				
			||||||
 | 
					f 86/135/36 98/134/48 116/159/62 87/160/37
 | 
				
			||||||
 | 
					f 87/160/37 116/159/62 117/161/63 118/162/64 88/163/38
 | 
				
			||||||
 | 
					f 81/164/31 88/163/38 118/162/64 119/165/65
 | 
				
			||||||
 | 
					f 82/166/32 81/164/31 119/165/65 120/167/66 121/168/67
 | 
				
			||||||
 | 
					f 82/166/32 121/168/67 102/169/52 83/170/33
 | 
				
			||||||
 | 
					f 41/171/68 34/172/69 33/173/70 42/174/71
 | 
				
			||||||
 | 
					f 42/174/71 33/173/70 40/175/72 43/176/73
 | 
				
			||||||
 | 
					f 43/176/73 40/175/72 39/177/74 44/178/75
 | 
				
			||||||
 | 
					f 44/179/75 39/180/74 38/181/76 45/182/77
 | 
				
			||||||
 | 
					f 45/182/77 38/181/76 37/183/78 46/184/79
 | 
				
			||||||
 | 
					f 46/184/79 37/183/78 36/185/80 47/186/81
 | 
				
			||||||
 | 
					f 47/186/81 36/185/80 35/187/82 48/188/83
 | 
				
			||||||
 | 
					f 48/188/83 35/187/82 34/172/69 41/171/68
 | 
				
			||||||
 | 
					f 58/189/71 49/190/70 56/191/72 59/192/73
 | 
				
			||||||
 | 
					f 57/193/68 50/194/69 49/190/70 58/189/71
 | 
				
			||||||
 | 
					f 59/192/73 56/191/72 55/195/74 60/196/75
 | 
				
			||||||
 | 
					f 60/197/75 55/198/74 54/199/76 61/200/77
 | 
				
			||||||
 | 
					f 61/200/77 54/199/76 53/201/78 62/202/79
 | 
				
			||||||
 | 
					f 62/202/79 53/201/78 52/203/80 63/204/81
 | 
				
			||||||
 | 
					f 63/204/81 52/203/80 51/205/82 64/206/83
 | 
				
			||||||
 | 
					f 64/206/83 51/205/82 50/194/69 57/193/68
 | 
				
			||||||
 | 
					f 122/207/84 123/208/85 124/209/86 112/210/87 115/211/88 125/212/89 126/213/90 127/214/91
 | 
				
			||||||
 | 
					f 128/215/92 129/216/93 130/217/94 131/218/95 111/219/61 110/220/60 113/221/96 132/222/97
 | 
				
			||||||
 | 
					f 109/223/59 103/224/53 96/225/46 95/226/45
 | 
				
			||||||
 | 
					f 111/157/61 131/227/95 104/228/54 103/158/53
 | 
				
			||||||
 | 
					f 101/229/51 102/230/52 132/231/97 113/232/96
 | 
				
			||||||
 | 
					f 115/233/88 114/234/98 100/235/50 125/236/89
 | 
				
			||||||
 | 
					f 128/237/92 132/238/97 102/239/52 121/240/67
 | 
				
			||||||
 | 
					f 128/237/92 121/240/67 120/241/66 133/242/99 129/243/93
 | 
				
			||||||
 | 
					f 129/243/93 133/242/99 134/244/100 130/245/94
 | 
				
			||||||
 | 
					f 130/245/94 134/244/100 105/246/55 104/228/54 131/227/95
 | 
				
			||||||
 | 
					f 97/247/47 112/248/87 124/249/86 98/250/48
 | 
				
			||||||
 | 
					f 125/236/89 100/235/50 99/251/49 126/252/90
 | 
				
			||||||
 | 
					f 126/252/90 99/251/49 108/253/58 135/254/101 127/255/91
 | 
				
			||||||
 | 
					f 122/256/84 127/255/91 135/254/101 136/257/102
 | 
				
			||||||
 | 
					f 123/258/85 122/256/84 136/257/102 117/259/63 116/260/62
 | 
				
			||||||
 | 
					f 123/258/85 116/260/62 98/261/48 124/262/86
 | 
				
			||||||
 | 
					f 73/263/103 66/264/104 65/265/105 74/266/106
 | 
				
			||||||
 | 
					f 74/266/106 65/265/105 72/267/107 75/268/108
 | 
				
			||||||
 | 
					f 75/268/108 72/267/107 71/269/109 76/270/110
 | 
				
			||||||
 | 
					f 76/271/110 71/272/109 70/273/111 77/274/112
 | 
				
			||||||
 | 
					f 77/274/112 70/273/111 69/275/113 78/276/114
 | 
				
			||||||
 | 
					f 78/276/114 69/275/113 68/277/115 79/278/116
 | 
				
			||||||
 | 
					f 79/278/116 68/277/115 67/279/117 80/280/118
 | 
				
			||||||
 | 
					f 80/280/118 67/279/117 66/264/104 73/263/103
 | 
				
			||||||
 | 
					f 137/281/119 138/282/120 139/283/121 140/284/122 141/285/123 142/286/124 143/287/125 144/288/126
 | 
				
			||||||
 | 
					f 93/137/43 100/140/50 114/289/98 94/290/44
 | 
				
			||||||
 | 
					f 139/291/121 118/292/64 117/293/63 136/294/102 140/295/122
 | 
				
			||||||
 | 
					f 140/295/122 136/294/102 135/296/101 141/297/123
 | 
				
			||||||
 | 
					f 142/298/124 141/297/123 135/296/101 108/299/58 107/300/57
 | 
				
			||||||
 | 
					f 142/298/124 107/300/57 106/301/56 143/302/125
 | 
				
			||||||
 | 
					f 143/302/125 106/301/56 105/303/55 134/304/100 144/305/126
 | 
				
			||||||
 | 
					f 137/306/119 144/305/126 134/304/100 133/307/99
 | 
				
			||||||
 | 
					f 138/308/120 137/306/119 133/307/99 120/167/66 119/309/65
 | 
				
			||||||
 | 
					f 138/308/120 119/309/65 118/310/64 139/311/121
 | 
				
			||||||
 | 
					f 84/142/34 101/229/51 97/133/47 85/136/35
 | 
				
			||||||
 | 
					f 110/156/60 109/223/59 101/229/51 113/232/96
 | 
				
			||||||
 | 
					f 109/223/59 95/226/45 94/290/44 114/234/98
 | 
				
			||||||
 | 
					f 101/229/51 109/223/59 114/234/98 97/133/47
 | 
				
			||||||
 | 
					f 114/234/98 115/233/88 112/248/87 97/133/47
 | 
				
			||||||
							
								
								
									
										7690
									
								
								models/pipeworks_pressure_gauge.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										325
									
								
								models/pipeworks_pressure_gauge_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,325 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-pressure-gauge.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000
 | 
				
			||||||
 | 
					v 0.059508 0.267678 0.156042
 | 
				
			||||||
 | 
					v -0.067320 0.267678 0.156042
 | 
				
			||||||
 | 
					v 0.059508 0.176271 0.064635
 | 
				
			||||||
 | 
					v -0.067320 0.176271 0.064635
 | 
				
			||||||
 | 
					v 0.059508 0.176271 -0.064635
 | 
				
			||||||
 | 
					v -0.067320 0.176271 -0.064635
 | 
				
			||||||
 | 
					v 0.059508 0.267678 -0.156042
 | 
				
			||||||
 | 
					v -0.067320 0.267678 -0.156042
 | 
				
			||||||
 | 
					v 0.059508 0.396948 -0.156042
 | 
				
			||||||
 | 
					v -0.067320 0.396948 -0.156042
 | 
				
			||||||
 | 
					v 0.059508 0.488356 -0.064635
 | 
				
			||||||
 | 
					v -0.067320 0.488356 -0.064635
 | 
				
			||||||
 | 
					v 0.059508 0.488356 0.064635
 | 
				
			||||||
 | 
					v -0.067320 0.488356 0.064635
 | 
				
			||||||
 | 
					v 0.059508 0.396948 0.156042
 | 
				
			||||||
 | 
					v -0.067320 0.396948 0.156042
 | 
				
			||||||
 | 
					v 0.044062 0.150388 -0.044062
 | 
				
			||||||
 | 
					v 0.044062 0.185121 -0.044062
 | 
				
			||||||
 | 
					v 0.044062 0.150388 0.044062
 | 
				
			||||||
 | 
					v 0.044062 0.185121 0.044062
 | 
				
			||||||
 | 
					v -0.044062 0.150388 -0.044062
 | 
				
			||||||
 | 
					v -0.044062 0.185121 -0.044062
 | 
				
			||||||
 | 
					v -0.044062 0.150388 0.044062
 | 
				
			||||||
 | 
					v -0.044062 0.185121 0.044062
 | 
				
			||||||
 | 
					v -0.156122 0.156122 0.156122
 | 
				
			||||||
 | 
					v -0.156122 -0.156122 0.156122
 | 
				
			||||||
 | 
					v -0.156122 0.156122 -0.156122
 | 
				
			||||||
 | 
					v -0.156122 -0.156122 -0.156122
 | 
				
			||||||
 | 
					v 0.156123 0.156122 0.156122
 | 
				
			||||||
 | 
					v 0.156123 -0.156122 0.156122
 | 
				
			||||||
 | 
					v 0.156123 0.156122 -0.156122
 | 
				
			||||||
 | 
					v 0.156123 -0.156122 -0.156122
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					vt 0.1173 0.3198
 | 
				
			||||||
 | 
					vt 0.3327 0.0381
 | 
				
			||||||
 | 
					vt 0.6374 0.0381
 | 
				
			||||||
 | 
					vt 0.8529 0.3198
 | 
				
			||||||
 | 
					vt 0.8529 0.7182
 | 
				
			||||||
 | 
					vt 0.6374 1.0000
 | 
				
			||||||
 | 
					vt 0.3327 1.0000
 | 
				
			||||||
 | 
					vt 0.1173 0.7182
 | 
				
			||||||
 | 
					vt 0.6373 0.3431
 | 
				
			||||||
 | 
					vt 0.6373 0.2451
 | 
				
			||||||
 | 
					vt 0.7353 0.2451
 | 
				
			||||||
 | 
					vt 0.7353 0.3431
 | 
				
			||||||
 | 
					vt 0.3431 0.4412
 | 
				
			||||||
 | 
					vt 0.3431 0.3431
 | 
				
			||||||
 | 
					vt 0.4412 0.3431
 | 
				
			||||||
 | 
					vt 0.4412 0.4412
 | 
				
			||||||
 | 
					vt 0.5392 0.3431
 | 
				
			||||||
 | 
					vt 0.5392 0.4412
 | 
				
			||||||
 | 
					vt 0.6373 0.3431
 | 
				
			||||||
 | 
					vt 0.6373 0.4412
 | 
				
			||||||
 | 
					vt 0.7353 0.3431
 | 
				
			||||||
 | 
					vt 0.7353 0.4412
 | 
				
			||||||
 | 
					vt 0.3431 0.3431
 | 
				
			||||||
 | 
					vt 0.3431 0.2451
 | 
				
			||||||
 | 
					vt 0.4412 0.2451
 | 
				
			||||||
 | 
					vt 0.4412 0.3431
 | 
				
			||||||
 | 
					vt 0.5098 0.2059
 | 
				
			||||||
 | 
					vt 0.5784 0.2745
 | 
				
			||||||
 | 
					vt 0.5784 0.3725
 | 
				
			||||||
 | 
					vt 0.5098 0.4412
 | 
				
			||||||
 | 
					vt 0.4118 0.4412
 | 
				
			||||||
 | 
					vt 0.3431 0.3725
 | 
				
			||||||
 | 
					vt 0.3431 0.2745
 | 
				
			||||||
 | 
					vt 0.4118 0.2059
 | 
				
			||||||
 | 
					vt 0.5392 0.2451
 | 
				
			||||||
 | 
					vt 0.5392 0.3431
 | 
				
			||||||
 | 
					vt 0.7941 0.1373
 | 
				
			||||||
 | 
					vt 0.8627 0.1373
 | 
				
			||||||
 | 
					vt 0.8627 0.1667
 | 
				
			||||||
 | 
					vt 0.7941 0.1667
 | 
				
			||||||
 | 
					vt 0.7255 0.1373
 | 
				
			||||||
 | 
					vt 0.7255 0.1667
 | 
				
			||||||
 | 
					vt 0.6569 0.1373
 | 
				
			||||||
 | 
					vt 0.6569 0.1667
 | 
				
			||||||
 | 
					vt 0.5882 0.1373
 | 
				
			||||||
 | 
					vt 0.5882 0.1667
 | 
				
			||||||
 | 
					vt 0.2843 0.4902
 | 
				
			||||||
 | 
					vt 0.0490 0.4902
 | 
				
			||||||
 | 
					vt 0.0490 0.2549
 | 
				
			||||||
 | 
					vt 0.2843 0.2549
 | 
				
			||||||
 | 
					vt 0.0490 0.2451
 | 
				
			||||||
 | 
					vt 0.2843 0.2451
 | 
				
			||||||
 | 
					vt 0.2843 0.0098
 | 
				
			||||||
 | 
					vt 0.0490 0.0098
 | 
				
			||||||
 | 
					vt 0.5000 0.7549
 | 
				
			||||||
 | 
					vt 0.5000 0.9902
 | 
				
			||||||
 | 
					vt 0.2647 0.9902
 | 
				
			||||||
 | 
					vt 0.2647 0.7549
 | 
				
			||||||
 | 
					vt 0.0490 0.5000
 | 
				
			||||||
 | 
					vt 0.0490 0.7353
 | 
				
			||||||
 | 
					vt 0.2843 0.7353
 | 
				
			||||||
 | 
					vt 0.2843 0.5000
 | 
				
			||||||
 | 
					vt 0.0098 0.7549
 | 
				
			||||||
 | 
					vt 0.0098 0.9902
 | 
				
			||||||
 | 
					vt 0.2451 0.9902
 | 
				
			||||||
 | 
					vt 0.2451 0.7549
 | 
				
			||||||
 | 
					vt 0.7941 0.7549
 | 
				
			||||||
 | 
					vt 0.7941 0.9902
 | 
				
			||||||
 | 
					vt 0.5588 0.9902
 | 
				
			||||||
 | 
					vt 0.5588 0.7549
 | 
				
			||||||
 | 
					vt 0.7941 0.6765
 | 
				
			||||||
 | 
					vt 0.7353 0.7353
 | 
				
			||||||
 | 
					vt 0.6569 0.7353
 | 
				
			||||||
 | 
					vt 0.5980 0.6765
 | 
				
			||||||
 | 
					vt 0.5980 0.5980
 | 
				
			||||||
 | 
					vt 0.6569 0.5392
 | 
				
			||||||
 | 
					vt 0.7353 0.5392
 | 
				
			||||||
 | 
					vt 0.7941 0.5980
 | 
				
			||||||
 | 
					vt 0.5000 0.7353
 | 
				
			||||||
 | 
					vt 0.5588 0.6765
 | 
				
			||||||
 | 
					vt 0.5588 0.5980
 | 
				
			||||||
 | 
					vt 0.5000 0.5392
 | 
				
			||||||
 | 
					vt 0.4216 0.5392
 | 
				
			||||||
 | 
					vt 0.3627 0.5980
 | 
				
			||||||
 | 
					vt 0.3627 0.6765
 | 
				
			||||||
 | 
					vt 0.4216 0.7353
 | 
				
			||||||
 | 
					vt 0.5588 0.6765
 | 
				
			||||||
 | 
					vt 0.5000 0.7353
 | 
				
			||||||
 | 
					vt 0.4216 0.7353
 | 
				
			||||||
 | 
					vt 0.3627 0.6765
 | 
				
			||||||
 | 
					vt 0.3627 0.5980
 | 
				
			||||||
 | 
					vt 0.4216 0.5392
 | 
				
			||||||
 | 
					vt 0.5000 0.5392
 | 
				
			||||||
 | 
					vt 0.5588 0.5980
 | 
				
			||||||
 | 
					vt 0.7353 0.7353
 | 
				
			||||||
 | 
					vt 0.7941 0.6765
 | 
				
			||||||
 | 
					vt 0.7941 0.5980
 | 
				
			||||||
 | 
					vt 0.7353 0.5392
 | 
				
			||||||
 | 
					vt 0.6569 0.5392
 | 
				
			||||||
 | 
					vt 0.5980 0.5980
 | 
				
			||||||
 | 
					vt 0.5980 0.6765
 | 
				
			||||||
 | 
					vt 0.6569 0.7353
 | 
				
			||||||
 | 
					vt 0.8529 0.4902
 | 
				
			||||||
 | 
					vt 0.8529 0.4706
 | 
				
			||||||
 | 
					vt 0.8922 0.4706
 | 
				
			||||||
 | 
					vt 0.8922 0.4902
 | 
				
			||||||
 | 
					vt 0.9314 0.4706
 | 
				
			||||||
 | 
					vt 0.9314 0.4902
 | 
				
			||||||
 | 
					vt 0.9706 0.4706
 | 
				
			||||||
 | 
					vt 0.9706 0.4902
 | 
				
			||||||
 | 
					vt 0.6569 0.4902
 | 
				
			||||||
 | 
					vt 0.6569 0.4706
 | 
				
			||||||
 | 
					vt 0.6961 0.4706
 | 
				
			||||||
 | 
					vt 0.6961 0.4902
 | 
				
			||||||
 | 
					vt 0.7353 0.4706
 | 
				
			||||||
 | 
					vt 0.7353 0.4902
 | 
				
			||||||
 | 
					vt 0.7745 0.4706
 | 
				
			||||||
 | 
					vt 0.7745 0.4902
 | 
				
			||||||
 | 
					vt 0.8137 0.4706
 | 
				
			||||||
 | 
					vt 0.8137 0.4902
 | 
				
			||||||
 | 
					vt 0.5784 0.4902
 | 
				
			||||||
 | 
					vt 0.5784 0.4706
 | 
				
			||||||
 | 
					vt 0.6176 0.4706
 | 
				
			||||||
 | 
					vt 0.6176 0.4902
 | 
				
			||||||
 | 
					vt 0.5392 0.4902
 | 
				
			||||||
 | 
					vt 0.5392 0.4706
 | 
				
			||||||
 | 
					vt 0.6569 0.4706
 | 
				
			||||||
 | 
					vt 0.6569 0.4902
 | 
				
			||||||
 | 
					vt 0.3431 0.4902
 | 
				
			||||||
 | 
					vt 0.3431 0.4706
 | 
				
			||||||
 | 
					vt 0.3824 0.4706
 | 
				
			||||||
 | 
					vt 0.3824 0.4902
 | 
				
			||||||
 | 
					vt 0.4216 0.4706
 | 
				
			||||||
 | 
					vt 0.4216 0.4902
 | 
				
			||||||
 | 
					vt 0.4608 0.4706
 | 
				
			||||||
 | 
					vt 0.4608 0.4902
 | 
				
			||||||
 | 
					vt 0.5000 0.4706
 | 
				
			||||||
 | 
					vt 0.5000 0.4902
 | 
				
			||||||
 | 
					vt 0.3431 0.4020
 | 
				
			||||||
 | 
					vt 0.3431 0.3627
 | 
				
			||||||
 | 
					vt 0.9706 0.3627
 | 
				
			||||||
 | 
					vt 0.9706 0.4020
 | 
				
			||||||
 | 
					vt 0.3431 0.2843
 | 
				
			||||||
 | 
					vt 0.3431 0.2451
 | 
				
			||||||
 | 
					vt 0.9706 0.2451
 | 
				
			||||||
 | 
					vt 0.9706 0.2843
 | 
				
			||||||
 | 
					vt 0.3431 0.3235
 | 
				
			||||||
 | 
					vt 0.9706 0.3235
 | 
				
			||||||
 | 
					vt 0.9706 0.4412
 | 
				
			||||||
 | 
					vt 0.3431 0.4412
 | 
				
			||||||
 | 
					vt 0.9706 0.1667
 | 
				
			||||||
 | 
					vt 0.9706 0.2059
 | 
				
			||||||
 | 
					vt 0.3431 0.2059
 | 
				
			||||||
 | 
					vt 0.3431 0.1667
 | 
				
			||||||
 | 
					vt 0.9706 0.1275
 | 
				
			||||||
 | 
					vt 0.3431 0.1275
 | 
				
			||||||
 | 
					vn 1.0000 -0.0000 -0.0000
 | 
				
			||||||
 | 
					vn -0.0000 -0.7071 0.7071
 | 
				
			||||||
 | 
					vn -0.0000 -1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -0.7071 -0.7071
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn -0.0000 0.7071 -0.7071
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 -0.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.7071 0.7071
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_gauge_face
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 3/2/1 5/3/1 7/4/1 9/5/1 11/6/1 13/7/1 15/8/1
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_pipe_and_gauge_body
 | 
				
			||||||
 | 
					f 1/9/2 2/10/2 4/11/2 3/12/2
 | 
				
			||||||
 | 
					f 3/13/3 4/14/3 6/15/3 5/16/3
 | 
				
			||||||
 | 
					f 5/16/4 6/15/4 8/17/4 7/18/4
 | 
				
			||||||
 | 
					f 7/18/5 8/17/5 10/19/5 9/20/5
 | 
				
			||||||
 | 
					f 9/20/6 10/19/6 12/21/6 11/22/6
 | 
				
			||||||
 | 
					f 11/23/7 12/24/7 14/25/7 13/26/7
 | 
				
			||||||
 | 
					f 4/27/8 2/28/8 16/29/8 14/30/8 12/31/8 10/32/8 8/33/8 6/34/8
 | 
				
			||||||
 | 
					f 13/26/9 14/25/9 16/35/9 15/36/9
 | 
				
			||||||
 | 
					f 15/36/10 16/35/10 2/10/10 1/9/10
 | 
				
			||||||
 | 
					f 20/37/10 24/38/10 23/39/10 19/40/10
 | 
				
			||||||
 | 
					f 18/41/1 20/37/1 19/40/1 17/42/1
 | 
				
			||||||
 | 
					f 22/43/5 18/41/5 17/42/5 21/44/5
 | 
				
			||||||
 | 
					f 24/45/8 22/43/8 21/44/8 23/46/8
 | 
				
			||||||
 | 
					f 25/47/7 29/48/7 31/49/7 27/50/7
 | 
				
			||||||
 | 
					f 30/51/3 26/52/3 28/53/3 32/54/3
 | 
				
			||||||
 | 
					f 28/55/5 27/56/5 31/57/5 32/58/5
 | 
				
			||||||
 | 
					f 26/59/8 25/60/8 27/61/8 28/62/8
 | 
				
			||||||
 | 
					f 30/63/10 29/64/10 25/65/10 26/66/10
 | 
				
			||||||
 | 
					f 32/67/1 31/68/1 29/69/1 30/70/1
 | 
				
			||||||
 | 
					f 36/71/10 34/72/10 48/73/10 46/74/10 44/75/10 42/76/10 40/77/10 38/78/10
 | 
				
			||||||
 | 
					f 33/79/5 35/80/5 37/81/5 39/82/5 41/83/5 43/84/5 45/85/5 47/86/5
 | 
				
			||||||
 | 
					f 68/87/10 66/88/10 80/89/10 78/90/10 76/91/10 74/92/10 72/93/10 70/94/10
 | 
				
			||||||
 | 
					f 65/95/5 67/96/5 69/97/5 71/98/5 73/99/5 75/100/5 77/101/5 79/102/5
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 33/103/11 34/104/12 36/105/13 35/106/14
 | 
				
			||||||
 | 
					f 35/106/14 36/105/13 38/107/15 37/108/16
 | 
				
			||||||
 | 
					f 37/108/16 38/107/15 40/109/17 39/110/18
 | 
				
			||||||
 | 
					f 39/111/18 40/112/17 42/113/19 41/114/20
 | 
				
			||||||
 | 
					f 41/114/20 42/113/19 44/115/21 43/116/22
 | 
				
			||||||
 | 
					f 43/116/22 44/115/21 46/117/23 45/118/24
 | 
				
			||||||
 | 
					f 45/118/24 46/117/23 48/119/25 47/120/26
 | 
				
			||||||
 | 
					f 47/120/26 48/119/25 34/104/12 33/103/11
 | 
				
			||||||
 | 
					f 67/121/14 68/122/13 70/123/15 69/124/16
 | 
				
			||||||
 | 
					f 65/125/11 66/126/12 68/122/13 67/121/14
 | 
				
			||||||
 | 
					f 69/124/16 70/123/15 72/127/17 71/128/18
 | 
				
			||||||
 | 
					f 71/129/18 72/130/17 74/131/19 73/132/20
 | 
				
			||||||
 | 
					f 73/132/20 74/131/19 76/133/21 75/134/22
 | 
				
			||||||
 | 
					f 75/134/22 76/133/21 78/135/23 77/136/24
 | 
				
			||||||
 | 
					f 77/136/24 78/135/23 80/137/25 79/138/26
 | 
				
			||||||
 | 
					f 79/138/26 80/137/25 66/126/12 65/125/11
 | 
				
			||||||
 | 
					f 56/139/27 58/140/28 57/141/28 55/142/27
 | 
				
			||||||
 | 
					f 62/143/29 64/144/30 63/145/30 61/146/29
 | 
				
			||||||
 | 
					f 58/140/28 60/147/31 59/148/31 57/141/28
 | 
				
			||||||
 | 
					f 56/139/27 55/142/27 53/149/32 54/150/32
 | 
				
			||||||
 | 
					f 51/151/33 49/152/34 50/153/34 52/154/33
 | 
				
			||||||
 | 
					f 53/155/32 51/151/33 52/154/33 54/156/32
 | 
				
			||||||
 | 
					f 62/143/29 61/146/29 59/148/31 60/147/31
 | 
				
			||||||
 | 
					f 49/152/34 63/145/30 64/144/30 50/153/34
 | 
				
			||||||
							
								
								
									
										214
									
								
								models/pipeworks_pump_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,214 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-pump-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cube
 | 
				
			||||||
 | 
					v 0.153397 0.500000 -0.063525
 | 
				
			||||||
 | 
					v 0.063558 0.500000 -0.153364
 | 
				
			||||||
 | 
					v -0.063492 0.500000 -0.153364
 | 
				
			||||||
 | 
					v -0.153331 0.500000 -0.063525
 | 
				
			||||||
 | 
					v -0.153331 0.500000 0.063526
 | 
				
			||||||
 | 
					v -0.063492 0.500000 0.153364
 | 
				
			||||||
 | 
					v 0.063558 0.500000 0.153364
 | 
				
			||||||
 | 
					v 0.153397 0.500000 0.063526
 | 
				
			||||||
 | 
					v 0.063558 0.468700 -0.153364
 | 
				
			||||||
 | 
					v 0.153397 0.468700 -0.063525
 | 
				
			||||||
 | 
					v 0.153397 0.468700 0.063526
 | 
				
			||||||
 | 
					v 0.063558 0.468700 0.153364
 | 
				
			||||||
 | 
					v -0.063492 0.468700 0.153364
 | 
				
			||||||
 | 
					v -0.153331 0.468700 0.063526
 | 
				
			||||||
 | 
					v -0.153331 0.468700 -0.063525
 | 
				
			||||||
 | 
					v -0.063492 0.468700 -0.153364
 | 
				
			||||||
 | 
					v -0.122656 0.374847 0.050803
 | 
				
			||||||
 | 
					v -0.050827 0.374847 0.122608
 | 
				
			||||||
 | 
					v -0.050728 0.468750 0.122608
 | 
				
			||||||
 | 
					v -0.122557 0.468750 0.050804
 | 
				
			||||||
 | 
					v -0.050771 0.468750 -0.122590
 | 
				
			||||||
 | 
					v -0.050870 0.374847 -0.122590
 | 
				
			||||||
 | 
					v -0.122674 0.374847 -0.050761
 | 
				
			||||||
 | 
					v -0.122575 0.468750 -0.050760
 | 
				
			||||||
 | 
					v 0.050794 0.468750 -0.122607
 | 
				
			||||||
 | 
					v 0.050695 0.374847 -0.122608
 | 
				
			||||||
 | 
					v 0.122623 0.468750 -0.050803
 | 
				
			||||||
 | 
					v 0.122524 0.374847 -0.050804
 | 
				
			||||||
 | 
					v 0.050837 0.468750 0.122590
 | 
				
			||||||
 | 
					v 0.050738 0.374847 0.122590
 | 
				
			||||||
 | 
					v 0.122542 0.374847 0.050761
 | 
				
			||||||
 | 
					v 0.122641 0.468750 0.050761
 | 
				
			||||||
 | 
					v -0.496061 -0.496094 0.496094
 | 
				
			||||||
 | 
					v -0.496061 -0.496094 -0.496094
 | 
				
			||||||
 | 
					v 0.496127 -0.496094 -0.496094
 | 
				
			||||||
 | 
					v 0.496127 -0.496094 0.496094
 | 
				
			||||||
 | 
					v -0.496061 -0.375000 0.496094
 | 
				
			||||||
 | 
					v -0.496061 -0.375000 -0.496094
 | 
				
			||||||
 | 
					v 0.496127 -0.375000 -0.496094
 | 
				
			||||||
 | 
					v 0.496127 -0.375000 0.496094
 | 
				
			||||||
 | 
					v -0.437467 -0.375000 0.437500
 | 
				
			||||||
 | 
					v -0.437467 -0.375000 -0.437500
 | 
				
			||||||
 | 
					v 0.437533 -0.375000 -0.437500
 | 
				
			||||||
 | 
					v 0.437533 -0.375000 0.437500
 | 
				
			||||||
 | 
					v -0.437467 0.375000 0.437500
 | 
				
			||||||
 | 
					v -0.437467 0.375000 -0.437500
 | 
				
			||||||
 | 
					v 0.437533 0.375000 -0.437500
 | 
				
			||||||
 | 
					v 0.437533 0.375000 0.437500
 | 
				
			||||||
 | 
					vt 0.0312 0.7695
 | 
				
			||||||
 | 
					vt 0.0078 0.7461
 | 
				
			||||||
 | 
					vt 0.0078 0.7148
 | 
				
			||||||
 | 
					vt 0.0312 0.6914
 | 
				
			||||||
 | 
					vt 0.0625 0.6914
 | 
				
			||||||
 | 
					vt 0.0859 0.7148
 | 
				
			||||||
 | 
					vt 0.0859 0.7461
 | 
				
			||||||
 | 
					vt 0.0625 0.7695
 | 
				
			||||||
 | 
					vt 0.1016 0.7461
 | 
				
			||||||
 | 
					vt 0.1250 0.7695
 | 
				
			||||||
 | 
					vt 0.1562 0.7695
 | 
				
			||||||
 | 
					vt 0.1797 0.7461
 | 
				
			||||||
 | 
					vt 0.1797 0.7148
 | 
				
			||||||
 | 
					vt 0.1562 0.6914
 | 
				
			||||||
 | 
					vt 0.1250 0.6914
 | 
				
			||||||
 | 
					vt 0.1016 0.7148
 | 
				
			||||||
 | 
					vt 0.7148 0.7617
 | 
				
			||||||
 | 
					vt 0.7148 0.5117
 | 
				
			||||||
 | 
					vt 0.7461 0.5117
 | 
				
			||||||
 | 
					vt 0.7461 0.7617
 | 
				
			||||||
 | 
					vt 0.6211 0.7617
 | 
				
			||||||
 | 
					vt 0.6211 0.5117
 | 
				
			||||||
 | 
					vt 0.6523 0.5117
 | 
				
			||||||
 | 
					vt 0.6523 0.7617
 | 
				
			||||||
 | 
					vt 0.6836 0.7617
 | 
				
			||||||
 | 
					vt 0.6836 0.5117
 | 
				
			||||||
 | 
					vt 0.7148 0.5117
 | 
				
			||||||
 | 
					vt 0.7148 0.7617
 | 
				
			||||||
 | 
					vt 0.6836 0.7617
 | 
				
			||||||
 | 
					vt 0.6523 0.7617
 | 
				
			||||||
 | 
					vt 0.6523 0.5117
 | 
				
			||||||
 | 
					vt 0.9961 0.5117
 | 
				
			||||||
 | 
					vt 0.9961 0.7617
 | 
				
			||||||
 | 
					vt 0.9961 0.2617
 | 
				
			||||||
 | 
					vt 0.9961 0.5117
 | 
				
			||||||
 | 
					vt 0.7461 0.5117
 | 
				
			||||||
 | 
					vt 0.7461 0.2617
 | 
				
			||||||
 | 
					vt 0.2305 0.2617
 | 
				
			||||||
 | 
					vt 0.4492 0.2617
 | 
				
			||||||
 | 
					vt 0.4492 0.4336
 | 
				
			||||||
 | 
					vt 0.2305 0.4336
 | 
				
			||||||
 | 
					vt 0.2227 0.6133
 | 
				
			||||||
 | 
					vt 0.0039 0.6133
 | 
				
			||||||
 | 
					vt 0.0039 0.4414
 | 
				
			||||||
 | 
					vt 0.2227 0.4414
 | 
				
			||||||
 | 
					vt 0.2227 0.4336
 | 
				
			||||||
 | 
					vt 0.0039 0.4336
 | 
				
			||||||
 | 
					vt 0.0039 0.2617
 | 
				
			||||||
 | 
					vt 0.2227 0.2617
 | 
				
			||||||
 | 
					vt 0.6758 0.4336
 | 
				
			||||||
 | 
					vt 0.4570 0.4336
 | 
				
			||||||
 | 
					vt 0.4570 0.2617
 | 
				
			||||||
 | 
					vt 0.6758 0.2617
 | 
				
			||||||
 | 
					vt 0.2305 0.6602
 | 
				
			||||||
 | 
					vt 0.2305 0.4414
 | 
				
			||||||
 | 
					vt 0.4492 0.4414
 | 
				
			||||||
 | 
					vt 0.4492 0.6602
 | 
				
			||||||
 | 
					vt 0.0547 0.9727
 | 
				
			||||||
 | 
					vt 0.0547 0.9648
 | 
				
			||||||
 | 
					vt 0.0625 0.9648
 | 
				
			||||||
 | 
					vt 0.0625 0.9727
 | 
				
			||||||
 | 
					vt 0.0781 0.9727
 | 
				
			||||||
 | 
					vt 0.0781 0.9648
 | 
				
			||||||
 | 
					vt 0.0859 0.9648
 | 
				
			||||||
 | 
					vt 0.0859 0.9727
 | 
				
			||||||
 | 
					vt 0.0469 0.9727
 | 
				
			||||||
 | 
					vt 0.0469 0.9648
 | 
				
			||||||
 | 
					vt 0.0938 0.9648
 | 
				
			||||||
 | 
					vt 0.0938 0.9727
 | 
				
			||||||
 | 
					vt 0.0391 0.9727
 | 
				
			||||||
 | 
					vt 0.0391 0.9648
 | 
				
			||||||
 | 
					vt 0.0703 0.9727
 | 
				
			||||||
 | 
					vt 0.0703 0.9648
 | 
				
			||||||
 | 
					vt 0.0312 0.9727
 | 
				
			||||||
 | 
					vt 0.0312 0.9648
 | 
				
			||||||
 | 
					vt 0.0508 0.9766
 | 
				
			||||||
 | 
					vt 0.0664 0.9766
 | 
				
			||||||
 | 
					vt 0.0664 0.9922
 | 
				
			||||||
 | 
					vt 0.0508 0.9922
 | 
				
			||||||
 | 
					vt 0.0195 0.9922
 | 
				
			||||||
 | 
					vt 0.0195 0.9766
 | 
				
			||||||
 | 
					vt 0.0352 0.9766
 | 
				
			||||||
 | 
					vt 0.0352 0.9922
 | 
				
			||||||
 | 
					vt 0.0039 0.9922
 | 
				
			||||||
 | 
					vt 0.0039 0.9766
 | 
				
			||||||
 | 
					vt 0.1133 0.9922
 | 
				
			||||||
 | 
					vt 0.1133 0.9766
 | 
				
			||||||
 | 
					vt 0.1289 0.9766
 | 
				
			||||||
 | 
					vt 0.1289 0.9922
 | 
				
			||||||
 | 
					vt 0.0820 0.9922
 | 
				
			||||||
 | 
					vt 0.0820 0.9766
 | 
				
			||||||
 | 
					vt 0.0977 0.9766
 | 
				
			||||||
 | 
					vt 0.0977 0.9922
 | 
				
			||||||
 | 
					vn -0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 -0.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.9238 0.0009 0.3827
 | 
				
			||||||
 | 
					vn -0.3827 0.0004 0.9238
 | 
				
			||||||
 | 
					vn -0.3823 0.0004 0.9240
 | 
				
			||||||
 | 
					vn -0.9238 0.0009 0.3829
 | 
				
			||||||
 | 
					vn -0.3826 0.0004 -0.9239
 | 
				
			||||||
 | 
					vn -0.3830 0.0004 -0.9237
 | 
				
			||||||
 | 
					vn -0.9240 0.0009 -0.3824
 | 
				
			||||||
 | 
					vn -0.9239 0.0009 -0.3826
 | 
				
			||||||
 | 
					vn 0.3827 -0.0004 -0.9238
 | 
				
			||||||
 | 
					vn 0.3823 -0.0004 -0.9240
 | 
				
			||||||
 | 
					vn 0.9238 -0.0009 -0.3827
 | 
				
			||||||
 | 
					vn 0.9238 -0.0009 -0.3829
 | 
				
			||||||
 | 
					vn 0.3830 -0.0004 0.9237
 | 
				
			||||||
 | 
					vn 0.3826 -0.0004 0.9239
 | 
				
			||||||
 | 
					vn 0.9239 -0.0009 0.3826
 | 
				
			||||||
 | 
					vn 0.9240 -0.0009 0.3824
 | 
				
			||||||
 | 
					g Cube_Cube_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 37/17/3 38/18/3 34/19/3 33/20/3
 | 
				
			||||||
 | 
					f 38/21/4 39/22/4 35/23/4 34/24/4
 | 
				
			||||||
 | 
					f 39/25/5 40/26/5 36/27/5 35/28/5
 | 
				
			||||||
 | 
					f 40/26/6 37/29/6 33/30/6 36/31/6
 | 
				
			||||||
 | 
					f 33/20/2 34/19/2 35/32/2 36/33/2
 | 
				
			||||||
 | 
					f 40/34/1 39/35/1 38/36/1 37/37/1
 | 
				
			||||||
 | 
					f 45/38/3 46/39/3 42/40/3 41/41/3
 | 
				
			||||||
 | 
					f 46/42/4 47/43/4 43/44/4 42/45/4
 | 
				
			||||||
 | 
					f 47/46/5 48/47/5 44/48/5 43/49/5
 | 
				
			||||||
 | 
					f 48/50/6 45/51/6 41/52/6 44/53/6
 | 
				
			||||||
 | 
					f 48/54/1 47/55/1 46/56/1 45/57/1
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 5/58/7 14/59/8 13/60/9 6/61/10
 | 
				
			||||||
 | 
					f 8/62/11 11/63/12 10/64/13 1/65/14
 | 
				
			||||||
 | 
					f 4/66/15 15/67/16 14/59/8 5/58/7
 | 
				
			||||||
 | 
					f 1/65/14 10/64/13 9/68/17 2/69/18
 | 
				
			||||||
 | 
					f 3/70/19 16/71/20 15/67/16 4/66/15
 | 
				
			||||||
 | 
					f 7/72/21 12/73/22 11/63/12 8/62/11
 | 
				
			||||||
 | 
					f 6/61/10 13/60/9 12/73/22 7/72/21
 | 
				
			||||||
 | 
					f 2/74/18 9/75/17 16/71/20 3/70/19
 | 
				
			||||||
 | 
					f 17/76/23 18/77/24 19/78/25 20/79/26
 | 
				
			||||||
 | 
					f 21/80/27 22/81/28 23/82/29 24/83/30
 | 
				
			||||||
 | 
					f 25/84/31 26/85/32 22/81/28 21/80/27
 | 
				
			||||||
 | 
					f 27/86/33 28/87/34 26/88/32 25/89/31
 | 
				
			||||||
 | 
					f 29/90/35 30/91/36 31/92/37 32/93/38
 | 
				
			||||||
 | 
					f 19/78/25 18/77/24 30/91/36 29/90/35
 | 
				
			||||||
 | 
					f 24/83/30 23/82/29 17/76/23 20/79/26
 | 
				
			||||||
 | 
					f 31/92/37 28/87/34 27/86/33 32/93/38
 | 
				
			||||||
							
								
								
									
										336
									
								
								models/pipeworks_spigot_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,336 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.187500 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.187500 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.187500 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.187500 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.187500 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.187500 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.187500 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.187500 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.250000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.250000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.250000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.250000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.250000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.250000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.250000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.250000 -0.064721
 | 
				
			||||||
 | 
					v -0.051777 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.000000 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.088388 0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.088388 0.088389 -0.088388
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.000000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.000000
 | 
				
			||||||
 | 
					v 0.125000 0.000000 0.000000
 | 
				
			||||||
 | 
					v -0.125000 0.000000 0.000000
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.000000
 | 
				
			||||||
 | 
					v 0.000000 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.187500 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.187500 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.187500 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.187500 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.000000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.000000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.187500 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.187500 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.187500 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.187500 -0.051777
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2656
 | 
				
			||||||
 | 
					vt 0.1250 0.2344
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.3125 0.2344
 | 
				
			||||||
 | 
					vt 0.3125 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.0625 0.2344
 | 
				
			||||||
 | 
					vt 0.0625 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.0625 0.2969
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 1.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.2969
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.2344
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.6094
 | 
				
			||||||
 | 
					vt 0.8125 0.5469
 | 
				
			||||||
 | 
					vt 0.8750 0.5469
 | 
				
			||||||
 | 
					vt 0.8750 0.6094
 | 
				
			||||||
 | 
					vt 0.9375 0.5469
 | 
				
			||||||
 | 
					vt 0.9375 0.6094
 | 
				
			||||||
 | 
					vt 1.0000 0.5469
 | 
				
			||||||
 | 
					vt 1.0000 0.6094
 | 
				
			||||||
 | 
					vt 0.5000 0.6094
 | 
				
			||||||
 | 
					vt 0.5000 0.5469
 | 
				
			||||||
 | 
					vt 0.5625 0.5469
 | 
				
			||||||
 | 
					vt 0.5625 0.6094
 | 
				
			||||||
 | 
					vt 0.6250 0.5469
 | 
				
			||||||
 | 
					vt 0.6250 0.6094
 | 
				
			||||||
 | 
					vt 0.6875 0.5469
 | 
				
			||||||
 | 
					vt 0.6875 0.6094
 | 
				
			||||||
 | 
					vt 0.7500 0.5469
 | 
				
			||||||
 | 
					vt 0.7500 0.6094
 | 
				
			||||||
 | 
					vt 0.5000 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt 0.6250 0.2656
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.5625 0.2656
 | 
				
			||||||
 | 
					vt 0.8125 0.2344
 | 
				
			||||||
 | 
					vt 0.3125 0.2344
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vn -0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn -0.6387 0.5441 -0.5441
 | 
				
			||||||
 | 
					vn -0.3251 0.3251 -0.8881
 | 
				
			||||||
 | 
					vn -0.3002 0.3002 -0.9054
 | 
				
			||||||
 | 
					vn 0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn 0.3002 0.3002 -0.9054
 | 
				
			||||||
 | 
					vn 0.8881 0.3251 -0.3251
 | 
				
			||||||
 | 
					vn 0.9406 -0.1343 -0.3119
 | 
				
			||||||
 | 
					vn 0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn 0.8171 0.5712 -0.0783
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.8994 0.3725 -0.2288
 | 
				
			||||||
 | 
					vn -0.0000 0.3827 -0.9239
 | 
				
			||||||
 | 
					vn 0.1343 0.9406 -0.3119
 | 
				
			||||||
 | 
					vn 0.5441 0.6386 -0.5441
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2970 -0.7174 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2972 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 0.5789
 | 
				
			||||||
 | 
					vn -0.9878 -0.1101 0.1101
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn 0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					vn 0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn 0.9878 -0.1101 0.1101
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 0.5789
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2972
 | 
				
			||||||
 | 
					vn -0.7174 -0.6302 0.2970
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2970 -0.6302 -0.7174
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.7172 0.6302 -0.2973
 | 
				
			||||||
 | 
					vn 0.7174 -0.6302 -0.2969
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_pipe
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/3 18/18/3 19/19/3 20/20/3 21/21/3 22/22/3 23/23/3 24/24/3
 | 
				
			||||||
 | 
					f 25/25/4 26/26/4 27/27/4 28/28/4 29/29/4 30/30/4 31/31/4 32/32/4
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 33/33/5 34/34/6 35/35/7 36/36/8 37/37/9
 | 
				
			||||||
 | 
					f 38/38/10 39/39/11 40/40/12 41/41/13 42/42/14
 | 
				
			||||||
 | 
					f 41/41/13 43/43/15 44/44/16 42/42/14
 | 
				
			||||||
 | 
					f 35/45/7 34/46/6 45/47/17 46/48/18
 | 
				
			||||||
 | 
					f 39/49/11 38/50/10 47/51/2 48/52/19
 | 
				
			||||||
 | 
					f 37/53/9 48/52/19 47/51/2 33/54/5
 | 
				
			||||||
 | 
					f 36/55/8 49/56/20 50/57/21 40/58/12 39/59/11 48/60/19 37/61/9
 | 
				
			||||||
 | 
					f 10/62/22 1/63/23 8/64/24 11/65/25
 | 
				
			||||||
 | 
					f 9/66/26 2/67/27 1/63/23 10/62/22
 | 
				
			||||||
 | 
					f 11/65/25 8/64/24 7/68/28 12/69/29
 | 
				
			||||||
 | 
					f 12/70/29 7/71/28 6/72/30 13/73/31
 | 
				
			||||||
 | 
					f 13/73/31 6/72/30 5/74/32 14/75/33
 | 
				
			||||||
 | 
					f 14/75/33 5/74/32 4/76/34 15/77/35
 | 
				
			||||||
 | 
					f 15/77/35 4/76/34 3/78/36 16/79/37
 | 
				
			||||||
 | 
					f 16/79/37 3/78/36 2/67/27 9/66/26
 | 
				
			||||||
 | 
					f 51/80/38 52/81/39 53/82/40 54/83/41
 | 
				
			||||||
 | 
					f 55/84/42 56/85/43 57/86/44 58/87/45
 | 
				
			||||||
 | 
					f 59/88/46 60/89/47 46/48/18 45/47/17 61/90/17 53/91/40
 | 
				
			||||||
 | 
					f 62/92/48 59/88/46 53/91/40 52/93/39
 | 
				
			||||||
 | 
					f 57/94/44 63/95/16 44/44/16 43/96/15 64/97/49 65/98/50
 | 
				
			||||||
 | 
					f 60/89/47 66/99/51 49/100/20 36/101/8 35/45/7 46/48/18
 | 
				
			||||||
 | 
					f 67/102/52 62/103/48 52/104/39 58/105/45
 | 
				
			||||||
 | 
					f 66/99/51 68/106/53 50/107/21 49/100/20
 | 
				
			||||||
 | 
					f 25/108/54 18/109/55 17/110/56 26/111/57
 | 
				
			||||||
 | 
					f 26/111/57 17/110/56 24/112/58 27/113/59
 | 
				
			||||||
 | 
					f 27/113/59 24/112/58 23/114/60 28/115/61
 | 
				
			||||||
 | 
					f 28/116/61 23/117/60 22/118/62 29/119/63
 | 
				
			||||||
 | 
					f 29/119/63 22/118/62 21/120/64 30/121/65
 | 
				
			||||||
 | 
					f 30/121/65 21/120/64 20/122/66 31/123/67
 | 
				
			||||||
 | 
					f 31/123/67 20/122/66 19/124/68 32/125/69
 | 
				
			||||||
 | 
					f 32/125/69 19/124/68 18/109/55 25/108/54
 | 
				
			||||||
 | 
					f 38/126/10 42/127/14 69/128/14 70/129/14 71/130/10
 | 
				
			||||||
 | 
					f 72/131/6 34/132/6 33/133/5 73/134/5 74/135/6
 | 
				
			||||||
 | 
					f 67/102/52 58/105/45 57/94/44 65/98/50
 | 
				
			||||||
 | 
					f 73/134/5 33/133/5 47/136/2 38/126/10 71/130/10
 | 
				
			||||||
 | 
					f 54/83/41 53/82/40 61/137/17 72/131/6 74/135/6
 | 
				
			||||||
 | 
					f 56/85/43 70/129/14 69/128/14 63/138/16 57/86/44
 | 
				
			||||||
 | 
					f 55/84/42 58/87/45 52/139/39 51/140/38
 | 
				
			||||||
 | 
					f 42/127/14 44/44/16 63/138/16 69/128/14
 | 
				
			||||||
 | 
					f 72/131/6 61/137/17 45/47/17 34/132/6
 | 
				
			||||||
 | 
					f 64/97/49 43/96/15 41/141/13 40/142/12 50/107/21 68/106/53
 | 
				
			||||||
							
								
								
									
										392
									
								
								models/pipeworks_spigot_pouring_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,392 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-master-lowpoly.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.187500 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.187500 0.064721
 | 
				
			||||||
 | 
					v 0.156250 -0.187500 -0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.187500 -0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.187500 -0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.187500 -0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.187500 0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.187500 0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.250000 0.064721
 | 
				
			||||||
 | 
					v 0.064721 -0.250000 0.156250
 | 
				
			||||||
 | 
					v -0.064721 -0.250000 0.156250
 | 
				
			||||||
 | 
					v -0.156250 -0.250000 0.064721
 | 
				
			||||||
 | 
					v -0.156250 -0.250000 -0.064721
 | 
				
			||||||
 | 
					v -0.064721 -0.250000 -0.156250
 | 
				
			||||||
 | 
					v 0.064721 -0.250000 -0.156250
 | 
				
			||||||
 | 
					v 0.156250 -0.250000 -0.064721
 | 
				
			||||||
 | 
					v -0.051777 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.000000 -0.051777
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.088388 0.088388 -0.088388
 | 
				
			||||||
 | 
					v -0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v 0.051777 0.051777 -0.125000
 | 
				
			||||||
 | 
					v 0.088388 0.088389 -0.088388
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.000000 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.000000
 | 
				
			||||||
 | 
					v 0.125000 0.000000 0.000000
 | 
				
			||||||
 | 
					v -0.125000 0.000000 0.000000
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.000000
 | 
				
			||||||
 | 
					v 0.000000 -0.000000 -0.125000
 | 
				
			||||||
 | 
					v 0.000000 0.051777 -0.125000
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.187500 0.125000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.051777
 | 
				
			||||||
 | 
					v -0.125000 -0.187500 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.187500 0.125000
 | 
				
			||||||
 | 
					v 0.125000 -0.187500 0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.000000
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.000000
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.051777
 | 
				
			||||||
 | 
					v 0.125000 -0.187500 -0.051777
 | 
				
			||||||
 | 
					v 0.051777 -0.187500 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.051777
 | 
				
			||||||
 | 
					v -0.051777 -0.187500 -0.125000
 | 
				
			||||||
 | 
					v -0.125000 -0.187500 -0.051777
 | 
				
			||||||
 | 
					v 0.091145 -0.250000 0.037754
 | 
				
			||||||
 | 
					v 0.037754 -0.250000 0.091145
 | 
				
			||||||
 | 
					v -0.037754 -0.250000 0.091145
 | 
				
			||||||
 | 
					v -0.091145 -0.250000 0.037754
 | 
				
			||||||
 | 
					v -0.091145 -0.250000 -0.037754
 | 
				
			||||||
 | 
					v -0.037754 -0.250000 -0.091145
 | 
				
			||||||
 | 
					v 0.037754 -0.250000 -0.091145
 | 
				
			||||||
 | 
					v 0.091145 -0.250000 -0.037754
 | 
				
			||||||
 | 
					v 0.037754 -0.562500 0.091145
 | 
				
			||||||
 | 
					v -0.037754 -0.562500 0.091145
 | 
				
			||||||
 | 
					v -0.037754 -0.562500 -0.091145
 | 
				
			||||||
 | 
					v 0.037754 -0.562500 -0.091145
 | 
				
			||||||
 | 
					v 0.091145 -0.562500 0.037754
 | 
				
			||||||
 | 
					v 0.091145 -0.562500 -0.037754
 | 
				
			||||||
 | 
					v -0.091145 -0.562500 0.037754
 | 
				
			||||||
 | 
					v -0.091145 -0.562500 -0.037754
 | 
				
			||||||
 | 
					vt 0.3934 0.4559
 | 
				
			||||||
 | 
					vt 0.4559 0.3934
 | 
				
			||||||
 | 
					vt 0.5441 0.3934
 | 
				
			||||||
 | 
					vt 0.6066 0.4559
 | 
				
			||||||
 | 
					vt 0.6066 0.5441
 | 
				
			||||||
 | 
					vt 0.5441 0.6066
 | 
				
			||||||
 | 
					vt 0.4559 0.6066
 | 
				
			||||||
 | 
					vt 0.3934 0.5441
 | 
				
			||||||
 | 
					vt 0.2500 0.2500
 | 
				
			||||||
 | 
					vt 0.1250 0.2500
 | 
				
			||||||
 | 
					vt 0.1250 -0.0625
 | 
				
			||||||
 | 
					vt 0.2500 -0.0625
 | 
				
			||||||
 | 
					vt 1.0000 0.2500
 | 
				
			||||||
 | 
					vt 0.8750 0.2500
 | 
				
			||||||
 | 
					vt 0.8750 -0.0625
 | 
				
			||||||
 | 
					vt 1.0000 -0.0625
 | 
				
			||||||
 | 
					vt 0.7500 0.2500
 | 
				
			||||||
 | 
					vt 0.6250 0.2500
 | 
				
			||||||
 | 
					vt 0.6250 -0.0625
 | 
				
			||||||
 | 
					vt 0.7500 -0.0625
 | 
				
			||||||
 | 
					vt 0.5000 0.2500
 | 
				
			||||||
 | 
					vt 0.5000 -0.0625
 | 
				
			||||||
 | 
					vt 0.3750 0.2500
 | 
				
			||||||
 | 
					vt 0.3750 -0.0625
 | 
				
			||||||
 | 
					vt 0.0000 0.2500
 | 
				
			||||||
 | 
					vt 0.0000 -0.0625
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2656
 | 
				
			||||||
 | 
					vt 0.1250 0.2344
 | 
				
			||||||
 | 
					vt 0.1875 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.3125 0.2344
 | 
				
			||||||
 | 
					vt 0.3125 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.2656
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2344
 | 
				
			||||||
 | 
					vt 0.0625 0.2344
 | 
				
			||||||
 | 
					vt 0.0625 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2656
 | 
				
			||||||
 | 
					vt -0.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.0625 0.2969
 | 
				
			||||||
 | 
					vt 0.9375 0.3125
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.9375 0.2188
 | 
				
			||||||
 | 
					vt 1.0000 0.2344
 | 
				
			||||||
 | 
					vt 1.0000 0.2656
 | 
				
			||||||
 | 
					vt 1.0000 0.2969
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.0156
 | 
				
			||||||
 | 
					vt 1.0000 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.2344
 | 
				
			||||||
 | 
					vt 0.8750 0.0156
 | 
				
			||||||
 | 
					vt 0.1250 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.0156
 | 
				
			||||||
 | 
					vt 0.2500 0.2344
 | 
				
			||||||
 | 
					vt 0.1250 0.2031
 | 
				
			||||||
 | 
					vt 0.8750 0.5156
 | 
				
			||||||
 | 
					vt 0.7500 0.5156
 | 
				
			||||||
 | 
					vt 0.8750 0.2656
 | 
				
			||||||
 | 
					vt 0.8750 0.2969
 | 
				
			||||||
 | 
					vt 1.0000 0.5156
 | 
				
			||||||
 | 
					vt 1.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.2500 0.2969
 | 
				
			||||||
 | 
					vt 0.2500 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.5156
 | 
				
			||||||
 | 
					vt 0.2500 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.5156
 | 
				
			||||||
 | 
					vt 0.6250 0.2344
 | 
				
			||||||
 | 
					vt 0.6875 0.2188
 | 
				
			||||||
 | 
					vt 0.1250 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.5156
 | 
				
			||||||
 | 
					vt -0.0000 0.3281
 | 
				
			||||||
 | 
					vt 0.1250 0.3281
 | 
				
			||||||
 | 
					vt 0.5000 0.5156
 | 
				
			||||||
 | 
					vt 0.5000 0.2344
 | 
				
			||||||
 | 
					vt 0.8125 0.6094
 | 
				
			||||||
 | 
					vt 0.8125 0.5469
 | 
				
			||||||
 | 
					vt 0.8750 0.5469
 | 
				
			||||||
 | 
					vt 0.8750 0.6094
 | 
				
			||||||
 | 
					vt 0.9375 0.5469
 | 
				
			||||||
 | 
					vt 0.9375 0.6094
 | 
				
			||||||
 | 
					vt 1.0000 0.5469
 | 
				
			||||||
 | 
					vt 1.0000 0.6094
 | 
				
			||||||
 | 
					vt 0.5000 0.6094
 | 
				
			||||||
 | 
					vt 0.5000 0.5469
 | 
				
			||||||
 | 
					vt 0.5625 0.5469
 | 
				
			||||||
 | 
					vt 0.5625 0.6094
 | 
				
			||||||
 | 
					vt 0.6250 0.5469
 | 
				
			||||||
 | 
					vt 0.6250 0.6094
 | 
				
			||||||
 | 
					vt 0.6875 0.5469
 | 
				
			||||||
 | 
					vt 0.6875 0.6094
 | 
				
			||||||
 | 
					vt 0.7500 0.5469
 | 
				
			||||||
 | 
					vt 0.7500 0.6094
 | 
				
			||||||
 | 
					vt 0.5000 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2656
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.3750 0.0156
 | 
				
			||||||
 | 
					vt 0.5000 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.2344
 | 
				
			||||||
 | 
					vt 0.7500 0.2656
 | 
				
			||||||
 | 
					vt 0.6250 0.2656
 | 
				
			||||||
 | 
					vt 0.6250 0.0156
 | 
				
			||||||
 | 
					vt 0.7500 0.0156
 | 
				
			||||||
 | 
					vt 0.5625 0.2656
 | 
				
			||||||
 | 
					vt 0.8125 0.2344
 | 
				
			||||||
 | 
					vt 0.3125 0.2344
 | 
				
			||||||
 | 
					vt -0.0000 0.2031
 | 
				
			||||||
 | 
					vt -0.0000 0.0156
 | 
				
			||||||
 | 
					vt 0.3750 0.2344
 | 
				
			||||||
 | 
					vt 0.4375 0.2188
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.7071 -0.0000 -0.7071
 | 
				
			||||||
 | 
					vn -0.7071 0.0000 0.7071
 | 
				
			||||||
 | 
					vn 0.0000 -0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 0.7071 -0.0000 -0.7071
 | 
				
			||||||
 | 
					vn 0.7071 0.0000 0.7071
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn -0.6387 0.5441 -0.5441
 | 
				
			||||||
 | 
					vn -0.3251 0.3251 -0.8881
 | 
				
			||||||
 | 
					vn -0.3002 0.3002 -0.9054
 | 
				
			||||||
 | 
					vn 0.3827 0.0000 -0.9239
 | 
				
			||||||
 | 
					vn 0.3002 0.3002 -0.9054
 | 
				
			||||||
 | 
					vn 0.8881 0.3251 -0.3251
 | 
				
			||||||
 | 
					vn 0.9406 -0.1343 -0.3119
 | 
				
			||||||
 | 
					vn 0.9239 0.0000 -0.3827
 | 
				
			||||||
 | 
					vn 0.8171 0.5712 -0.0783
 | 
				
			||||||
 | 
					vn -0.8994 0.3725 -0.2288
 | 
				
			||||||
 | 
					vn -0.0000 0.3827 -0.9239
 | 
				
			||||||
 | 
					vn 0.1343 0.9406 -0.3119
 | 
				
			||||||
 | 
					vn 0.5441 0.6386 -0.5441
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2970 -0.7174 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2972 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					vn -0.5743 -0.5789 0.5789
 | 
				
			||||||
 | 
					vn -0.9878 -0.1101 0.1101
 | 
				
			||||||
 | 
					vn -0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn 0.3827 0.0000 0.9239
 | 
				
			||||||
 | 
					vn 0.9239 0.0000 0.3827
 | 
				
			||||||
 | 
					vn 0.9878 -0.1101 0.1101
 | 
				
			||||||
 | 
					vn 0.5743 -0.5789 0.5789
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn 0.7173 -0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.7173 0.6302 0.2971
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.2971 -0.6302 0.7173
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 0.2972
 | 
				
			||||||
 | 
					vn -0.7174 -0.6302 0.2970
 | 
				
			||||||
 | 
					vn -0.7173 0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.7173 -0.6302 -0.2971
 | 
				
			||||||
 | 
					vn -0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn -0.2970 -0.6302 -0.7174
 | 
				
			||||||
 | 
					vn 0.2971 0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.2971 -0.6302 -0.7173
 | 
				
			||||||
 | 
					vn 0.7172 0.6302 -0.2973
 | 
				
			||||||
 | 
					vn 0.7174 -0.6302 -0.2969
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_pipe
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 87/1/1 83/2/1 84/3/1 89/4/1 90/5/1 85/6/1 86/7/1 88/8/1
 | 
				
			||||||
 | 
					f 82/9/2 75/10/2 87/11/2 88/12/2
 | 
				
			||||||
 | 
					f 76/13/3 77/14/3 84/15/3 83/16/3
 | 
				
			||||||
 | 
					f 78/17/4 79/18/4 90/19/4 89/20/4
 | 
				
			||||||
 | 
					f 79/18/5 80/21/5 85/22/5 90/19/5
 | 
				
			||||||
 | 
					f 77/14/6 78/17/6 89/20/6 84/15/6
 | 
				
			||||||
 | 
					f 80/21/7 81/23/7 86/24/7 85/22/7
 | 
				
			||||||
 | 
					f 81/23/8 82/9/8 88/12/8 86/24/8
 | 
				
			||||||
 | 
					f 75/10/9 76/25/9 83/26/9 87/11/9
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_No.004_pipe_pipeworks_pipe_plain.png
 | 
				
			||||||
 | 
					f 1/27/3 2/28/3 3/29/3 4/30/3 5/31/3 6/32/3 7/33/3 8/34/3
 | 
				
			||||||
 | 
					f 9/35/7 10/36/7 11/37/7 12/38/7 13/39/7 14/40/7 15/41/7 16/42/7
 | 
				
			||||||
 | 
					f 17/43/10 18/44/10 19/45/10 20/46/10 21/47/10 22/48/10 23/49/10 24/50/10
 | 
				
			||||||
 | 
					f 25/51/1 26/52/1 27/53/1 28/54/1 29/55/1 30/56/1 31/57/1 32/58/1
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 33/59/11 34/60/12 35/61/13 36/62/14 37/63/15
 | 
				
			||||||
 | 
					f 38/64/16 39/65/17 40/66/18 41/67/19 42/68/20
 | 
				
			||||||
 | 
					f 41/67/19 43/69/21 44/70/2 42/68/20
 | 
				
			||||||
 | 
					f 35/71/13 34/72/12 45/73/4 46/74/22
 | 
				
			||||||
 | 
					f 39/75/17 38/76/16 47/77/7 48/78/23
 | 
				
			||||||
 | 
					f 37/79/15 48/78/23 47/77/7 33/80/11
 | 
				
			||||||
 | 
					f 36/81/14 49/82/24 50/83/25 40/84/18 39/85/17 48/86/23 37/87/15
 | 
				
			||||||
 | 
					f 10/88/26 1/89/27 8/90/28 11/91/29
 | 
				
			||||||
 | 
					f 9/92/30 2/93/31 1/89/27 10/88/26
 | 
				
			||||||
 | 
					f 11/91/29 8/90/28 7/94/32 12/95/33
 | 
				
			||||||
 | 
					f 12/96/33 7/97/32 6/98/34 13/99/35
 | 
				
			||||||
 | 
					f 13/99/35 6/98/34 5/100/36 14/101/37
 | 
				
			||||||
 | 
					f 14/101/37 5/100/36 4/102/38 15/103/39
 | 
				
			||||||
 | 
					f 15/103/39 4/102/38 3/104/40 16/105/41
 | 
				
			||||||
 | 
					f 16/105/41 3/104/40 2/93/31 9/92/30
 | 
				
			||||||
 | 
					f 51/106/42 52/107/43 53/108/44 54/109/45
 | 
				
			||||||
 | 
					f 55/110/46 56/111/47 57/112/48 58/113/49
 | 
				
			||||||
 | 
					f 59/114/50 60/115/51 46/74/22 45/73/4 61/116/4 53/117/44
 | 
				
			||||||
 | 
					f 62/118/52 59/114/50 53/117/44 52/119/43
 | 
				
			||||||
 | 
					f 57/120/48 63/121/2 44/70/2 43/122/21 64/123/53 65/124/54
 | 
				
			||||||
 | 
					f 60/115/51 66/125/55 49/126/24 36/127/14 35/71/13 46/74/22
 | 
				
			||||||
 | 
					f 67/128/56 62/129/52 52/130/43 58/131/49
 | 
				
			||||||
 | 
					f 66/125/55 68/132/57 50/133/25 49/126/24
 | 
				
			||||||
 | 
					f 25/134/58 18/135/59 17/136/60 26/137/61
 | 
				
			||||||
 | 
					f 26/137/61 17/136/60 24/138/62 27/139/63
 | 
				
			||||||
 | 
					f 27/139/63 24/138/62 23/140/64 28/141/65
 | 
				
			||||||
 | 
					f 28/142/65 23/143/64 22/144/66 29/145/67
 | 
				
			||||||
 | 
					f 29/145/67 22/144/66 21/146/68 30/147/69
 | 
				
			||||||
 | 
					f 30/147/69 21/146/68 20/148/70 31/149/71
 | 
				
			||||||
 | 
					f 31/149/71 20/148/70 19/150/72 32/151/73
 | 
				
			||||||
 | 
					f 32/151/73 19/150/72 18/135/59 25/134/58
 | 
				
			||||||
 | 
					f 38/152/16 42/153/20 69/154/20 70/155/20 71/156/16
 | 
				
			||||||
 | 
					f 72/157/12 34/158/12 33/159/11 73/160/11 74/161/12
 | 
				
			||||||
 | 
					f 67/128/56 58/131/49 57/120/48 65/124/54
 | 
				
			||||||
 | 
					f 73/160/11 33/159/11 47/162/7 38/152/16 71/156/16
 | 
				
			||||||
 | 
					f 54/109/45 53/108/44 61/163/4 72/157/12 74/161/12
 | 
				
			||||||
 | 
					f 56/111/47 70/155/20 69/154/20 63/164/2 57/112/48
 | 
				
			||||||
 | 
					f 55/110/46 58/113/49 52/165/43 51/166/42
 | 
				
			||||||
 | 
					f 42/153/20 44/70/2 63/164/2 69/154/20
 | 
				
			||||||
 | 
					f 72/157/12 61/163/4 45/73/4 34/158/12
 | 
				
			||||||
 | 
					f 64/123/53 43/122/21 41/167/19 40/168/18 50/133/25 68/132/57
 | 
				
			||||||
							
								
								
									
										2507
									
								
								models/pipeworks_straight_pipe.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										194
									
								
								models/pipeworks_straight_pipe_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,194 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: ''
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cylinder.000_Cylinder.000_None
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.3438 0.8906
 | 
				
			||||||
 | 
					vt 0.2500 0.9844
 | 
				
			||||||
 | 
					vt 0.1250 0.9844
 | 
				
			||||||
 | 
					vt 0.0312 0.8906
 | 
				
			||||||
 | 
					vt 0.0312 0.7656
 | 
				
			||||||
 | 
					vt 0.1250 0.6719
 | 
				
			||||||
 | 
					vt 0.2500 0.6719
 | 
				
			||||||
 | 
					vt 0.3438 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.9844
 | 
				
			||||||
 | 
					vt 0.7188 0.8906
 | 
				
			||||||
 | 
					vt 0.7188 0.7656
 | 
				
			||||||
 | 
					vt 0.6250 0.6719
 | 
				
			||||||
 | 
					vt 0.5000 0.6719
 | 
				
			||||||
 | 
					vt 0.4062 0.7656
 | 
				
			||||||
 | 
					vt 0.4062 0.8906
 | 
				
			||||||
 | 
					vt 0.5000 0.9844
 | 
				
			||||||
 | 
					vt 0.8125 0.5938
 | 
				
			||||||
 | 
					vt 0.8125 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5625
 | 
				
			||||||
 | 
					vt 0.8750 0.5938
 | 
				
			||||||
 | 
					vt 0.9375 0.5625
 | 
				
			||||||
 | 
					vt 0.9375 0.5938
 | 
				
			||||||
 | 
					vt 1.0000 0.5625
 | 
				
			||||||
 | 
					vt 1.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5625
 | 
				
			||||||
 | 
					vt 0.5625 0.5938
 | 
				
			||||||
 | 
					vt 0.6250 0.5625
 | 
				
			||||||
 | 
					vt 0.6250 0.5938
 | 
				
			||||||
 | 
					vt 0.6875 0.5625
 | 
				
			||||||
 | 
					vt 0.6875 0.5938
 | 
				
			||||||
 | 
					vt 0.7500 0.5625
 | 
				
			||||||
 | 
					vt 0.7500 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5938
 | 
				
			||||||
 | 
					vt 0.3750 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5625
 | 
				
			||||||
 | 
					vt 0.4375 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5938
 | 
				
			||||||
 | 
					vt 0.3125 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5625
 | 
				
			||||||
 | 
					vt 0.5000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5938
 | 
				
			||||||
 | 
					vt 0.0000 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5625
 | 
				
			||||||
 | 
					vt 0.0625 0.5938
 | 
				
			||||||
 | 
					vt 0.1250 0.5625
 | 
				
			||||||
 | 
					vt 0.1250 0.5938
 | 
				
			||||||
 | 
					vt 0.1875 0.5625
 | 
				
			||||||
 | 
					vt 0.1875 0.5938
 | 
				
			||||||
 | 
					vt 0.2500 0.5625
 | 
				
			||||||
 | 
					vt 0.2500 0.5938
 | 
				
			||||||
 | 
					vt 1.0624 0.5135
 | 
				
			||||||
 | 
					vt 0.9370 0.5135
 | 
				
			||||||
 | 
					vt 0.9370 0.0130
 | 
				
			||||||
 | 
					vt 1.0624 0.0130
 | 
				
			||||||
 | 
					vt 0.6862 0.5135
 | 
				
			||||||
 | 
					vt 0.5608 0.5135
 | 
				
			||||||
 | 
					vt 0.5608 0.0130
 | 
				
			||||||
 | 
					vt 0.6862 0.0130
 | 
				
			||||||
 | 
					vt 0.8116 0.5135
 | 
				
			||||||
 | 
					vt 0.8116 0.0130
 | 
				
			||||||
 | 
					vt 1.1878 0.0130
 | 
				
			||||||
 | 
					vt 1.1878 0.5135
 | 
				
			||||||
 | 
					vt 0.3100 0.0130
 | 
				
			||||||
 | 
					vt 0.4354 0.0130
 | 
				
			||||||
 | 
					vt 0.4354 0.5135
 | 
				
			||||||
 | 
					vt 0.3100 0.5135
 | 
				
			||||||
 | 
					vt 0.1846 0.0130
 | 
				
			||||||
 | 
					vt 0.1846 0.5135
 | 
				
			||||||
 | 
					vn -0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 -0.7173 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 -0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn -0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn -0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 0.6302
 | 
				
			||||||
 | 
					vn 0.2971 0.7173 -0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 0.6302
 | 
				
			||||||
 | 
					vn 0.7173 0.2971 -0.6302
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 -0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 -0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					g Cylinder.000_Cylinder.000_None_Cylinder.000_Cylinder.000_None_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1 5/5/1 6/6/1 7/7/1 8/8/1
 | 
				
			||||||
 | 
					f 9/9/2 10/10/2 11/11/2 12/12/2 13/13/2 14/14/2 15/15/2 16/16/2
 | 
				
			||||||
 | 
					f 17/17/1 18/18/1 19/19/1 20/20/1 21/21/1 22/22/1 23/23/1 24/24/1
 | 
				
			||||||
 | 
					f 25/25/2 26/26/2 27/27/2 28/28/2 29/29/2 30/30/2 31/31/2 32/32/2
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 9/33/3 2/34/4 1/35/5 10/36/6
 | 
				
			||||||
 | 
					f 10/36/6 1/35/5 8/37/7 11/38/8
 | 
				
			||||||
 | 
					f 11/38/8 8/37/7 7/39/9 12/40/10
 | 
				
			||||||
 | 
					f 12/41/10 7/42/9 6/43/11 13/44/12
 | 
				
			||||||
 | 
					f 13/44/12 6/43/11 5/45/13 14/46/14
 | 
				
			||||||
 | 
					f 14/46/14 5/45/13 4/47/15 15/48/16
 | 
				
			||||||
 | 
					f 15/48/16 4/47/15 3/49/17 16/50/18
 | 
				
			||||||
 | 
					f 16/50/18 3/49/17 2/34/4 9/33/3
 | 
				
			||||||
 | 
					f 26/51/6 17/52/5 24/53/7 27/54/8
 | 
				
			||||||
 | 
					f 25/55/3 18/56/4 17/52/5 26/51/6
 | 
				
			||||||
 | 
					f 27/54/8 24/53/7 23/57/9 28/58/10
 | 
				
			||||||
 | 
					f 28/59/10 23/60/9 22/61/11 29/62/12
 | 
				
			||||||
 | 
					f 29/62/12 22/61/11 21/63/13 30/64/14
 | 
				
			||||||
 | 
					f 30/64/14 21/63/13 20/65/15 31/66/16
 | 
				
			||||||
 | 
					f 31/66/16 20/65/15 19/67/17 32/68/18
 | 
				
			||||||
 | 
					f 32/68/18 19/67/17 18/56/4 25/55/3
 | 
				
			||||||
 | 
					f 33/69/19 34/70/20 35/71/20 36/72/19
 | 
				
			||||||
 | 
					f 37/73/21 38/74/22 39/75/22 40/76/21
 | 
				
			||||||
 | 
					f 34/70/20 41/77/23 42/78/23 35/71/20
 | 
				
			||||||
 | 
					f 33/69/19 36/72/19 43/79/24 44/80/24
 | 
				
			||||||
 | 
					f 45/81/25 46/82/26 47/83/26 48/84/25
 | 
				
			||||||
 | 
					f 43/85/24 45/81/25 48/84/25 44/86/24
 | 
				
			||||||
 | 
					f 37/73/21 40/76/21 42/78/23 41/77/23
 | 
				
			||||||
 | 
					f 46/82/26 39/75/22 38/74/22 47/83/26
 | 
				
			||||||
							
								
								
									
										286
									
								
								models/pipeworks_valve_off_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,286 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-valve-off.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cube.003_Cube.003_None
 | 
				
			||||||
 | 
					v 0.312500 0.343750 0.062500
 | 
				
			||||||
 | 
					v -0.093750 0.343750 0.062500
 | 
				
			||||||
 | 
					v -0.093750 0.281250 0.062500
 | 
				
			||||||
 | 
					v 0.312500 0.281250 0.062500
 | 
				
			||||||
 | 
					v -0.093750 0.343750 -0.062500
 | 
				
			||||||
 | 
					v -0.093750 0.281250 -0.062500
 | 
				
			||||||
 | 
					v 0.312500 0.343750 -0.062500
 | 
				
			||||||
 | 
					v 0.312500 0.281250 -0.062500
 | 
				
			||||||
 | 
					v 0.031250 0.281250 0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.281250 0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.250000 0.031250
 | 
				
			||||||
 | 
					v 0.031250 0.250000 0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.281250 -0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.250000 -0.031250
 | 
				
			||||||
 | 
					v 0.031250 0.281250 -0.031250
 | 
				
			||||||
 | 
					v 0.031250 0.250000 -0.031250
 | 
				
			||||||
 | 
					v 0.250000 0.250000 0.250000
 | 
				
			||||||
 | 
					v -0.250000 0.250000 0.250000
 | 
				
			||||||
 | 
					v -0.250000 -0.250000 0.250000
 | 
				
			||||||
 | 
					v 0.250000 -0.250000 0.250000
 | 
				
			||||||
 | 
					v -0.250000 0.250000 -0.250000
 | 
				
			||||||
 | 
					v -0.250000 -0.250000 -0.250000
 | 
				
			||||||
 | 
					v 0.250000 0.250000 -0.250000
 | 
				
			||||||
 | 
					v 0.250000 -0.250000 -0.250000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					vt 0.2656 0.2344
 | 
				
			||||||
 | 
					vt 0.4688 0.2344
 | 
				
			||||||
 | 
					vt 0.4688 0.2656
 | 
				
			||||||
 | 
					vt 0.2656 0.2656
 | 
				
			||||||
 | 
					vt 0.2656 0.1875
 | 
				
			||||||
 | 
					vt 0.3281 0.1875
 | 
				
			||||||
 | 
					vt 0.3281 0.2188
 | 
				
			||||||
 | 
					vt 0.2656 0.2188
 | 
				
			||||||
 | 
					vt 0.4688 0.3125
 | 
				
			||||||
 | 
					vt 0.2656 0.3125
 | 
				
			||||||
 | 
					vt 0.2656 0.2812
 | 
				
			||||||
 | 
					vt 0.4688 0.2812
 | 
				
			||||||
 | 
					vt 0.4062 0.2188
 | 
				
			||||||
 | 
					vt 0.3438 0.2188
 | 
				
			||||||
 | 
					vt 0.3438 0.1875
 | 
				
			||||||
 | 
					vt 0.4062 0.1875
 | 
				
			||||||
 | 
					vt 0.4688 0.4688
 | 
				
			||||||
 | 
					vt 0.2656 0.4688
 | 
				
			||||||
 | 
					vt 0.2656 0.4062
 | 
				
			||||||
 | 
					vt 0.4688 0.4062
 | 
				
			||||||
 | 
					vt 0.4688 0.3906
 | 
				
			||||||
 | 
					vt 0.2656 0.3906
 | 
				
			||||||
 | 
					vt 0.2656 0.3281
 | 
				
			||||||
 | 
					vt 0.4688 0.3281
 | 
				
			||||||
 | 
					vt 0.0391 0.2031
 | 
				
			||||||
 | 
					vt 0.0078 0.2031
 | 
				
			||||||
 | 
					vt 0.0078 0.1875
 | 
				
			||||||
 | 
					vt 0.0391 0.1875
 | 
				
			||||||
 | 
					vt 0.0859 0.2031
 | 
				
			||||||
 | 
					vt 0.0547 0.2031
 | 
				
			||||||
 | 
					vt 0.0547 0.1875
 | 
				
			||||||
 | 
					vt 0.0859 0.1875
 | 
				
			||||||
 | 
					vt 0.1484 0.1875
 | 
				
			||||||
 | 
					vt 0.1797 0.1875
 | 
				
			||||||
 | 
					vt 0.1797 0.2031
 | 
				
			||||||
 | 
					vt 0.1484 0.2031
 | 
				
			||||||
 | 
					vt 0.1328 0.2031
 | 
				
			||||||
 | 
					vt 0.1016 0.2031
 | 
				
			||||||
 | 
					vt 0.1016 0.1875
 | 
				
			||||||
 | 
					vt 0.1328 0.1875
 | 
				
			||||||
 | 
					vt 0.5156 0.4844
 | 
				
			||||||
 | 
					vt 0.5156 0.7344
 | 
				
			||||||
 | 
					vt 0.2656 0.7344
 | 
				
			||||||
 | 
					vt 0.2656 0.4844
 | 
				
			||||||
 | 
					vt 0.0000 0.4688
 | 
				
			||||||
 | 
					vt 0.0000 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.4688
 | 
				
			||||||
 | 
					vt 0.5156 1.0000
 | 
				
			||||||
 | 
					vt 0.2656 1.0000
 | 
				
			||||||
 | 
					vt 0.2656 0.7500
 | 
				
			||||||
 | 
					vt 0.5156 0.7500
 | 
				
			||||||
 | 
					vt 0.2500 0.7344
 | 
				
			||||||
 | 
					vt 0.0000 0.7344
 | 
				
			||||||
 | 
					vt 0.0000 0.4844
 | 
				
			||||||
 | 
					vt 0.2500 0.4844
 | 
				
			||||||
 | 
					vt 0.7812 1.0000
 | 
				
			||||||
 | 
					vt 0.5312 1.0000
 | 
				
			||||||
 | 
					vt 0.5312 0.7500
 | 
				
			||||||
 | 
					vt 0.7812 0.7500
 | 
				
			||||||
 | 
					vt 0.0008 0.7500
 | 
				
			||||||
 | 
					vt 0.2502 0.7500
 | 
				
			||||||
 | 
					vt 0.2502 0.9994
 | 
				
			||||||
 | 
					vt 0.0008 0.9994
 | 
				
			||||||
 | 
					vt 0.8516 0.4453
 | 
				
			||||||
 | 
					vt 0.8047 0.4922
 | 
				
			||||||
 | 
					vt 0.7422 0.4922
 | 
				
			||||||
 | 
					vt 0.6953 0.4453
 | 
				
			||||||
 | 
					vt 0.6953 0.3828
 | 
				
			||||||
 | 
					vt 0.7422 0.3359
 | 
				
			||||||
 | 
					vt 0.8047 0.3359
 | 
				
			||||||
 | 
					vt 0.8516 0.3828
 | 
				
			||||||
 | 
					vt 0.6172 0.4922
 | 
				
			||||||
 | 
					vt 0.6641 0.4453
 | 
				
			||||||
 | 
					vt 0.6641 0.3828
 | 
				
			||||||
 | 
					vt 0.6172 0.3359
 | 
				
			||||||
 | 
					vt 0.5547 0.3359
 | 
				
			||||||
 | 
					vt 0.5078 0.3828
 | 
				
			||||||
 | 
					vt 0.5078 0.4453
 | 
				
			||||||
 | 
					vt 0.5547 0.4922
 | 
				
			||||||
 | 
					vt 0.6641 0.4453
 | 
				
			||||||
 | 
					vt 0.6172 0.4922
 | 
				
			||||||
 | 
					vt 0.5547 0.4922
 | 
				
			||||||
 | 
					vt 0.5078 0.4453
 | 
				
			||||||
 | 
					vt 0.5078 0.3828
 | 
				
			||||||
 | 
					vt 0.5547 0.3359
 | 
				
			||||||
 | 
					vt 0.6172 0.3359
 | 
				
			||||||
 | 
					vt 0.6641 0.3828
 | 
				
			||||||
 | 
					vt 0.8047 0.4922
 | 
				
			||||||
 | 
					vt 0.8516 0.4453
 | 
				
			||||||
 | 
					vt 0.8516 0.3828
 | 
				
			||||||
 | 
					vt 0.8047 0.3359
 | 
				
			||||||
 | 
					vt 0.7422 0.3359
 | 
				
			||||||
 | 
					vt 0.6953 0.3828
 | 
				
			||||||
 | 
					vt 0.6953 0.4453
 | 
				
			||||||
 | 
					vt 0.7422 0.4922
 | 
				
			||||||
 | 
					vt 0.8984 0.2969
 | 
				
			||||||
 | 
					vt 0.8984 0.2812
 | 
				
			||||||
 | 
					vt 0.9297 0.2812
 | 
				
			||||||
 | 
					vt 0.9297 0.2969
 | 
				
			||||||
 | 
					vt 0.9609 0.2812
 | 
				
			||||||
 | 
					vt 0.9609 0.2969
 | 
				
			||||||
 | 
					vt 0.9922 0.2812
 | 
				
			||||||
 | 
					vt 0.9922 0.2969
 | 
				
			||||||
 | 
					vt 0.7422 0.2969
 | 
				
			||||||
 | 
					vt 0.7422 0.2812
 | 
				
			||||||
 | 
					vt 0.7734 0.2812
 | 
				
			||||||
 | 
					vt 0.7734 0.2969
 | 
				
			||||||
 | 
					vt 0.8047 0.2812
 | 
				
			||||||
 | 
					vt 0.8047 0.2969
 | 
				
			||||||
 | 
					vt 0.8359 0.2812
 | 
				
			||||||
 | 
					vt 0.8359 0.2969
 | 
				
			||||||
 | 
					vt 0.8672 0.2812
 | 
				
			||||||
 | 
					vt 0.8672 0.2969
 | 
				
			||||||
 | 
					vt 0.6797 0.2969
 | 
				
			||||||
 | 
					vt 0.6797 0.2812
 | 
				
			||||||
 | 
					vt 0.7109 0.2812
 | 
				
			||||||
 | 
					vt 0.7109 0.2969
 | 
				
			||||||
 | 
					vt 0.6484 0.2969
 | 
				
			||||||
 | 
					vt 0.6484 0.2812
 | 
				
			||||||
 | 
					vt 0.7422 0.2812
 | 
				
			||||||
 | 
					vt 0.7422 0.2969
 | 
				
			||||||
 | 
					vt 0.4922 0.2969
 | 
				
			||||||
 | 
					vt 0.4922 0.2812
 | 
				
			||||||
 | 
					vt 0.5234 0.2812
 | 
				
			||||||
 | 
					vt 0.5234 0.2969
 | 
				
			||||||
 | 
					vt 0.5547 0.2812
 | 
				
			||||||
 | 
					vt 0.5547 0.2969
 | 
				
			||||||
 | 
					vt 0.5859 0.2812
 | 
				
			||||||
 | 
					vt 0.5859 0.2969
 | 
				
			||||||
 | 
					vt 0.6172 0.2812
 | 
				
			||||||
 | 
					vt 0.6172 0.2969
 | 
				
			||||||
 | 
					vt 0.4922 0.1328
 | 
				
			||||||
 | 
					vt 0.4922 0.1016
 | 
				
			||||||
 | 
					vt 0.9922 0.1016
 | 
				
			||||||
 | 
					vt 0.9922 0.1328
 | 
				
			||||||
 | 
					vt 0.4922 0.1953
 | 
				
			||||||
 | 
					vt 0.4922 0.1641
 | 
				
			||||||
 | 
					vt 0.9922 0.1641
 | 
				
			||||||
 | 
					vt 0.9922 0.1953
 | 
				
			||||||
 | 
					vt 0.4922 0.2266
 | 
				
			||||||
 | 
					vt 0.9922 0.2266
 | 
				
			||||||
 | 
					vt 0.9922 0.2578
 | 
				
			||||||
 | 
					vt 0.4922 0.2578
 | 
				
			||||||
 | 
					vt 0.9922 0.0391
 | 
				
			||||||
 | 
					vt 0.9922 0.0703
 | 
				
			||||||
 | 
					vt 0.4922 0.0703
 | 
				
			||||||
 | 
					vt 0.4922 0.0391
 | 
				
			||||||
 | 
					vt 0.9922 0.0078
 | 
				
			||||||
 | 
					vt 0.4922 0.0078
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					g Cube.003_Cube.003_None_Cube.003_Cube.003_None_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1
 | 
				
			||||||
 | 
					f 2/5/2 5/6/2 6/7/2 3/8/2
 | 
				
			||||||
 | 
					f 5/9/3 7/10/3 8/11/3 6/12/3
 | 
				
			||||||
 | 
					f 7/13/4 1/14/4 4/15/4 8/16/4
 | 
				
			||||||
 | 
					f 4/17/5 3/18/5 6/19/5 8/20/5
 | 
				
			||||||
 | 
					f 7/21/6 5/22/6 2/23/6 1/24/6
 | 
				
			||||||
 | 
					f 9/25/1 10/26/1 11/27/1 12/28/1
 | 
				
			||||||
 | 
					f 10/29/2 13/30/2 14/31/2 11/32/2
 | 
				
			||||||
 | 
					f 13/33/3 15/34/3 16/35/3 14/36/3
 | 
				
			||||||
 | 
					f 15/37/4 9/38/4 12/39/4 16/40/4
 | 
				
			||||||
 | 
					f 17/41/1 18/42/1 19/43/1 20/44/1
 | 
				
			||||||
 | 
					f 18/45/2 21/46/2 22/47/2 19/48/2
 | 
				
			||||||
 | 
					f 21/49/3 23/50/3 24/51/3 22/52/3
 | 
				
			||||||
 | 
					f 23/53/4 17/54/4 20/55/4 24/56/4
 | 
				
			||||||
 | 
					f 20/57/5 19/58/5 22/59/5 24/60/5
 | 
				
			||||||
 | 
					f 23/61/6 21/62/6 18/63/6 17/64/6
 | 
				
			||||||
 | 
					f 28/65/3 26/66/3 40/67/3 38/68/3 36/69/3 34/70/3 32/71/3 30/72/3
 | 
				
			||||||
 | 
					f 25/73/1 27/74/1 29/75/1 31/76/1 33/77/1 35/78/1 37/79/1 39/80/1
 | 
				
			||||||
 | 
					f 60/81/3 58/82/3 72/83/3 70/84/3 68/85/3 66/86/3 64/87/3 62/88/3
 | 
				
			||||||
 | 
					f 57/89/1 59/90/1 61/91/1 63/92/1 65/93/1 67/94/1 69/95/1 71/96/1
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 25/97/7 26/98/7 28/99/8 27/100/8
 | 
				
			||||||
 | 
					f 27/100/8 28/99/8 30/101/9 29/102/9
 | 
				
			||||||
 | 
					f 29/102/9 30/101/9 32/103/10 31/104/10
 | 
				
			||||||
 | 
					f 31/105/10 32/106/10 34/107/11 33/108/11
 | 
				
			||||||
 | 
					f 33/108/11 34/107/11 36/109/12 35/110/12
 | 
				
			||||||
 | 
					f 35/110/12 36/109/12 38/111/13 37/112/13
 | 
				
			||||||
 | 
					f 37/112/13 38/111/13 40/113/14 39/114/14
 | 
				
			||||||
 | 
					f 39/114/14 40/113/14 26/98/7 25/97/7
 | 
				
			||||||
 | 
					f 59/115/8 60/116/8 62/117/9 61/118/9
 | 
				
			||||||
 | 
					f 57/119/7 58/120/7 60/116/8 59/115/8
 | 
				
			||||||
 | 
					f 61/118/9 62/117/9 64/121/10 63/122/10
 | 
				
			||||||
 | 
					f 63/123/10 64/124/10 66/125/11 65/126/11
 | 
				
			||||||
 | 
					f 65/126/11 66/125/11 68/127/12 67/128/12
 | 
				
			||||||
 | 
					f 67/128/12 68/127/12 70/129/13 69/130/13
 | 
				
			||||||
 | 
					f 69/130/13 70/129/13 72/131/14 71/132/14
 | 
				
			||||||
 | 
					f 71/132/14 72/131/14 58/120/7 57/119/7
 | 
				
			||||||
 | 
					f 54/133/13 56/134/14 55/135/14 53/136/13
 | 
				
			||||||
 | 
					f 50/137/11 52/138/12 51/139/12 49/140/11
 | 
				
			||||||
 | 
					f 48/141/10 47/142/10 45/143/9 46/144/9
 | 
				
			||||||
 | 
					f 54/133/13 53/136/13 51/139/12 52/138/12
 | 
				
			||||||
 | 
					f 43/145/8 41/146/7 42/147/7 44/148/8
 | 
				
			||||||
 | 
					f 45/149/9 43/145/8 44/148/8 46/150/9
 | 
				
			||||||
 | 
					f 48/141/10 50/137/11 49/140/11 47/142/10
 | 
				
			||||||
 | 
					f 41/146/7 55/135/14 56/134/14 42/147/7
 | 
				
			||||||
							
								
								
									
										286
									
								
								models/pipeworks_valve_on_lowpoly.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,286 @@
 | 
				
			|||||||
 | 
					# Blender v2.78 (sub 0) OBJ File: 'pipe-valve-on.blend'
 | 
				
			||||||
 | 
					# www.blender.org
 | 
				
			||||||
 | 
					o Cube.003_Cube.003_None
 | 
				
			||||||
 | 
					v -0.062500 0.343750 0.312500
 | 
				
			||||||
 | 
					v -0.062500 0.343750 -0.093750
 | 
				
			||||||
 | 
					v -0.062500 0.281250 -0.093750
 | 
				
			||||||
 | 
					v -0.062500 0.281250 0.312500
 | 
				
			||||||
 | 
					v 0.062500 0.343750 -0.093750
 | 
				
			||||||
 | 
					v 0.062500 0.281250 -0.093750
 | 
				
			||||||
 | 
					v 0.062500 0.343750 0.312500
 | 
				
			||||||
 | 
					v 0.062500 0.281250 0.312500
 | 
				
			||||||
 | 
					v 0.031250 0.281250 0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.281250 0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.250000 0.031250
 | 
				
			||||||
 | 
					v 0.031250 0.250000 0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.281250 -0.031250
 | 
				
			||||||
 | 
					v -0.031250 0.250000 -0.031250
 | 
				
			||||||
 | 
					v 0.031250 0.281250 -0.031250
 | 
				
			||||||
 | 
					v 0.031250 0.250000 -0.031250
 | 
				
			||||||
 | 
					v 0.250000 0.250000 0.250000
 | 
				
			||||||
 | 
					v -0.250000 0.250000 0.250000
 | 
				
			||||||
 | 
					v -0.250000 -0.250000 0.250000
 | 
				
			||||||
 | 
					v 0.250000 -0.250000 0.250000
 | 
				
			||||||
 | 
					v -0.250000 0.250000 -0.250000
 | 
				
			||||||
 | 
					v -0.250000 -0.250000 -0.250000
 | 
				
			||||||
 | 
					v 0.250000 0.250000 -0.250000
 | 
				
			||||||
 | 
					v 0.250000 -0.250000 -0.250000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 -0.125000 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 -0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v 0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v 0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 0.468750
 | 
				
			||||||
 | 
					v -0.051777 0.125000 -0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 0.468750
 | 
				
			||||||
 | 
					v -0.125000 0.051777 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 -0.156250 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 -0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v 0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v 0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.468750
 | 
				
			||||||
 | 
					v -0.064721 0.156250 -0.500000
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.468750
 | 
				
			||||||
 | 
					v -0.156250 0.064721 -0.500000
 | 
				
			||||||
 | 
					vt 0.2656 0.2344
 | 
				
			||||||
 | 
					vt 0.4688 0.2344
 | 
				
			||||||
 | 
					vt 0.4688 0.2656
 | 
				
			||||||
 | 
					vt 0.2656 0.2656
 | 
				
			||||||
 | 
					vt 0.2656 0.1875
 | 
				
			||||||
 | 
					vt 0.3281 0.1875
 | 
				
			||||||
 | 
					vt 0.3281 0.2188
 | 
				
			||||||
 | 
					vt 0.2656 0.2188
 | 
				
			||||||
 | 
					vt 0.4688 0.3125
 | 
				
			||||||
 | 
					vt 0.2656 0.3125
 | 
				
			||||||
 | 
					vt 0.2656 0.2812
 | 
				
			||||||
 | 
					vt 0.4688 0.2812
 | 
				
			||||||
 | 
					vt 0.4062 0.2188
 | 
				
			||||||
 | 
					vt 0.3438 0.2188
 | 
				
			||||||
 | 
					vt 0.3438 0.1875
 | 
				
			||||||
 | 
					vt 0.4062 0.1875
 | 
				
			||||||
 | 
					vt 0.4688 0.4688
 | 
				
			||||||
 | 
					vt 0.2656 0.4688
 | 
				
			||||||
 | 
					vt 0.2656 0.4062
 | 
				
			||||||
 | 
					vt 0.4688 0.4062
 | 
				
			||||||
 | 
					vt 0.4688 0.3906
 | 
				
			||||||
 | 
					vt 0.2656 0.3906
 | 
				
			||||||
 | 
					vt 0.2656 0.3281
 | 
				
			||||||
 | 
					vt 0.4688 0.3281
 | 
				
			||||||
 | 
					vt 0.0391 0.2031
 | 
				
			||||||
 | 
					vt 0.0078 0.2031
 | 
				
			||||||
 | 
					vt 0.0078 0.1875
 | 
				
			||||||
 | 
					vt 0.0391 0.1875
 | 
				
			||||||
 | 
					vt 0.0859 0.2031
 | 
				
			||||||
 | 
					vt 0.0547 0.2031
 | 
				
			||||||
 | 
					vt 0.0547 0.1875
 | 
				
			||||||
 | 
					vt 0.0859 0.1875
 | 
				
			||||||
 | 
					vt 0.1484 0.1875
 | 
				
			||||||
 | 
					vt 0.1797 0.1875
 | 
				
			||||||
 | 
					vt 0.1797 0.2031
 | 
				
			||||||
 | 
					vt 0.1484 0.2031
 | 
				
			||||||
 | 
					vt 0.1328 0.2031
 | 
				
			||||||
 | 
					vt 0.1016 0.2031
 | 
				
			||||||
 | 
					vt 0.1016 0.1875
 | 
				
			||||||
 | 
					vt 0.1328 0.1875
 | 
				
			||||||
 | 
					vt 0.5156 0.4844
 | 
				
			||||||
 | 
					vt 0.5156 0.7344
 | 
				
			||||||
 | 
					vt 0.2656 0.7344
 | 
				
			||||||
 | 
					vt 0.2656 0.4844
 | 
				
			||||||
 | 
					vt 0.0000 0.4688
 | 
				
			||||||
 | 
					vt 0.0000 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.2188
 | 
				
			||||||
 | 
					vt 0.2500 0.4688
 | 
				
			||||||
 | 
					vt 0.5156 1.0000
 | 
				
			||||||
 | 
					vt 0.2656 1.0000
 | 
				
			||||||
 | 
					vt 0.2656 0.7500
 | 
				
			||||||
 | 
					vt 0.5156 0.7500
 | 
				
			||||||
 | 
					vt 0.2500 0.7344
 | 
				
			||||||
 | 
					vt 0.0000 0.7344
 | 
				
			||||||
 | 
					vt 0.0000 0.4844
 | 
				
			||||||
 | 
					vt 0.2500 0.4844
 | 
				
			||||||
 | 
					vt 0.7812 1.0000
 | 
				
			||||||
 | 
					vt 0.5312 1.0000
 | 
				
			||||||
 | 
					vt 0.5312 0.7500
 | 
				
			||||||
 | 
					vt 0.7812 0.7500
 | 
				
			||||||
 | 
					vt 0.0008 0.7500
 | 
				
			||||||
 | 
					vt 0.2502 0.7500
 | 
				
			||||||
 | 
					vt 0.2502 0.9994
 | 
				
			||||||
 | 
					vt 0.0008 0.9994
 | 
				
			||||||
 | 
					vt 0.8516 0.4453
 | 
				
			||||||
 | 
					vt 0.8047 0.4922
 | 
				
			||||||
 | 
					vt 0.7422 0.4922
 | 
				
			||||||
 | 
					vt 0.6953 0.4453
 | 
				
			||||||
 | 
					vt 0.6953 0.3828
 | 
				
			||||||
 | 
					vt 0.7422 0.3359
 | 
				
			||||||
 | 
					vt 0.8047 0.3359
 | 
				
			||||||
 | 
					vt 0.8516 0.3828
 | 
				
			||||||
 | 
					vt 0.6172 0.4922
 | 
				
			||||||
 | 
					vt 0.6641 0.4453
 | 
				
			||||||
 | 
					vt 0.6641 0.3828
 | 
				
			||||||
 | 
					vt 0.6172 0.3359
 | 
				
			||||||
 | 
					vt 0.5547 0.3359
 | 
				
			||||||
 | 
					vt 0.5078 0.3828
 | 
				
			||||||
 | 
					vt 0.5078 0.4453
 | 
				
			||||||
 | 
					vt 0.5547 0.4922
 | 
				
			||||||
 | 
					vt 0.6641 0.4453
 | 
				
			||||||
 | 
					vt 0.6172 0.4922
 | 
				
			||||||
 | 
					vt 0.5547 0.4922
 | 
				
			||||||
 | 
					vt 0.5078 0.4453
 | 
				
			||||||
 | 
					vt 0.5078 0.3828
 | 
				
			||||||
 | 
					vt 0.5547 0.3359
 | 
				
			||||||
 | 
					vt 0.6172 0.3359
 | 
				
			||||||
 | 
					vt 0.6641 0.3828
 | 
				
			||||||
 | 
					vt 0.8047 0.4922
 | 
				
			||||||
 | 
					vt 0.8516 0.4453
 | 
				
			||||||
 | 
					vt 0.8516 0.3828
 | 
				
			||||||
 | 
					vt 0.8047 0.3359
 | 
				
			||||||
 | 
					vt 0.7422 0.3359
 | 
				
			||||||
 | 
					vt 0.6953 0.3828
 | 
				
			||||||
 | 
					vt 0.6953 0.4453
 | 
				
			||||||
 | 
					vt 0.7422 0.4922
 | 
				
			||||||
 | 
					vt 0.8984 0.2969
 | 
				
			||||||
 | 
					vt 0.8984 0.2812
 | 
				
			||||||
 | 
					vt 0.9297 0.2812
 | 
				
			||||||
 | 
					vt 0.9297 0.2969
 | 
				
			||||||
 | 
					vt 0.9609 0.2812
 | 
				
			||||||
 | 
					vt 0.9609 0.2969
 | 
				
			||||||
 | 
					vt 0.9922 0.2812
 | 
				
			||||||
 | 
					vt 0.9922 0.2969
 | 
				
			||||||
 | 
					vt 0.7422 0.2969
 | 
				
			||||||
 | 
					vt 0.7422 0.2812
 | 
				
			||||||
 | 
					vt 0.7734 0.2812
 | 
				
			||||||
 | 
					vt 0.7734 0.2969
 | 
				
			||||||
 | 
					vt 0.8047 0.2812
 | 
				
			||||||
 | 
					vt 0.8047 0.2969
 | 
				
			||||||
 | 
					vt 0.8359 0.2812
 | 
				
			||||||
 | 
					vt 0.8359 0.2969
 | 
				
			||||||
 | 
					vt 0.8672 0.2812
 | 
				
			||||||
 | 
					vt 0.8672 0.2969
 | 
				
			||||||
 | 
					vt 0.6797 0.2969
 | 
				
			||||||
 | 
					vt 0.6797 0.2812
 | 
				
			||||||
 | 
					vt 0.7109 0.2812
 | 
				
			||||||
 | 
					vt 0.7109 0.2969
 | 
				
			||||||
 | 
					vt 0.6484 0.2969
 | 
				
			||||||
 | 
					vt 0.6484 0.2812
 | 
				
			||||||
 | 
					vt 0.7422 0.2812
 | 
				
			||||||
 | 
					vt 0.7422 0.2969
 | 
				
			||||||
 | 
					vt 0.4922 0.2969
 | 
				
			||||||
 | 
					vt 0.4922 0.2812
 | 
				
			||||||
 | 
					vt 0.5234 0.2812
 | 
				
			||||||
 | 
					vt 0.5234 0.2969
 | 
				
			||||||
 | 
					vt 0.5547 0.2812
 | 
				
			||||||
 | 
					vt 0.5547 0.2969
 | 
				
			||||||
 | 
					vt 0.5859 0.2812
 | 
				
			||||||
 | 
					vt 0.5859 0.2969
 | 
				
			||||||
 | 
					vt 0.6172 0.2812
 | 
				
			||||||
 | 
					vt 0.6172 0.2969
 | 
				
			||||||
 | 
					vt 0.4922 0.1328
 | 
				
			||||||
 | 
					vt 0.4922 0.1016
 | 
				
			||||||
 | 
					vt 0.9922 0.1016
 | 
				
			||||||
 | 
					vt 0.9922 0.1328
 | 
				
			||||||
 | 
					vt 0.4922 0.1953
 | 
				
			||||||
 | 
					vt 0.4922 0.1641
 | 
				
			||||||
 | 
					vt 0.9922 0.1641
 | 
				
			||||||
 | 
					vt 0.9922 0.1953
 | 
				
			||||||
 | 
					vt 0.4922 0.2266
 | 
				
			||||||
 | 
					vt 0.9922 0.2266
 | 
				
			||||||
 | 
					vt 0.9922 0.2578
 | 
				
			||||||
 | 
					vt 0.4922 0.2578
 | 
				
			||||||
 | 
					vt 0.9922 0.0391
 | 
				
			||||||
 | 
					vt 0.9922 0.0703
 | 
				
			||||||
 | 
					vt 0.4922 0.0703
 | 
				
			||||||
 | 
					vt 0.4922 0.0391
 | 
				
			||||||
 | 
					vt 0.9922 0.0078
 | 
				
			||||||
 | 
					vt 0.4922 0.0078
 | 
				
			||||||
 | 
					vn -1.0000 0.0000 0.0000
 | 
				
			||||||
 | 
					vn -0.0000 0.0000 -1.0000
 | 
				
			||||||
 | 
					vn 1.0000 0.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 0.0000 1.0000
 | 
				
			||||||
 | 
					vn 0.0000 -1.0000 -0.0000
 | 
				
			||||||
 | 
					vn 0.0000 1.0000 -0.0000
 | 
				
			||||||
 | 
					vn -0.9239 -0.3827 -0.0000
 | 
				
			||||||
 | 
					vn -0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 -0.9239 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 -0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.9239 0.3827 0.0000
 | 
				
			||||||
 | 
					vn 0.3827 0.9239 0.0000
 | 
				
			||||||
 | 
					vn -0.3827 0.9239 -0.0000
 | 
				
			||||||
 | 
					vn -0.9239 0.3827 -0.0000
 | 
				
			||||||
 | 
					g Cube.003_Cube.003_None_Cube.003_Cube.003_None_None
 | 
				
			||||||
 | 
					s off
 | 
				
			||||||
 | 
					f 1/1/1 2/2/1 3/3/1 4/4/1
 | 
				
			||||||
 | 
					f 2/5/2 5/6/2 6/7/2 3/8/2
 | 
				
			||||||
 | 
					f 5/9/3 7/10/3 8/11/3 6/12/3
 | 
				
			||||||
 | 
					f 7/13/4 1/14/4 4/15/4 8/16/4
 | 
				
			||||||
 | 
					f 4/17/5 3/18/5 6/19/5 8/20/5
 | 
				
			||||||
 | 
					f 7/21/6 5/22/6 2/23/6 1/24/6
 | 
				
			||||||
 | 
					f 9/25/4 10/26/4 11/27/4 12/28/4
 | 
				
			||||||
 | 
					f 10/29/1 13/30/1 14/31/1 11/32/1
 | 
				
			||||||
 | 
					f 13/33/2 15/34/2 16/35/2 14/36/2
 | 
				
			||||||
 | 
					f 15/37/3 9/38/3 12/39/3 16/40/3
 | 
				
			||||||
 | 
					f 17/41/4 18/42/4 19/43/4 20/44/4
 | 
				
			||||||
 | 
					f 18/45/1 21/46/1 22/47/1 19/48/1
 | 
				
			||||||
 | 
					f 21/49/2 23/50/2 24/51/2 22/52/2
 | 
				
			||||||
 | 
					f 23/53/3 17/54/3 20/55/3 24/56/3
 | 
				
			||||||
 | 
					f 20/57/5 19/58/5 22/59/5 24/60/5
 | 
				
			||||||
 | 
					f 23/61/6 21/62/6 18/63/6 17/64/6
 | 
				
			||||||
 | 
					f 28/65/2 26/66/2 40/67/2 38/68/2 36/69/2 34/70/2 32/71/2 30/72/2
 | 
				
			||||||
 | 
					f 25/73/4 27/74/4 29/75/4 31/76/4 33/77/4 35/78/4 37/79/4 39/80/4
 | 
				
			||||||
 | 
					f 60/81/2 58/82/2 72/83/2 70/84/2 68/85/2 66/86/2 64/87/2 62/88/2
 | 
				
			||||||
 | 
					f 57/89/4 59/90/4 61/91/4 63/92/4 65/93/4 67/94/4 69/95/4 71/96/4
 | 
				
			||||||
 | 
					s 1
 | 
				
			||||||
 | 
					f 25/97/7 26/98/7 28/99/8 27/100/8
 | 
				
			||||||
 | 
					f 27/100/8 28/99/8 30/101/9 29/102/9
 | 
				
			||||||
 | 
					f 29/102/9 30/101/9 32/103/10 31/104/10
 | 
				
			||||||
 | 
					f 31/105/10 32/106/10 34/107/11 33/108/11
 | 
				
			||||||
 | 
					f 33/108/11 34/107/11 36/109/12 35/110/12
 | 
				
			||||||
 | 
					f 35/110/12 36/109/12 38/111/13 37/112/13
 | 
				
			||||||
 | 
					f 37/112/13 38/111/13 40/113/14 39/114/14
 | 
				
			||||||
 | 
					f 39/114/14 40/113/14 26/98/7 25/97/7
 | 
				
			||||||
 | 
					f 59/115/8 60/116/8 62/117/9 61/118/9
 | 
				
			||||||
 | 
					f 57/119/7 58/120/7 60/116/8 59/115/8
 | 
				
			||||||
 | 
					f 61/118/9 62/117/9 64/121/10 63/122/10
 | 
				
			||||||
 | 
					f 63/123/10 64/124/10 66/125/11 65/126/11
 | 
				
			||||||
 | 
					f 65/126/11 66/125/11 68/127/12 67/128/12
 | 
				
			||||||
 | 
					f 67/128/12 68/127/12 70/129/13 69/130/13
 | 
				
			||||||
 | 
					f 69/130/13 70/129/13 72/131/14 71/132/14
 | 
				
			||||||
 | 
					f 71/132/14 72/131/14 58/120/7 57/119/7
 | 
				
			||||||
 | 
					f 54/133/13 56/134/14 55/135/14 53/136/13
 | 
				
			||||||
 | 
					f 50/137/11 52/138/12 51/139/12 49/140/11
 | 
				
			||||||
 | 
					f 48/141/10 47/142/10 45/143/9 46/144/9
 | 
				
			||||||
 | 
					f 54/133/13 53/136/13 51/139/12 52/138/12
 | 
				
			||||||
 | 
					f 43/145/8 41/146/7 42/147/7 44/148/8
 | 
				
			||||||
 | 
					f 45/149/9 43/145/8 44/148/8 46/150/9
 | 
				
			||||||
 | 
					f 48/141/10 50/137/11 49/140/11 47/142/10
 | 
				
			||||||
 | 
					f 41/146/7 55/135/14 56/134/14 42/147/7
 | 
				
			||||||
							
								
								
									
										97
									
								
								pipes.lua
									
									
									
									
									
								
							
							
						
						@@ -1,11 +1,17 @@
 | 
				
			|||||||
-- This file supplies the steel pipes
 | 
					-- This file supplies the steel pipes
 | 
				
			||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local REGISTER_COMPATIBILITY = true
 | 
					local REGISTER_COMPATIBILITY = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local pipes_empty_nodenames = {}
 | 
					local pipes_empty_nodenames = {}
 | 
				
			||||||
local pipes_full_nodenames = {}
 | 
					local pipes_full_nodenames = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local vti = {4, 3, 2, 1, 6, 5}
 | 
					local new_flow_logic_register = pipeworks.flowables.register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local polys = ""
 | 
				
			||||||
 | 
					if pipeworks.enable_lowpoly then polys = "_lowpoly" end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--~ local vti = {4, 3, 2, 1, 6, 5}
 | 
				
			||||||
local cconnects = {{}, {1}, {1, 2}, {1, 3}, {1, 3, 5}, {1, 2, 3}, {1, 2, 3, 5}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5, 6}}
 | 
					local cconnects = {{}, {1}, {1, 2}, {1, 3}, {1, 3, 5}, {1, 2, 3}, {1, 2, 3, 5}, {1, 2, 3, 4}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5, 6}}
 | 
				
			||||||
for index, connects in ipairs(cconnects) do
 | 
					for index, connects in ipairs(cconnects) do
 | 
				
			||||||
	local outsel = {}
 | 
						local outsel = {}
 | 
				
			||||||
@@ -24,19 +30,19 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		table.insert(outsel, pipeworks.pipe_selectboxes[v])
 | 
							table.insert(outsel, pipeworks.pipe_selectboxes[v])
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						--[[
 | 
				
			||||||
	if #connects == 1 then
 | 
						if #connects == 1 then
 | 
				
			||||||
		local v = connects[1]
 | 
							local v = connects[1]
 | 
				
			||||||
		v = v-1 + 2*(v%2) -- Opposite side
 | 
							v = v-1 + 2*(v%2) -- Opposite side
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
						--]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1}
 | 
						local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
	local pipedesc = "Pipe segement".." "..dump(connects).."... You hacker, you."
 | 
						local pipedesc = S("Pipe Segment").." "..dump(connects)
 | 
				
			||||||
	local image = nil
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if #connects == 0 then
 | 
						if #connects == 0 then
 | 
				
			||||||
		pgroups = {snappy = 3, tube = 1}
 | 
							pgroups = {snappy = 3, tube = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
		pipedesc = "Pipe segment"
 | 
							pipedesc = S("Pipe Segment")
 | 
				
			||||||
		image = "pipeworks_pipe_inv.png"
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local outimg_e = { "pipeworks_pipe_plain.png" }
 | 
						local outimg_e = { "pipeworks_pipe_plain.png" }
 | 
				
			||||||
@@ -47,10 +53,10 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		outimg_l = { "pipeworks_pipe_3_loaded.png" }
 | 
							outimg_l = { "pipeworks_pipe_3_loaded.png" }
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local mesh = "pipeworks_pipe_"..index..".obj"
 | 
						local mesh = "pipeworks_pipe_"..index..polys..".obj"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if index == 1 then
 | 
						if index == 1 then
 | 
				
			||||||
		mesh = "pipeworks_pipe_3.obj"
 | 
							mesh = "pipeworks_pipe_3"..polys..".obj"
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:pipe_"..index.."_empty", {
 | 
						minetest.register_node("pipeworks:pipe_"..index.."_empty", {
 | 
				
			||||||
@@ -59,8 +65,6 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		mesh = mesh,
 | 
							mesh = mesh,
 | 
				
			||||||
		tiles = outimg_e,
 | 
							tiles = outimg_e,
 | 
				
			||||||
		sunlight_propagates = true,
 | 
							sunlight_propagates = true,
 | 
				
			||||||
		inventory_image = image,
 | 
					 | 
				
			||||||
		wield_image = image,
 | 
					 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		selection_box = {
 | 
							selection_box = {
 | 
				
			||||||
@@ -72,7 +76,10 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
			fixed = outsel
 | 
								fixed = outsel
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		groups = pgroups,
 | 
							groups = pgroups,
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		drop = "pipeworks:pipe_1_empty",
 | 
							drop = "pipeworks:pipe_1_empty",
 | 
				
			||||||
		after_place_node = function(pos)
 | 
							after_place_node = function(pos)
 | 
				
			||||||
@@ -81,10 +88,13 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		after_dig_node = function(pos)
 | 
							after_dig_node = function(pos)
 | 
				
			||||||
			pipeworks.scan_for_pipe_objects(pos)
 | 
								pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		on_rotate = false
 | 
							on_rotate = false,
 | 
				
			||||||
 | 
							check_for_pole = pipeworks.check_for_vert_pipe,
 | 
				
			||||||
 | 
							check_for_horiz_pole = pipeworks.check_for_horiz_pipe,
 | 
				
			||||||
 | 
							pipenumber = index
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1}
 | 
						local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:pipe_"..index.."_loaded", {
 | 
						minetest.register_node("pipeworks:pipe_"..index.."_loaded", {
 | 
				
			||||||
		description = pipedesc,
 | 
							description = pipedesc,
 | 
				
			||||||
@@ -103,7 +113,10 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
			fixed = outsel
 | 
								fixed = outsel
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		groups = pgroups,
 | 
							groups = pgroups,
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_metal_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		drop = "pipeworks:pipe_1_empty",
 | 
							drop = "pipeworks:pipe_1_empty",
 | 
				
			||||||
		after_place_node = function(pos)
 | 
							after_place_node = function(pos)
 | 
				
			||||||
@@ -113,13 +126,20 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		after_dig_node = function(pos)
 | 
							after_dig_node = function(pos)
 | 
				
			||||||
			pipeworks.scan_for_pipe_objects(pos)
 | 
								pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		on_rotate = false
 | 
							on_rotate = false,
 | 
				
			||||||
 | 
							check_for_pole = pipeworks.check_for_vert_pipe,
 | 
				
			||||||
 | 
							check_for_horiz_pole = pipeworks.check_for_horiz_pipe,
 | 
				
			||||||
 | 
							pipenumber = index
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	table.insert(pipes_empty_nodenames, "pipeworks:pipe_"..index.."_empty")
 | 
						local emptypipe = "pipeworks:pipe_"..index.."_empty"
 | 
				
			||||||
	table.insert(pipes_full_nodenames,  "pipeworks:pipe_"..index.."_loaded")
 | 
						local fullpipe = "pipeworks:pipe_"..index.."_loaded"
 | 
				
			||||||
 | 
						table.insert(pipes_empty_nodenames, emptypipe)
 | 
				
			||||||
 | 
						table.insert(pipes_full_nodenames, fullpipe)
 | 
				
			||||||
 | 
						new_flow_logic_register.simple(emptypipe)
 | 
				
			||||||
 | 
						new_flow_logic_register.simple(fullpipe)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:pipe_1_empty"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if REGISTER_COMPATIBILITY then
 | 
					if REGISTER_COMPATIBILITY then
 | 
				
			||||||
@@ -129,9 +149,7 @@ if REGISTER_COMPATIBILITY then
 | 
				
			|||||||
		drawtype = "airlike",
 | 
							drawtype = "airlike",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
							sunlight_propagates = true,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		inventory_image = "pipeworks_pipe_inv.png",
 | 
							description = S("Pipe Segment (legacy)"),
 | 
				
			||||||
		wield_image = "pipeworks_pipe_inv.png",
 | 
					 | 
				
			||||||
		description = "Pipe Segment (legacy)",
 | 
					 | 
				
			||||||
		groups = {not_in_creative_inventory = 1, pipe_to_update = 1},
 | 
							groups = {not_in_creative_inventory = 1, pipe_to_update = 1},
 | 
				
			||||||
		drop = "pipeworks:pipe_1_empty",
 | 
							drop = "pipeworks:pipe_1_empty",
 | 
				
			||||||
		after_place_node = function(pos)
 | 
							after_place_node = function(pos)
 | 
				
			||||||
@@ -144,7 +162,6 @@ if REGISTER_COMPATIBILITY then
 | 
				
			|||||||
		drawtype = "airlike",
 | 
							drawtype = "airlike",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
							sunlight_propagates = true,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		inventory_image = "pipeworks_pipe_inv.png",
 | 
					 | 
				
			||||||
		groups = {not_in_creative_inventory = 1, pipe_to_update = 1},
 | 
							groups = {not_in_creative_inventory = 1, pipe_to_update = 1},
 | 
				
			||||||
		drop = "pipeworks:pipe_1_empty",
 | 
							drop = "pipeworks:pipe_1_empty",
 | 
				
			||||||
		after_place_node = function(pos)
 | 
							after_place_node = function(pos)
 | 
				
			||||||
@@ -182,14 +199,31 @@ if REGISTER_COMPATIBILITY then
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
table.insert(pipes_empty_nodenames,"pipeworks:valve_on_empty")
 | 
					local valve_on = "pipeworks:valve_on_empty"
 | 
				
			||||||
table.insert(pipes_empty_nodenames,"pipeworks:valve_off_empty")
 | 
					local valve_off = "pipeworks:valve_off_empty"
 | 
				
			||||||
table.insert(pipes_empty_nodenames,"pipeworks:entry_panel_empty")
 | 
					local entry_panel_empty = "pipeworks:entry_panel_empty"
 | 
				
			||||||
table.insert(pipes_empty_nodenames,"pipeworks:flow_sensor_empty")
 | 
					local flow_sensor_empty = "pipeworks:flow_sensor_empty"
 | 
				
			||||||
 | 
					local sp_empty = "pipeworks:straight_pipe_empty"
 | 
				
			||||||
 | 
					-- XXX: why aren't these in devices.lua!?
 | 
				
			||||||
 | 
					table.insert(pipes_empty_nodenames, valve_on)
 | 
				
			||||||
 | 
					table.insert(pipes_empty_nodenames, valve_off)
 | 
				
			||||||
 | 
					table.insert(pipes_empty_nodenames, entry_panel_empty)
 | 
				
			||||||
 | 
					table.insert(pipes_empty_nodenames, flow_sensor_empty)
 | 
				
			||||||
 | 
					table.insert(pipes_empty_nodenames, sp_empty)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
table.insert(pipes_full_nodenames,"pipeworks:valve_on_loaded")
 | 
					local valve_on_loaded = "pipeworks:valve_on_loaded"
 | 
				
			||||||
table.insert(pipes_full_nodenames,"pipeworks:entry_panel_loaded")
 | 
					local entry_panel_loaded = "pipeworks:entry_panel_loaded"
 | 
				
			||||||
table.insert(pipes_full_nodenames,"pipeworks:flow_sensor_loaded")
 | 
					local flow_sensor_loaded = "pipeworks:flow_sensor_loaded"
 | 
				
			||||||
 | 
					local sp_loaded = "pipeworks:straight_pipe_loaded"
 | 
				
			||||||
 | 
					table.insert(pipes_full_nodenames, valve_on_loaded)
 | 
				
			||||||
 | 
					table.insert(pipes_full_nodenames, entry_panel_loaded)
 | 
				
			||||||
 | 
					table.insert(pipes_full_nodenames, flow_sensor_loaded)
 | 
				
			||||||
 | 
					table.insert(pipes_full_nodenames, sp_loaded)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.pipes_full_nodenames = pipes_full_nodenames
 | 
				
			||||||
 | 
					pipeworks.pipes_empty_nodenames = pipes_empty_nodenames
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pipeworks.toggles.pipe_mode == "classic" then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_abm({
 | 
					minetest.register_abm({
 | 
				
			||||||
	nodenames = pipes_empty_nodenames,
 | 
						nodenames = pipes_empty_nodenames,
 | 
				
			||||||
@@ -227,3 +261,6 @@ minetest.register_abm({
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								pressure_logic/abm_register.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					-- register new flow logic ABMs
 | 
				
			||||||
 | 
					-- written 2017 by thetaepsilon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local register = {}
 | 
				
			||||||
 | 
					pipeworks.flowlogic.abmregister = register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local flowlogic = pipeworks.flowlogic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- register node list for the main logic function.
 | 
				
			||||||
 | 
					-- see flowlogic.run() in abms.lua.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local register_flowlogic_abm = function(nodename)
 | 
				
			||||||
 | 
						if pipeworks.toggles.pipe_mode == "pressure" then
 | 
				
			||||||
 | 
							minetest.register_abm({
 | 
				
			||||||
 | 
								label = "pipeworks new_flow_logic run",
 | 
				
			||||||
 | 
								nodenames = { nodename },
 | 
				
			||||||
 | 
								interval = 1,
 | 
				
			||||||
 | 
								chance = 1,
 | 
				
			||||||
 | 
								action = function(pos, node, active_object_count, active_object_count_wider)
 | 
				
			||||||
 | 
									flowlogic.run(pos, node)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							minetest.log("warning", "pipeworks pressure_logic not enabled but register.flowlogic() requested")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					register.flowlogic = register_flowlogic_abm
 | 
				
			||||||
							
								
								
									
										371
									
								
								pressure_logic/abms.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,371 @@
 | 
				
			|||||||
 | 
					-- reimplementation of new_flow_logic branch: processing functions
 | 
				
			||||||
 | 
					-- written 2017 by thetaepsilon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local flowlogic = {}
 | 
				
			||||||
 | 
					flowlogic.helpers = {}
 | 
				
			||||||
 | 
					pipeworks.flowlogic = flowlogic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- borrowed from above: might be useable to replace the above coords tables
 | 
				
			||||||
 | 
					local make_coords_offsets = function(pos, include_base)
 | 
				
			||||||
 | 
						local coords = {
 | 
				
			||||||
 | 
							{x=pos.x,y=pos.y-1,z=pos.z},
 | 
				
			||||||
 | 
							{x=pos.x,y=pos.y+1,z=pos.z},
 | 
				
			||||||
 | 
							{x=pos.x-1,y=pos.y,z=pos.z},
 | 
				
			||||||
 | 
							{x=pos.x+1,y=pos.y,z=pos.z},
 | 
				
			||||||
 | 
							{x=pos.x,y=pos.y,z=pos.z-1},
 | 
				
			||||||
 | 
							{x=pos.x,y=pos.y,z=pos.z+1},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if include_base then table.insert(coords, pos) end
 | 
				
			||||||
 | 
						return coords
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- local debuglog = function(msg) print("## "..msg) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--~ local formatvec = function(vec) local sep="," return "("..tostring(vec.x)..sep..tostring(vec.y)..sep..tostring(vec.z)..")" end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- new version of liquid check
 | 
				
			||||||
 | 
					-- accepts a limit parameter to only delete water blocks that the receptacle can accept,
 | 
				
			||||||
 | 
					-- and returns it so that the receptacle can update it's pressure values.
 | 
				
			||||||
 | 
					local check_for_liquids_v2 = function(pos, limit)
 | 
				
			||||||
 | 
						local coords = make_coords_offsets(pos, false)
 | 
				
			||||||
 | 
						local total = 0
 | 
				
			||||||
 | 
						for _, tpos in ipairs(coords) do
 | 
				
			||||||
 | 
							if total >= limit then break end
 | 
				
			||||||
 | 
							local name = minetest.get_node(tpos).name
 | 
				
			||||||
 | 
							if name == pipeworks.liquids.water.source then
 | 
				
			||||||
 | 
								minetest.remove_node(tpos)
 | 
				
			||||||
 | 
								total = total + 1
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						--pipeworks.logger("check_for_liquids_v2@"..formatvec(pos).." total "..total)
 | 
				
			||||||
 | 
						return total
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					flowlogic.check_for_liquids_v2 = check_for_liquids_v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local label_pressure = "pipeworks.water_pressure"
 | 
				
			||||||
 | 
					local get_pressure_access = function(pos)
 | 
				
			||||||
 | 
						local metaref = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						return {
 | 
				
			||||||
 | 
							get = function()
 | 
				
			||||||
 | 
								return metaref:get_float(label_pressure)
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							set = function(v)
 | 
				
			||||||
 | 
								metaref:set_float(label_pressure, v)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- logging is unreliable when something is crashing...
 | 
				
			||||||
 | 
					--[[
 | 
				
			||||||
 | 
					local nilexplode = function(caller, label, value)
 | 
				
			||||||
 | 
						if value == nil then
 | 
				
			||||||
 | 
							error(caller..": "..label.." was nil")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					--]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local finitemode = pipeworks.toggles.finite_water
 | 
				
			||||||
 | 
					flowlogic.run = function(pos, node)
 | 
				
			||||||
 | 
						local nodename = node.name
 | 
				
			||||||
 | 
						-- get the current pressure value.
 | 
				
			||||||
 | 
						local nodepressure = get_pressure_access(pos)
 | 
				
			||||||
 | 
						local currentpressure = nodepressure.get()
 | 
				
			||||||
 | 
						local oldpressure = currentpressure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- if node is an input: run intake phase
 | 
				
			||||||
 | 
						local inputdef = pipeworks.flowables.inputs.list[nodename]
 | 
				
			||||||
 | 
						if inputdef then
 | 
				
			||||||
 | 
							currentpressure = flowlogic.run_input(pos, node, currentpressure, inputdef)
 | 
				
			||||||
 | 
							--debuglog("post-intake currentpressure is "..currentpressure)
 | 
				
			||||||
 | 
							--nilexplode("run()", "currentpressure", currentpressure)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- balance pressure with neighbours
 | 
				
			||||||
 | 
						currentpressure = flowlogic.balance_pressure(pos, node, currentpressure)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- if node is an output: run output phase
 | 
				
			||||||
 | 
						local outputdef = pipeworks.flowables.outputs.list[nodename]
 | 
				
			||||||
 | 
						if outputdef then
 | 
				
			||||||
 | 
							currentpressure = flowlogic.run_output(
 | 
				
			||||||
 | 
								pos,
 | 
				
			||||||
 | 
								node,
 | 
				
			||||||
 | 
								currentpressure,
 | 
				
			||||||
 | 
								oldpressure,
 | 
				
			||||||
 | 
								outputdef,
 | 
				
			||||||
 | 
								finitemode)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- if node has pressure transitions: determine new node
 | 
				
			||||||
 | 
						if pipeworks.flowables.transitions.list[nodename] then
 | 
				
			||||||
 | 
							local newnode = flowlogic.run_transition(node, currentpressure)
 | 
				
			||||||
 | 
							--pipeworks.logger("flowlogic.run()@"..formatvec(pos).." transition, new node name = "..dump(newnode).." pressure "..tostring(currentpressure))
 | 
				
			||||||
 | 
							minetest.swap_node(pos, newnode)
 | 
				
			||||||
 | 
							flowlogic.run_transition_post(pos, newnode)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- set the new pressure
 | 
				
			||||||
 | 
						nodepressure.set(currentpressure)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local simple_neighbour_offsets = {
 | 
				
			||||||
 | 
							{x=0, y=-1,z= 0},
 | 
				
			||||||
 | 
							{x=0, y= 1,z= 0},
 | 
				
			||||||
 | 
							{x=-1,y= 0,z= 0},
 | 
				
			||||||
 | 
							{x= 1,y= 0,z= 0},
 | 
				
			||||||
 | 
							{x= 0,y= 0,z=-1},
 | 
				
			||||||
 | 
							{x= 0,y= 0,z= 1},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					local get_neighbour_positions = function(pos, node)
 | 
				
			||||||
 | 
						-- local dname = "get_neighbour_positions@"..formatvec(pos).." "
 | 
				
			||||||
 | 
						-- get list of node neighbours.
 | 
				
			||||||
 | 
						-- if this node is directional and only flows on certain sides,
 | 
				
			||||||
 | 
						-- invoke the callback to retrieve the set.
 | 
				
			||||||
 | 
						-- for simple flowables this is just an auto-gen'd list of all six possible neighbours.
 | 
				
			||||||
 | 
						local candidates = {}
 | 
				
			||||||
 | 
						if pipeworks.flowables.list.simple[node.name] then
 | 
				
			||||||
 | 
							candidates = simple_neighbour_offsets
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							-- directional flowables: call the callback to get the list
 | 
				
			||||||
 | 
							local directional = pipeworks.flowables.list.directional[node.name]
 | 
				
			||||||
 | 
							if directional then
 | 
				
			||||||
 | 
								--pipeworks.logger(dname.."invoking neighbourfn")
 | 
				
			||||||
 | 
								local offsets = directional.neighbourfn(node)
 | 
				
			||||||
 | 
								candidates = offsets
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- then, check each possible neighbour to see if they can be reached from this node.
 | 
				
			||||||
 | 
						local connections = {}
 | 
				
			||||||
 | 
						for _, offset in ipairs(candidates) do
 | 
				
			||||||
 | 
							local npos = vector.add(pos, offset)
 | 
				
			||||||
 | 
							local neighbour = minetest.get_node(npos)
 | 
				
			||||||
 | 
							local nodename = neighbour.name
 | 
				
			||||||
 | 
							local is_simple = (pipeworks.flowables.list.simple[nodename])
 | 
				
			||||||
 | 
							if is_simple then
 | 
				
			||||||
 | 
								local n = get_pressure_access(npos)
 | 
				
			||||||
 | 
								table.insert(connections, n)
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								-- if target node is also directional, check if it agrees it can flow in that direction
 | 
				
			||||||
 | 
								local directional = pipeworks.flowables.list.directional[nodename]
 | 
				
			||||||
 | 
								if directional then
 | 
				
			||||||
 | 
									--pipeworks.logger(dname.."directionality test for offset "..formatvec(offset))
 | 
				
			||||||
 | 
									local towards_origin = vector.multiply(offset, -1)
 | 
				
			||||||
 | 
									--pipeworks.logger(dname.."vector passed to directionfn: "..formatvec(towards_origin))
 | 
				
			||||||
 | 
									local result = directional.directionfn(neighbour, towards_origin)
 | 
				
			||||||
 | 
									--pipeworks.logger(dname.."result: "..tostring(result))
 | 
				
			||||||
 | 
									if result then
 | 
				
			||||||
 | 
										local n = get_pressure_access(npos)
 | 
				
			||||||
 | 
										table.insert(connections, n)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return connections
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flowlogic.balance_pressure = function(pos, node, currentpressure)
 | 
				
			||||||
 | 
						-- local dname = "flowlogic.balance_pressure()@"..formatvec(pos).." "
 | 
				
			||||||
 | 
						-- check the pressure of all nearby flowable nodes, and average it out.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- unconditionally include self in nodes to average over.
 | 
				
			||||||
 | 
						-- result of averaging will be returned as new pressure for main flow logic callback
 | 
				
			||||||
 | 
						local totalv = currentpressure
 | 
				
			||||||
 | 
						local totalc = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- pressure handles to average over
 | 
				
			||||||
 | 
						local connections = get_neighbour_positions(pos, node)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- for each neighbour, add neighbour's pressure to the total to balance out
 | 
				
			||||||
 | 
						for _, neighbour in ipairs(connections) do
 | 
				
			||||||
 | 
							local n = neighbour.get()
 | 
				
			||||||
 | 
							totalv = totalv + n
 | 
				
			||||||
 | 
							totalc = totalc + 1
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local average = totalv / totalc
 | 
				
			||||||
 | 
						for _, target in ipairs(connections) do
 | 
				
			||||||
 | 
							target.set(average)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return average
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flowlogic.run_input = function(pos, node, currentpressure, inputdef)
 | 
				
			||||||
 | 
						-- intakefn allows a given input node to define it's own intake logic.
 | 
				
			||||||
 | 
						-- this function will calculate the maximum amount of water that can be taken in;
 | 
				
			||||||
 | 
						-- the intakefn will be given this and is expected to return the actual absorption amount.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local maxpressure = inputdef.maxpressure
 | 
				
			||||||
 | 
						local intake_limit = maxpressure - currentpressure
 | 
				
			||||||
 | 
						if intake_limit <= 0 then return currentpressure end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local actual_intake = inputdef.intakefn(pos, intake_limit)
 | 
				
			||||||
 | 
						--pipeworks.logger("run_input@"..formatvec(pos).." oldpressure "..currentpressure.." intake_limit "..intake_limit.." actual_intake "..actual_intake)
 | 
				
			||||||
 | 
						if actual_intake <= 0 then return currentpressure end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local newpressure = actual_intake + currentpressure
 | 
				
			||||||
 | 
						--debuglog("run_input() end, oldpressure "..currentpressure.." intake_limit "..intake_limit.." actual_intake "..actual_intake.." newpressure "..newpressure)
 | 
				
			||||||
 | 
						return newpressure
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- flowlogic output helper implementation:
 | 
				
			||||||
 | 
					-- outputs water by trying to place water nodes nearby in the world.
 | 
				
			||||||
 | 
					-- neighbours is a list of node offsets to try placing water in.
 | 
				
			||||||
 | 
					-- this is a constructor function, returning another function which satisfies the output helper requirements.
 | 
				
			||||||
 | 
					-- note that this does *not* take rotation into account.
 | 
				
			||||||
 | 
					flowlogic.helpers.make_neighbour_output_fixed = function(neighbours)
 | 
				
			||||||
 | 
						return function(pos, node, currentpressure, finitemode)
 | 
				
			||||||
 | 
							local taken = 0
 | 
				
			||||||
 | 
							for _, offset in pairs(neighbours) do
 | 
				
			||||||
 | 
								local npos = vector.add(pos, offset)
 | 
				
			||||||
 | 
								local name = minetest.get_node(npos).name
 | 
				
			||||||
 | 
								if currentpressure < 1 then break end
 | 
				
			||||||
 | 
								-- take pressure anyway in non-finite mode, even if node is water source already.
 | 
				
			||||||
 | 
								-- in non-finite mode, pressure has to be sustained to keep the sources there.
 | 
				
			||||||
 | 
								-- so in non-finite mode, placing water is dependent on the target node;
 | 
				
			||||||
 | 
								-- draining pressure is not.
 | 
				
			||||||
 | 
								local canplace = (name == "air") or (name == pipeworks.liquids.water.flowing)
 | 
				
			||||||
 | 
								if canplace then
 | 
				
			||||||
 | 
									minetest.swap_node(npos, {name=pipeworks.liquids.water.source})
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								if (not finitemode) or canplace then
 | 
				
			||||||
 | 
									taken = taken + 1
 | 
				
			||||||
 | 
									currentpressure = currentpressure - 1
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							return taken
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- complementary function to the above when using non-finite mode:
 | 
				
			||||||
 | 
					-- removes water sources from neighbor positions when the output is "off" due to lack of pressure.
 | 
				
			||||||
 | 
					flowlogic.helpers.make_neighbour_cleanup_fixed = function(neighbours)
 | 
				
			||||||
 | 
						return function(pos, node, currentpressure)
 | 
				
			||||||
 | 
							--pipeworks.logger("neighbour_cleanup_fixed@"..formatvec(pos))
 | 
				
			||||||
 | 
							for _, offset in pairs(neighbours) do
 | 
				
			||||||
 | 
								local npos = vector.add(pos, offset)
 | 
				
			||||||
 | 
								local name = minetest.get_node(npos).name
 | 
				
			||||||
 | 
								if (name == pipeworks.liquids.water.source) then
 | 
				
			||||||
 | 
									--pipeworks.logger("neighbour_cleanup_fixed removing "..formatvec(npos))
 | 
				
			||||||
 | 
									minetest.remove_node(npos)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					flowlogic.run_output = function(pos, node, currentpressure, oldpressure, outputdef, finitemode)
 | 
				
			||||||
 | 
						-- processing step for water output devices.
 | 
				
			||||||
 | 
						-- takes care of checking a minimum pressure value and updating the resulting pressure level
 | 
				
			||||||
 | 
						-- the outputfn is provided the current pressure and returns the pressure "taken".
 | 
				
			||||||
 | 
						-- as an example, using this with the above spigot function,
 | 
				
			||||||
 | 
						-- the spigot function tries to output a water source if it will fit in the world.
 | 
				
			||||||
 | 
						--pipeworks.logger("flowlogic.run_output() pos "..formatvec(pos).." old -> currentpressure "..tostring(oldpressure).." "..tostring(currentpressure).." finitemode "..tostring(finitemode))
 | 
				
			||||||
 | 
						local upper = outputdef.upper
 | 
				
			||||||
 | 
						local lower = outputdef.lower
 | 
				
			||||||
 | 
						local result = currentpressure
 | 
				
			||||||
 | 
						local threshold
 | 
				
			||||||
 | 
						if finitemode then threshold = lower else threshold = upper end
 | 
				
			||||||
 | 
						if currentpressure > threshold then
 | 
				
			||||||
 | 
							local takenpressure = outputdef.outputfn(pos, node, currentpressure, finitemode)
 | 
				
			||||||
 | 
							local newpressure = currentpressure - takenpressure
 | 
				
			||||||
 | 
							if newpressure < 0 then newpressure = 0 end
 | 
				
			||||||
 | 
							result = newpressure
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if (not finitemode) and (currentpressure < lower) and (oldpressure < lower) then
 | 
				
			||||||
 | 
							--pipeworks.logger("flowlogic.run_output() invoking cleanup currentpressure="..tostring(currentpressure))
 | 
				
			||||||
 | 
							outputdef.cleanupfn(pos, node, currentpressure)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						return result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- determine which node to switch to based on current pressure
 | 
				
			||||||
 | 
					flowlogic.run_transition = function(node, currentpressure)
 | 
				
			||||||
 | 
						local simplesetdef = pipeworks.flowables.transitions.simple[node.name]
 | 
				
			||||||
 | 
						local result = node
 | 
				
			||||||
 | 
						local found = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- simple transition sets: assumes all nodes in the set share param values.
 | 
				
			||||||
 | 
						if simplesetdef then
 | 
				
			||||||
 | 
							-- assumes that the set has been checked to contain at least one element...
 | 
				
			||||||
 | 
							local nodename_prev = simplesetdef[1].nodename
 | 
				
			||||||
 | 
							local result_nodename = node.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _, element in ipairs(simplesetdef) do
 | 
				
			||||||
 | 
								-- find the highest element that is below the current pressure.
 | 
				
			||||||
 | 
								local threshold = element.threshold
 | 
				
			||||||
 | 
								if threshold > currentpressure then
 | 
				
			||||||
 | 
									result_nodename = nodename_prev
 | 
				
			||||||
 | 
									found = true
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								nodename_prev = element.nodename
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- use last element if no threshold is greater than current pressure
 | 
				
			||||||
 | 
							if not found then
 | 
				
			||||||
 | 
								result_nodename = nodename_prev
 | 
				
			||||||
 | 
								found = true
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- preserve param1/param2 values
 | 
				
			||||||
 | 
							result = { name=result_nodename, param1=node.param1, param2=node.param2 }
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if not found then
 | 
				
			||||||
 | 
							pipeworks.logger("flowlogic.run_transition() BUG no transition " ..
 | 
				
			||||||
 | 
								"definitions found! node.name=" .. node.name ..
 | 
				
			||||||
 | 
								" currentpressure=" .. tostring(currentpressure))
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- post-update hook for run_transition
 | 
				
			||||||
 | 
					-- among other things, updates mesecons if present.
 | 
				
			||||||
 | 
					-- node here means the new node, returned from run_transition() above
 | 
				
			||||||
 | 
					flowlogic.run_transition_post = function(pos, node)
 | 
				
			||||||
 | 
						local mesecons_def = minetest.registered_nodes[node.name].mesecons
 | 
				
			||||||
 | 
						local mesecons_rules = pipeworks.flowables.transitions.mesecons[node.name]
 | 
				
			||||||
 | 
						if minetest.get_modpath("mesecons") and (mesecons_def ~= nil) and mesecons_rules then
 | 
				
			||||||
 | 
							if type(mesecons_def) ~= "table" then
 | 
				
			||||||
 | 
								pipeworks.logger("flowlogic.run_transition_post() BUG mesecons def for "..node.name.."not a table: got "..tostring(mesecons_def))
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								local receptor = mesecons_def.receptor
 | 
				
			||||||
 | 
								if receptor then
 | 
				
			||||||
 | 
									local state = receptor.state
 | 
				
			||||||
 | 
									if state == mesecon.state.on then
 | 
				
			||||||
 | 
										mesecon.receptor_on(pos, mesecons_rules)
 | 
				
			||||||
 | 
									elseif state == mesecon.state.off then
 | 
				
			||||||
 | 
										mesecon.receptor_off(pos, mesecons_rules)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										53
									
								
								pressure_logic/flowable_node_registry.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					-- registry of flowable node behaviours in new flow logic
 | 
				
			||||||
 | 
					-- written 2017 by thetaepsilon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- the actual registration functions which edit these tables can be found in flowable_node_registry_install.lua
 | 
				
			||||||
 | 
					-- this is because the ABM code needs to inspect these tables,
 | 
				
			||||||
 | 
					-- but the registration code needs to reference said ABM code.
 | 
				
			||||||
 | 
					-- so those functions were split out to resolve a circular dependency.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.flowables = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.list = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.list.all = {}
 | 
				
			||||||
 | 
					-- pipeworks.flowables.list.nodenames = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- simple flowables - balance pressure in any direction
 | 
				
			||||||
 | 
					pipeworks.flowables.list.simple = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.list.simple_nodenames = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- directional flowables - can only flow on certain sides
 | 
				
			||||||
 | 
					-- format per entry is a table with the following fields:
 | 
				
			||||||
 | 
					-- neighbourfn: function(node),
 | 
				
			||||||
 | 
					--	called to determine which nodes to consider as neighbours.
 | 
				
			||||||
 | 
					--	can be used to e.g. inspect the node's param values for facedir etc.
 | 
				
			||||||
 | 
					--	returns: array of vector offsets to look for possible neighbours in
 | 
				
			||||||
 | 
					-- directionfn: function(node, vector):
 | 
				
			||||||
 | 
					--	can this node flow in this direction?
 | 
				
			||||||
 | 
					--	called in the context of another node to check the matching entry returned by neighbourfn.
 | 
				
			||||||
 | 
					-- for every offset vector returned by neighbourfn,
 | 
				
			||||||
 | 
					-- the node at that absolute position is checked.
 | 
				
			||||||
 | 
					-- if that node is also a directional flowable,
 | 
				
			||||||
 | 
					-- then that node's vector is passed to that node's directionfn
 | 
				
			||||||
 | 
					-- (inverted, so that directionfn sees a vector pointing out from it back to the origin node).
 | 
				
			||||||
 | 
					-- if directionfn agrees that the neighbour node can currently flow in that direction,
 | 
				
			||||||
 | 
					-- the neighbour is to participate in pressure balancing.
 | 
				
			||||||
 | 
					pipeworks.flowables.list.directional = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- simple intakes - try to absorb any adjacent water nodes
 | 
				
			||||||
 | 
					pipeworks.flowables.inputs = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.inputs.list = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.inputs.nodenames = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- outputs - takes pressure from pipes and update world to do something with it
 | 
				
			||||||
 | 
					pipeworks.flowables.outputs = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.outputs.list = {}
 | 
				
			||||||
 | 
					-- not currently any nodenames arraylist for this one as it's not currently needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- nodes with registered node transitions
 | 
				
			||||||
 | 
					-- nodes will be switched depending on pressure level
 | 
				
			||||||
 | 
					pipeworks.flowables.transitions = {}
 | 
				
			||||||
 | 
					pipeworks.flowables.transitions.list = {}	-- master list
 | 
				
			||||||
 | 
					pipeworks.flowables.transitions.simple = {}	-- nodes that change based purely on pressure
 | 
				
			||||||
 | 
					pipeworks.flowables.transitions.mesecons = {}	-- table of mesecons rules to apply on transition
 | 
				
			||||||
							
								
								
									
										263
									
								
								pressure_logic/flowable_node_registry_install.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,263 @@
 | 
				
			|||||||
 | 
					-- flowable node registry: add entries and install ABMs if new flow logic is enabled
 | 
				
			||||||
 | 
					-- written 2017 by thetaepsilon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- use for hooking up ABMs as nodes are registered
 | 
				
			||||||
 | 
					local abmregister = pipeworks.flowlogic.abmregister
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- registration functions
 | 
				
			||||||
 | 
					pipeworks.flowables.register = {}
 | 
				
			||||||
 | 
					local register = pipeworks.flowables.register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- some sanity checking for passed args, as this could potentially be made an external API eventually
 | 
				
			||||||
 | 
					local checkexists = function(nodename)
 | 
				
			||||||
 | 
						if type(nodename) ~= "string" then error("pipeworks.flowables nodename must be a string!") end
 | 
				
			||||||
 | 
						return pipeworks.flowables.list.all[nodename]
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local insertbase = function(nodename)
 | 
				
			||||||
 | 
						if checkexists(nodename) then error("pipeworks.flowables duplicate registration!") end
 | 
				
			||||||
 | 
						pipeworks.flowables.list.all[nodename] = true
 | 
				
			||||||
 | 
						-- table.insert(pipeworks.flowables.list.nodenames, nodename)
 | 
				
			||||||
 | 
						if pipeworks.toggles.pipe_mode == "pressure" then
 | 
				
			||||||
 | 
							abmregister.flowlogic(nodename)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local regwarning = function(kind, nodename)
 | 
				
			||||||
 | 
						--~ local tail = ""
 | 
				
			||||||
 | 
						--~ if pipeworks.toggles.pipe_mode ~= "pressure" then tail = " but pressure logic not enabled" end
 | 
				
			||||||
 | 
						--pipeworks.logger(kind.." flow logic registry requested for "..nodename..tail)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Register a node as a simple flowable.
 | 
				
			||||||
 | 
					-- Simple flowable nodes have no considerations for direction of flow;
 | 
				
			||||||
 | 
					-- A cluster of adjacent simple flowables will happily average out in any direction.
 | 
				
			||||||
 | 
					register.simple = function(nodename)
 | 
				
			||||||
 | 
						insertbase(nodename)
 | 
				
			||||||
 | 
						pipeworks.flowables.list.simple[nodename] = true
 | 
				
			||||||
 | 
						table.insert(pipeworks.flowables.list.simple_nodenames, nodename)
 | 
				
			||||||
 | 
						regwarning("simple", nodename)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Register a node as a directional flowable:
 | 
				
			||||||
 | 
					-- has a helper function which determines which nodes to consider valid neighbours.
 | 
				
			||||||
 | 
					register.directional = function(nodename, neighbourfn, directionfn)
 | 
				
			||||||
 | 
						insertbase(nodename)
 | 
				
			||||||
 | 
						pipeworks.flowables.list.directional[nodename] = {
 | 
				
			||||||
 | 
							neighbourfn = neighbourfn,
 | 
				
			||||||
 | 
							directionfn = directionfn
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						regwarning("directional", nodename)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- register a node as a directional flowable that can only flow through either the top or bottom side.
 | 
				
			||||||
 | 
					-- used for fountainheads (bottom side) and pumps (top side).
 | 
				
			||||||
 | 
					-- this is in world terms, not facedir relative!
 | 
				
			||||||
 | 
					register.directional_vertical_fixed = function(nodename, topside)
 | 
				
			||||||
 | 
						local y
 | 
				
			||||||
 | 
						if topside then y = 1 else y = -1 end
 | 
				
			||||||
 | 
						local side = { x=0, y=y, z=0 }
 | 
				
			||||||
 | 
						local neighbourfn = function(node) return { side } end
 | 
				
			||||||
 | 
						local directionfn = function(node, direction)
 | 
				
			||||||
 | 
							return vector.equals(direction, side)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						register.directional(nodename, neighbourfn, directionfn)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- register a node as a directional flowable whose accepting sides depends upon param2 rotation.
 | 
				
			||||||
 | 
					-- used for entry panels, valves, flow sensors and spigots.
 | 
				
			||||||
 | 
					-- this is mostly for legacy reasons and SHOULD NOT BE USED IN NEW CODE.
 | 
				
			||||||
 | 
					register.directional_horizonal_rotate = function(nodename, doubleended)
 | 
				
			||||||
 | 
						local rotations = {
 | 
				
			||||||
 | 
							{x= 0,y= 0,z= 1},
 | 
				
			||||||
 | 
							{x= 1,y= 0,z= 0},
 | 
				
			||||||
 | 
							{x= 0,y= 0,z=-1},
 | 
				
			||||||
 | 
							{x=-1,y= 0,z= 0},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						local getends = function(node)
 | 
				
			||||||
 | 
							--local dname = "horizontal rotate getends() "
 | 
				
			||||||
 | 
							local param2 = node.param2
 | 
				
			||||||
 | 
							-- the pipeworks nodes use a fixed value for vertical facing nodes
 | 
				
			||||||
 | 
							-- if that is detected, just return that directly.
 | 
				
			||||||
 | 
							if param2 == 17 then
 | 
				
			||||||
 | 
								return {{x=0,y=1,z=0}, {x=0,y=-1,z=0}}
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							-- the sole end of the spigot points in the direction the rotation bits suggest
 | 
				
			||||||
 | 
							-- also note to self: lua arrays start at one...
 | 
				
			||||||
 | 
							local mainend = (param2 % 4) + 1
 | 
				
			||||||
 | 
							-- use modulus wrap-around to find other end for straight-run devices like the valve
 | 
				
			||||||
 | 
							local otherend = ((param2 + 2) % 4) + 1
 | 
				
			||||||
 | 
							local mainrot = rotations[mainend]
 | 
				
			||||||
 | 
							--pipeworks.logger(dname.."mainrot: "..dump(mainrot))
 | 
				
			||||||
 | 
							local result
 | 
				
			||||||
 | 
							if doubleended then
 | 
				
			||||||
 | 
								result = { mainrot, rotations[otherend] }
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								result = { mainrot }
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							--pipeworks.logger(dname.."result: "..dump(result))
 | 
				
			||||||
 | 
							return result
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local neighbourfn = function(node)
 | 
				
			||||||
 | 
							return getends(node)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local directionfn = function(node, direction)
 | 
				
			||||||
 | 
							local result = false
 | 
				
			||||||
 | 
							for _, endvec in ipairs(getends(node)) do
 | 
				
			||||||
 | 
								if vector.equals(direction, endvec) then result = true end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							return result
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						register.directional(nodename, neighbourfn, directionfn)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local checkbase = function(nodename)
 | 
				
			||||||
 | 
						if not checkexists(nodename) then error("pipeworks.flowables node doesn't exist as a flowable!") end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local duplicateerr = function(kind, nodename) error(kind.." duplicate registration for "..nodename) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Registers a node as a fluid intake.
 | 
				
			||||||
 | 
					-- intakefn is used to determine the water that can be taken in a node-specific way.
 | 
				
			||||||
 | 
					-- Expects node to be registered as a flowable (is present in flowables.list.all),
 | 
				
			||||||
 | 
					-- so that water can move out of it.
 | 
				
			||||||
 | 
					-- maxpressure is the maximum pipeline pressure that this node can drive;
 | 
				
			||||||
 | 
					-- if the input's node exceeds this the callback is not run.
 | 
				
			||||||
 | 
					-- possible WISHME here: technic-driven high-pressure pumps
 | 
				
			||||||
 | 
					register.intake = function(nodename, maxpressure, intakefn)
 | 
				
			||||||
 | 
						-- check for duplicate registration of this node
 | 
				
			||||||
 | 
						local list = pipeworks.flowables.inputs.list
 | 
				
			||||||
 | 
						checkbase(nodename)
 | 
				
			||||||
 | 
						if list[nodename] then duplicateerr("pipeworks.flowables.inputs", nodename) end
 | 
				
			||||||
 | 
						list[nodename] = { maxpressure=maxpressure, intakefn=intakefn }
 | 
				
			||||||
 | 
						regwarning("intake", nodename)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Register a node as a simple intake:
 | 
				
			||||||
 | 
					-- tries to absorb water source nodes from it's surroundings.
 | 
				
			||||||
 | 
					-- may exceed limit slightly due to needing to absorb whole nodes.
 | 
				
			||||||
 | 
					register.intake_simple = function(nodename, maxpressure)
 | 
				
			||||||
 | 
						register.intake(nodename, maxpressure, pipeworks.flowlogic.check_for_liquids_v2)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Register a node as an output.
 | 
				
			||||||
 | 
					-- Expects node to already be a flowable.
 | 
				
			||||||
 | 
					-- upper and lower thresholds have different meanings depending on whether finite liquid mode is in effect.
 | 
				
			||||||
 | 
					-- if not (the default unless auto-detected),
 | 
				
			||||||
 | 
					-- nodes above their upper threshold have their outputfn invoked (and pressure deducted),
 | 
				
			||||||
 | 
					-- nodes between upper and lower are left idle,
 | 
				
			||||||
 | 
					-- and nodes below lower have their cleanup fn invoked (to say remove water sources).
 | 
				
			||||||
 | 
					-- the upper and lower difference acts as a hysteresis to try and avoid "gaps" in the flow.
 | 
				
			||||||
 | 
					-- if finite mode is on, upper is ignored and lower is used to determine whether to run outputfn;
 | 
				
			||||||
 | 
					-- cleanupfn is ignored in this mode as finite mode assumes something causes water to move itself.
 | 
				
			||||||
 | 
					register.output = function(nodename, upper, lower, outputfn, cleanupfn)
 | 
				
			||||||
 | 
						if pipeworks.flowables.outputs.list[nodename] then
 | 
				
			||||||
 | 
							error("pipeworks.flowables.outputs duplicate registration!")
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						checkbase(nodename)
 | 
				
			||||||
 | 
						pipeworks.flowables.outputs.list[nodename] = {
 | 
				
			||||||
 | 
							upper=upper,
 | 
				
			||||||
 | 
							lower=lower,
 | 
				
			||||||
 | 
							outputfn=outputfn,
 | 
				
			||||||
 | 
							cleanupfn=cleanupfn,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						-- output ABM now part of main flow logic ABM to preserve ordering.
 | 
				
			||||||
 | 
						-- note that because outputs have to be a flowable first
 | 
				
			||||||
 | 
						-- (and the installation of the flow logic ABM is conditional),
 | 
				
			||||||
 | 
						-- registered output nodes for new_flow_logic is also still conditional on the enable flag.
 | 
				
			||||||
 | 
						regwarning("output node", nodename)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- register a simple output:
 | 
				
			||||||
 | 
					-- drains pressure by attempting to place water in nearby nodes,
 | 
				
			||||||
 | 
					-- which can be set by passing a list of offset vectors.
 | 
				
			||||||
 | 
					-- will attempt to drain as many whole nodes as there are positions in the offset list.
 | 
				
			||||||
 | 
					-- for meanings of upper and lower, see register.output() above.
 | 
				
			||||||
 | 
					-- non-finite mode:
 | 
				
			||||||
 | 
					--	above upper pressure: places water sources as appropriate, keeps draining pressure.
 | 
				
			||||||
 | 
					--	below lower presssure: removes it's neighbour water sources.
 | 
				
			||||||
 | 
					-- finite mode:
 | 
				
			||||||
 | 
					--	same as for above pressure in non-finite mode,
 | 
				
			||||||
 | 
					--	but only drains pressure when water source nodes are actually placed.
 | 
				
			||||||
 | 
					register.output_simple = function(nodename, upper, lower, neighbours)
 | 
				
			||||||
 | 
						local outputfn = pipeworks.flowlogic.helpers.make_neighbour_output_fixed(neighbours)
 | 
				
			||||||
 | 
						local cleanupfn = pipeworks.flowlogic.helpers.make_neighbour_cleanup_fixed(neighbours)
 | 
				
			||||||
 | 
						register.output(nodename, upper, lower, outputfn, cleanupfn)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- common base checking for transition nodes
 | 
				
			||||||
 | 
					-- ensures the node has only been registered once as a transition.
 | 
				
			||||||
 | 
					local transition_list = pipeworks.flowables.transitions.list
 | 
				
			||||||
 | 
					local insert_transition_base = function(nodename)
 | 
				
			||||||
 | 
						checkbase(nodename)
 | 
				
			||||||
 | 
						if transition_list[nodename] then duplicateerr("base transition", nodename) end
 | 
				
			||||||
 | 
						transition_list[nodename] = true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- register a simple transition set.
 | 
				
			||||||
 | 
					-- expects a table with nodenames as keys and threshold pressures as values.
 | 
				
			||||||
 | 
					-- internally, the table is sorted by value, and when one of these nodes needs to transition,
 | 
				
			||||||
 | 
					-- the table is searched starting from the lowest (even if it's value is non-zero),
 | 
				
			||||||
 | 
					-- until a value is found which is higher than or equal to the current node pressure.
 | 
				
			||||||
 | 
					-- ex. nodeset = { ["mod:level_0"] = 0, ["mod:level_1"] = 1, --[[ ... ]] }
 | 
				
			||||||
 | 
					local simpleseterror = function(msg)
 | 
				
			||||||
 | 
						error("register.transition_simple_set(): "..msg)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					local simple_transitions = pipeworks.flowables.transitions.simple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					register.transition_simple_set = function(nodeset, extras)
 | 
				
			||||||
 | 
						local set = {}
 | 
				
			||||||
 | 
						if extras == nil then extras = {} end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						local length = #nodeset
 | 
				
			||||||
 | 
						if length < 2 then simpleseterror("nodeset needs at least two elements!") end
 | 
				
			||||||
 | 
						for index, element in ipairs(nodeset) do
 | 
				
			||||||
 | 
							if type(element) ~= "table" then simpleseterror("element "..tostring(index).." in nodeset was not table!") end
 | 
				
			||||||
 | 
							local nodename = element[1]
 | 
				
			||||||
 | 
							local value = element[2]
 | 
				
			||||||
 | 
							if type(nodename) ~= "string" then simpleseterror("nodename "..tostring(nodename).."was not a string!") end
 | 
				
			||||||
 | 
							if type(value) ~= "number" then simpleseterror("pressure value "..tostring(value).."was not a number!") end
 | 
				
			||||||
 | 
							insert_transition_base(nodename)
 | 
				
			||||||
 | 
							if simple_transitions[nodename] then duplicateerr("simple transition set", nodename) end
 | 
				
			||||||
 | 
							-- assigning set to table is done separately below
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							table.insert(set, { nodename=nodename, threshold=value })
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- sort pressure values, smallest first
 | 
				
			||||||
 | 
						local smallest_first = function(a, b)
 | 
				
			||||||
 | 
							return a.threshold < b.threshold
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						table.sort(set, smallest_first)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- individual registration of each node, all sharing this set,
 | 
				
			||||||
 | 
						-- so each node in the set will transition to the correct target node.
 | 
				
			||||||
 | 
						for _, element in ipairs(set) do
 | 
				
			||||||
 | 
							--pipeworks.logger("register.transition_simple_set() after sort: nodename "..element.nodename.." value "..tostring(element.threshold))
 | 
				
			||||||
 | 
							simple_transitions[element.nodename] = set
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- handle extra options
 | 
				
			||||||
 | 
						-- if mesecons rules table was passed, set for each node
 | 
				
			||||||
 | 
						if extras.mesecons then
 | 
				
			||||||
 | 
							local mesecons_rules = pipeworks.flowables.transitions.mesecons
 | 
				
			||||||
 | 
							for _, element in ipairs(set) do
 | 
				
			||||||
 | 
								mesecons_rules[element.nodename] = extras.mesecons
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@@ -1,19 +1,48 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
-- the default tube and default textures
 | 
					-- the default tube and default textures
 | 
				
			||||||
pipeworks.register_tube("pipeworks:tube", "Pneumatic tube segment")
 | 
					pipeworks.register_tube("pipeworks:tube", S("Pneumatic tube segment"))
 | 
				
			||||||
minetest.register_craft( {
 | 
					minetest.register_craft( {
 | 
				
			||||||
	output = "pipeworks:tube_1 6",
 | 
						output = "pipeworks:tube_1 6",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
	        { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
						        { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
	        { "", "", "" },
 | 
						        { "", "", "" },
 | 
				
			||||||
	        { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
						        { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- The hammers that can be used to break/repair tubes
 | 
				
			||||||
 | 
					local allowed_hammers = {
 | 
				
			||||||
 | 
						"anvil:hammer",
 | 
				
			||||||
 | 
						"cottages:hammer",
 | 
				
			||||||
 | 
						"glooptest:hammer_steel",
 | 
				
			||||||
 | 
						"glooptest:hammer_bronze",
 | 
				
			||||||
 | 
						"glooptest:hammer_diamond",
 | 
				
			||||||
 | 
						"glooptest:hammer_mese",
 | 
				
			||||||
 | 
						"glooptest:hammer_alatro",
 | 
				
			||||||
 | 
						"glooptest:hammer_arol"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Convert the above list to a format that's easier to look up
 | 
				
			||||||
 | 
					for _,hammer in ipairs(allowed_hammers) do
 | 
				
			||||||
 | 
						allowed_hammers[hammer] = true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Check if the player is holding a suitable hammer or not - if they are, apply wear to it
 | 
				
			||||||
 | 
					function pipeworks.check_and_wear_hammer(player)
 | 
				
			||||||
 | 
						local itemstack = player:get_wielded_item()
 | 
				
			||||||
 | 
						local wieldname = itemstack:get_name()
 | 
				
			||||||
 | 
						if allowed_hammers[wieldname] then
 | 
				
			||||||
 | 
							itemstack:add_wear(1000)
 | 
				
			||||||
 | 
							player:set_wielded_item(itemstack)
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						return false
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodecolor = 0xffff3030
 | 
					local nodecolor = 0xffff3030
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.register_tube("pipeworks:broken_tube", {
 | 
					pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			||||||
	description = "Broken Tube (you hacker you)",
 | 
						description = S("Broken Tube"),
 | 
				
			||||||
	plain = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } },
 | 
						plain = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } },
 | 
				
			||||||
	noctr = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } },
 | 
						noctr = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } },
 | 
				
			||||||
	ends  = { { name = "pipeworks_broken_tube_end.png",   color = nodecolor } },
 | 
						ends  = { { name = "pipeworks_broken_tube_end.png",   color = nodecolor } },
 | 
				
			||||||
@@ -35,31 +64,49 @@ pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			|||||||
			local itemstack = puncher:get_wielded_item()
 | 
								local itemstack = puncher:get_wielded_item()
 | 
				
			||||||
			local wieldname = itemstack:get_name()
 | 
								local wieldname = itemstack:get_name()
 | 
				
			||||||
			local playername = puncher:get_player_name()
 | 
								local playername = puncher:get_player_name()
 | 
				
			||||||
			print("[Pipeworks] "..playername.." struck a broken tube at "..minetest.pos_to_string(pos))
 | 
								local log_msg = playername.." struck a broken tube at "..minetest.pos_to_string(pos).."\n            "
 | 
				
			||||||
			if   wieldname == "anvil:hammer"
 | 
					 | 
				
			||||||
			  or wieldname == "cottages:hammer"
 | 
					 | 
				
			||||||
			  or wieldname == "glooptest:hammer_steel"
 | 
					 | 
				
			||||||
			  or wieldname == "glooptest:hammer_bronze"
 | 
					 | 
				
			||||||
			  or wieldname == "glooptest:hammer_diamond"
 | 
					 | 
				
			||||||
			  or wieldname == "glooptest:hammer_mese"
 | 
					 | 
				
			||||||
			  or wieldname == "glooptest:hammer_alatro"
 | 
					 | 
				
			||||||
			  or wieldname == "glooptest:hammer_arol" then
 | 
					 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = minetest.get_meta(pos)
 | 
				
			||||||
			local was_node = minetest.deserialize(meta:get_string("the_tube_was"))
 | 
								local was_node = minetest.deserialize(meta:get_string("the_tube_was"))
 | 
				
			||||||
				if was_node and was_node ~= "" then
 | 
								if not was_node then
 | 
				
			||||||
					print("            with "..wieldname.." to repair it.")
 | 
									pipeworks.logger(log_msg.."but it can't be repaired.")
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								if not pipeworks.check_and_wear_hammer(puncher) then
 | 
				
			||||||
 | 
									if wieldname == "" then
 | 
				
			||||||
 | 
										pipeworks.logger(log_msg.."by hand. It's not very effective.")
 | 
				
			||||||
 | 
										if minetest.settings:get_bool("enable_damage") then
 | 
				
			||||||
 | 
											minetest.chat_send_player(playername,S("Broken tubes may be a bit sharp. Perhaps try with a hammer?"))
 | 
				
			||||||
 | 
											puncher:set_hp(puncher:get_hp()-1)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										pipeworks.logger(log_msg.."with "..wieldname.." but that tool is too weak.")
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								log_msg = log_msg.."with "..wieldname.." to repair it"
 | 
				
			||||||
 | 
								local nodedef = minetest.registered_nodes[was_node.name]
 | 
				
			||||||
 | 
								if nodedef then
 | 
				
			||||||
 | 
									pipeworks.logger(log_msg..".")
 | 
				
			||||||
 | 
									if nodedef.tube and nodedef.tube.on_repair then
 | 
				
			||||||
 | 
										nodedef.tube.on_repair(pos, was_node)
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
					minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 })
 | 
										minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 })
 | 
				
			||||||
					pipeworks.scan_for_tube_objects(pos)
 | 
										pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
					itemstack:add_wear(1000)
 | 
					 | 
				
			||||||
					puncher:set_wielded_item(itemstack)
 | 
					 | 
				
			||||||
					return itemstack
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
					print("            but it can't be repaired.")
 | 
					 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				print("            with "..wieldname.." but that tool is too weak.")
 | 
									pipeworks.logger(log_msg.." but original node "..was_node.name.." is not registered anymore.")
 | 
				
			||||||
			end
 | 
									minetest.chat_send_player(playername, S("This tube cannot be repaired."))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							allow_metadata_inventory_put = function()
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							allow_metadata_inventory_move = function()
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
 | 
							allow_metadata_inventory_take = function()
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							end,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,7 +116,7 @@ pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			|||||||
if pipeworks.enable_priority_tube then
 | 
					if pipeworks.enable_priority_tube then
 | 
				
			||||||
	local color = "#ff3030:128"
 | 
						local color = "#ff3030:128"
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:priority_tube", {
 | 
						pipeworks.register_tube("pipeworks:priority_tube", {
 | 
				
			||||||
			description = "High Priority Tube Segment",
 | 
								description = S("High Priority Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_tube_inv.png^[colorize:" .. color,
 | 
								inventory_image = "pipeworks_tube_inv.png^[colorize:" .. color,
 | 
				
			||||||
			plain = { { name = "pipeworks_tube_plain.png", color = nodecolor } },
 | 
								plain = { { name = "pipeworks_tube_plain.png", color = nodecolor } },
 | 
				
			||||||
			noctr = { { name = "pipeworks_tube_noctr.png", color = nodecolor } },
 | 
								noctr = { { name = "pipeworks_tube_noctr.png", color = nodecolor } },
 | 
				
			||||||
@@ -79,19 +126,11 @@ if pipeworks.enable_priority_tube then
 | 
				
			|||||||
				tube = { priority = 150 } -- higher than tubedevices (100)
 | 
									tube = { priority = 150 } -- higher than tubedevices (100)
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft( {
 | 
					 | 
				
			||||||
		output = "pipeworks:priority_tube_1 6",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
			{ "default:gold_ingot", "", "default:gold_ingot" },
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_accelerator_tube then
 | 
					if pipeworks.enable_accelerator_tube then
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:accelerator_tube", {
 | 
						pipeworks.register_tube("pipeworks:accelerator_tube", {
 | 
				
			||||||
			description = "Accelerating Pneumatic Tube Segment",
 | 
								description = S("Accelerating Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_accelerator_tube_inv.png",
 | 
								inventory_image = "pipeworks_accelerator_tube_inv.png",
 | 
				
			||||||
			plain = { "pipeworks_accelerator_tube_plain.png" },
 | 
								plain = { "pipeworks_accelerator_tube_plain.png" },
 | 
				
			||||||
			noctr = { "pipeworks_accelerator_tube_noctr.png" },
 | 
								noctr = { "pipeworks_accelerator_tube_noctr.png" },
 | 
				
			||||||
@@ -104,19 +143,11 @@ if pipeworks.enable_accelerator_tube then
 | 
				
			|||||||
					end}
 | 
										end}
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft( {
 | 
					 | 
				
			||||||
		output = "pipeworks:accelerator_tube_1 2",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
			{ "default:mese_crystal_fragment", "default:steel_ingot", "default:mese_crystal_fragment" },
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_crossing_tube then
 | 
					if pipeworks.enable_crossing_tube then
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:crossing_tube", {
 | 
						pipeworks.register_tube("pipeworks:crossing_tube", {
 | 
				
			||||||
			description = "Crossing Pneumatic Tube Segment",
 | 
								description = S("Crossing Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_crossing_tube_inv.png",
 | 
								inventory_image = "pipeworks_crossing_tube_inv.png",
 | 
				
			||||||
			plain = { "pipeworks_crossing_tube_plain.png" },
 | 
								plain = { "pipeworks_crossing_tube_plain.png" },
 | 
				
			||||||
			noctr = { "pipeworks_crossing_tube_noctr.png" },
 | 
								noctr = { "pipeworks_crossing_tube_noctr.png" },
 | 
				
			||||||
@@ -126,28 +157,31 @@ if pipeworks.enable_crossing_tube then
 | 
				
			|||||||
				tube = {can_go = function(pos, node, velocity, stack) return {velocity} end }
 | 
									tube = {can_go = function(pos, node, velocity, stack) return {velocity} end }
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft( {
 | 
					 | 
				
			||||||
		output = "pipeworks:crossing_tube_1 5",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			{ "", "pipeworks:tube_1", "" },
 | 
					 | 
				
			||||||
			{ "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" },
 | 
					 | 
				
			||||||
			{ "", "pipeworks:tube_1", "" }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
				
			||||||
 | 
						and "clip" or true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_one_way_tube then
 | 
					if pipeworks.enable_one_way_tube then
 | 
				
			||||||
 | 
						local tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png",
 | 
				
			||||||
 | 
							"pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"}
 | 
				
			||||||
 | 
						for i, tile in ipairs(tiles) do
 | 
				
			||||||
 | 
							tiles[i] = pipeworks.make_tube_tile(tile)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	minetest.register_node("pipeworks:one_way_tube", {
 | 
						minetest.register_node("pipeworks:one_way_tube", {
 | 
				
			||||||
		description = "One way tube",
 | 
							description = S("One way tube"),
 | 
				
			||||||
		tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png",
 | 
							tiles = tiles,
 | 
				
			||||||
			"pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"},
 | 
							use_texture_alpha = texture_alpha_mode,
 | 
				
			||||||
		paramtype2 = "facedir",
 | 
							paramtype2 = "facedir",
 | 
				
			||||||
		drawtype = "nodebox",
 | 
							drawtype = "nodebox",
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		node_box = {type = "fixed",
 | 
							node_box = {type = "fixed",
 | 
				
			||||||
			fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
 | 
								fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
 | 
				
			||||||
		groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1},
 | 
							groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
		sounds = default.node_sound_wood_defaults(),
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
 | 
							_sound_def = {
 | 
				
			||||||
 | 
								key = "node_sound_wood_defaults",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		tube = {
 | 
							tube = {
 | 
				
			||||||
			connect_sides = {left = 1, right = 1},
 | 
								connect_sides = {left = 1, right = 1},
 | 
				
			||||||
			can_go = function(pos, node, velocity, stack)
 | 
								can_go = function(pos, node, velocity, stack)
 | 
				
			||||||
@@ -161,13 +195,9 @@ if pipeworks.enable_one_way_tube then
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		after_place_node = pipeworks.after_place,
 | 
							after_place_node = pipeworks.after_place,
 | 
				
			||||||
		after_dig_node = pipeworks.after_dig,
 | 
							after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
 | 
							on_rotate = pipeworks.on_rotate,
 | 
				
			||||||
 | 
							check_for_pole = pipeworks.check_for_vert_tube,
 | 
				
			||||||
 | 
							check_for_horiz_pole = pipeworks.check_for_horiz_tube
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft({
 | 
						pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:one_way_tube"
 | 
				
			||||||
		output = "pipeworks:one_way_tube 2",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
			{ "group:stick", "default:mese_crystal", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,9 @@ pipeworks_enable_digiline_detector_tube (Enable Digiline Detector Tube) bool tru
 | 
				
			|||||||
#Enable mesecon signal conducting tube.
 | 
					#Enable mesecon signal conducting tube.
 | 
				
			||||||
pipeworks_enable_conductor_tube (Enable Conductor Tube) bool true
 | 
					pipeworks_enable_conductor_tube (Enable Conductor Tube) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Enable digiline signal conducting tube.
 | 
				
			||||||
 | 
					pipeworks_enable_digiline_conductor_tube (Enable Digiline Conductor Tube) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Enable accelerator tube.
 | 
					#Enable accelerator tube.
 | 
				
			||||||
pipeworks_enable_accelerator_tube (Enable Accelerator Tube) bool true
 | 
					pipeworks_enable_accelerator_tube (Enable Accelerator Tube) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -60,6 +63,10 @@ pipeworks_enable_one_way_tube (Enable One Way Tube) bool true
 | 
				
			|||||||
#always go to it if there are multible ways.
 | 
					#always go to it if there are multible ways.
 | 
				
			||||||
pipeworks_enable_priority_tube (Enable High Priority Tube) bool true
 | 
					pipeworks_enable_priority_tube (Enable High Priority Tube) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Enable lua controlled tube.
 | 
				
			||||||
 | 
					#It is comparable with mesecons luacontroller.
 | 
				
			||||||
 | 
					pipeworks_enable_lua_tube (Enable Lua controlled Tube) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#Enable cyclic mode.
 | 
					#Enable cyclic mode.
 | 
				
			||||||
pipeworks_enable_cyclic_mode (Enable Cyclic Mode) bool true
 | 
					pipeworks_enable_cyclic_mode (Enable Cyclic Mode) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,3 +75,15 @@ pipeworks_drop_on_routing_fail (Drop On Routing Fail) bool false
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#Delete item on clearobject.
 | 
					#Delete item on clearobject.
 | 
				
			||||||
pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true
 | 
					pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Use real visible entities in tubes within active areas.
 | 
				
			||||||
 | 
					#When disabled, tubes are made opaque.
 | 
				
			||||||
 | 
					pipeworks_use_real_entities (Use Real Entities) bool true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Target interval between tube entity steps.
 | 
				
			||||||
 | 
					#A high value may cause issues with tube entity visuals.
 | 
				
			||||||
 | 
					#A value 0.2 or above may cause issues with accelerator tubes.
 | 
				
			||||||
 | 
					pipeworks_entity_update_interval (Entity Update Interval) float 0 0 0.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# if set to true, items passing through teleport tubes will log log where they came from and where they went.
 | 
				
			||||||
 | 
					pipeworks_log_teleport_tubes (Log Teleport Tubes) bool false
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										149
									
								
								signal_tubes.lua
									
									
									
									
									
								
							
							
						
						@@ -1,17 +1,29 @@
 | 
				
			|||||||
if pipeworks.enable_detector_tube then
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
	local detector_tube_step = 5 * tonumber(minetest.settings:get("dedicated_server_step"))
 | 
					
 | 
				
			||||||
 | 
					-- the minetest.after() calls below can sometimes trigger after a tube
 | 
				
			||||||
 | 
					-- breaks, at which point item_exit() is no longer valid, so we have to make
 | 
				
			||||||
 | 
					-- sure that there even IS a callback to run, first.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function after_break(pos)
 | 
				
			||||||
 | 
						local name = minetest.get_node(pos).name
 | 
				
			||||||
 | 
						if minetest.registered_nodes[name].item_exit then
 | 
				
			||||||
 | 
							minetest.registered_nodes[name].item_exit(pos)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if minetest.get_modpath("mesecons") and pipeworks.enable_detector_tube then
 | 
				
			||||||
 | 
						local detector_tube_step = 5 * (tonumber(minetest.settings:get("dedicated_server_step")) or 0.09)
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:detector_tube_on", {
 | 
						pipeworks.register_tube("pipeworks:detector_tube_on", {
 | 
				
			||||||
			description = "Detecting Pneumatic Tube Segment on (you hacker you)",
 | 
								description = S("Detecting Pneumatic Tube Segment on"),
 | 
				
			||||||
			inventory_image = "pipeworks_detector_tube_inv.png",
 | 
								inventory_image = "pipeworks_detector_tube_inv.png",
 | 
				
			||||||
			plain = { "pipeworks_detector_tube_plain.png" },
 | 
								plain = { "pipeworks_detector_tube_plain.png" },
 | 
				
			||||||
			node_def = {
 | 
								node_def = {
 | 
				
			||||||
				tube = {can_go = function(pos, node, velocity, stack)
 | 
									tube = {can_go = function(pos, node, velocity, stack)
 | 
				
			||||||
						 local meta = minetest.get_meta(pos)
 | 
											 local meta = minetest.get_meta(pos)
 | 
				
			||||||
						 local name = minetest.get_node(pos).name
 | 
					 | 
				
			||||||
						 local nitems = meta:get_int("nitems")+1
 | 
											 local nitems = meta:get_int("nitems")+1
 | 
				
			||||||
						 meta:set_int("nitems", nitems)
 | 
											 meta:set_int("nitems", nitems)
 | 
				
			||||||
						 local saved_pos = vector.new(pos)
 | 
											 local saved_pos = vector.new(pos)
 | 
				
			||||||
						 minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos)
 | 
											 minetest.after(detector_tube_step, after_break, saved_pos)
 | 
				
			||||||
						 return pipeworks.notvel(pipeworks.meseadjlist,velocity)
 | 
											 return pipeworks.notvel(pipeworks.meseadjlist,velocity)
 | 
				
			||||||
					end},
 | 
										end},
 | 
				
			||||||
				groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
									groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
				
			||||||
@@ -33,14 +45,12 @@ if pipeworks.enable_detector_tube then
 | 
				
			|||||||
				on_construct = function(pos)
 | 
									on_construct = function(pos)
 | 
				
			||||||
					 local meta = minetest.get_meta(pos)
 | 
										 local meta = minetest.get_meta(pos)
 | 
				
			||||||
					 meta:set_int("nitems", 1)
 | 
										 meta:set_int("nitems", 1)
 | 
				
			||||||
					 local name = minetest.get_node(pos).name
 | 
										 minetest.after(detector_tube_step, after_break, pos)
 | 
				
			||||||
					 local saved_pos = vector.new(pos)
 | 
					 | 
				
			||||||
					 minetest.after(detector_tube_step, minetest.registered_nodes[name].item_exit, saved_pos)
 | 
					 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:detector_tube_off", {
 | 
						pipeworks.register_tube("pipeworks:detector_tube_off", {
 | 
				
			||||||
			description = "Detecting Pneumatic Tube Segment",
 | 
								description = S("Detecting Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_detector_tube_inv.png",
 | 
								inventory_image = "pipeworks_detector_tube_inv.png",
 | 
				
			||||||
			plain = { "pipeworks_detector_tube_plain.png" },
 | 
								plain = { "pipeworks_detector_tube_plain.png" },
 | 
				
			||||||
			node_def = {
 | 
								node_def = {
 | 
				
			||||||
@@ -60,16 +70,17 @@ if pipeworks.enable_detector_tube then
 | 
				
			|||||||
	minetest.register_craft( {
 | 
						minetest.register_craft( {
 | 
				
			||||||
		output = "pipeworks:detector_tube_off_1 2",
 | 
							output = "pipeworks:detector_tube_off_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
			{ "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" },
 | 
								{ "mesecons:mesecon", "mesecons_materials:silicon", "mesecons:mesecon" },
 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("digilines") and pipeworks.enable_digiline_detector_tube then
 | 
					local digiline_enabled = minetest.get_modpath("digilines") ~= nil
 | 
				
			||||||
 | 
					if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:digiline_detector_tube", {
 | 
						pipeworks.register_tube("pipeworks:digiline_detector_tube", {
 | 
				
			||||||
			description = "Digiline Detecting Pneumatic Tube Segment",
 | 
								description = S("Digiline Detecting Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_digiline_detector_tube_inv.png",
 | 
								inventory_image = "pipeworks_digiline_detector_tube_inv.png",
 | 
				
			||||||
			plain = { "pipeworks_digiline_detector_tube_plain.png" },
 | 
								plain = { "pipeworks_digiline_detector_tube_plain.png" },
 | 
				
			||||||
			node_def = {
 | 
								node_def = {
 | 
				
			||||||
@@ -78,20 +89,27 @@ if minetest.get_modpath("digilines") and pipeworks.enable_digiline_detector_tube
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
						local setchan = meta:get_string("channel")
 | 
											local setchan = meta:get_string("channel")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_string())
 | 
											digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_table())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						return pipeworks.notvel(pipeworks.meseadjlist, velocity)
 | 
											return pipeworks.notvel(pipeworks.meseadjlist, velocity)
 | 
				
			||||||
					end},
 | 
										end},
 | 
				
			||||||
				on_construct = function(pos)
 | 
									on_construct = function(pos)
 | 
				
			||||||
					local meta = minetest.get_meta(pos)
 | 
										local meta = minetest.get_meta(pos)
 | 
				
			||||||
					meta:set_string("formspec",
 | 
										meta:set_string("formspec",
 | 
				
			||||||
						"size[8.6,2.2]"..
 | 
											"size[8.5,2.2]"..
 | 
				
			||||||
						"field[0.6,0.6;8,1;channel;Channel:;${channel}]"..
 | 
											"image[0.2,0;1,1;pipeworks_digiline_detector_tube_inv.png]"..
 | 
				
			||||||
						"image[0.3,1.3;1,1;pipeworks_digiline_detector_tube_inv.png]"..
 | 
											"label[1.2,0.2;"..S("Digiline Detecting Tube").."]"..
 | 
				
			||||||
						"label[1.6,1.2;Digiline Detecting Tube]"
 | 
											"field[0.5,1.6;4.6,1;channel;"..S("Channel")..";${channel}]"..
 | 
				
			||||||
 | 
											"button[4.8,1.3;1.5,1;set_channel;"..S("Set").."]"..
 | 
				
			||||||
 | 
											"button_exit[6.3,1.3;2,1;close;"..S("Close").."]"
 | 
				
			||||||
					)
 | 
										)
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				on_receive_fields = function(pos, formname, fields, sender)
 | 
									on_receive_fields = function(pos, formname, fields, sender)
 | 
				
			||||||
 | 
										if (fields.quit and not fields.key_enter_field)
 | 
				
			||||||
 | 
										or (fields.key_enter_field ~= "channel" and not fields.set_channel)
 | 
				
			||||||
 | 
										or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
					if fields.channel then
 | 
										if fields.channel then
 | 
				
			||||||
						minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
											minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
@@ -101,7 +119,10 @@ if minetest.get_modpath("digilines") and pipeworks.enable_digiline_detector_tube
 | 
				
			|||||||
					receptor = {},
 | 
										receptor = {},
 | 
				
			||||||
					effector = {
 | 
										effector = {
 | 
				
			||||||
						action = function(pos,node,channel,msg) end
 | 
											action = function(pos,node,channel,msg) end
 | 
				
			||||||
					}
 | 
										},
 | 
				
			||||||
 | 
										wire = {
 | 
				
			||||||
 | 
											rules = pipeworks.digilines_rules
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -109,16 +130,16 @@ if minetest.get_modpath("digilines") and pipeworks.enable_digiline_detector_tube
 | 
				
			|||||||
	minetest.register_craft( {
 | 
						minetest.register_craft( {
 | 
				
			||||||
		output = "pipeworks:digiline_detector_tube_1 2",
 | 
							output = "pipeworks:digiline_detector_tube_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
			{ "digilines:wire_std_00000000", "mesecons_materials:silicon", "digilines:wire_std_00000000" },
 | 
								{ "digilines:wire_std_00000000", "mesecons_materials:silicon", "digilines:wire_std_00000000" },
 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_conductor_tube then
 | 
					if minetest.get_modpath("mesecons") and pipeworks.enable_conductor_tube then
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:conductor_tube_off", {
 | 
						pipeworks.register_tube("pipeworks:conductor_tube_off", {
 | 
				
			||||||
			description = "Conducting Pneumatic Tube Segment",
 | 
								description = S("Conducting Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_conductor_tube_inv.png",
 | 
								inventory_image = "pipeworks_conductor_tube_inv.png",
 | 
				
			||||||
			short = "pipeworks_conductor_tube_short.png",
 | 
								short = "pipeworks_conductor_tube_short.png",
 | 
				
			||||||
			plain = { "pipeworks_conductor_tube_plain.png" },
 | 
								plain = { "pipeworks_conductor_tube_plain.png" },
 | 
				
			||||||
@@ -132,7 +153,7 @@ if pipeworks.enable_conductor_tube then
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:conductor_tube_on", {
 | 
						pipeworks.register_tube("pipeworks:conductor_tube_on", {
 | 
				
			||||||
			description = "Conducting Pneumatic Tube Segment on (you hacker you)",
 | 
								description = S("Conducting Pneumatic Tube Segment on"),
 | 
				
			||||||
			inventory_image = "pipeworks_conductor_tube_inv.png",
 | 
								inventory_image = "pipeworks_conductor_tube_inv.png",
 | 
				
			||||||
			short = "pipeworks_conductor_tube_short.png",
 | 
								short = "pipeworks_conductor_tube_short.png",
 | 
				
			||||||
			plain = { "pipeworks_conductor_tube_on_plain.png" },
 | 
								plain = { "pipeworks_conductor_tube_on_plain.png" },
 | 
				
			||||||
@@ -147,14 +168,80 @@ if pipeworks.enable_conductor_tube then
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						minetest.register_craft({
 | 
				
			||||||
		output = "pipeworks:conductor_tube_off_1 6",
 | 
							type = "shapeless",
 | 
				
			||||||
		recipe = {
 | 
							output = "pipeworks:conductor_tube_off_1",
 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
							recipe = {"pipeworks:tube_1", "mesecons:mesecon"}
 | 
				
			||||||
			{ "mesecons:mesecon", "mesecons:mesecon", "mesecons:mesecon" },
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if digiline_enabled and pipeworks.enable_digiline_conductor_tube then
 | 
				
			||||||
 | 
						pipeworks.register_tube("pipeworks:digiline_conductor_tube", {
 | 
				
			||||||
 | 
							description = S("Digiline Conducting Pneumatic Tube Segment"),
 | 
				
			||||||
 | 
							inventory_image = "pipeworks_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png",
 | 
				
			||||||
 | 
							short = "pipeworks_tube_short.png^pipeworks_digiline_conductor_tube_short.png",
 | 
				
			||||||
 | 
							plain = {"pipeworks_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"},
 | 
				
			||||||
 | 
							noctr = {"pipeworks_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
				
			||||||
 | 
							ends = {"pipeworks_tube_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
				
			||||||
 | 
							node_def = {digiline = {wire = {rules = pipeworks.digilines_rules}}},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							type = "shapeless",
 | 
				
			||||||
 | 
							output = "pipeworks:digiline_conductor_tube_1",
 | 
				
			||||||
 | 
							recipe = {"pipeworks:tube_1", "digilines:wire_std_00000000"}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if digiline_enabled and pipeworks.enable_digiline_conductor_tube and
 | 
				
			||||||
 | 
							pipeworks.enable_conductor_tube then
 | 
				
			||||||
 | 
						pipeworks.register_tube("pipeworks:mesecon_and_digiline_conductor_tube_off", {
 | 
				
			||||||
 | 
							description = S("Mesecon and Digiline Conducting Pneumatic Tube Segment"),
 | 
				
			||||||
 | 
							inventory_image = "pipeworks_conductor_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png",
 | 
				
			||||||
 | 
							short = "pipeworks_conductor_tube_short.png^pipeworks_digiline_conductor_tube_short.png",
 | 
				
			||||||
 | 
							plain = {"pipeworks_conductor_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"},
 | 
				
			||||||
 | 
							noctr = {"pipeworks_conductor_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
				
			||||||
 | 
							ends = {"pipeworks_conductor_tube_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
				
			||||||
 | 
							node_def = {
 | 
				
			||||||
 | 
								digiline = {wire = {rules = pipeworks.digilines_rules}},
 | 
				
			||||||
 | 
								groups = {mesecon = 2},
 | 
				
			||||||
 | 
								mesecons = {conductor = {
 | 
				
			||||||
 | 
									state = "off",
 | 
				
			||||||
 | 
									rules = pipeworks.mesecons_rules,
 | 
				
			||||||
 | 
									onstate = "pipeworks:mesecon_and_digiline_conductor_tube_on_#id"
 | 
				
			||||||
 | 
								}},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						pipeworks.register_tube("pipeworks:mesecon_and_digiline_conductor_tube_on", {
 | 
				
			||||||
 | 
							description = S("Mesecon and Digiline Conducting Pneumatic Tube Segment on"),
 | 
				
			||||||
 | 
							inventory_image = "pipeworks_conductor_tube_inv.png^pipeworks_digiline_conductor_tube_inv.png",
 | 
				
			||||||
 | 
							short = "pipeworks_conductor_tube_short.png^pipeworks_digiline_conductor_tube_short.png",
 | 
				
			||||||
 | 
							plain = {"pipeworks_conductor_tube_on_plain.png^pipeworks_digiline_conductor_tube_plain.png"},
 | 
				
			||||||
 | 
							noctr = {"pipeworks_conductor_tube_on_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
				
			||||||
 | 
							ends = {"pipeworks_conductor_tube_on_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
				
			||||||
 | 
							node_def = {
 | 
				
			||||||
 | 
								digiline = {wire = {rules = pipeworks.digilines_rules}},
 | 
				
			||||||
 | 
								groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
				
			||||||
 | 
								drop = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
 | 
								mesecons = {conductor = {
 | 
				
			||||||
 | 
									state = "on",
 | 
				
			||||||
 | 
									rules = pipeworks.mesecons_rules,
 | 
				
			||||||
 | 
									offstate = "pipeworks:mesecon_and_digiline_conductor_tube_off_#id"}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							type = "shapeless",
 | 
				
			||||||
 | 
							output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
 | 
							recipe = {"pipeworks:tube_1", "mesecons:mesecon", "digilines:wire_std_00000000"}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							type = "shapeless",
 | 
				
			||||||
 | 
							output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
 | 
							recipe = {"pipeworks:conductor_tube_off_1", "digilines:wire_std_00000000"}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						minetest.register_craft({
 | 
				
			||||||
 | 
							type = "shapeless",
 | 
				
			||||||
 | 
							output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
 | 
							recipe = {"pipeworks:digiline_conductor_tube_1", "mesecons:mesecon"}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										241
									
								
								signs_compat.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,241 @@
 | 
				
			|||||||
 | 
					-- This file adds placement rules for signs_lib, if present
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local spv = {
 | 
				
			||||||
 | 
						[4] = true,
 | 
				
			||||||
 | 
						[6] = true,
 | 
				
			||||||
 | 
						[8] = true,
 | 
				
			||||||
 | 
						[10] = true,
 | 
				
			||||||
 | 
						[13] = true,
 | 
				
			||||||
 | 
						[15] = true,
 | 
				
			||||||
 | 
						[17] = true,
 | 
				
			||||||
 | 
						[19] = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local sphns = {
 | 
				
			||||||
 | 
						[1] = true,
 | 
				
			||||||
 | 
						[3] = true,
 | 
				
			||||||
 | 
						[5] = true,
 | 
				
			||||||
 | 
						[7] = true,
 | 
				
			||||||
 | 
						[9] = true,
 | 
				
			||||||
 | 
						[11] = true,
 | 
				
			||||||
 | 
						[21] = true,
 | 
				
			||||||
 | 
						[23] = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local sphew = {
 | 
				
			||||||
 | 
						[0] = true,
 | 
				
			||||||
 | 
						[2] = true,
 | 
				
			||||||
 | 
						[12] = true,
 | 
				
			||||||
 | 
						[14] = true,
 | 
				
			||||||
 | 
						[16] = true,
 | 
				
			||||||
 | 
						[18] = true,
 | 
				
			||||||
 | 
						[20] = true,
 | 
				
			||||||
 | 
						[22] = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local owtv = {
 | 
				
			||||||
 | 
						[5] = true,
 | 
				
			||||||
 | 
						[7] = true,
 | 
				
			||||||
 | 
						[9] = true,
 | 
				
			||||||
 | 
						[11] = true,
 | 
				
			||||||
 | 
						[12] = true,
 | 
				
			||||||
 | 
						[14] = true,
 | 
				
			||||||
 | 
						[16] = true,
 | 
				
			||||||
 | 
						[18] = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local owtns = {
 | 
				
			||||||
 | 
						[0] = true,
 | 
				
			||||||
 | 
						[2] = true,
 | 
				
			||||||
 | 
						[4] = true,
 | 
				
			||||||
 | 
						[6] = true,
 | 
				
			||||||
 | 
						[8] = true,
 | 
				
			||||||
 | 
						[10] = true,
 | 
				
			||||||
 | 
						[20] = true,
 | 
				
			||||||
 | 
						[22] = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local owtew = {
 | 
				
			||||||
 | 
						[1] = true,
 | 
				
			||||||
 | 
						[3] = true,
 | 
				
			||||||
 | 
						[13] = true,
 | 
				
			||||||
 | 
						[15] = true,
 | 
				
			||||||
 | 
						[17] = true,
 | 
				
			||||||
 | 
						[19] = true,
 | 
				
			||||||
 | 
						[21] = true,
 | 
				
			||||||
 | 
						[23] = true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local vert_n = {
 | 
				
			||||||
 | 
						[3] = {[5] = true},
 | 
				
			||||||
 | 
						[6] = {[9] = true, [12] = true, [16] = true},
 | 
				
			||||||
 | 
						[7] = {[9] = true, [11] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local vert_e = {
 | 
				
			||||||
 | 
						[3] = {[5] = true},
 | 
				
			||||||
 | 
						[6] = {[5] = true, [9] = true, [16] = true},
 | 
				
			||||||
 | 
						[7] = {[7] = true, [11] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local vert_s = {
 | 
				
			||||||
 | 
						[3] = {[5] = true},
 | 
				
			||||||
 | 
						[6] = {[5] = true, [12] = true, [16] = true},
 | 
				
			||||||
 | 
						[7] = {[5] = true, [7] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local vert_w = {
 | 
				
			||||||
 | 
						[3] = {[5] = true},
 | 
				
			||||||
 | 
						[6] = {[5] = true, [9] = true, [12] = true},
 | 
				
			||||||
 | 
						[7] = {[5] = true, [9] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local horiz_n = {
 | 
				
			||||||
 | 
						[3] = {[0] = true},
 | 
				
			||||||
 | 
						[6] = {[0] = true, [4] = true, [20] = true},
 | 
				
			||||||
 | 
						[7] = {[2] = true, [10] = true},
 | 
				
			||||||
 | 
						[8] = {[0] = true},
 | 
				
			||||||
 | 
						[9] = {[2] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local horiz_e = {
 | 
				
			||||||
 | 
						[3] = {[1] = true},
 | 
				
			||||||
 | 
						[6] = {[1] = true, [17] = true, [21] = true},
 | 
				
			||||||
 | 
						[7] = {[3] = true, [19] = true},
 | 
				
			||||||
 | 
						[8] = {[1] = true},
 | 
				
			||||||
 | 
						[9] = {[3] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local horiz_s = {
 | 
				
			||||||
 | 
						[3] = {[0] = true},
 | 
				
			||||||
 | 
						[6] = {[0] = true, [8] = true, [20] = true},
 | 
				
			||||||
 | 
						[7] = {[0] = true, [4] = true},
 | 
				
			||||||
 | 
						[8] = {[0] = true},
 | 
				
			||||||
 | 
						[9] = {[0] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local horiz_w = {
 | 
				
			||||||
 | 
						[3] = {[1] = true},
 | 
				
			||||||
 | 
						[6] = {[1] = true, [13] = true, [21] = true},
 | 
				
			||||||
 | 
						[7] = {[1] = true, [13] = true},
 | 
				
			||||||
 | 
						[8] = {[1] = true},
 | 
				
			||||||
 | 
						[9] = {[1] = true},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function get_sign_dir(node, def)
 | 
				
			||||||
 | 
						if (node.param2 == 4 and def.paramtype2 == "wallmounted")
 | 
				
			||||||
 | 
						  or (node.param2 == 0 and def.paramtype2 ~= "wallmounted") then
 | 
				
			||||||
 | 
							return {["N"] = true}
 | 
				
			||||||
 | 
						elseif (node.param2 == 2 and def.paramtype2 == "wallmounted")
 | 
				
			||||||
 | 
						  or (node.param2 == 1 and def.paramtype2 ~= "wallmounted") then
 | 
				
			||||||
 | 
							return {["E"] = true}
 | 
				
			||||||
 | 
						elseif (node.param2 == 5 and def.paramtype2 == "wallmounted")
 | 
				
			||||||
 | 
						  or (node.param2 == 2 and def.paramtype2 ~= "wallmounted") then
 | 
				
			||||||
 | 
							return {["S"] = true}
 | 
				
			||||||
 | 
						elseif node.param2 == 3 then
 | 
				
			||||||
 | 
							return {["W"] = true}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						return {}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--[[
 | 
				
			||||||
 | 
					In the functions below:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 pos: the (real) position of the placed sign
 | 
				
			||||||
 | 
					 node: the sign node itself
 | 
				
			||||||
 | 
					 def: its definition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 ppos: the position of the pointed node (pipe/tube)
 | 
				
			||||||
 | 
					 pnode: the node itself
 | 
				
			||||||
 | 
					 pdef: its definition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- pipes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.check_for_vert_pipe(pos, node, def, ppos, pnode, pdef)
 | 
				
			||||||
 | 
						local signdir = get_sign_dir(node, def)
 | 
				
			||||||
 | 
						local pipenumber = pdef.pipenumber
 | 
				
			||||||
 | 
						local pipedir = pnode.param2
 | 
				
			||||||
 | 
						if string.find(pnode.name, "straight_pipe") and spv[pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["N"] and vert_n[pipenumber] and vert_n[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["E"] and vert_e[pipenumber] and vert_e[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["S"] and vert_s[pipenumber] and vert_s[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["W"] and vert_w[pipenumber] and vert_w[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.check_for_horiz_pipe(pos, node, def, ppos, pnode, pdef)
 | 
				
			||||||
 | 
						local signdir = get_sign_dir(node, def)
 | 
				
			||||||
 | 
						local pipenumber = pdef.pipenumber
 | 
				
			||||||
 | 
						local pipedir = pnode.param2
 | 
				
			||||||
 | 
						if string.find(pnode.name, "straight_pipe") then
 | 
				
			||||||
 | 
							if (signdir["N"] or signdir["S"]) and sphns[pipedir] then
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							elseif (signdir["E"] or signdir["W"]) and sphew[pipedir] then
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						elseif signdir["N"] and horiz_n[pipenumber] and horiz_n[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["E"] and horiz_e[pipenumber] and horiz_e[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["S"] and horiz_s[pipenumber] and horiz_s[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["W"] and horiz_w[pipenumber] and horiz_w[pipenumber][pipedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- tubes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.check_for_vert_tube(pos, node, def, ppos, pnode, pdef)
 | 
				
			||||||
 | 
						local signdir = get_sign_dir(node, def)
 | 
				
			||||||
 | 
						local tubenumber = pdef.tubenumber
 | 
				
			||||||
 | 
						local tubedir = pnode.param2
 | 
				
			||||||
 | 
						if pnode.name == "pipeworks:one_way_tube" and owtv[tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif tubenumber == 2 and (tubedir == 5 or tubedir == 7) then -- it's a stub pointing up or down
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["N"] and vert_n[tubenumber] and vert_n[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["E"] and vert_e[tubenumber] and vert_e[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["S"] and vert_s[tubenumber] and vert_s[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["W"] and vert_w[tubenumber] and vert_w[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pipeworks.check_for_horiz_tube(pos, node, def, ppos, pnode, pdef)
 | 
				
			||||||
 | 
						local signdir = get_sign_dir(node, def)
 | 
				
			||||||
 | 
						local tubenumber = pdef.tubenumber
 | 
				
			||||||
 | 
						local tubedir = pnode.param2
 | 
				
			||||||
 | 
						if tubenumber == 2 then -- it'a a stub pointing sideways
 | 
				
			||||||
 | 
							if (tubedir == 0 or tubedir == 2) and (signdir["N"] or signdir["S"]) then
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							elseif (tubedir == 1 or tubedir == 3) and (signdir["E"] or signdir["W"]) then
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						elseif pnode.name == "pipeworks:one_way_tube" then
 | 
				
			||||||
 | 
							if (signdir["N"] or signdir["S"]) and owtns[tubedir] then
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							elseif (signdir["E"] or signdir["W"]) and owtew[tubedir] then
 | 
				
			||||||
 | 
								return true
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						elseif signdir["N"] and horiz_n[tubenumber] and horiz_n[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["E"] and horiz_e[tubenumber] and horiz_e[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["S"] and horiz_s[tubenumber] and horiz_s[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						elseif signdir["W"] and horiz_w[tubenumber] and horiz_w[tubenumber][tubedir] then
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
local fs_helpers = pipeworks.fs_helpers
 | 
					local fs_helpers = pipeworks.fs_helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_mese_tube then
 | 
					if pipeworks.enable_mese_tube then
 | 
				
			||||||
@@ -15,29 +16,43 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
		local buttons_formspec = ""
 | 
							local buttons_formspec = ""
 | 
				
			||||||
		for i = 0, 5 do
 | 
							for i = 0, 5 do
 | 
				
			||||||
			buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta,
 | 
								buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta,
 | 
				
			||||||
				"image_button[7,"..(i+0.2)..";1,0.6", "l"..(i+1).."s",
 | 
									"image_button[9,"..(i+(i*0.25)+0.5)..";1,0.6", "l"..(i+1).."s",
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					pipeworks.button_off,
 | 
										pipeworks.button_off,
 | 
				
			||||||
					pipeworks.button_on
 | 
										pipeworks.button_on
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
							local list_backgrounds = ""
 | 
				
			||||||
 | 
							if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
				
			||||||
 | 
								list_backgrounds = "style_type[box;colors=#666]"
 | 
				
			||||||
 | 
								for i=0, 5 do
 | 
				
			||||||
 | 
									for j=0, 5 do
 | 
				
			||||||
 | 
										list_backgrounds = list_backgrounds .. "box[".. 1.5+(i*1.25) ..",".. 0.25+(j*1.25) ..";1,1;]"
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							local size = "10.2,13"
 | 
				
			||||||
		meta:set_string("formspec",
 | 
							meta:set_string("formspec",
 | 
				
			||||||
			"size[8,11]"..
 | 
								"formspec_version[2]"..
 | 
				
			||||||
			"list[context;line1;1,0;6,1;]"..
 | 
								"size["..size.."]"..
 | 
				
			||||||
			"list[context;line2;1,1;6,1;]"..
 | 
								pipeworks.fs_helpers.get_prepends(size)..
 | 
				
			||||||
			"list[context;line3;1,2;6,1;]"..
 | 
								"list[context;line1;1.5,0.25;6,1;]"..
 | 
				
			||||||
			"list[context;line4;1,3;6,1;]"..
 | 
								"list[context;line2;1.5,1.50;6,1;]"..
 | 
				
			||||||
			"list[context;line5;1,4;6,1;]"..
 | 
								"list[context;line3;1.5,2.75;6,1;]"..
 | 
				
			||||||
			"list[context;line6;1,5;6,1;]"..
 | 
								"list[context;line4;1.5,4.00;6,1;]"..
 | 
				
			||||||
			"image[0,0;1,1;pipeworks_white.png]"..
 | 
								"list[context;line5;1.5,5.25;6,1;]"..
 | 
				
			||||||
			"image[0,1;1,1;pipeworks_black.png]"..
 | 
								"list[context;line6;1.5,6.50;6,1;]"..
 | 
				
			||||||
			"image[0,2;1,1;pipeworks_green.png]"..
 | 
								list_backgrounds..
 | 
				
			||||||
			"image[0,3;1,1;pipeworks_yellow.png]"..
 | 
								"image[0.22,0.25;1,1;pipeworks_white.png]"..
 | 
				
			||||||
			"image[0,4;1,1;pipeworks_blue.png]"..
 | 
								"image[0.22,1.50;1,1;pipeworks_black.png]"..
 | 
				
			||||||
			"image[0,5;1,1;pipeworks_red.png]"..
 | 
								"image[0.22,2.75;1,1;pipeworks_green.png]"..
 | 
				
			||||||
 | 
								"image[0.22,4.00;1,1;pipeworks_yellow.png]"..
 | 
				
			||||||
 | 
								"image[0.22,5.25;1,1;pipeworks_blue.png]"..
 | 
				
			||||||
 | 
								"image[0.22,6.50;1,1;pipeworks_red.png]"..
 | 
				
			||||||
			buttons_formspec..
 | 
								buttons_formspec..
 | 
				
			||||||
			"list[current_player;main;0,7;8,4;]" ..
 | 
								--"list[current_player;main;0,8;8,4;]" ..
 | 
				
			||||||
 | 
								pipeworks.fs_helpers.get_inv(8)..
 | 
				
			||||||
			"listring[current_player;main]" ..
 | 
								"listring[current_player;main]" ..
 | 
				
			||||||
			"listring[current_player;main]" ..
 | 
								"listring[current_player;main]" ..
 | 
				
			||||||
			"listring[context;line1]" ..
 | 
								"listring[context;line1]" ..
 | 
				
			||||||
@@ -55,7 +70,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:mese_tube", {
 | 
						pipeworks.register_tube("pipeworks:mese_tube", {
 | 
				
			||||||
			description = "Sorting Pneumatic Tube Segment",
 | 
								description = S("Sorting Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_mese_tube_inv.png",
 | 
								inventory_image = "pipeworks_mese_tube_inv.png",
 | 
				
			||||||
			noctr = {"pipeworks_mese_tube_noctr_1.png", "pipeworks_mese_tube_noctr_2.png", "pipeworks_mese_tube_noctr_3.png",
 | 
								noctr = {"pipeworks_mese_tube_noctr_1.png", "pipeworks_mese_tube_noctr_2.png", "pipeworks_mese_tube_noctr_3.png",
 | 
				
			||||||
				"pipeworks_mese_tube_noctr_4.png", "pipeworks_mese_tube_noctr_5.png", "pipeworks_mese_tube_noctr_6.png"},
 | 
									"pipeworks_mese_tube_noctr_4.png", "pipeworks_mese_tube_noctr_5.png", "pipeworks_mese_tube_noctr_6.png"},
 | 
				
			||||||
@@ -107,11 +122,24 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
						inv:set_size("line"..tostring(i), 6*1)
 | 
											inv:set_size("line"..tostring(i), 6*1)
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
					update_formspec(pos)
 | 
										update_formspec(pos)
 | 
				
			||||||
					meta:set_string("infotext", "Sorting pneumatic tube")
 | 
										meta:set_string("infotext", S("Sorting pneumatic tube"))
 | 
				
			||||||
 | 
									end,
 | 
				
			||||||
 | 
									after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
										if placer and placer:is_player() and placer:get_player_control().aux1 then
 | 
				
			||||||
 | 
											local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
											for i = 1, 6 do
 | 
				
			||||||
 | 
												meta:set_int("l"..tostring(i).."s", 0)
 | 
				
			||||||
 | 
											end
 | 
				
			||||||
 | 
											update_formspec(pos)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										return pipeworks.after_place(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				on_punch = update_formspec,
 | 
									on_punch = update_formspec,
 | 
				
			||||||
				on_receive_fields = function(pos, formname, fields, sender)
 | 
									on_receive_fields = function(pos, formname, fields, sender)
 | 
				
			||||||
					if not pipeworks.may_configure(pos, sender) then return end
 | 
										if (fields.quit and not fields.key_enter_field)
 | 
				
			||||||
 | 
												or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
 | 
											return
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
					fs_helpers.on_receive_fields(pos, fields)
 | 
										fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
					update_formspec(pos)
 | 
										update_formspec(pos)
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
@@ -149,25 +177,4 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
				end,
 | 
									end,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craft( {
 | 
					 | 
				
			||||||
		output = "pipeworks:mese_tube_000000 2",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
			{ "", "default:mese_crystal", "" },
 | 
					 | 
				
			||||||
			{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	minetest.register_craft( {
 | 
					 | 
				
			||||||
		type = "shapeless",
 | 
					 | 
				
			||||||
		output = "pipeworks:mese_tube_000000",
 | 
					 | 
				
			||||||
		recipe = {
 | 
					 | 
				
			||||||
			"pipeworks:tube_1",
 | 
					 | 
				
			||||||
			"default:mese_crystal_fragment",
 | 
					 | 
				
			||||||
			"default:mese_crystal_fragment",
 | 
					 | 
				
			||||||
			"default:mese_crystal_fragment",
 | 
					 | 
				
			||||||
			"default:mese_crystal_fragment"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,242 +1,373 @@
 | 
				
			|||||||
local filename=minetest.get_worldpath() .. "/teleport_tubes"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
local tp_tube_db = nil -- nil forces a read
 | 
					local S = minetest.get_translator("pipeworks")
 | 
				
			||||||
local tp_tube_db_version = 2.0
 | 
					local filename = minetest.get_worldpath().."/teleport_tubes"  -- Only used for backward-compat
 | 
				
			||||||
 | 
					local storage = minetest.get_mod_storage()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function hash(pos)
 | 
					local enable_logging = minetest.settings:get_bool("pipeworks_log_teleport_tubes", false)
 | 
				
			||||||
	return string.format("%d", minetest.hash_node_position(pos))
 | 
					
 | 
				
			||||||
 | 
					local has_digilines = minetest.get_modpath("digilines")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- V1: Serialized text file indexed by vector position.
 | 
				
			||||||
 | 
					-- V2: Serialized text file indexed by hash position.
 | 
				
			||||||
 | 
					-- V3: Mod storage using serialized tables.
 | 
				
			||||||
 | 
					-- V4: Mod storage using "<can_receive>:<channel>" format.
 | 
				
			||||||
 | 
					local tube_db_version = 4
 | 
				
			||||||
 | 
					local tube_db = {}
 | 
				
			||||||
 | 
					local receiver_cache = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function hash_pos(pos)
 | 
				
			||||||
 | 
						vector.round(pos)
 | 
				
			||||||
 | 
						return string.format("%.0f", minetest.hash_node_position(pos))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function serialize_tube(tube)
 | 
				
			||||||
 | 
						return string.format("%d:%s", tube.cr, tube.channel)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function deserialize_tube(hash, str)
 | 
				
			||||||
 | 
						local sep = str:sub(2, 2) == ":"
 | 
				
			||||||
 | 
						local cr = tonumber(str:sub(1, 1))
 | 
				
			||||||
 | 
						local channel = str:sub(3)
 | 
				
			||||||
 | 
						if sep and cr and channel then
 | 
				
			||||||
 | 
							local pos = minetest.get_position_from_hash(tonumber(hash))
 | 
				
			||||||
 | 
							return {x = pos.x, y = pos.y, z = pos.z, cr = cr, channel = channel}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function save_tube_db()
 | 
					local function save_tube_db()
 | 
				
			||||||
	local file, err = io.open(filename, "w")
 | 
						receiver_cache = {}
 | 
				
			||||||
	if file then
 | 
						local fields = {version = tube_db_version}
 | 
				
			||||||
		tp_tube_db.version = tp_tube_db_version
 | 
						for key, val in pairs(tube_db) do
 | 
				
			||||||
		file:write(minetest.serialize(tp_tube_db))
 | 
							fields[key] = serialize_tube(val)
 | 
				
			||||||
		tp_tube_db.version = nil
 | 
						end
 | 
				
			||||||
		io.close(file)
 | 
						storage:from_table({fields = fields})
 | 
				
			||||||
	else
 | 
					end
 | 
				
			||||||
		error(err)
 | 
					
 | 
				
			||||||
 | 
					local function save_tube(hash)
 | 
				
			||||||
 | 
						local tube = tube_db[hash]
 | 
				
			||||||
 | 
						receiver_cache[tube.channel] = nil
 | 
				
			||||||
 | 
						storage:set_string(hash, serialize_tube(tube))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function remove_tube(pos)
 | 
				
			||||||
 | 
						local hash = hash_pos(pos)
 | 
				
			||||||
 | 
						if tube_db[hash] then
 | 
				
			||||||
 | 
							receiver_cache[tube_db[hash].channel] = nil
 | 
				
			||||||
 | 
							tube_db[hash] = nil
 | 
				
			||||||
 | 
							storage:set_string(hash, "")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function migrate_tube_db()
 | 
					local function migrate_tube_db()
 | 
				
			||||||
 | 
						if storage:get_int("version") == 3 then
 | 
				
			||||||
 | 
							for key, val in pairs(storage:to_table().fields) do
 | 
				
			||||||
 | 
								if tonumber(key) then
 | 
				
			||||||
 | 
									tube_db[key] = minetest.deserialize(val)
 | 
				
			||||||
 | 
								elseif key ~= "version" then
 | 
				
			||||||
 | 
									error("Unknown field in teleport tube database: "..key)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							save_tube_db()
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local file = io.open(filename, "r")
 | 
				
			||||||
 | 
						if file then
 | 
				
			||||||
 | 
							local content = file:read("*all")
 | 
				
			||||||
 | 
							io.close(file)
 | 
				
			||||||
 | 
							if content and content ~= "" then
 | 
				
			||||||
 | 
								tube_db = minetest.deserialize(content)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local version = tube_db.version or 0
 | 
				
			||||||
 | 
						tube_db.version = nil
 | 
				
			||||||
 | 
						if version < 2 then
 | 
				
			||||||
		local tmp_db = {}
 | 
							local tmp_db = {}
 | 
				
			||||||
		tp_tube_db.version = nil
 | 
							for _, val in pairs(tube_db) do
 | 
				
			||||||
		for key, val in pairs(tp_tube_db) do
 | 
								if val.channel ~= "" then  -- Skip unconfigured tubes
 | 
				
			||||||
			if(val.channel ~= "") then -- skip unconfigured tubes
 | 
									tmp_db[hash_pos(val)] = val
 | 
				
			||||||
				tmp_db[hash(val)] = val
 | 
					 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		tp_tube_db = tmp_db
 | 
							tube_db = tmp_db
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	save_tube_db()
 | 
						save_tube_db()
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function read_tube_db()
 | 
					local function read_tube_db()
 | 
				
			||||||
	local file = io.open(filename, "r")
 | 
						local version = storage:get_int("version")
 | 
				
			||||||
	if file ~= nil then
 | 
						if version < tube_db_version then
 | 
				
			||||||
		local file_content = file:read("*all")
 | 
					 | 
				
			||||||
		io.close(file)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if file_content and file_content ~= "" then
 | 
					 | 
				
			||||||
			tp_tube_db = minetest.deserialize(file_content)
 | 
					 | 
				
			||||||
			if(not tp_tube_db.version or tonumber(tp_tube_db.version) < tp_tube_db_version) then
 | 
					 | 
				
			||||||
		migrate_tube_db()
 | 
							migrate_tube_db()
 | 
				
			||||||
			end
 | 
						elseif version > tube_db_version then
 | 
				
			||||||
			tp_tube_db.version = nil -- we add it back when saving
 | 
							error("Cannot read teleport tube database of version "..version)
 | 
				
			||||||
			return tp_tube_db -- we read sucessfully
 | 
						else
 | 
				
			||||||
 | 
							for key, val in pairs(storage:to_table().fields) do
 | 
				
			||||||
 | 
								if tonumber(key) then
 | 
				
			||||||
 | 
									tube_db[key] = deserialize_tube(key, val)
 | 
				
			||||||
 | 
								elseif key ~= "version" then
 | 
				
			||||||
 | 
									error("Unknown field in teleport tube database: "..key)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	tp_tube_db = {}
 | 
						end
 | 
				
			||||||
	return tp_tube_db
 | 
						tube_db.version = nil
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- updates or adds a tube
 | 
					local function set_tube(pos, channel, cr)
 | 
				
			||||||
local function set_tube(pos, channel, can_receive)
 | 
						local hash = hash_pos(pos)
 | 
				
			||||||
	local tubes = tp_tube_db or read_tube_db()
 | 
						local tube = tube_db[hash]
 | 
				
			||||||
	local hash = hash(pos)
 | 
					 | 
				
			||||||
	local tube = tubes[hash]
 | 
					 | 
				
			||||||
	if tube then
 | 
						if tube then
 | 
				
			||||||
 | 
							if tube.channel ~= channel or tube.cr ~= cr then
 | 
				
			||||||
			tube.channel = channel
 | 
								tube.channel = channel
 | 
				
			||||||
		tube.cr = can_receive
 | 
								tube.cr = cr
 | 
				
			||||||
		save_tube_db()
 | 
								save_tube(hash)
 | 
				
			||||||
		return
 | 
							end
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							tube_db[hash] = {x = pos.x, y = pos.y, z = pos.z, channel = channel, cr = cr}
 | 
				
			||||||
 | 
							save_tube(hash)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					 | 
				
			||||||
	-- we haven't found any tp tube to update, so lets add it
 | 
					 | 
				
			||||||
	tp_tube_db[hash] = {x=pos.x,y=pos.y,z=pos.z,channel=channel,cr=can_receive}
 | 
					 | 
				
			||||||
	save_tube_db()
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function remove_tube(pos)
 | 
					 | 
				
			||||||
	local tubes = tp_tube_db or read_tube_db()
 | 
					 | 
				
			||||||
	tubes[hash(pos)] = nil
 | 
					 | 
				
			||||||
	save_tube_db()
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local function read_node_with_vm(pos)
 | 
					 | 
				
			||||||
	local vm = VoxelManip()
 | 
					 | 
				
			||||||
	local MinEdge, MaxEdge = vm:read_from_map(pos, pos)
 | 
					 | 
				
			||||||
	local data = vm:get_data()
 | 
					 | 
				
			||||||
	local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge})
 | 
					 | 
				
			||||||
	return minetest.get_name_from_content_id(data[area:index(pos.x, pos.y, pos.z)])
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function get_receivers(pos, channel)
 | 
					local function get_receivers(pos, channel)
 | 
				
			||||||
	local tubes = tp_tube_db or read_tube_db()
 | 
						local hash = hash_pos(pos)
 | 
				
			||||||
 | 
						local cache = receiver_cache[channel] or {}
 | 
				
			||||||
 | 
						if cache[hash] then
 | 
				
			||||||
 | 
							return cache[hash]
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	local receivers = {}
 | 
						local receivers = {}
 | 
				
			||||||
	local dirty = false
 | 
						for key, val in pairs(tube_db) do
 | 
				
			||||||
	for key, val in pairs(tubes) do
 | 
							if val.cr == 1 and val.channel == channel and not vector.equals(val, pos) then
 | 
				
			||||||
		-- skip all non-receivers and the tube that it came from as early as possible, as this is called often
 | 
								minetest.load_area(val)
 | 
				
			||||||
		if (val.cr == 1 and val.channel == channel and (val.x ~= pos.x or val.y ~= pos.y or val.z ~= pos.z)) then
 | 
								local node_name = minetest.get_node(val).name
 | 
				
			||||||
			local is_loaded = (minetest.get_node_or_nil(val) ~= nil)
 | 
								if node_name:find("pipeworks:teleport_tube") then
 | 
				
			||||||
			local node_name = is_loaded and minetest.get_node(pos).name or read_node_with_vm(val)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if minetest.registered_nodes[node_name] and minetest.registered_nodes[node_name].is_teleport_tube then
 | 
					 | 
				
			||||||
				table.insert(receivers, val)
 | 
									table.insert(receivers, val)
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				tp_tube_db[key] = nil
 | 
									remove_tube(val)
 | 
				
			||||||
				dirty = true
 | 
					 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	if dirty then
 | 
						cache[hash] = receivers
 | 
				
			||||||
		save_tube_db()
 | 
						receiver_cache[channel] = cache
 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
	return receivers
 | 
						return receivers
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function update_meta(meta, can_receive)
 | 
					local help_text = minetest.formspec_escape(
 | 
				
			||||||
	meta:set_int("can_receive", can_receive and 1 or 0)
 | 
						S("Channels are public by default").."\n"..
 | 
				
			||||||
	local cr_state = can_receive and "on" or "off"
 | 
						S("Use <player>:<channel> for fully private channels").."\n"..
 | 
				
			||||||
	meta:set_string("formspec","size[8.6,2.2]"..
 | 
						S("Use <player>;<channel> for private receivers")
 | 
				
			||||||
			"field[0.6,0.6;7,1;channel;Channel:;${channel}]"..
 | 
					)
 | 
				
			||||||
			"label[7.3,0;Receive]"..
 | 
					
 | 
				
			||||||
			"image_button[7.3,0.3;1,0.6;pipeworks_button_" .. cr_state .. ".png;cr" .. (can_receive and 0 or 1) .. ";;;false;pipeworks_button_interm.png]"..
 | 
					local size = has_digilines and "8,5.9" or "8,4.4"
 | 
				
			||||||
			"image[0.3,1.3;1,1;pipeworks_teleport_tube_inv.png]"..
 | 
					
 | 
				
			||||||
			"label[1.6,1.2;channels are public by default]" ..
 | 
					local formspec = "formspec_version[2]size["..size.."]"..
 | 
				
			||||||
			"label[1.6,1.5;use <player>:<channel> for fully private channels]" ..
 | 
						pipeworks.fs_helpers.get_prepends(size)..
 | 
				
			||||||
			"label[1.6,1.8;use <player>\\;<channel> for private receivers]" ..
 | 
						"image[0.5,0.3;1,1;pipeworks_teleport_tube_inv.png]"..
 | 
				
			||||||
			default.gui_bg..
 | 
						"label[1.75,0.8;"..S("Teleporting Tube").."]"..
 | 
				
			||||||
			default.gui_bg_img)
 | 
						"field[0.5,1.7;5,0.8;channel;"..S("Channel")..";${channel}]"..
 | 
				
			||||||
 | 
						"button_exit[5.5,1.7;2,0.8;save;"..S("Save").."]"..
 | 
				
			||||||
 | 
						"label[6.5,0.6;"..S("Receive").."]"..
 | 
				
			||||||
 | 
						"label[0.5,2.8;"..help_text.."]"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if has_digilines then
 | 
				
			||||||
 | 
						formspec = formspec..
 | 
				
			||||||
 | 
							"field[0.5,4.6;5,0.8;digiline_channel;"..S("Digiline Channel")..";${digiline_channel}]"..
 | 
				
			||||||
 | 
							"button_exit[5.5,4.6;2,0.8;save;"..S("Save").."]"
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function update_meta(meta)
 | 
				
			||||||
 | 
						local channel = meta:get_string("channel")
 | 
				
			||||||
 | 
						local cr = meta:get_int("can_receive") == 1
 | 
				
			||||||
 | 
						if channel == "" then
 | 
				
			||||||
 | 
							meta:set_string("infotext", S("Unconfigured Teleportation Tube"))
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							local desc = cr and "sending and receiving" or "sending"
 | 
				
			||||||
 | 
							meta:set_string("infotext", S("Teleportation Tube @1 on '@2'", desc, channel))
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local state = cr and "on" or "off"
 | 
				
			||||||
 | 
						meta:set_string("formspec", formspec..
 | 
				
			||||||
 | 
							"image_button[6.4,0.8;1,0.6;pipeworks_button_"..state..
 | 
				
			||||||
 | 
							".png;cr_"..state..";;;false;pipeworks_button_interm.png]")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function update_tube(pos, channel, cr, player_name)
 | 
				
			||||||
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						if meta:get_string("channel") == channel and meta:get_int("can_receive") == cr then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if channel == "" then
 | 
				
			||||||
 | 
							meta:set_string("channel", "")
 | 
				
			||||||
 | 
							meta:set_int("can_receive", cr)
 | 
				
			||||||
 | 
							remove_tube(pos)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local name, mode = channel:match("^([^:;]+)([:;])")
 | 
				
			||||||
 | 
						if name and mode and name ~= player_name then
 | 
				
			||||||
 | 
							if mode == ":" then
 | 
				
			||||||
 | 
								minetest.chat_send_player(player_name,
 | 
				
			||||||
 | 
									S("Sorry, channel '@1' is reserved for exclusive use by @2", channel, name))
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							elseif mode == ";" and cr ~= 0 then
 | 
				
			||||||
 | 
								minetest.chat_send_player(player_name,
 | 
				
			||||||
 | 
									S("Sorry, receiving from channel '@1' is reserved for @2", channel, name))
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						meta:set_string("channel", channel)
 | 
				
			||||||
 | 
						meta:set_int("can_receive", cr)
 | 
				
			||||||
 | 
						set_tube(pos, channel, cr)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function receive_fields(pos, _, fields, sender)
 | 
				
			||||||
 | 
						if not fields.channel or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						local channel = fields.channel:trim()
 | 
				
			||||||
 | 
						local cr = meta:get_int("can_receive")
 | 
				
			||||||
 | 
						if fields.cr_on then
 | 
				
			||||||
 | 
							cr = 0
 | 
				
			||||||
 | 
						elseif fields.cr_off then
 | 
				
			||||||
 | 
							cr = 1
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						if has_digilines and fields.digiline_channel then
 | 
				
			||||||
 | 
							meta:set_string("digiline_channel", fields.digiline_channel)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						update_tube(pos, channel, cr, sender:get_player_name())
 | 
				
			||||||
 | 
						update_meta(meta)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function can_go(pos, node, velocity, stack)
 | 
				
			||||||
 | 
						velocity.x = 0
 | 
				
			||||||
 | 
						velocity.y = 0
 | 
				
			||||||
 | 
						velocity.z = 0
 | 
				
			||||||
 | 
						local src_meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						local channel = src_meta:get_string("channel")
 | 
				
			||||||
 | 
						if channel == "" then
 | 
				
			||||||
 | 
							return {}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local receivers = get_receivers(pos, channel)
 | 
				
			||||||
 | 
						if #receivers == 0 then
 | 
				
			||||||
 | 
							return {}
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local target = receivers[math.random(1, #receivers)]
 | 
				
			||||||
 | 
						if enable_logging then
 | 
				
			||||||
 | 
							local src_owner = src_meta:get_string("owner")
 | 
				
			||||||
 | 
							local dst_meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
							local dst_owner = dst_meta:get_string("owner")
 | 
				
			||||||
 | 
							minetest.log("action", string.format("[pipeworks] %s teleported from %s (owner=%s) to %s (owner=%s) via %s",
 | 
				
			||||||
 | 
								stack:to_string(), minetest.pos_to_string(pos), src_owner, minetest.pos_to_string(target), dst_owner, channel
 | 
				
			||||||
 | 
							))
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						pos.x = target.x
 | 
				
			||||||
 | 
						pos.y = target.y
 | 
				
			||||||
 | 
						pos.z = target.z
 | 
				
			||||||
 | 
						return pipeworks.meseadjlist
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function repair_tube(pos, node)
 | 
				
			||||||
 | 
						minetest.swap_node(pos, {name = node.name, param2 = node.param2})
 | 
				
			||||||
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						local channel = meta:get_string("channel")
 | 
				
			||||||
 | 
						if channel ~= "" then
 | 
				
			||||||
 | 
							set_tube(pos, channel, meta:get_int("can_receive"))
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						update_meta(meta)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local function digiline_action(pos, _, digiline_channel, msg)
 | 
				
			||||||
 | 
						local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
						if digiline_channel ~= meta:get_string("digiline_channel") then
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local channel = meta:get_string("channel")
 | 
				
			||||||
 | 
						local can_receive = meta:get_int("can_receive")
 | 
				
			||||||
 | 
						if type(msg) == "string" then
 | 
				
			||||||
 | 
							channel = msg
 | 
				
			||||||
 | 
						elseif type(msg) == "table" then
 | 
				
			||||||
 | 
							if type(msg.channel) == "string" then
 | 
				
			||||||
 | 
								channel = msg.channel
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							if msg.can_receive == 1 or msg.can_receive == true then
 | 
				
			||||||
 | 
								can_receive = 1
 | 
				
			||||||
 | 
							elseif msg.can_receive == 0 or msg.can_receive == false then
 | 
				
			||||||
 | 
								can_receive = 0
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						local player_name = meta:get_string("owner")
 | 
				
			||||||
 | 
						update_tube(pos, channel, can_receive, player_name)
 | 
				
			||||||
 | 
						update_meta(meta)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local def = {
 | 
				
			||||||
 | 
						tube = {
 | 
				
			||||||
 | 
							can_go = can_go,
 | 
				
			||||||
 | 
							on_repair = repair_tube,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						on_construct = function(pos)
 | 
				
			||||||
 | 
							local meta = minetest.get_meta(pos)
 | 
				
			||||||
 | 
							meta:set_int("can_receive", 1)  -- Enabled by default
 | 
				
			||||||
 | 
							update_meta(meta)
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
						on_receive_fields = receive_fields,
 | 
				
			||||||
 | 
						on_destruct = remove_tube,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if has_digilines then
 | 
				
			||||||
 | 
						def.after_place_node = function(pos, placer)
 | 
				
			||||||
 | 
							-- Set owner for digilines
 | 
				
			||||||
 | 
							minetest.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
				
			||||||
 | 
							pipeworks.after_place(pos)
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
						def.digiline = {
 | 
				
			||||||
 | 
							receptor = {
 | 
				
			||||||
 | 
								rules = pipeworks.digilines_rules,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							effector = {
 | 
				
			||||||
 | 
								rules = pipeworks.digilines_rules,
 | 
				
			||||||
 | 
								action = digiline_action,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.register_tube("pipeworks:teleport_tube", {
 | 
					pipeworks.register_tube("pipeworks:teleport_tube", {
 | 
				
			||||||
	description = "Teleporting Pneumatic Tube Segment",
 | 
						description = S("Teleporting Pneumatic Tube Segment"),
 | 
				
			||||||
	inventory_image = "pipeworks_teleport_tube_inv.png",
 | 
						inventory_image = "pipeworks_teleport_tube_inv.png",
 | 
				
			||||||
	noctr = { "pipeworks_teleport_tube_noctr.png" },
 | 
						noctr = { "pipeworks_teleport_tube_noctr.png" },
 | 
				
			||||||
	plain = { "pipeworks_teleport_tube_plain.png" },
 | 
						plain = { "pipeworks_teleport_tube_plain.png" },
 | 
				
			||||||
	ends = { "pipeworks_teleport_tube_end.png" },
 | 
						ends = { "pipeworks_teleport_tube_end.png" },
 | 
				
			||||||
	short = "pipeworks_teleport_tube_short.png",
 | 
						short = "pipeworks_teleport_tube_short.png",
 | 
				
			||||||
	node_def = {
 | 
						node_def = def,
 | 
				
			||||||
		is_teleport_tube = true,
 | 
					 | 
				
			||||||
		tube = {
 | 
					 | 
				
			||||||
			can_go = function(pos,node,velocity,stack)
 | 
					 | 
				
			||||||
				velocity.x = 0
 | 
					 | 
				
			||||||
				velocity.y = 0
 | 
					 | 
				
			||||||
				velocity.z = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				local channel = minetest.get_meta(pos):get_string("channel")
 | 
					 | 
				
			||||||
				if channel == "" then return {} end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				local target = get_receivers(pos, channel)
 | 
					 | 
				
			||||||
				if target[1] == nil then return {} end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				local d = math.random(1,#target)
 | 
					 | 
				
			||||||
				pos.x = target[d].x
 | 
					 | 
				
			||||||
				pos.y = target[d].y
 | 
					 | 
				
			||||||
				pos.z = target[d].z
 | 
					 | 
				
			||||||
				return pipeworks.meseadjlist
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		on_construct = function(pos)
 | 
					 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
			update_meta(meta, true)
 | 
					 | 
				
			||||||
			meta:set_string("infotext", "unconfigured Teleportation Tube")
 | 
					 | 
				
			||||||
		end,
 | 
					 | 
				
			||||||
		on_receive_fields = function(pos,formname,fields,sender)
 | 
					 | 
				
			||||||
			if not fields.channel -- ignore escaping or clientside manipulation of the form
 | 
					 | 
				
			||||||
			or not pipeworks.may_configure(pos, sender) then
 | 
					 | 
				
			||||||
				return
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
			local new_channel = tostring(fields.channel):trim()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
			local can_receive = meta:get_int("can_receive")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			-- check for private channels each time before actually changing anything
 | 
					 | 
				
			||||||
			-- to not even allow switching between can_receive states of private channels
 | 
					 | 
				
			||||||
			if new_channel ~= "" then
 | 
					 | 
				
			||||||
				local sender_name = sender:get_player_name()
 | 
					 | 
				
			||||||
				local name, mode = new_channel:match("^([^:;]+)([:;])")
 | 
					 | 
				
			||||||
				if name and mode and name ~= sender_name then
 | 
					 | 
				
			||||||
					--channels starting with '[name]:' can only be used by the named player
 | 
					 | 
				
			||||||
					if mode == ":" then
 | 
					 | 
				
			||||||
						minetest.chat_send_player(sender_name, "Sorry, channel '"..new_channel.."' is reserved for exclusive use by "..name)
 | 
					 | 
				
			||||||
						return
 | 
					 | 
				
			||||||
				
 | 
					 | 
				
			||||||
					--channels starting with '[name];' can be used by other players, but cannot be received from
 | 
					 | 
				
			||||||
					elseif mode == ";" and (fields.cr1 or (can_receive ~= 0 and not fields.cr0)) then
 | 
					 | 
				
			||||||
						minetest.chat_send_player(sender_name, "Sorry, receiving from channel '"..new_channel.."' is reserved for "..name)
 | 
					 | 
				
			||||||
						return
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			local dirty = false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			-- was the channel changed?
 | 
					 | 
				
			||||||
			local channel = meta:get_string("channel")
 | 
					 | 
				
			||||||
			if new_channel ~= channel then
 | 
					 | 
				
			||||||
				channel = new_channel
 | 
					 | 
				
			||||||
				meta:set_string("channel", channel)
 | 
					 | 
				
			||||||
				dirty = true
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			-- test if a can_receive button was pressed
 | 
					 | 
				
			||||||
			if fields.cr0 and can_receive ~= 0 then
 | 
					 | 
				
			||||||
				can_receive = 0
 | 
					 | 
				
			||||||
				update_meta(meta, false)
 | 
					 | 
				
			||||||
				dirty = true
 | 
					 | 
				
			||||||
			elseif fields.cr1 and can_receive ~= 1 then
 | 
					 | 
				
			||||||
				can_receive = 1
 | 
					 | 
				
			||||||
				update_meta(meta, true)
 | 
					 | 
				
			||||||
				dirty = true
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			-- save if we changed something, handle the empty channel while we're at it
 | 
					 | 
				
			||||||
			if dirty then
 | 
					 | 
				
			||||||
				if channel ~= "" then
 | 
					 | 
				
			||||||
					set_tube(pos, channel, can_receive)
 | 
					 | 
				
			||||||
					local cr_description = (can_receive == 1) and "sending and receiving" or "sending"
 | 
					 | 
				
			||||||
					meta:set_string("infotext", string.format("Teleportation Tube %s on '%s'", cr_description, channel))
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
					-- remove empty channel tubes, to not have to search through them
 | 
					 | 
				
			||||||
					remove_tube(pos)
 | 
					 | 
				
			||||||
					meta:set_string("infotext", "unconfigured Teleportation Tube")
 | 
					 | 
				
			||||||
				end
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
		end,
 | 
					 | 
				
			||||||
		on_destruct = function(pos)
 | 
					 | 
				
			||||||
			remove_tube(pos)
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
minetest.register_craft( {
 | 
					 | 
				
			||||||
	output = "pipeworks:teleport_tube_1 2",
 | 
					 | 
				
			||||||
	recipe = {
 | 
					 | 
				
			||||||
	        { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
					 | 
				
			||||||
	        { "default:desert_stone", "default:mese", "default:desert_stone" },
 | 
					 | 
				
			||||||
	        { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons_mvps") ~= nil then
 | 
					if minetest.get_modpath("mesecons_mvps") then
 | 
				
			||||||
 | 
						-- Update tubes when moved by pistons
 | 
				
			||||||
	mesecon.register_on_mvps_move(function(moved_nodes)
 | 
						mesecon.register_on_mvps_move(function(moved_nodes)
 | 
				
			||||||
		for _, n in ipairs(moved_nodes) do
 | 
							for _, n in ipairs(moved_nodes) do
 | 
				
			||||||
			if string.find(n.node.name, "pipeworks:teleport_tube") ~= nil then
 | 
								if n.node.name:find("pipeworks:teleport_tube") then
 | 
				
			||||||
				local meta = minetest.get_meta(n.pos)
 | 
									local meta = minetest.get_meta(n.pos)
 | 
				
			||||||
				set_tube(n.pos, meta:get_string("channel"), meta:get_int("can_receive"))
 | 
									set_tube(n.pos, meta:get_string("channel"), meta:get_int("can_receive"))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end)
 | 
						end)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Expose teleport tube database API for other mods
 | 
				
			||||||
 | 
					pipeworks.tptube = {
 | 
				
			||||||
 | 
						version = tube_db_version,
 | 
				
			||||||
 | 
						hash = hash_pos,
 | 
				
			||||||
 | 
						get_db = function() return tube_db end,
 | 
				
			||||||
 | 
						save_tube_db = save_tube_db,
 | 
				
			||||||
 | 
						set_tube = set_tube,
 | 
				
			||||||
 | 
						save_tube = save_tube,
 | 
				
			||||||
 | 
						update_tube = update_tube,
 | 
				
			||||||
 | 
						update_meta = function(meta, cr)
 | 
				
			||||||
 | 
							-- Legacy behaviour
 | 
				
			||||||
 | 
							if cr ~= nil then
 | 
				
			||||||
 | 
								meta:set_int("can_receive", cr and 1 or 0)
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							update_meta(meta)
 | 
				
			||||||
 | 
						end,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Load the database
 | 
				
			||||||
 | 
					read_tube_db()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_digiline_conductor_tube_end.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 174 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_digiline_conductor_tube_inv.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 337 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_digiline_conductor_tube_noctr.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 179 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_digiline_conductor_tube_plain.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 169 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_digiline_conductor_tube_short.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 162 B  | 
| 
		 Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 4.0 KiB  | 
| 
		 Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 5.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_lua_tube_port_burnt.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 178 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_lua_tube_port_off.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 178 B  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_lua_tube_port_on.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 178 B  | 
| 
		 Before Width: | Height: | Size: 587 B After Width: | Height: | Size: 507 B  | 
| 
		 Before Width: | Height: | Size: 588 B After Width: | Height: | Size: 493 B  | 
| 
		 Before Width: | Height: | Size: 581 B After Width: | Height: | Size: 581 B  | 
| 
		 Before Width: | Height: | Size: 581 B After Width: | Height: | Size: 582 B  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.7 KiB  | 
| 
		 Before Width: | Height: | Size: 4.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_pressure_gauge.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 3.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								textures/pipeworks_pressure_gauge_0.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.0 KiB  |