|  |  |  | var properties = null; | 
					
						
							|  |  |  | var material: StandardMaterial3D = null; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var type: | 
					
						
							|  |  |  |     get: | 
					
						
							|  |  |  |         return properties.get("_type", "diffuse"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var weight: | 
					
						
							|  |  |  |     get: | 
					
						
							|  |  |  |         return float(properties.get("_weight", 0)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var specular: | 
					
						
							|  |  |  |     get: | 
					
						
							|  |  |  |         return float(properties.get("spec")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var roughness: | 
					
						
							|  |  |  |     get: | 
					
						
							|  |  |  |         return float(properties.get("rough")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var flux: | 
					
						
							|  |  |  |     get: | 
					
						
							|  |  |  |         return float(properties.get("flux")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var refraction: | 
					
						
							|  |  |  |     get: | 
					
						
							|  |  |  |         return float(properties.get("ior")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _init(properties): | 
					
						
							|  |  |  |     self.properties = properties; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func is_glass(): | 
					
						
							|  |  |  |     return self.type == "_glass"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func get_material(color: Color): | 
					
						
							|  |  |  |     if (material != null): return material; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     material = StandardMaterial3D.new(); | 
					
						
							|  |  |  |     material.vertex_color_is_srgb = true; | 
					
						
							|  |  |  |     material.vertex_color_use_as_albedo = true; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     match (self.type): | 
					
						
							|  |  |  |         "_metal": | 
					
						
							|  |  |  |             material.metallic = self.weight; | 
					
						
							|  |  |  |             material.metallic_specular = self.specular; | 
					
						
							|  |  |  |             material.roughness = self.roughness; | 
					
						
							|  |  |  |         "_emit": | 
					
						
							|  |  |  |             material.emission_enabled = true; | 
					
						
							|  |  |  |             material.emission = Color(color.r, color.g, color.b, self.weight); | 
					
						
							|  |  |  |             material.emission_energy = self.flux; | 
					
						
							|  |  |  |         "_glass": | 
					
						
							|  |  |  |             material.flags_transparent = true; | 
					
						
							|  |  |  |             material.albedo_color = Color(1, 1, 1, 1 - self.weight); | 
					
						
							|  |  |  |             material.refraction_enabled = true; | 
					
						
							|  |  |  |             material.refraction_scale = self.refraction * 0.01; | 
					
						
							|  |  |  |             material.roughness = self.roughness; | 
					
						
							|  |  |  |         "_diffuse", _: | 
					
						
							|  |  |  |             material.roughness = 1; | 
					
						
							|  |  |  |     return material; |