You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			GDScript
		
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			GDScript
		
	
| 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;
 |