2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*  particle_process_material.cpp                                         */  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                         This file is part of:                          */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                             GODOT ENGINE                               */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                        https://godotengine.org                         */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Permission is hereby granted, free of charge, to any person obtaining  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* a copy of this software and associated documentation files (the        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* "Software"), to deal in the Software without restriction, including    */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* without limitation the rights to use, copy, modify, merge, publish,    */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* distribute, sublicense, and/or sell copies of the Software, and to     */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* permit persons to whom the Software is furnished to do so, subject to  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* the following conditions:                                              */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* The above copyright notice and this permission notice shall be         */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* included in all copies or substantial portions of the Software.        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                                                                        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,        */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF     */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY   */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,   */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE      */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                 */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "particle_process_material.h" 
  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 17:26:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "core/version.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Mutex  ParticleProcessMaterial : : material_mutex ;  
						 
					
						
							
								
									
										
										
										
											2024-05-06 19:40:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								SelfList < ParticleProcessMaterial > : : List  ParticleProcessMaterial : : dirty_materials ;  
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								HashMap < ParticleProcessMaterial : : MaterialKey ,  ParticleProcessMaterial : : ShaderData ,  ParticleProcessMaterial : : MaterialKey >  ParticleProcessMaterial : : shader_map ;  
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								RBSet < String >  ParticleProcessMaterial : : min_max_properties ;  
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ParticleProcessMaterial : : ShaderNames  * ParticleProcessMaterial : : shader_names  =  nullptr ;  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : init_shaders ( )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									shader_names  =  memnew ( ShaderNames ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > direction  =  " direction " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									shader_names - > spread  =  " spread " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > flatness  =  " flatness " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > initial_linear_velocity_min  =  " initial_linear_velocity_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > initial_angle_min  =  " initial_angle_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > angular_velocity_min  =  " angular_velocity_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > orbit_velocity_min  =  " orbit_velocity_min " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > radial_velocity_min  =  " radial_velocity_min " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > linear_accel_min  =  " linear_accel_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > radial_accel_min  =  " radial_accel_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > tangent_accel_min  =  " tangent_accel_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > damping_min  =  " damping_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > scale_min  =  " scale_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > hue_variation_min  =  " hue_variation_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > anim_speed_min  =  " anim_speed_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > anim_offset_min  =  " anim_offset_min " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > directional_velocity_min  =  " directional_velocity_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > scale_over_velocity_min  =  " scale_over_velocity_min " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > initial_linear_velocity_max  =  " initial_linear_velocity_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > initial_angle_max  =  " initial_angle_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > angular_velocity_max  =  " angular_velocity_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > orbit_velocity_max  =  " orbit_velocity_max " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > radial_velocity_max  =  " radial_velocity_max " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > linear_accel_max  =  " linear_accel_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > radial_accel_max  =  " radial_accel_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > tangent_accel_max  =  " tangent_accel_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > damping_max  =  " damping_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > scale_max  =  " scale_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > hue_variation_max  =  " hue_variation_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > anim_speed_max  =  " anim_speed_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > anim_offset_max  =  " anim_offset_max " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > directional_velocity_max  =  " directional_velocity_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > scale_over_velocity_max  =  " scale_over_velocity_max " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > angle_texture  =  " angle_texture " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > angular_velocity_texture  =  " angular_velocity_texture " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > orbit_velocity_texture  =  " orbit_velocity_curve " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > radial_velocity_texture  =  " radial_velocity_curve " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									shader_names - > linear_accel_texture  =  " linear_accel_texture " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > radial_accel_texture  =  " radial_accel_texture " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > tangent_accel_texture  =  " tangent_accel_texture " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > damping_texture  =  " damping_texture " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > scale_texture  =  " scale_curve " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-13 05:51:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > hue_variation_texture  =  " hue_rot_curve " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > anim_speed_texture  =  " animation_speed_curve " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > anim_offset_texture  =  " animation_offset_curve " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > directional_velocity_texture  =  " directional_velocity_curve " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > scale_over_velocity_texture  =  " scale_over_velocity_curve " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > color  =  " color_value " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > color_ramp  =  " color_ramp " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > alpha_ramp  =  " alpha_curve " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_ramp  =  " emission_curve " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > color_initial_ramp  =  " color_initial_ramp " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > velocity_limit_curve  =  " velocity_limit_curve " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > inherit_emitter_velocity_ratio  =  " inherit_emitter_velocity_ratio " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > velocity_pivot  =  " velocity_pivot " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_sphere_radius  =  " emission_sphere_radius " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_box_extents  =  " emission_box_extents " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_texture_point_count  =  " emission_texture_point_count " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_texture_points  =  " emission_texture_points " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_texture_normal  =  " emission_texture_normal " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_texture_color  =  " emission_texture_color " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > emission_ring_axis  =  " emission_ring_axis " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_ring_height  =  " emission_ring_height " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_ring_radius  =  " emission_ring_radius " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_ring_inner_radius  =  " emission_ring_inner_radius " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > emission_ring_cone_angle  =  " emission_ring_cone_angle " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > emission_shape_offset  =  " emission_shape_offset " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > emission_shape_scale  =  " emission_shape_scale " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > turbulence_enabled  =  " turbulence_enabled " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > turbulence_noise_strength  =  " turbulence_noise_strength " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_noise_scale  =  " turbulence_noise_scale " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_noise_speed  =  " turbulence_noise_speed " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_noise_speed_random  =  " turbulence_noise_speed_random " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_influence_over_life  =  " turbulence_influence_over_life " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_influence_min  =  " turbulence_influence_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_influence_max  =  " turbulence_influence_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_initial_displacement_min  =  " turbulence_initial_displacement_min " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > turbulence_initial_displacement_max  =  " turbulence_initial_displacement_max " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									shader_names - > gravity  =  " gravity " ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > lifetime_randomness  =  " lifetime_randomness " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > sub_emitter_frequency  =  " sub_emitter_frequency " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > sub_emitter_amount_at_end  =  " sub_emitter_amount_at_end " ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > sub_emitter_amount_at_collision  =  " sub_emitter_amount_at_collision " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > sub_emitter_amount_at_start  =  " sub_emitter_amount_at_start " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names - > sub_emitter_keep_velocity  =  " sub_emitter_keep_velocity " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > collision_friction  =  " collision_friction " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_names - > collision_bounce  =  " collision_bounce " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : finish_shaders ( )  {  
						 
					
						
							
								
									
										
										
										
											2024-05-06 19:40:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dirty_materials . clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-21 15:48:05 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									memdelete ( shader_names ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-06 19:40:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_names  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : _update_shader ( )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									MaterialKey  mk  =  _compute_key ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( mk  = =  current_key )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										return ;  // No update required in the end.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( shader_map . has ( current_key ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										shader_map [ current_key ] . users - - ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( shader_map [ current_key ] . users  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											// Deallocate shader, as it's no longer in use.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > free ( shader_map [ current_key ] . shader ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											shader_map . erase ( current_key ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									current_key  =  mk ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( shader_map . has ( mk ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										RS : : get_singleton ( ) - > material_set_shader ( _get_material ( ) ,  shader_map [ mk ] . shader ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										shader_map [ mk ] . users + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// No pre-existing shader, create one.
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 17:26:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Add a comment to describe the shader origin (useful when converting to ShaderMaterial).
 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									String  code  =  " // NOTE: Shader automatically converted from  "  VERSION_NAME  "   "  VERSION_FULL_CONFIG  " 's ParticleProcessMaterial. \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 17:26:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " shader_type particles; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " render_mode disable_velocity; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( collision_scale )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " render_mode collision_use_scale; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// Define uniforms.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform vec3 direction; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float spread; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float flatness; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float inherit_emitter_velocity_ratio = 0.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float initial_linear_velocity_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float initial_linear_velocity_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float directional_velocity_min; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float directional_velocity_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float angular_velocity_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float angular_velocity_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float orbit_velocity_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float orbit_velocity_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float radial_velocity_min; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float radial_velocity_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float linear_accel_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float linear_accel_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float radial_accel_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float radial_accel_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float tangent_accel_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float tangent_accel_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float damping_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float damping_max; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float initial_angle_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float initial_angle_max; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float scale_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float scale_max; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float hue_variation_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float hue_variation_max; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float anim_speed_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float anim_speed_max; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform float anim_offset_min; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float anim_offset_max; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform float lifetime_randomness; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform vec3 emission_shape_offset = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform vec3 emission_shape_scale = vec3(1.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform vec3 velocity_pivot = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_SCALE_OVER_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float scale_over_velocity_min = 0.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float scale_over_velocity_max = 5.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									switch  ( emission_shape )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_POINT :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//do none
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_SPHERE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform float emission_sphere_radius; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-27 23:28:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_SPHERE_SURFACE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform float emission_sphere_radius; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_BOX :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform vec3 emission_box_extents; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_DIRECTED_POINTS :  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-05 21:23:40 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " uniform sampler2D emission_texture_normal : hint_default_black; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-22 20:47:50 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											[[fallthrough]] ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-28 23:09:59 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_POINTS :  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-05 21:23:40 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " uniform sampler2D emission_texture_points : hint_default_black; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform int emission_texture_point_count; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( emission_color_texture . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-05 21:23:40 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												code  + =  " uniform sampler2D emission_texture_color : hint_default_white; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_RING :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform vec3  "  +  shader_names - > emission_ring_axis  +  " ; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform float  "  +  shader_names - > emission_ring_height  +  " ; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform float  "  +  shader_names - > emission_ring_radius  +  " ; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform float  "  +  shader_names - > emission_ring_inner_radius  +  " ; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " uniform float  "  +  shader_names - > emission_ring_cone_angle  +  " ; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 10:59:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  EMISSION_SHAPE_MAX :  {  // Max value for validity check.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-20 14:03:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( sub_emitter_mode  ! =  SUB_EMITTER_DISABLED  & &  ! RenderingServer : : get_singleton ( ) - > is_low_end ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( sub_emitter_mode  = =  SUB_EMITTER_CONSTANT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform float sub_emitter_frequency; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( sub_emitter_mode  = =  SUB_EMITTER_AT_END )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform int sub_emitter_amount_at_end; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( sub_emitter_mode  = =  SUB_EMITTER_AT_COLLISION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform int sub_emitter_amount_at_collision; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( sub_emitter_mode  = =  SUB_EMITTER_AT_START )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform int sub_emitter_amount_at_start; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform bool sub_emitter_keep_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-05 21:23:40 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " uniform vec4 color_value : source_color; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " uniform vec3 gravity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( color_ramp . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D color_ramp : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( color_initial_ramp . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D color_initial_ramp : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( alpha_curve . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D alpha_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( emission_curve . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D emission_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_INITIAL_LINEAR_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D linear_velocity_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ORBIT_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D orbit_velocity_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANGULAR_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D angular_velocity_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_LINEAR_ACCEL ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D linear_accel_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_RADIAL_ACCEL ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D radial_accel_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_TANGENTIAL_ACCEL ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D tangent_accel_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_DAMPING ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D damping_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANGLE ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-04-19 11:18:56 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D angle_texture : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_SCALE ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D scale_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_HUE_VARIATION ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D hue_rot_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANIM_SPEED ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D animation_speed_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANIM_OFFSET ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D animation_offset_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_RADIAL_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D radial_velocity_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_SCALE_OVER_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D scale_over_velocity_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_DIRECTIONAL_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D directional_velocity_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( velocity_limit_curve . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform sampler2D velocity_limit_curve : repeat_disable; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( collision_mode  = =  COLLISION_RIGID )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform float collision_friction; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float collision_bounce; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( turbulence_enabled )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_noise_strength; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_noise_scale; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_influence_min; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_influence_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_initial_displacement_min; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_initial_displacement_max; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform float turbulence_noise_speed_random; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " uniform vec3 turbulence_noise_speed = vec3(1.0, 1.0, 1.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( tex_parameters [ PARAM_TURB_INFLUENCE_OVER_LIFE ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform sampler2D turbulence_influence_over_life; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( turbulence_color_ramp . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " uniform sampler2D turbulence_color_ramp; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Define helper functions.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( turbulence_enabled )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Functions for 3D noise / turbulence.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " // Functions for 3D noise / turbulence. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " vec4 grad(vec4 p) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	p = fract(vec4( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			dot(p, vec4(0.143081, 0.001724, 0.280166, 0.262771)), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(p, vec4(0.645401, -0.047791, -0.146698, 0.595016)), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(p, vec4(-0.499665, -0.095734, 0.425674, -0.207367)), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(p, vec4(-0.013596, -0.848588, 0.423736, 0.17044)))); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	return fract((p.xyzw * p.yzwx) * 2365.952041) * 2.0 - 1.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " float noise(vec4 coord) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	// Domain rotation to improve the look of XYZ slices + animation patterns. \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	coord = vec4( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			coord.xyz + dot(coord, vec4(vec3(-0.1666667), -0.5)), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(coord, vec4(0.5))); \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 base = floor(coord), delta = coord - base; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0000 = grad(base + vec4(0.0, 0.0, 0.0, 0.0)), grad_1000 = grad(base + vec4(1.0, 0.0, 0.0, 0.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0100 = grad(base + vec4(0.0, 1.0, 0.0, 0.0)), grad_1100 = grad(base + vec4(1.0, 1.0, 0.0, 0.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0010 = grad(base + vec4(0.0, 0.0, 1.0, 0.0)), grad_1010 = grad(base + vec4(1.0, 0.0, 1.0, 0.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0110 = grad(base + vec4(0.0, 1.0, 1.0, 0.0)), grad_1110 = grad(base + vec4(1.0, 1.0, 1.0, 0.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0001 = grad(base + vec4(0.0, 0.0, 0.0, 1.0)), grad_1001 = grad(base + vec4(1.0, 0.0, 0.0, 1.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0101 = grad(base + vec4(0.0, 1.0, 0.0, 1.0)), grad_1101 = grad(base + vec4(1.0, 1.0, 0.0, 1.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0011 = grad(base + vec4(0.0, 0.0, 1.0, 1.0)), grad_1011 = grad(base + vec4(1.0, 0.0, 1.0, 1.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 grad_0111 = grad(base + vec4(0.0, 1.0, 1.0, 1.0)), grad_1111 = grad(base + vec4(1.0, 1.0, 1.0, 1.0)); \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 result_0123 = vec4( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 0.0, 0.0, 0.0), grad_0000), dot(delta - vec4(1.0, 0.0, 0.0, 0.0), grad_1000), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 1.0, 0.0, 0.0), grad_0100), dot(delta - vec4(1.0, 1.0, 0.0, 0.0), grad_1100)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 result_4567 = vec4( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 0.0, 1.0, 0.0), grad_0010), dot(delta - vec4(1.0, 0.0, 1.0, 0.0), grad_1010), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 1.0, 1.0, 0.0), grad_0110), dot(delta - vec4(1.0, 1.0, 1.0, 0.0), grad_1110)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 result_89AB = vec4( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 0.0, 0.0, 1.0), grad_0001), dot(delta - vec4(1.0, 0.0, 0.0, 1.0), grad_1001), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 1.0, 0.0, 1.0), grad_0101), dot(delta - vec4(1.0, 1.0, 0.0, 1.0), grad_1101)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 result_CDEF = vec4( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 0.0, 1.0, 1.0), grad_0011), dot(delta - vec4(1.0, 0.0, 1.0, 1.0), grad_1011), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			dot(delta - vec4(0.0, 1.0, 1.0, 1.0), grad_0111), dot(delta - vec4(1.0, 1.0, 1.0, 1.0), grad_1111)); \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 fade = delta * delta * delta * (10.0 + delta * (-15.0 + delta * 6.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 result_W0 = mix(result_0123, result_89AB, fade.w), result_W1 = mix(result_4567, result_CDEF, fade.w); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 result_WZ = mix(result_W0, result_W1, fade.z); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec2 result_WZY = mix(result_WZ.xy, result_WZ.zw, fade.y); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	return mix(result_WZY.x, result_WZY.y, fade.x); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " // Curl 3D and three-noise function with friendly permission by Isaac Cohen. \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " // Modified to accept 4D noise. \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " vec3 noise_3x(vec4 p) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	float s = noise(p); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	float s1 = noise(p + vec4(vec3(0.0), 1.7320508 * 2048.333333)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float s2 = noise(p - vec4(vec3(0.0), 1.7320508 * 2048.333333)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec3 c = vec3(s, s1, s2); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	return c; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " vec3 curl_3d(vec4 p, float c) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	float epsilon = 0.001 + c; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 dx = vec4(epsilon, 0.0, 0.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 dy = vec4(0.0, epsilon, 0.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 dz = vec4(0.0, 0.0, epsilon, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 x0 = noise_3x(p - dx).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 x1 = noise_3x(p + dx).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 y0 = noise_3x(p - dy).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 y1 = noise_3x(p + dy).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 z0 = noise_3x(p - dz).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 z1 = noise_3x(p + dz).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float x = (y1.z - y0.z) - (z1.y - z0.y); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float y = (z1.x - z0.x) - (x1.z - x0.z); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float z = (x1.y - x0.y) - (y1.x - y0.x); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	return normalize(vec3(x, y, z)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " vec3 get_noise_direction(vec3 pos) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	float adj_contrast = max((turbulence_noise_strength - 1.0), 0.0) * 70.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec4 noise_time = TIME * vec4(turbulence_noise_speed, turbulence_noise_speed_random); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec4 noise_pos = vec4(pos * turbulence_noise_scale, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 noise_direction = curl_3d(noise_pos + noise_time, adj_contrast); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	noise_direction = mix(0.9 * noise_direction, noise_direction, turbulence_noise_strength - 9.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	return noise_direction; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " vec4 rotate_hue(vec4 current_color, float hue_rot_angle) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float hue_rot_c = cos(hue_rot_angle); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float hue_rot_s = sin(hue_rot_angle); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	mat4 hue_rot_mat = \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 			mat4(vec4(0.299, 0.587, 0.114, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(0.299, 0.587, 0.114, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(0.299, 0.587, 0.114, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(0.000, 0.000, 0.000, 1.0)) + \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 			mat4(vec4(0.701, -0.587, -0.114, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(-0.299, 0.413, -0.114, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(-0.300, -0.588, 0.886, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(0.000, 0.000, 0.000, 0.0)) * \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					hue_rot_c + \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 			mat4(vec4(0.168, 0.330, -0.497, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(-0.328, 0.035, 0.292, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(1.250, -1.050, -0.203, 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					vec4(0.000, 0.000, 0.000, 0.0)) * \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 					hue_rot_s; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	return hue_rot_mat * current_color; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Random functions.
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " float rand_from_seed(inout uint seed) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	int k; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	int s = int(seed); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (s == 0) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		s = 305420679; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " 	k = s / 127773; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	s = 16807 * (s - k * 127773) - 2836 * k; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (s < 0) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " 		s += 2147483647; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " 	seed = uint(s); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	return float(seed % uint(65536)) / 65535.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " float rand_from_seed_m1_p1(inout uint seed) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	return rand_from_seed(seed) * 2.0 - 1.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Improve seed quality.
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " uint hash(uint x) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	x = ((x >> uint(16)) ^ x) * uint(73244475); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	x = ((x >> uint(16)) ^ x) * uint(73244475); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	x = (x >> uint(16)) ^ x; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	return x; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Define structs.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " struct DisplayParameters { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	vec3 scale; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float hue_rotation; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float animation_speed; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float animation_offset; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float lifetime; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	vec4 color; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " }; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " struct DynamicsParameters { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float angle; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float angular_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float initial_velocity_multiplier; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float directional_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float radial_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float orbit_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( turbulence_enabled )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float turb_influence; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " }; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " struct PhysicalParameters { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float linear_accel; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float radial_accel; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float tangent_accel; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float damping; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " }; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " void calculate_initial_physical_params(inout PhysicalParameters params, inout uint alt_seed) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-26 16:08:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	params.linear_accel = mix(linear_accel_min, linear_accel_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.radial_accel = mix(radial_accel_min, radial_accel_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.tangent_accel = mix(tangent_accel_min, tangent_accel_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.damping = mix(damping_min, damping_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " void calculate_initial_dynamics_params(inout DynamicsParameters params, inout uint alt_seed) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	// -------------------- DO NOT REORDER OPERATIONS, IT BREAKS VISUAL COMPATIBILITY \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	// -------------------- ADD NEW OPERATIONS AT THE BOTTOM \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.angle = mix(initial_angle_min, initial_angle_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.angular_velocity = mix(angular_velocity_min, angular_velocity_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	params.initial_velocity_multiplier = mix(initial_linear_velocity_min, initial_linear_velocity_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.directional_velocity = mix(directional_velocity_min, directional_velocity_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.radial_velocity = mix(radial_velocity_min, radial_velocity_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.orbit_velocity = mix(orbit_velocity_min, orbit_velocity_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( turbulence_enabled )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.turb_influence = mix(turbulence_influence_min, turbulence_influence_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " void calculate_initial_display_params(inout DisplayParameters params, inout uint alt_seed) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	// -------------------- DO NOT REORDER OPERATIONS, IT BREAKS VISUAL COMPATIBILITY \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	// -------------------- ADD NEW OPERATIONS AT THE BOTTOM \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float pi = 3.14159; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	params.scale = vec3(mix(scale_min, scale_max, rand_from_seed(alt_seed))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.scale = sign(params.scale) * max(abs(params.scale), 0.001); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.hue_rotation = pi * 2.0 * mix(hue_variation_min, hue_variation_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	params.animation_speed = mix(anim_speed_min, anim_speed_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.animation_offset = mix(anim_offset_min, anim_offset_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.lifetime = (1.0 - lifetime_randomness * rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	params.color = color_value; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( color_initial_ramp . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-17 12:06:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.color *= texture(color_initial_ramp, vec2(rand_from_seed(alt_seed))); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( emission_color_texture . is_valid ( )  & &  ( emission_shape  = =  EMISSION_SHAPE_POINTS  | |  emission_shape  = =  EMISSION_SHAPE_DIRECTED_POINTS ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	int point = min(emission_texture_point_count - 1, int(rand_from_seed(alt_seed) * float(emission_texture_point_count))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	ivec2 emission_tex_size = textureSize(emission_texture_points, 0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-19 17:29:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.color *= texelFetch(emission_texture_color, emission_tex_ofs, 0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Process display parameters that are bound solely by lifetime.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " void process_display_param(inout DisplayParameters parameters, float lifetime) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	// Compile-time add textures. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_SCALE ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	parameters.scale *= texture(scale_curve, vec2(lifetime)).rgb; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_HUE_VARIATION ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	parameters.hue_rotation *= texture(hue_rot_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANIM_OFFSET ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	parameters.animation_offset += texture(animation_offset_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANIM_SPEED ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	parameters.animation_speed *= texture(animation_speed_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( color_ramp . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	parameters.color *= texture(color_ramp, vec2(lifetime)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( alpha_curve . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	parameters.color.a *= texture(alpha_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	parameters.color = rotate_hue(parameters.color, parameters.hue_rotation); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( emission_curve . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	parameters.color.rgb *= 1.0 + texture(emission_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " vec3 calculate_initial_position(inout uint alt_seed) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-04-17 12:21:03 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float pi = 3.14159; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	vec3 pos = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	{ // Emission shape. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_POINT )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	 	pos = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-18 02:17:31 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_SPHERE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float s = rand_from_seed(alt_seed) * 2.0 - 1.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float t = rand_from_seed(alt_seed) * 2.0 * pi; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float p = rand_from_seed(alt_seed); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float radius = emission_sphere_radius * sqrt(1.0 - s * s); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		pos = mix(vec3(0.0, 0.0, 0.0), vec3(radius * cos(t), radius * sin(t), emission_sphere_radius * s), p); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_SPHERE_SURFACE )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float s = rand_from_seed(alt_seed) * 2.0 - 1.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float t = rand_from_seed(alt_seed) * 2.0 * pi; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float radius = emission_sphere_radius * sqrt(1.0 - s * s); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		pos = vec3(radius * cos(t), radius * sin(t), emission_sphere_radius * s); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_BOX )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		pos = vec3(rand_from_seed(alt_seed) * 2.0 - 1.0, rand_from_seed(alt_seed) * 2.0 - 1.0, rand_from_seed(alt_seed) * 2.0 - 1.0) * emission_box_extents; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_POINTS  | |  emission_shape  = =  EMISSION_SHAPE_DIRECTED_POINTS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		int point = min(emission_texture_point_count - 1, int(rand_from_seed(alt_seed) * float(emission_texture_point_count))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ivec2 emission_tex_size = textureSize(emission_texture_points, 0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		pos = texelFetch(emission_texture_points, emission_tex_ofs, 0).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_RING )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float radius_clamped = max(0.001, emission_ring_radius); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float top_radius = max(radius_clamped - tan(radians(90.0 - emission_ring_cone_angle)) * emission_ring_height, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float y_pos = rand_from_seed(alt_seed); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float skew = max(min(radius_clamped, top_radius) / max(radius_clamped, top_radius), 0.5); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		y_pos = radius_clamped < top_radius ? pow(y_pos, skew) : 1.0 - pow(y_pos, skew); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float ring_spawn_angle = rand_from_seed(alt_seed) * 2.0 * pi; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float ring_random_radius = sqrt(rand_from_seed(alt_seed) * (radius_clamped * radius_clamped - emission_ring_inner_radius * emission_ring_inner_radius) + emission_ring_inner_radius * emission_ring_inner_radius); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ring_random_radius = mix(ring_random_radius, ring_random_radius * (top_radius / radius_clamped), y_pos); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-17 17:33:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		vec3 axis = emission_ring_axis == vec3(0.0) ? vec3(0.0, 0.0, 1.0) : normalize(emission_ring_axis); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		vec3 ortho_axis = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-17 17:33:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		if (abs(axis) == vec3(1.0, 0.0, 0.0)) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			ortho_axis = cross(axis, vec3(0.0, 1.0, 0.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		} else { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  "  			ortho_axis = cross(axis, vec3(1.0, 0.0, 0.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ortho_axis = normalize(ortho_axis); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float s = sin(ring_spawn_angle); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float c = cos(ring_spawn_angle); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float oc = 1.0 - c; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ortho_axis = mat3( \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			vec3(c + axis.x * axis.x * oc, axis.x * axis.y * oc - axis.z * s, axis.x * axis.z *oc + axis.y * s), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			vec3(axis.x * axis.y * oc + s * axis.z, c + axis.y * axis.y * oc, axis.y * axis.z * oc - axis.x * s), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			vec3(axis.z * axis.x * oc - axis.y * s, axis.z * axis.y * oc + axis.x * s, c + axis.z * axis.z * oc) \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			) * ortho_axis; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ortho_axis = normalize(ortho_axis); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		pos = ortho_axis * ring_random_radius + (y_pos * emission_ring_height - emission_ring_height / 2.0) * axis; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	return pos * emission_shape_scale + emission_shape_offset; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ORBIT_VELOCITY ] . is_valid ( )  | |  particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " vec3 process_orbit_displacement(DynamicsParameters param, float lifetime, inout uint alt_seed, mat4 transform, mat4 emission_transform, float delta, float total_lifetime) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										// No reason to run all these expensive calculation below if we have no orbit velocity
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// HOWEVER
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// May be a bad idea for fps consistency?
 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	if (abs(param.orbit_velocity) < 0.01 || delta < 0.001) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		return vec3(0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 displacement = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	float pi = 3.14159; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	float orbit_amount = param.orbit_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( tex_parameters [ PARAM_ORBIT_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 15:36:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												CurveTexture  * texture  =  Object : : cast_to < CurveTexture > ( tex_parameters [ PARAM_ORBIT_VELOCITY ] . ptr ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( texture )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													code  + =  " 	orbit_amount *= texture(orbit_velocity_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 15:36:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
													code  + =  " 	orbit_amount *= texture(orbit_velocity_curve, vec2(lifetime)).b; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 15:36:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	if (orbit_amount != 0.0) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		vec3 pos = transform[3].xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		vec3 org = emission_transform[3].xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		vec3 diff = pos - org; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		float ang = orbit_amount * pi * 2.0 * delta; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		mat2 rot = mat2(vec2(cos(ang), -sin(ang)), vec2(sin(ang), cos(ang))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		displacement.xy -= diff.xy; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		displacement.xy += rot * diff.xy; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	vec3 orbit_velocities = vec3(param.orbit_velocity); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	orbit_velocities *= texture(orbit_velocity_curve, vec2(lifetime)).rgb; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 15:36:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	orbit_velocities *= pi * 2.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	orbit_velocities *= delta; // We wanna process those by the delta angle. \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	// X axis. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	vec3 local_pos = (inverse(emission_transform) * transform[3]).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	local_pos -= velocity_pivot; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	local_pos.x = 0.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	mat3 x_rotation_mat = mat3( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		vec3(1.0, 0.0, 0.0), \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		vec3(0.0, cos(orbit_velocities.x), sin(orbit_velocities.x)), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		vec3(0.0, -sin(orbit_velocities.x), cos(orbit_velocities.x)) \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	vec3 new_pos = x_rotation_mat * local_pos; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	displacement = new_pos - local_pos; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	// Y axis. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	local_pos = (inverse(emission_transform) * transform[3]).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	local_pos -= velocity_pivot; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	local_pos.y = 0.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	mat3 y_rotation_mat = mat3( \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		vec3(cos(orbit_velocities.y), 0.0, -sin(orbit_velocities.y)), \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		vec3(0.0, 1.0, 0.0), \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		vec3(sin(orbit_velocities.y), 0.0, cos(orbit_velocities.y)) \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	new_pos = y_rotation_mat * local_pos; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	displacement += new_pos - local_pos; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	// Z axis. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	local_pos = (inverse(emission_transform) * transform[3]).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	local_pos -= velocity_pivot; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	local_pos.z = 0.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	mat3 z_rotation_mat = mat3( \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		vec3(cos(orbit_velocities.z), sin(orbit_velocities.z), 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		vec3(-sin(orbit_velocities.z), cos(orbit_velocities.z), 0.0), \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		vec3(0.0, 0.0, 1.0) \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	new_pos = z_rotation_mat * local_pos; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	displacement += new_pos - local_pos; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	return (emission_transform * vec4(displacement / delta, 0.0)).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " vec3 get_random_direction_from_spread(inout uint alt_seed, float spread_angle) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float pi = 3.14159; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float degree_to_rad = pi / 180.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	float spread_rad = spread_angle * degree_to_rad; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-07 06:30:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Spread calculation for 2D.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float angle1_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	angle1_rad += direction.x != 0.0 ? atan(direction.y, direction.x) : sign(direction.y) * (pi / 2.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 spread_direction = vec3(cos(angle1_rad), sin(angle1_rad), 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	return spread_direction; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Spread calculation for 3D.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float angle1_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	float angle2_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad * (1.0 - flatness); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 direction_xz = vec3(sin(angle1_rad), 0.0, cos(angle1_rad)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 direction_yz = vec3(0.0, sin(angle2_rad), cos(angle2_rad)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	direction_yz.z = direction_yz.z / max(0.0001, sqrt(abs(direction_yz.z))); // Better uniform distribution. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-07 06:30:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec3 spread_direction = vec3(direction_xz.x * direction_yz.z, direction_yz.y, direction_xz.z * direction_yz.z); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 direction_nrm = length(direction) > 0.0 ? normalize(direction) : vec3(0.0, 0.0, 1.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	// Rotate spread to direction. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-07 06:30:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	vec3 binormal = cross(vec3(0.0, 1.0, 0.0), direction_nrm); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	if (length(binormal) < 0.0001) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		// Direction is parallel to Y. Choose Z as the binormal. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-07 06:30:19 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		binormal = vec3(0.0, 0.0, 1.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	binormal = normalize(binormal); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 normal = cross(binormal, direction_nrm); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	spread_direction = binormal * spread_direction.x + normal * spread_direction.y + direction_nrm * spread_direction.z; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	return normalize(spread_direction); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " vec3 process_radial_displacement(DynamicsParameters param, float lifetime, inout uint alt_seed, mat4 transform, mat4 emission_transform, float delta) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	vec3 radial_displacement = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (delta < 0.001) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-22 22:38:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		return radial_displacement; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float radial_displacement_multiplier = 1.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_RADIAL_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	radial_displacement_multiplier = texture(radial_velocity_curve, vec2(lifetime)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	vec3 global_pivot = (emission_transform * vec4(velocity_pivot, 1.0)).xyz; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (length(transform[3].xyz - global_pivot) > 0.01) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		radial_displacement = normalize(transform[3].xyz - global_pivot) * radial_displacement_multiplier * param.radial_velocity; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} else { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		radial_displacement = get_random_direction_from_spread(alt_seed, 360.0) * param.radial_velocity; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	if (radial_displacement_multiplier * param.radial_velocity < 0.0) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		// Prevent inwards velocity to flicker once the point is reached. \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		radial_displacement = normalize(radial_displacement) * min(abs(radial_displacement_multiplier * param.radial_velocity), length(transform[3].xyz - global_pivot) / delta); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-17 12:06:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	return radial_displacement; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_DIRECTIONAL_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " vec3 process_directional_displacement(DynamicsParameters param, float lifetime_percent, mat4 transform, mat4 emission_transform) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 displacement = texture(directional_velocity_curve, vec2(lifetime_percent)).xyz * param.directional_velocity; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( directional_velocity_global )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	displacement = (emission_transform * vec4(displacement, 0.0)).xyz; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-17 12:06:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	return displacement; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " void process_physical_parameters(inout PhysicalParameters params, float lifetime_percent) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_LINEAR_ACCEL ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.linear_accel *= texture(linear_accel_texture, vec2(lifetime_percent)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_RADIAL_ACCEL ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.radial_accel *= texture(radial_accel_texture, vec2(lifetime_percent)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_TANGENTIAL_ACCEL ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.tangent_accel *= texture(tangent_accel_texture, vec2(lifetime_percent)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_DAMPING ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	params.damping *= texture(damping_texture, vec2(lifetime_percent)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " void start() { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	uint base_number = NUMBER; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	uint alt_seed = hash(base_number + uint(1) + RANDOM_SEED); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	DisplayParameters params; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	calculate_initial_display_params(params, alt_seed); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	// Reset alt seed? \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	//alt_seed = hash(base_number + uint(1) + RANDOM_SEED); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	DynamicsParameters dynamic_params; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	calculate_initial_dynamics_params(dynamic_params, alt_seed); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	PhysicalParameters physics_params; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	calculate_initial_physical_params(physics_params, alt_seed); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	process_display_param(params, 0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-17 12:06:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (rand_from_seed(alt_seed) > AMOUNT_RATIO) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		ACTIVE = false; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	if (RESTART_CUSTOM) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		CUSTOM = vec4(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		CUSTOM.w = params.lifetime; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		CUSTOM.x = dynamic_params.angle; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (RESTART_COLOR) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		COLOR = params.color; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	if (RESTART_ROT_SCALE) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		TRANSFORM[0].xyz = vec3(1.0, 0.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		TRANSFORM[1].xyz = vec3(0.0, 1.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		TRANSFORM[2].xyz = vec3(0.0, 0.0, 1.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	if (RESTART_POSITION) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		TRANSFORM[3].xyz = calculate_initial_position(alt_seed); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( turbulence_enabled )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float initial_turbulence_displacement = mix(turbulence_initial_displacement_min, turbulence_initial_displacement_max, rand_from_seed(alt_seed)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		vec3 noise_direction = get_noise_direction(TRANSFORM[3].xyz); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		TRANSFORM[3].xyz += noise_direction * initial_turbulence_displacement; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		TRANSFORM = EMISSION_TRANSFORM * TRANSFORM; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (RESTART_VELOCITY) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		VELOCITY = get_random_direction_from_spread(alt_seed, spread) * dynamic_params.initial_velocity_multiplier; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-23 10:52:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( emission_shape  = =  EMISSION_SHAPE_DIRECTED_POINTS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		int point = min(emission_texture_point_count - 1, int(rand_from_seed(alt_seed) * float(emission_texture_point_count))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ivec2 emission_tex_size = textureSize(emission_texture_points, 0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		{ \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 			mat2 rotm; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-23 10:52:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 			rotm[0] = texelFetch(emission_texture_normal, emission_tex_ofs, 0).xy; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			rotm[1] = rotm[0].yx * vec2(1.0, -1.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			VELOCITY.xy = rotm * VELOCITY.xy; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		{ \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			vec3 normal = texelFetch(emission_texture_normal, emission_tex_ofs, 0).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			vec3 tangent = normalize(cross(v0, normal)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			vec3 bitangent = normalize(cross(tangent, normal)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 			VELOCITY = mat3(tangent, bitangent, normal) * VELOCITY; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	process_display_param(params, 0.0); \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	VELOCITY = (EMISSION_TRANSFORM * vec4(VELOCITY, 0.0)).xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	VELOCITY += EMITTER_VELOCITY * inherit_emitter_velocity_ratio; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	VELOCITY.z = 0.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	TRANSFORM[3].z = 0.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " } \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " void process() { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	uint base_number = NUMBER; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// TODO: Add optional determinism here.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	//if (repeatable) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	//	base_number = INDEX; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	//} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	uint alt_seed = hash(base_number + uint(1) + RANDOM_SEED); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	DisplayParameters params; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	calculate_initial_display_params(params, alt_seed); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	DynamicsParameters dynamic_params; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	calculate_initial_dynamics_params(dynamic_params, alt_seed); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	PhysicalParameters physics_params; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	calculate_initial_physical_params(physics_params, alt_seed); \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float pi = 3.14159; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float degree_to_rad = pi / 180.0; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( sub_emitter_mode  = =  SUB_EMITTER_AT_START  & &  ! RenderingServer : : get_singleton ( ) - > is_low_end ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	bool just_spawned = CUSTOM.y == 0.0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	CUSTOM.y += DELTA / LIFETIME; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	CUSTOM.y = mix(CUSTOM.y, 1.0, INTERPOLATE_TO_END); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float lifetime_percent = CUSTOM.y / params.lifetime; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (CUSTOM.y > CUSTOM.w) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		ACTIVE = false; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	// Calculate all velocity. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	vec3 controlled_displacement = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ORBIT_VELOCITY ] . is_valid ( )  | |  particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	controlled_displacement += process_orbit_displacement(dynamic_params, lifetime_percent, alt_seed, TRANSFORM, EMISSION_TRANSFORM, DELTA, params.lifetime * LIFETIME); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-22 22:38:14 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	controlled_displacement += process_radial_displacement(dynamic_params, lifetime_percent, alt_seed, TRANSFORM, EMISSION_TRANSFORM, DELTA); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_DIRECTIONAL_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-17 12:06:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	controlled_displacement += process_directional_displacement(dynamic_params, lifetime_percent, TRANSFORM, EMISSION_TRANSFORM); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	process_physical_parameters(physics_params, lifetime_percent); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	vec3 force; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	{ \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		// Copied from previous version. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		vec3 pos = TRANSFORM[3].xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		force = gravity; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		// Apply linear acceleration. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		force += length(VELOCITY) > 0.0 ? normalize(VELOCITY) * physics_params.linear_accel : vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		// Apply radial acceleration. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		vec3 org = EMISSION_TRANSFORM[3].xyz; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		vec3 diff = pos - org; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 		force += length(diff) > 0.0 ? normalize(diff) * physics_params.radial_accel : vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		// Apply tangential acceleration. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		float tangent_accel_val = physics_params.tangent_accel; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		force += length(diff.yx) > 0.0 ? vec3(normalize(diff.yx * vec2(-1.0, 1.0)), 0.0) * tangent_accel_val : vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		vec3 crossDiff = cross(normalize(diff), normalize(gravity)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		force += length(crossDiff) > 0.0 ? normalize(crossDiff) * tangent_accel_val : vec3(0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( attractor_interaction_enabled )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		force += ATTRACTOR_FORCE; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		force.z = 0.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		// Apply attractor forces. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		VELOCITY += force * DELTA; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	{ \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		// Copied from previous version. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		if (physics_params.damping > 0.0) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 00:57:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 			float v = length(VELOCITY); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! particle_flags [ PARTICLE_FLAG_DAMPING_AS_FRICTION ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 00:57:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			v -= physics_params.damping * DELTA; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			if (v > 0.001) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 				// Realistic friction formula. We assume the mass of a particle to be 0.05 kg. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-23 10:52:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 				float damp = v * v * physics_params.damping * 0.05 * DELTA; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 				v -= damp; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 00:57:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 			} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 00:57:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 			if (v < 0.0) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 				VELOCITY = vec3(0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 			} else { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 				VELOCITY = normalize(VELOCITY) * v; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 			} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( collision_mode  = =  COLLISION_RIGID )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	if (COLLIDED) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 18:55:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float collision_response = dot(COLLISION_NORMAL, VELOCITY); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float slide_to_bounce_trigger = step(2.0 / clamp(collision_bounce + 1.0, 1.0, 2.0), abs(collision_response)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 18:55:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		TRANSFORM[3].xyz += COLLISION_NORMAL * COLLISION_DEPTH; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		// Remove all components of VELOCITY that are not tangential to COLLISION_NORMAL. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 18:55:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		VELOCITY -= COLLISION_NORMAL * collision_response; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		// Apply friction only to VELOCITY across the surface (effectively decouples friction and bounce behavior). \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		VELOCITY = mix(VELOCITY, vec3(0.0), clamp(collision_friction, 0.0, 1.0)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		// Add bounce velocity to VELOCITY. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 18:55:56 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		VELOCITY -= COLLISION_NORMAL * collision_response * (collision_bounce * slide_to_bounce_trigger); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									}  else  if  ( collision_mode  = =  COLLISION_HIDE_ON_CONTACT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	if (COLLIDED) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		ACTIVE = false; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	// Turbulence before limiting. \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( turbulence_enabled )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( tex_parameters [ PARAM_TURB_INFLUENCE_OVER_LIFE ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	float turbulence_influence = textureLod(turbulence_influence_over_life, vec2(lifetime_percent, 0.0), 0.0).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	float turbulence_influence = 1.0; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	vec3 noise_direction = get_noise_direction(TRANSFORM[3].xyz); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 17:45:21 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// Godot detects when the COLLIDED keyword is used. If it's used anywhere in the shader then Godot will generate the screen space SDF for collisions.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// We don't need it as long as collision is disabled. Refer to GH-83744 for more info.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( collision_mode  = =  COLLISION_RIGID )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	if (!COLLIDED) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	{ \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-22 17:54:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		float vel_mag = length(VELOCITY); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		float vel_infl = clamp(dynamic_params.turb_influence * turbulence_influence, 0.0, 1.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		VELOCITY = mix(VELOCITY, normalize(noise_direction) * vel_mag * (1.0 + (1.0 - vel_infl) * 0.2), vel_infl); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		vel_mag = length(controlled_displacement); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		controlled_displacement = mix(controlled_displacement, normalize(noise_direction) * vel_mag * (1.0 + (1.0 - vel_infl) * 0.2), vel_infl); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	vec3 final_velocity = controlled_displacement + VELOCITY; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( velocity_limit_curve . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	// Limit velocity. \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	if (length(final_velocity) > 0.001) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 		final_velocity = normalize(final_velocity) * min(abs(length(final_velocity)), abs(texture(velocity_limit_curve, vec2(lifetime_percent)).r)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	final_velocity.z = 0.0; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	TRANSFORM[3].xyz += final_velocity * DELTA; \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	process_display_param(params, lifetime_percent); \n \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	float base_angle = dynamic_params.angle; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANGLE ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	base_angle *= texture(angle_texture, vec2(lifetime_percent)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_ANGULAR_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	base_angle += CUSTOM.y * LIFETIME * dynamic_params.angular_velocity * texture(angular_velocity_texture, vec2(lifetime_percent)).r; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	base_angle += CUSTOM.y * LIFETIME * dynamic_params.angular_velocity; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	CUSTOM.x = base_angle * degree_to_rad; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	COLOR = params.color; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( particle_flags [ PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	if (length(final_velocity) > 0.0) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[1].xyz = normalize(final_velocity); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	} else { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[1].xyz = normalize(TRANSFORM[1].xyz); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[0].xyz = normalize(cross(TRANSFORM[1].xyz, TRANSFORM[2].xyz)); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[2] = vec4(0.0, 0.0, 1.0, 0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[0] = vec4(cos(CUSTOM.x), -sin(CUSTOM.x), 0.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[1] = vec4(sin(CUSTOM.x), cos(CUSTOM.x), 0.0, 0.0); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[2] = vec4(0.0, 0.0, 1.0, 0.0); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										// Orient particle Y towards velocity.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( particle_flags [ PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	if (length(final_velocity) > 0.0) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[1].xyz = normalize(final_velocity); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	} else { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[1].xyz = normalize(TRANSFORM[1].xyz); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											code  + =  " 	if (TRANSFORM[1].xyz == normalize(TRANSFORM[0].xyz)) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[0].xyz = normalize(cross(normalize(TRANSFORM[1].xyz), normalize(TRANSFORM[2].xyz))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[2].xyz = normalize(cross(normalize(TRANSFORM[0].xyz), normalize(TRANSFORM[1].xyz))); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											code  + =  " 	} else { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 13:18:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[2].xyz = normalize(cross(normalize(TRANSFORM[0].xyz), normalize(TRANSFORM[1].xyz))); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 		TRANSFORM[0].xyz = normalize(cross(normalize(TRANSFORM[1].xyz), normalize(TRANSFORM[2].xyz))); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[0].xyz = normalize(TRANSFORM[0].xyz); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[1].xyz = normalize(TRANSFORM[1].xyz); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[2].xyz = normalize(TRANSFORM[2].xyz); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										// Turn particle by rotation in Y.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( particle_flags [ PARTICLE_FLAG_ROTATE_Y ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	vec4 origin = TRANSFORM[3]; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-05 11:33:25 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM = mat4(vec4(cos(CUSTOM.x), 0.0, -sin(CUSTOM.x), 0.0), vec4(0.0, 1.0, 0.0, 0.0), vec4(sin(CUSTOM.x), 0.0, cos(CUSTOM.x), 0.0), vec4(0.0, 0.0, 0.0, 1.0)); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											code  + =  " 	TRANSFORM[3] = origin; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( particle_flags [ PARTICLE_FLAG_DISABLE_Z ] )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	TRANSFORM[3].z = 0.0; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( tex_parameters [ PARAM_SCALE_OVER_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	if (length(final_velocity) > 0.001) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		params.scale *= texture(scale_over_velocity_curve, vec2(clamp(length(final_velocity) / (scale_over_velocity_max - scale_over_velocity_min), 0.0, 1.0), 0.0)).rgb; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	} else { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		params.scale *= texture(scale_over_velocity_curve, vec2(0.0)).rgb; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	TRANSFORM[0].xyz *= sign(params.scale.x) * max(abs(params.scale.x), 0.001); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	TRANSFORM[1].xyz *= sign(params.scale.y) * max(abs(params.scale.y), 0.001); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	TRANSFORM[2].xyz *= sign(params.scale.z) * max(abs(params.scale.z), 0.001); \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	CUSTOM.z = params.animation_offset + lifetime_percent * params.animation_speed; \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-20 14:03:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( sub_emitter_mode  ! =  SUB_EMITTER_DISABLED  & &  ! RenderingServer : : get_singleton ( ) - > is_low_end ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	int emit_count = 0; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										switch  ( sub_emitter_mode )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											case  SUB_EMITTER_CONSTANT :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	float interval_from = CUSTOM.y * LIFETIME - DELTA; \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												code  + =  " 	float interval_rem = sub_emitter_frequency - mod(interval_from, sub_emitter_frequency); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	if (DELTA >= interval_rem) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 		emit_count = 1; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											case  SUB_EMITTER_AT_COLLISION :  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												code  + =  " 	if (COLLIDED) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 		emit_count = sub_emitter_amount_at_collision; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											case  SUB_EMITTER_AT_END :  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-21 21:01:26 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												code  + =  " 	if ((CUSTOM.y / CUSTOM.w * LIFETIME) > (LIFETIME - DELTA)) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 		emit_count = sub_emitter_amount_at_end; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											case  SUB_EMITTER_AT_START :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	if (just_spawned) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 		emit_count = sub_emitter_amount_at_start; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											default :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-14 21:37:47 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										code  + =  " 	for (int i = 0; i < emit_count; i++) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		uint flags = FLAG_EMIT_POSITION | FLAG_EMIT_ROT_SCALE; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		if (sub_emitter_keep_velocity) { \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 			flags |= FLAG_EMIT_VELOCITY; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		} \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 		emit_subparticle(TRANSFORM, VELOCITY, vec4(0.0), vec4(0.0), flags); \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										code  + =  " 	} \n \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-04-17 12:21:03 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 	if (CUSTOM.y > CUSTOM.w) { \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									code  + =  " 		ACTIVE = false; \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									code  + =  " 	} \n " ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									code  + =  " } \n " ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ShaderData  shader_data ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									shader_data . shader  =  RS : : get_singleton ( ) - > shader_create ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									shader_data . users  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > shader_set_code ( shader_data . shader ,  code ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									shader_map [ mk ]  =  shader_data ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > material_set_shader ( _get_material ( ) ,  shader_data . shader ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : flush_changes ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-02-26 11:28:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MutexLock  lock ( material_mutex ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-06 19:40:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									while  ( dirty_materials . first ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dirty_materials . first ( ) - > self ( ) - > _update_shader ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										dirty_materials . first ( ) - > remove_from_list ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : _queue_shader_change ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-02-26 11:28:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MutexLock  lock ( material_mutex ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-05-09 18:59:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( _is_initialized ( )  & &  ! element . in_list ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-06 19:40:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										dirty_materials . add ( & element ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  ParticleProcessMaterial : : has_min_max_property ( const  String  & p_name )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  min_max_properties . has ( p_name ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_direction ( Vector3  p_direction )  {  
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									direction  =  p_direction ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > direction ,  direction ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_direction ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  direction ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_spread ( float  p_spread )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									spread  =  p_spread ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > spread ,  p_spread ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_spread ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  spread ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_flatness ( float  p_flatness )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									flatness  =  p_flatness ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > flatness ,  p_flatness ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_flatness ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  flatness ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_velocity_pivot ( const  Vector3  & p_pivot )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									velocity_pivot  =  p_pivot ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > velocity_pivot ,  p_pivot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_velocity_pivot ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  velocity_pivot ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_param ( Parameter  p_param ,  const  Vector2  & p_value )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( p_param ,  p_value . x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( p_param ,  p_value . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Vector2  ParticleProcessMaterial : : get_param ( Parameter  p_param )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  Vector2 ( get_param_min ( p_param ) ,  get_param_max ( p_param ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_param_min ( Parameter  p_param ,  float  p_value )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_INDEX ( p_param ,  PARAM_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									params_min [ p_param ]  =  p_value ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( params_min [ p_param ]  >  params_max [ p_param ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										set_param_max ( p_param ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									switch  ( p_param )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_INITIAL_LINEAR_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > initial_linear_velocity_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANGULAR_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > angular_velocity_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ORBIT_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > orbit_velocity_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_LINEAR_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > linear_accel_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_RADIAL_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > radial_accel_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TANGENTIAL_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > tangent_accel_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_DAMPING :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > damping_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANGLE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > initial_angle_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_SCALE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > scale_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_HUE_VARIATION :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > hue_variation_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANIM_SPEED :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > anim_speed_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANIM_OFFSET :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > anim_offset_min ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_TURB_VEL_INFLUENCE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_influence_min ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TURB_INIT_DISPLACEMENT :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_initial_displacement_min ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TURB_INFLUENCE_OVER_LIFE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											// Can't happen, but silences warning
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_RADIAL_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > radial_velocity_min ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_SCALE_OVER_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > scale_over_velocity_min ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_DIRECTIONAL_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > directional_velocity_min ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-10 13:00:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_MAX : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ;  // Can't happen, but silences warning
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_param_min ( Parameter  p_param )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_INDEX_V ( p_param ,  PARAM_MAX ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  params_min [ p_param ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_param_max ( Parameter  p_param ,  float  p_value )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_INDEX ( p_param ,  PARAM_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									params_max [ p_param ]  =  p_value ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( params_min [ p_param ]  >  params_max [ p_param ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										set_param_min ( p_param ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									switch  ( p_param )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_INITIAL_LINEAR_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > initial_linear_velocity_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANGULAR_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > angular_velocity_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ORBIT_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > orbit_velocity_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_LINEAR_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > linear_accel_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_RADIAL_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > radial_accel_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TANGENTIAL_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > tangent_accel_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_DAMPING :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > damping_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANGLE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > initial_angle_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_SCALE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > scale_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_HUE_VARIATION :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > hue_variation_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANIM_SPEED :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > anim_speed_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANIM_OFFSET :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > anim_offset_max ,  p_value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_TURB_VEL_INFLUENCE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_influence_max ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TURB_INIT_DISPLACEMENT :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_initial_displacement_max ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TURB_INFLUENCE_OVER_LIFE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											// Can't happen, but silences warning
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_RADIAL_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > radial_velocity_max ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_SCALE_OVER_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > scale_over_velocity_max ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_DIRECTIONAL_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > directional_velocity_max ,  p_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-10 13:00:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_MAX : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ;  // Can't happen, but silences warning
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_param_max ( Parameter  p_param )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_INDEX_V ( p_param ,  PARAM_MAX ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  params_max [ p_param ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  void  _adjust_curve_range ( const  Ref < Texture2D >  & p_texture ,  float  p_min ,  float  p_max )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									Ref < CurveTexture >  curve_tex  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( curve_tex . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										curve_tex - > ensure_default_setup ( p_min ,  p_max ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Ref < CurveXYZTexture >  curve_xyz_tex  =  p_texture ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( curve_xyz_tex . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										curve_xyz_tex - > ensure_default_setup ( p_min ,  p_max ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										return ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_param_texture ( Parameter  p_param ,  const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_INDEX ( p_param ,  PARAM_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									tex_parameters [ p_param ]  =  p_texture ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_texture . is_valid ( )  ?  Variant ( p_texture - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									switch  ( p_param )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_INITIAL_LINEAR_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//do none for this one
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANGULAR_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > angular_velocity_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 360 ,  360 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ORBIT_VELOCITY :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > orbit_velocity_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-27 15:36:48 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 2 ,  2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_LINEAR_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > linear_accel_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 200 ,  200 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_RADIAL_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > radial_accel_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 200 ,  200 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TANGENTIAL_ACCEL :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > tangent_accel_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 200 ,  200 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_DAMPING :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > damping_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  0 ,  100 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANGLE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > angle_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 360 ,  360 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_SCALE :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > scale_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 10:31:02 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  0 ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_HUE_VARIATION :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > hue_variation_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  - 1 ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANIM_SPEED :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > anim_speed_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  0 ,  200 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_ANIM_OFFSET :  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > anim_offset_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_TURB_INFLUENCE_OVER_LIFE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_influence_over_life ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  0 ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TURB_VEL_INFLUENCE :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											// Can't happen, but silences warning
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_TURB_INIT_DISPLACEMENT :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											// Can't happen, but silences warning
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_RADIAL_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > radial_velocity_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_SCALE_OVER_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > scale_over_velocity_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											_adjust_curve_range ( p_texture ,  0 ,  3 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										case  PARAM_DIRECTIONAL_VELOCITY :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > directional_velocity_texture ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-10 13:00:47 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										case  PARAM_MAX : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											break ;  // Can't happen, but silences warning
 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_param_texture ( Parameter  p_param )  const  {  
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_INDEX_V ( p_param ,  PARAM_MAX ,  Ref < Texture2D > ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  tex_parameters [ p_param ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_color ( const  Color  & p_color )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > color ,  p_color ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									color  =  p_color ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Color  ParticleProcessMaterial : : get_color ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  color ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_color_ramp ( const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									color_ramp  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_texture . is_valid ( )  ?  Variant ( p_texture - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > color_ramp ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-10 17:18:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_color_ramp ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  color_ramp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_color_initial_ramp ( const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									color_initial_ramp  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_texture . is_valid ( )  ?  Variant ( p_texture - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > color_initial_ramp ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_color_initial_ramp ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  color_initial_ramp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_particle_flag ( ParticleFlags  p_particle_flag ,  bool  p_enable )  {  
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_INDEX ( p_particle_flag ,  PARTICLE_FLAG_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									particle_flags [ p_particle_flag ]  =  p_enable ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_particle_flag  = =  PARTICLE_FLAG_DISABLE_Z )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-10 17:18:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_alpha_curve ( const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									alpha_curve  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_texture . is_valid ( )  ?  Variant ( p_texture - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > alpha_ramp ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_alpha_curve ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  alpha_curve ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_curve ( const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									emission_curve  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_texture . is_valid ( )  ?  Variant ( p_texture - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_ramp ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_emission_curve ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  emission_curve ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_velocity_limit_curve ( const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									velocity_limit_curve  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_texture . is_valid ( )  ?  Variant ( p_texture - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > velocity_limit_curve ,  tex_rid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_velocity_limit_curve ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  velocity_limit_curve ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  ParticleProcessMaterial : : get_particle_flag ( ParticleFlags  p_particle_flag )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_INDEX_V ( p_particle_flag ,  PARTICLE_FLAG_MAX ,  false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  particle_flags [ p_particle_flag ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_shape ( EmissionShape  p_shape )  {  
						 
					
						
							
								
									
										
										
										
											2020-01-16 10:59:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_INDEX ( p_shape ,  EMISSION_SHAPE_MAX ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_shape  =  p_shape ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-10 17:18:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_sphere_radius ( real_t  p_radius )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_sphere_radius  =  p_radius ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_sphere_radius ,  p_radius ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_box_extents ( Vector3  p_extents )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_box_extents  =  p_extents ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_box_extents ,  p_extents ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_point_texture ( const  Ref < Texture2D >  & p_points )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_point_texture  =  p_points ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_points . is_valid ( )  ?  Variant ( p_points - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_texture_points ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_normal_texture ( const  Ref < Texture2D >  & p_normals )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_normal_texture  =  p_normals ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_normals . is_valid ( )  ?  Variant ( p_normals - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_texture_normal ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_color_texture ( const  Ref < Texture2D >  & p_colors )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_color_texture  =  p_colors ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-31 15:31:08 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Variant  tex_rid  =  p_colors . is_valid ( )  ?  Variant ( p_colors - > get_rid ( ) )  :  Variant ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-05 22:40:29 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_texture_color ,  tex_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_point_count ( int  p_count )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									emission_point_count  =  p_count ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_texture_point_count ,  p_count ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_ring_axis ( Vector3  p_axis )  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									emission_ring_axis  =  p_axis ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_ring_axis ,  p_axis ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_ring_height ( real_t  p_height )  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									emission_ring_height  =  p_height ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_ring_height ,  p_height ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_ring_radius ( real_t  p_radius )  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									emission_ring_radius  =  p_radius ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_ring_radius ,  p_radius ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_ring_inner_radius ( real_t  p_radius )  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									emission_ring_inner_radius  =  p_radius ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_ring_inner_radius ,  p_radius ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_ring_cone_angle ( real_t  p_angle )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									emission_ring_cone_angle  =  p_angle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_ring_cone_angle ,  p_angle ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_inherit_velocity_ratio ( double  p_ratio )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									inherit_emitter_velocity_ratio  =  p_ratio ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > inherit_emitter_velocity_ratio ,  p_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ParticleProcessMaterial : : EmissionShape  ParticleProcessMaterial : : get_emission_shape ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_shape ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								real_t  ParticleProcessMaterial : : get_emission_sphere_radius ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_sphere_radius ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_emission_box_extents ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_box_extents ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_emission_point_texture ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_point_texture ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_emission_normal_texture ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_normal_texture ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  ParticleProcessMaterial : : get_emission_color_texture ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_color_texture ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  ParticleProcessMaterial : : get_emission_point_count ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  emission_point_count ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_emission_ring_axis ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  emission_ring_axis ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								real_t  ParticleProcessMaterial : : get_emission_ring_height ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  emission_ring_height ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								real_t  ParticleProcessMaterial : : get_emission_ring_radius ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  emission_ring_radius ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								real_t  ParticleProcessMaterial : : get_emission_ring_inner_radius ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  emission_ring_inner_radius ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								real_t  ParticleProcessMaterial : : get_emission_ring_cone_angle ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  emission_ring_cone_angle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_shape_offset ( const  Vector3  & p_emission_shape_offset )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									emission_shape_offset  =  p_emission_shape_offset ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_shape_offset ,  p_emission_shape_offset ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_emission_shape_offset ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  emission_shape_offset ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_emission_shape_scale ( const  Vector3  & p_emission_shape_scale )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									emission_shape_scale  =  p_emission_shape_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > emission_shape_scale ,  p_emission_shape_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_emission_shape_scale ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  emission_shape_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								double  ParticleProcessMaterial : : get_inherit_velocity_ratio ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  inherit_emitter_velocity_ratio ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_turbulence_enabled ( const  bool  p_turbulence_enabled )  {  
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									turbulence_enabled  =  p_turbulence_enabled ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_enabled ,  turbulence_enabled ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  ParticleProcessMaterial : : get_turbulence_enabled ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  turbulence_enabled ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_turbulence_noise_strength ( float  p_turbulence_noise_strength )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									turbulence_noise_strength  =  p_turbulence_noise_strength ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_noise_strength ,  p_turbulence_noise_strength ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_turbulence_noise_strength ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  turbulence_noise_strength ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_turbulence_noise_scale ( float  p_turbulence_noise_scale )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									turbulence_noise_scale  =  p_turbulence_noise_scale ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-29 16:56:15 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									const  float  noise_frequency_when_slider_is_zero  =  4.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									const  float  max_slider_value  =  10.0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									const  float  curve_exponent  =  0.25 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									const  float  curve_rescale  =  noise_frequency_when_slider_is_zero  /  pow ( max_slider_value ,  curve_exponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									float  shader_turbulence_noise_scale  =  pow ( p_turbulence_noise_scale ,  curve_exponent )  *  curve_rescale  -  noise_frequency_when_slider_is_zero ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_noise_scale ,  shader_turbulence_noise_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_turbulence_noise_scale ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  turbulence_noise_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_turbulence_noise_speed_random ( float  p_turbulence_noise_speed_random )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									turbulence_noise_speed_random  =  p_turbulence_noise_speed_random ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_noise_speed_random ,  p_turbulence_noise_speed_random ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_turbulence_noise_speed_random ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  turbulence_noise_speed_random ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_turbulence_noise_speed ( const  Vector3  & p_turbulence_noise_speed )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									turbulence_noise_speed  =  p_turbulence_noise_speed ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > turbulence_noise_speed ,  turbulence_noise_speed ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_turbulence_noise_speed ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  turbulence_noise_speed ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_gravity ( const  Vector3  & p_gravity )  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									gravity  =  p_gravity ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Vector3  gset  =  gravity ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( gset  = =  Vector3 ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gset  =  Vector3 ( 0 ,  - 0.000001 ,  0 ) ;  //as gravity is used as upvector in some calculations
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > gravity ,  gset ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Vector3  ParticleProcessMaterial : : get_gravity ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  gravity ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_lifetime_randomness ( double  p_lifetime )  {  
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									lifetime_randomness  =  p_lifetime ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > lifetime_randomness ,  lifetime_randomness ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								double  ParticleProcessMaterial : : get_lifetime_randomness ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  lifetime_randomness ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								RID  ParticleProcessMaterial : : get_shader_rid ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND_V ( ! shader_map . has ( current_key ) ,  RID ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  shader_map [ current_key ] . shader ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : _validate_property ( PropertyInfo  & p_property )  const  {  
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " emission_sphere_radius "  & &  ( emission_shape  ! =  EMISSION_SHAPE_SPHERE  & &  emission_shape  ! =  EMISSION_SHAPE_SPHERE_SURFACE ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " emission_box_extents "  & &  emission_shape  ! =  EMISSION_SHAPE_BOX )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ( p_property . name  = =  " emission_point_texture "  | |  p_property . name  = =  " emission_color_texture " )  & &  ( emission_shape  ! =  EMISSION_SHAPE_POINTS  & &  emission_shape  ! =  EMISSION_SHAPE_DIRECTED_POINTS ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " emission_normal_texture "  & &  emission_shape  ! =  EMISSION_SHAPE_DIRECTED_POINTS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " emission_point_count "  & &  ( emission_shape  ! =  EMISSION_SHAPE_POINTS  & &  emission_shape  ! =  EMISSION_SHAPE_DIRECTED_POINTS ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name . begins_with ( " emission_ring_ " )  & &  emission_shape  ! =  EMISSION_SHAPE_RING )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " sub_emitter_frequency "  & &  sub_emitter_mode  ! =  SUB_EMITTER_CONSTANT )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " sub_emitter_amount_at_end "  & &  sub_emitter_mode  ! =  SUB_EMITTER_AT_END )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " sub_emitter_amount_at_collision "  & &  sub_emitter_mode  ! =  SUB_EMITTER_AT_COLLISION )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " sub_emitter_amount_at_start "  & &  sub_emitter_mode  ! =  SUB_EMITTER_AT_START )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! turbulence_enabled )  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-12 23:57:11 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( p_property . name  = =  " turbulence_noise_strength "  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_property . name  = =  " turbulence_noise_scale "  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_property . name  = =  " turbulence_noise_speed "  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_property . name  = =  " turbulence_noise_speed_random "  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_property . name  = =  " turbulence_influence_over_life "  | | 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												p_property . name  = =  " turbulence_influence "  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												p_property . name  = =  " turbulence_initial_displacement " )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											p_property . usage  & =  ~ PROPERTY_USAGE_EDITOR ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-25 00:52:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " collision_friction "  & &  collision_mode  ! =  COLLISION_RIGID )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-25 00:52:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_property . name  = =  " collision_bounce "  & &  collision_mode  ! =  COLLISION_RIGID )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ( p_property . name  = =  " directional_velocity_min "  | |  p_property . name  = =  " directional_velocity_max " )  & &  ! tex_parameters [ PARAM_DIRECTIONAL_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ( p_property . name  = =  " scale_over_velocity_min "  | |  p_property . name  = =  " scale_over_velocity_max " )  & &  ! tex_parameters [ PARAM_SCALE_OVER_VELOCITY ] . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NO_EDITOR ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( ( p_property . name  = =  " orbit_velocity_min "  | |  p_property . name  = =  " orbit_velocity_max " )  & &  ( ! tex_parameters [ PARAM_ORBIT_VELOCITY ] . is_valid ( )  & &  ! particle_flags [ PARTICLE_FLAG_DISABLE_Z ] ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  =  PROPERTY_USAGE_NO_EDITOR ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_property . usage  &  PROPERTY_USAGE_EDITOR  & &  ( p_property . name . ends_with ( " _min " )  | |  p_property . name . ends_with ( " _max " ) ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										p_property . usage  & =  ~ PROPERTY_USAGE_EDITOR ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_sub_emitter_mode ( SubEmitterMode  p_sub_emitter_mode )  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sub_emitter_mode  =  p_sub_emitter_mode ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-10 17:18:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-20 14:03:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( sub_emitter_mode  ! =  SUB_EMITTER_DISABLED  & &  RenderingServer : : get_singleton ( ) - > is_low_end ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										WARN_PRINT_ONCE_ED ( " Sub-emitter modes other than SUB_EMITTER_DISABLED are not supported in the GL Compatibility rendering backend. " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ParticleProcessMaterial : : SubEmitterMode  ParticleProcessMaterial : : get_sub_emitter_mode ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  sub_emitter_mode ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_sub_emitter_frequency ( double  p_frequency )  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sub_emitter_frequency  =  p_frequency ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-03-12 19:05:16 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > sub_emitter_frequency ,  1.0  /  p_frequency ) ;  //pass delta instead of frequency, since its easier to compute
 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2021-08-12 09:07:47 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								double  ParticleProcessMaterial : : get_sub_emitter_frequency ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  sub_emitter_frequency ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_sub_emitter_amount_at_end ( int  p_amount )  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sub_emitter_amount_at_end  =  p_amount ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > sub_emitter_amount_at_end ,  p_amount ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  ParticleProcessMaterial : : get_sub_emitter_amount_at_end ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  sub_emitter_amount_at_end ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_sub_emitter_amount_at_collision ( int  p_amount )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									sub_emitter_amount_at_collision  =  p_amount ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > sub_emitter_amount_at_collision ,  p_amount ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  ParticleProcessMaterial : : get_sub_emitter_amount_at_collision ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  sub_emitter_amount_at_collision ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_sub_emitter_amount_at_start ( int  p_amount )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									sub_emitter_amount_at_start  =  p_amount ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > sub_emitter_amount_at_start ,  p_amount ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  ParticleProcessMaterial : : get_sub_emitter_amount_at_start ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  sub_emitter_amount_at_start ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_sub_emitter_keep_velocity ( bool  p_enable )  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sub_emitter_keep_velocity  =  p_enable ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > sub_emitter_keep_velocity ,  p_enable ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  ParticleProcessMaterial : : get_sub_emitter_keep_velocity ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  sub_emitter_keep_velocity ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_attractor_interaction_enabled ( bool  p_enable )  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									attractor_interaction_enabled  =  p_enable ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  ParticleProcessMaterial : : is_attractor_interaction_enabled ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  attractor_interaction_enabled ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_collision_mode ( CollisionMode  p_collision_mode )  {  
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									collision_mode  =  p_collision_mode ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ParticleProcessMaterial : : CollisionMode  ParticleProcessMaterial : : get_collision_mode ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  collision_mode ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_collision_use_scale ( bool  p_scale )  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									collision_scale  =  p_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_queue_shader_change ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  ParticleProcessMaterial : : is_collision_using_scale ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  collision_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_collision_friction ( float  p_friction )  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									collision_friction  =  p_friction ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > collision_friction ,  p_friction ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_collision_friction ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  collision_friction ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : set_collision_bounce ( float  p_bounce )  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									collision_bounce  =  p_bounce ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RenderingServer : : get_singleton ( ) - > material_set_param ( _get_material ( ) ,  shader_names - > collision_bounce ,  p_bounce ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  ParticleProcessMaterial : : get_collision_bounce ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  collision_bounce ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Shader : : Mode  ParticleProcessMaterial : : get_shader_mode ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  Shader : : MODE_PARTICLES ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  ParticleProcessMaterial : : _bind_methods ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_direction " ,  " degrees " ) ,  & ParticleProcessMaterial : : set_direction ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_direction " ) ,  & ParticleProcessMaterial : : get_direction ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_inherit_velocity_ratio " ,  " ratio " ) ,  & ParticleProcessMaterial : : set_inherit_velocity_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_inherit_velocity_ratio " ) ,  & ParticleProcessMaterial : : get_inherit_velocity_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_spread " ,  " degrees " ) ,  & ParticleProcessMaterial : : set_spread ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_spread " ) ,  & ParticleProcessMaterial : : get_spread ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_flatness " ,  " amount " ) ,  & ParticleProcessMaterial : : set_flatness ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_flatness " ) ,  & ParticleProcessMaterial : : get_flatness ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_param " ,  " param " ,  " value " ) ,  & ParticleProcessMaterial : : set_param ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_param " ,  " param " ) ,  & ParticleProcessMaterial : : get_param ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_param_min " ,  " param " ,  " value " ) ,  & ParticleProcessMaterial : : set_param_min ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_param_min " ,  " param " ) ,  & ParticleProcessMaterial : : get_param_min ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_param_max " ,  " param " ,  " value " ) ,  & ParticleProcessMaterial : : set_param_max ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_param_max " ,  " param " ) ,  & ParticleProcessMaterial : : get_param_max ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_param_texture " ,  " param " ,  " texture " ) ,  & ParticleProcessMaterial : : set_param_texture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_param_texture " ,  " param " ) ,  & ParticleProcessMaterial : : get_param_texture ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_color " ,  " color " ) ,  & ParticleProcessMaterial : : set_color ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_color " ) ,  & ParticleProcessMaterial : : get_color ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_color_ramp " ,  " ramp " ) ,  & ParticleProcessMaterial : : set_color_ramp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_color_ramp " ) ,  & ParticleProcessMaterial : : get_color_ramp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_alpha_curve " ,  " curve " ) ,  & ParticleProcessMaterial : : set_alpha_curve ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_alpha_curve " ) ,  & ParticleProcessMaterial : : get_alpha_curve ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_curve " ,  " curve " ) ,  & ParticleProcessMaterial : : set_emission_curve ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_curve " ) ,  & ParticleProcessMaterial : : get_emission_curve ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_color_initial_ramp " ,  " ramp " ) ,  & ParticleProcessMaterial : : set_color_initial_ramp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_color_initial_ramp " ) ,  & ParticleProcessMaterial : : get_color_initial_ramp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_velocity_limit_curve " ,  " curve " ) ,  & ParticleProcessMaterial : : set_velocity_limit_curve ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_velocity_limit_curve " ) ,  & ParticleProcessMaterial : : get_velocity_limit_curve ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_particle_flag " ,  " particle_flag " ,  " enable " ) ,  & ParticleProcessMaterial : : set_particle_flag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_particle_flag " ,  " particle_flag " ) ,  & ParticleProcessMaterial : : get_particle_flag ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_velocity_pivot " ,  " pivot " ) ,  & ParticleProcessMaterial : : set_velocity_pivot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_velocity_pivot " ) ,  & ParticleProcessMaterial : : get_velocity_pivot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_shape " ,  " shape " ) ,  & ParticleProcessMaterial : : set_emission_shape ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_shape " ) ,  & ParticleProcessMaterial : : get_emission_shape ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_sphere_radius " ,  " radius " ) ,  & ParticleProcessMaterial : : set_emission_sphere_radius ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_sphere_radius " ) ,  & ParticleProcessMaterial : : get_emission_sphere_radius ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_box_extents " ,  " extents " ) ,  & ParticleProcessMaterial : : set_emission_box_extents ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_box_extents " ) ,  & ParticleProcessMaterial : : get_emission_box_extents ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_point_texture " ,  " texture " ) ,  & ParticleProcessMaterial : : set_emission_point_texture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_point_texture " ) ,  & ParticleProcessMaterial : : get_emission_point_texture ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_normal_texture " ,  " texture " ) ,  & ParticleProcessMaterial : : set_emission_normal_texture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_normal_texture " ) ,  & ParticleProcessMaterial : : get_emission_normal_texture ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_color_texture " ,  " texture " ) ,  & ParticleProcessMaterial : : set_emission_color_texture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_color_texture " ) ,  & ParticleProcessMaterial : : get_emission_color_texture ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_point_count " ,  " point_count " ) ,  & ParticleProcessMaterial : : set_emission_point_count ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_point_count " ) ,  & ParticleProcessMaterial : : get_emission_point_count ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_ring_axis " ,  " axis " ) ,  & ParticleProcessMaterial : : set_emission_ring_axis ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_ring_axis " ) ,  & ParticleProcessMaterial : : get_emission_ring_axis ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_ring_height " ,  " height " ) ,  & ParticleProcessMaterial : : set_emission_ring_height ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_ring_height " ) ,  & ParticleProcessMaterial : : get_emission_ring_height ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_ring_radius " ,  " radius " ) ,  & ParticleProcessMaterial : : set_emission_ring_radius ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_ring_radius " ) ,  & ParticleProcessMaterial : : get_emission_ring_radius ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_ring_inner_radius " ,  " inner_radius " ) ,  & ParticleProcessMaterial : : set_emission_ring_inner_radius ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_ring_inner_radius " ) ,  & ParticleProcessMaterial : : get_emission_ring_inner_radius ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_ring_cone_angle " ,  " cone_angle " ) ,  & ParticleProcessMaterial : : set_emission_ring_cone_angle ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_ring_cone_angle " ) ,  & ParticleProcessMaterial : : get_emission_ring_cone_angle ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_shape_offset " ,  " emission_shape_offset " ) ,  & ParticleProcessMaterial : : set_emission_shape_offset ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_shape_offset " ) ,  & ParticleProcessMaterial : : get_emission_shape_offset ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emission_shape_scale " ,  " emission_shape_scale " ) ,  & ParticleProcessMaterial : : set_emission_shape_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_emission_shape_scale " ) ,  & ParticleProcessMaterial : : get_emission_shape_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_turbulence_enabled " ) ,  & ParticleProcessMaterial : : get_turbulence_enabled ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_turbulence_enabled " ,  " turbulence_enabled " ) ,  & ParticleProcessMaterial : : set_turbulence_enabled ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_turbulence_noise_strength " ) ,  & ParticleProcessMaterial : : get_turbulence_noise_strength ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_turbulence_noise_strength " ,  " turbulence_noise_strength " ) ,  & ParticleProcessMaterial : : set_turbulence_noise_strength ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_turbulence_noise_scale " ) ,  & ParticleProcessMaterial : : get_turbulence_noise_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_turbulence_noise_scale " ,  " turbulence_noise_scale " ) ,  & ParticleProcessMaterial : : set_turbulence_noise_scale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_turbulence_noise_speed_random " ) ,  & ParticleProcessMaterial : : get_turbulence_noise_speed_random ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_turbulence_noise_speed_random " ,  " turbulence_noise_speed_random " ) ,  & ParticleProcessMaterial : : set_turbulence_noise_speed_random ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_turbulence_noise_speed " ) ,  & ParticleProcessMaterial : : get_turbulence_noise_speed ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_turbulence_noise_speed " ,  " turbulence_noise_speed " ) ,  & ParticleProcessMaterial : : set_turbulence_noise_speed ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_gravity " ) ,  & ParticleProcessMaterial : : get_gravity ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_gravity " ,  " accel_vec " ) ,  & ParticleProcessMaterial : : set_gravity ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_lifetime_randomness " ,  " randomness " ) ,  & ParticleProcessMaterial : : set_lifetime_randomness ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_lifetime_randomness " ) ,  & ParticleProcessMaterial : : get_lifetime_randomness ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_sub_emitter_mode " ) ,  & ParticleProcessMaterial : : get_sub_emitter_mode ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_sub_emitter_mode " ,  " mode " ) ,  & ParticleProcessMaterial : : set_sub_emitter_mode ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_sub_emitter_frequency " ) ,  & ParticleProcessMaterial : : get_sub_emitter_frequency ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_sub_emitter_frequency " ,  " hz " ) ,  & ParticleProcessMaterial : : set_sub_emitter_frequency ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_sub_emitter_amount_at_end " ) ,  & ParticleProcessMaterial : : get_sub_emitter_amount_at_end ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_sub_emitter_amount_at_end " ,  " amount " ) ,  & ParticleProcessMaterial : : set_sub_emitter_amount_at_end ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_sub_emitter_amount_at_collision " ) ,  & ParticleProcessMaterial : : get_sub_emitter_amount_at_collision ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_sub_emitter_amount_at_collision " ,  " amount " ) ,  & ParticleProcessMaterial : : set_sub_emitter_amount_at_collision ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_sub_emitter_amount_at_start " ) ,  & ParticleProcessMaterial : : get_sub_emitter_amount_at_start ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_sub_emitter_amount_at_start " ,  " amount " ) ,  & ParticleProcessMaterial : : set_sub_emitter_amount_at_start ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_sub_emitter_keep_velocity " ) ,  & ParticleProcessMaterial : : get_sub_emitter_keep_velocity ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_sub_emitter_keep_velocity " ,  " enable " ) ,  & ParticleProcessMaterial : : set_sub_emitter_keep_velocity ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_attractor_interaction_enabled " ,  " enabled " ) ,  & ParticleProcessMaterial : : set_attractor_interaction_enabled ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " is_attractor_interaction_enabled " ) ,  & ParticleProcessMaterial : : is_attractor_interaction_enabled ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_collision_mode " ,  " mode " ) ,  & ParticleProcessMaterial : : set_collision_mode ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_collision_mode " ) ,  & ParticleProcessMaterial : : get_collision_mode ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_collision_use_scale " ,  " radius " ) ,  & ParticleProcessMaterial : : set_collision_use_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " is_collision_using_scale " ) ,  & ParticleProcessMaterial : : is_collision_using_scale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_collision_friction " ,  " friction " ) ,  & ParticleProcessMaterial : : set_collision_friction ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_collision_friction " ) ,  & ParticleProcessMaterial : : get_collision_friction ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_collision_bounce " ,  " bounce " ) ,  & ParticleProcessMaterial : : set_collision_bounce ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_collision_bounce " ) ,  & ParticleProcessMaterial : : get_collision_bounce ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define ADD_MIN_MAX_PROPERTY(m_property, m_range, m_parameter_name)                                                                                                                       \ 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : VECTOR2 ,  m_property ,  PROPERTY_HINT_RANGE ,  m_range ,  PROPERTY_USAGE_EDITOR  |  PROPERTY_USAGE_INTERNAL ) ,  " set_param " ,  " get_param " ,  m_parameter_name ) ;  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : FLOAT ,  m_property  " _min " ,  PROPERTY_HINT_RANGE ,  m_range ) ,  " set_param_min " ,  " get_param_min " ,  m_parameter_name ) ;                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : FLOAT ,  m_property  " _max " ,  PROPERTY_HINT_RANGE ,  m_range ) ,  " set_param_max " ,  " get_param_max " ,  m_parameter_name ) ;                                      \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									min_max_properties . insert ( m_property ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
											 
										 
										
											2020-02-24 15:20:53 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " lifetime_randomness " ,  PROPERTY_HINT_RANGE ,  " 0,1,0.01 " ) ,  " set_lifetime_randomness " ,  " get_lifetime_randomness " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Particle Flags " ,  " particle_flag_ " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : BOOL ,  " particle_flag_align_y " ) ,  " set_particle_flag " ,  " get_particle_flag " ,  PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : BOOL ,  " particle_flag_rotate_y " ) ,  " set_particle_flag " ,  " get_particle_flag " ,  PARTICLE_FLAG_ROTATE_Y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : BOOL ,  " particle_flag_disable_z " ) ,  " set_particle_flag " ,  " get_particle_flag " ,  PARTICLE_FLAG_DISABLE_Z ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : BOOL ,  " particle_flag_damping_as_friction " ) ,  " set_particle_flag " ,  " get_particle_flag " ,  PARTICLE_FLAG_DAMPING_AS_FRICTION ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_GROUP ( " Spawn " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Position " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " emission_shape_offset " ) ,  " set_emission_shape_offset " ,  " get_emission_shape_offset " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " emission_shape_scale " ) ,  " set_emission_shape_scale " ,  " get_emission_shape_scale " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-27 23:28:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " emission_shape " ,  PROPERTY_HINT_ENUM ,  " Point,Sphere,Sphere Surface,Box,Points,Directed Points,Ring " ) ,  " set_emission_shape " ,  " get_emission_shape " ) ; 
							 
						 
					
						
							
								
									
										
										
											
												Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.
Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.
For Variant, the float datatype is always 64 bits, and exposed as `float`.
We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.
Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
											 
										 
										
											2020-02-24 15:20:53 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " emission_sphere_radius " ,  PROPERTY_HINT_RANGE ,  " 0.01,128,0.01,or_greater " ) ,  " set_emission_sphere_radius " ,  " get_emission_sphere_radius " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " emission_box_extents " ) ,  " set_emission_box_extents " ,  " get_emission_box_extents " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " emission_point_texture " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " Texture2D " ) ,  " set_emission_point_texture " ,  " get_emission_point_texture " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " emission_normal_texture " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " Texture2D " ) ,  " set_emission_normal_texture " ,  " get_emission_normal_texture " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " emission_color_texture " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " Texture2D " ) ,  " set_emission_color_texture " ,  " get_emission_color_texture " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " emission_point_count " ,  PROPERTY_HINT_RANGE ,  " 0,1000000,1 " ) ,  " set_emission_point_count " ,  " get_emission_point_count " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " emission_ring_axis " ) ,  " set_emission_ring_axis " ,  " get_emission_ring_axis " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " emission_ring_height " ,  PROPERTY_HINT_RANGE ,  " 0,1000,0.01,or_greater " ) ,  " set_emission_ring_height " ,  " get_emission_ring_height " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " emission_ring_radius " ,  PROPERTY_HINT_RANGE ,  " 0,1000,0.01,or_greater " ) ,  " set_emission_ring_radius " ,  " get_emission_ring_radius " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " emission_ring_inner_radius " ,  PROPERTY_HINT_RANGE ,  " 0,1000,0.01,or_greater " ) ,  " set_emission_ring_inner_radius " ,  " get_emission_ring_inner_radius " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " emission_ring_cone_angle " ,  PROPERTY_HINT_RANGE ,  " 0,90,0.01,degrees " ) ,  " set_emission_ring_cone_angle " ,  " get_emission_ring_cone_angle " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Angle " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " angle " ,  " -720,720,0.1,or_less,or_greater,degrees " ,  PARAM_ANGLE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " angle_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_ANGLE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Velocity " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " inherit_velocity_ratio " ,  PROPERTY_HINT_RANGE ,  " 0.0,1.0,0.001,or_less,or_greater " ) ,  " set_inherit_velocity_ratio " ,  " get_inherit_velocity_ratio " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " velocity_pivot " ) ,  " set_velocity_pivot " ,  " get_velocity_pivot " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " direction " ) ,  " set_direction " ,  " get_direction " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " spread " ,  PROPERTY_HINT_RANGE ,  " 0,180,0.001 " ) ,  " set_spread " ,  " get_spread " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " flatness " ,  PROPERTY_HINT_RANGE ,  " 0,1,0.001 " ) ,  " set_flatness " ,  " get_flatness " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " initial_velocity " ,  " 0,1000,0.01,or_less,or_greater " ,  PARAM_INITIAL_LINEAR_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Animated Velocity " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Velocity Limit " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Angular Velocity " ,  " angular_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " angular_velocity " ,  " -720,720,0.01,or_less,or_greater " ,  PARAM_ANGULAR_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " angular_velocity_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_ANGULAR_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Directional Velocity " ,  " directional_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " directional_velocity " ,  " -720,720,0.01,or_less,or_greater " ,  PARAM_DIRECTIONAL_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " directional_velocity_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveXYZTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_DIRECTIONAL_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Orbit Velocity " ,  " orbit_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " orbit_velocity " ,  " -2,2,0.001,or_less,or_greater " ,  PARAM_ORBIT_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " orbit_velocity_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture,CurveXYZTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_ORBIT_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Radial Velocity " ,  " radial_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " radial_velocity " ,  " -1000,1000,0.01,or_less,or_greater " ,  PARAM_RADIAL_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " radial_velocity_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_RADIAL_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Velocity Limit " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " velocity_limit_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_velocity_limit_curve " ,  " get_velocity_limit_curve " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_GROUP ( " Accelerations " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Gravity " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " gravity " ) ,  " set_gravity " ,  " get_gravity " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Linear Accel " ,  " linear_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " linear_accel " ,  " -100,100,0.01,or_less,or_greater " ,  PARAM_LINEAR_ACCEL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " linear_accel_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_LINEAR_ACCEL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Radial Accel " ,  " radial_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " radial_accel " ,  " -100,100,0.01,or_less,or_greater " ,  PARAM_RADIAL_ACCEL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " radial_accel_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_RADIAL_ACCEL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Tangential Accel " ,  " tangential_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " tangential_accel " ,  " -100,100,0.01,or_less,or_greater " ,  PARAM_TANGENTIAL_ACCEL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " tangential_accel_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_TANGENTIAL_ACCEL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Damping " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " damping " ,  " 0,100,0.001,or_greater " ,  PARAM_DAMPING ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " damping_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_DAMPING ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Attractor Interaction " ,  " attractor_interaction_ " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " attractor_interaction_enabled " ) ,  " set_attractor_interaction_enabled " ,  " is_attractor_interaction_enabled " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_GROUP ( " Display " ,  " " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Scale " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " scale " ,  " 0,1000,0.01,or_greater " ,  PARAM_SCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " scale_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture,CurveXYZTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_SCALE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Scale Over Velocity " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " scale_over_velocity " ,  " 0,1000,0.01,or_greater " ,  PARAM_SCALE_OVER_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " scale_over_velocity_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture,CurveXYZTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_SCALE_OVER_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Color Curves " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : COLOR ,  " color " ) ,  " set_color " ,  " get_color " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-07 14:35:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " color_ramp " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " GradientTexture1D " ) ,  " set_color_ramp " ,  " get_color_ramp " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-23 13:50:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " color_initial_ramp " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " GradientTexture1D " ) ,  " set_color_initial_ramp " ,  " get_color_initial_ramp " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " alpha_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_alpha_curve " ,  " get_alpha_curve " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " emission_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_emission_curve " ,  " get_emission_curve " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Hue Variation " ,  " hue_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " hue_variation " ,  " -1,1,0.01 " ,  PARAM_HUE_VARIATION ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " hue_variation_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_HUE_VARIATION ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_SUBGROUP ( " Animation " ,  " anim_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " anim_speed " ,  " 0,16,0.01,or_less,or_greater " ,  PARAM_ANIM_SPEED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " anim_speed_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_ANIM_SPEED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " anim_offset " ,  " 0,1,0.0001 " ,  PARAM_ANIM_OFFSET ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " anim_offset_curve " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_ANIM_OFFSET ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_GROUP ( " Turbulence " ,  " turbulence_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " turbulence_enabled " ) ,  " set_turbulence_enabled " ,  " get_turbulence_enabled " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " turbulence_noise_strength " ,  PROPERTY_HINT_RANGE ,  " 0,20,0.01 " ) ,  " set_turbulence_noise_strength " ,  " get_turbulence_noise_strength " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-28 11:33:25 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " turbulence_noise_scale " ,  PROPERTY_HINT_RANGE ,  " 0,10,0.001,or_greater " ) ,  " set_turbulence_noise_scale " ,  " get_turbulence_noise_scale " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : VECTOR3 ,  " turbulence_noise_speed " ) ,  " set_turbulence_noise_speed " ,  " get_turbulence_noise_speed " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " turbulence_noise_speed_random " ,  PROPERTY_HINT_RANGE ,  " 0,4,0.01 " ) ,  " set_turbulence_noise_speed_random " ,  " get_turbulence_noise_speed_random " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " turbulence_influence " ,  " 0,1,0.001 " ,  PARAM_TURB_VEL_INFLUENCE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_MIN_MAX_PROPERTY ( " turbulence_initial_displacement " ,  " -100,100,0.1 " ,  PARAM_TURB_INIT_DISPLACEMENT ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTYI ( PropertyInfo ( Variant : : OBJECT ,  " turbulence_influence_over_life " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " CurveTexture " ) ,  " set_param_texture " ,  " get_param_texture " ,  PARAM_TURB_INFLUENCE_OVER_LIFE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Collision " ,  " collision_ " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " collision_mode " ,  PROPERTY_HINT_ENUM ,  " Disabled,Rigid,Hide On Contact " ) ,  " set_collision_mode " ,  " get_collision_mode " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " collision_friction " ,  PROPERTY_HINT_RANGE ,  " 0,1,0.01 " ) ,  " set_collision_friction " ,  " get_collision_friction " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " collision_bounce " ,  PROPERTY_HINT_RANGE ,  " 0,1,0.01 " ) ,  " set_collision_bounce " ,  " get_collision_bounce " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " collision_use_scale " ) ,  " set_collision_use_scale " ,  " is_collision_using_scale " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Sub Emitter " ,  " sub_emitter_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " sub_emitter_mode " ,  PROPERTY_HINT_ENUM ,  " Disabled:0,Constant:1,At Start:4,At End:2,At Collision:3 " ) ,  " set_sub_emitter_mode " ,  " get_sub_emitter_mode " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-02 18:09:19 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " sub_emitter_frequency " ,  PROPERTY_HINT_RANGE ,  " 0.01,100,0.01,suffix:Hz " ) ,  " set_sub_emitter_frequency " ,  " get_sub_emitter_frequency " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " sub_emitter_amount_at_end " ,  PROPERTY_HINT_RANGE ,  " 1,32,1 " ) ,  " set_sub_emitter_amount_at_end " ,  " get_sub_emitter_amount_at_end " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " sub_emitter_amount_at_collision " ,  PROPERTY_HINT_RANGE ,  " 1,32,1 " ) ,  " set_sub_emitter_amount_at_collision " ,  " get_sub_emitter_amount_at_collision " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " sub_emitter_amount_at_start " ,  PROPERTY_HINT_RANGE ,  " 1,32,1 " ) ,  " set_sub_emitter_amount_at_start " ,  " get_sub_emitter_amount_at_start " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " sub_emitter_keep_velocity " ) ,  " set_sub_emitter_keep_velocity " ,  " get_sub_emitter_keep_velocity " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_INITIAL_LINEAR_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_ANGULAR_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_ORBIT_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_LINEAR_ACCEL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_RADIAL_ACCEL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_TANGENTIAL_ACCEL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_DAMPING ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_ANGLE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_SCALE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_HUE_VARIATION ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_ANIM_SPEED ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_ANIM_OFFSET ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_RADIAL_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_DIRECTIONAL_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_SCALE_OVER_VELOCITY ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARTICLE_FLAG_ROTATE_Y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARTICLE_FLAG_DISABLE_Z ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARTICLE_FLAG_DAMPING_AS_FRICTION ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARTICLE_FLAG_MAX ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_POINT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_SPHERE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-27 23:28:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_SPHERE_SURFACE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_BOX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_POINTS ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_DIRECTED_POINTS ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_RING ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 10:59:01 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( EMISSION_SHAPE_MAX ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-11 12:22:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_TURB_VEL_INFLUENCE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_TURB_INIT_DISPLACEMENT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( PARAM_TURB_INFLUENCE_OVER_LIFE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-11 12:22:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( SUB_EMITTER_DISABLED ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( SUB_EMITTER_CONSTANT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( SUB_EMITTER_AT_END ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( SUB_EMITTER_AT_COLLISION ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( SUB_EMITTER_AT_START ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-11 12:22:10 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( SUB_EMITTER_MAX ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( COLLISION_DISABLED ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( COLLISION_RIGID ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( COLLISION_HIDE_ON_CONTACT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( COLLISION_MAX ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-10 23:48:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# undef ADD_MIN_MAX_PROPERTY 
  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ParticleProcessMaterial : : ParticleProcessMaterial ( )  :  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										element ( this )  { 
							 
						 
					
						
							
								
									
										
										
										
											2024-03-15 14:13:31 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_set_material ( RS : : get_singleton ( ) - > material_create ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-04 23:45:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_direction ( Vector3 ( 1 ,  0 ,  0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									set_spread ( 45 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_flatness ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-13 19:46:27 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_param_min ( PARAM_INITIAL_LINEAR_VELOCITY ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_ANGULAR_VELOCITY ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_ORBIT_VELOCITY ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_LINEAR_ACCEL ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_RADIAL_ACCEL ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_TANGENTIAL_ACCEL ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_DAMPING ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_ANGLE ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_SCALE ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_HUE_VARIATION ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_ANIM_SPEED ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_ANIM_OFFSET ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_INITIAL_LINEAR_VELOCITY ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_ANGULAR_VELOCITY ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_ORBIT_VELOCITY ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_LINEAR_ACCEL ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_RADIAL_ACCEL ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_TANGENTIAL_ACCEL ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_DAMPING ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_ANGLE ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_SCALE ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_HUE_VARIATION ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_ANIM_SPEED ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_ANIM_OFFSET ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_param_min ( PARAM_DIRECTIONAL_VELOCITY ,  1.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_DIRECTIONAL_VELOCITY ,  1.0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									set_emission_shape ( EMISSION_SHAPE_POINT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_emission_sphere_radius ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_emission_box_extents ( Vector3 ( 1 ,  1 ,  1 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-11 15:45:21 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_emission_ring_axis ( Vector3 ( 0 ,  0 ,  1.0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_emission_ring_height ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_emission_ring_radius ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_emission_ring_inner_radius ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-09-02 14:35:51 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_emission_ring_cone_angle ( 90 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-13 13:08:52 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_emission_shape_offset ( Vector3 ( 0.0 ,  0.0 ,  0.0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_emission_shape_scale ( Vector3 ( 1.0 ,  1.0 ,  1.0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-02 08:41:14 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_turbulence_enabled ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_turbulence_noise_speed ( Vector3 ( 0.0 ,  0.0 ,  0.0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_turbulence_noise_strength ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_turbulence_noise_scale ( 9 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-05-17 12:10:24 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_turbulence_noise_speed_random ( 0.2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 15:18:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_param_min ( PARAM_TURB_VEL_INFLUENCE ,  0.1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_TURB_VEL_INFLUENCE ,  0.1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_min ( PARAM_TURB_INIT_DISPLACEMENT ,  0.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_param_max ( PARAM_TURB_INIT_DISPLACEMENT ,  0.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									set_gravity ( Vector3 ( 0 ,  - 9.8 ,  0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-14 21:48:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_lifetime_randomness ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_sub_emitter_mode ( SUB_EMITTER_DISABLED ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_sub_emitter_frequency ( 4 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_sub_emitter_amount_at_end ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-24 22:22:37 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_sub_emitter_amount_at_collision ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-04 12:26:41 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_sub_emitter_amount_at_start ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-06 09:18:10 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_sub_emitter_keep_velocity ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_attractor_interaction_enabled ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-20 23:59:13 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_collision_mode ( COLLISION_DISABLED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-07 21:29:49 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_collision_bounce ( 0.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_collision_friction ( 0.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_collision_use_scale ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  ( int  i  =  0 ;  i  <  PARTICLE_FLAG_MAX ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										particle_flags [ i ]  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_color ( Color ( 1 ,  1 ,  1 ,  1 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									current_key . invalid_key  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-06 19:40:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_mark_initialized ( callable_mp ( this ,  & ParticleProcessMaterial : : _queue_shader_change ) ,  callable_mp ( this ,  & ParticleProcessMaterial : : _update_shader ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-08-18 11:09:22 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ParticleProcessMaterial : : ~ ParticleProcessMaterial ( )  {  
						 
					
						
							
								
									
										
										
										
											2022-12-12 12:42:37 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_NULL ( RenderingServer : : get_singleton ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 11:28:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									MutexLock  lock ( material_mutex ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( shader_map . has ( current_key ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										shader_map [ current_key ] . users - - ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( shader_map [ current_key ] . users  = =  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											//deallocate shader, as it's no longer in use
 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > free ( shader_map [ current_key ] . shader ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											shader_map . erase ( current_key ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										RS : : get_singleton ( ) - > material_set_shader ( _get_material ( ) ,  RID ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}