2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*  gpu_particles_2d.cpp                                                 */  
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                       This file is part of:                           */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*                           GODOT ENGINE                                */  
						 
					
						
							
								
									
										
										
										
											2017-08-27 14:16:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*                      https://godotengine.org                          */  
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2021-01-01 20:13:46 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.                 */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).   */  
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*                                                                       */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/* 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.                */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2018-01-05 00:50:27 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "gpu_particles_2d.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-06-22 12:12:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-02-09 20:49:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "core/os/os.h" 
  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "scene/resources/particles_material.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-02-25 16:06:00 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "scene/scene_string_names.h" 
  
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifdef TOOLS_ENABLED 
  
						 
					
						
							
								
									
										
										
										
											2020-11-07 19:33:38 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "core/config/engine.h" 
  
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_emitting ( bool  p_emitting )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_emitting ( particles ,  p_emitting ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 11:20:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_emitting  & &  one_shot )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										set_process_internal ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  if  ( ! p_emitting )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										set_process_internal ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_amount ( int  p_amount )  {  
						 
					
						
							
								
									
										
										
										
											2019-09-25 10:28:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_COND_MSG ( p_amount  <  1 ,  " Amount of particles cannot be smaller than 1. " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									amount  =  p_amount ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_amount ( particles ,  amount ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_lifetime ( float  p_lifetime )  {  
						 
					
						
							
								
									
										
										
										
											2019-09-25 10:28:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ERR_FAIL_COND_MSG ( p_lifetime  < =  0 ,  " Particles lifetime must be greater than 0. " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									lifetime  =  p_lifetime ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_lifetime ( particles ,  lifetime ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_one_shot ( bool  p_enable )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									one_shot  =  p_enable ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_one_shot ( particles ,  one_shot ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 11:20:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( is_emitting ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										set_process_internal ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( ! one_shot )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RenderingServer : : get_singleton ( ) - > particles_restart ( particles ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 11:20:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! one_shot )  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 11:20:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										set_process_internal ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_pre_process_time ( float  p_time )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pre_process_time  =  p_time ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_pre_process_time ( particles ,  pre_process_time ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_explosiveness_ratio ( float  p_ratio )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									explosiveness_ratio  =  p_ratio ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_explosiveness_ratio ( particles ,  explosiveness_ratio ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_randomness_ratio ( float  p_ratio )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									randomness_ratio  =  p_ratio ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_randomness_ratio ( particles ,  randomness_ratio ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_visibility_rect ( const  Rect2  & p_visibility_rect )  {  
						 
					
						
							
								
									
										
										
										
											2018-08-17 11:47:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									visibility_rect  =  p_visibility_rect ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-16 21:09:00 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									AABB  aabb ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-17 11:47:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									aabb . position . x  =  p_visibility_rect . position . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									aabb . position . y  =  p_visibility_rect . position . y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									aabb . size . x  =  p_visibility_rect . size . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									aabb . size . y  =  p_visibility_rect . size . y ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_custom_aabb ( particles ,  aabb ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									update ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_use_local_coordinates ( bool  p_enable )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									local_coords  =  p_enable ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_use_local_coordinates ( particles ,  local_coords ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_notify_transform ( ! p_enable ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( ! p_enable  & &  is_inside_tree ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										_update_particle_emission_transform ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-05-17 18:27:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : _update_particle_emission_transform ( )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Transform2D  xf2d  =  get_global_transform ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-17 01:08:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Transform3D  xf ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									xf . basis . set_axis ( 0 ,  Vector3 ( xf2d . get_axis ( 0 ) . x ,  xf2d . get_axis ( 0 ) . y ,  0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									xf . basis . set_axis ( 1 ,  Vector3 ( xf2d . get_axis ( 1 ) . x ,  xf2d . get_axis ( 1 ) . y ,  0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									xf . set_origin ( Vector3 ( xf2d . get_origin ( ) . x ,  xf2d . get_origin ( ) . y ,  0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-23 02:28:09 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_emission_transform ( particles ,  xf ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_process_material ( const  Ref < Material >  & p_material )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									process_material  =  p_material ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Ref < ParticlesMaterial >  pm  =  p_material ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( pm . is_valid ( )  & &  ! pm - > get_particle_flag ( ParticlesMaterial : : PARTICLE_FLAG_DISABLE_Z )  & &  pm - > get_gravity ( )  = =  Vector3 ( 0 ,  - 9.8 ,  0 ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-04 11:30:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										// Likely a new (3D) material, modify it to match 2D space
 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-04 18:35:57 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										pm - > set_particle_flag ( ParticlesMaterial : : PARTICLE_FLAG_DISABLE_Z ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										pm - > set_gravity ( Vector3 ( 0 ,  98 ,  0 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RID  material_rid ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( process_material . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										material_rid  =  process_material - > get_rid ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_process_material ( particles ,  material_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 05:01:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									update_configuration_warnings ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_trail_enabled ( bool  p_enabled )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									trail_enabled  =  p_enabled ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_trails ( particles ,  trail_enabled ,  trail_length ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									update_configuration_warnings ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									update ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_transform_align ( particles ,  p_enabled  ?  RS : : PARTICLES_TRANSFORM_ALIGN_Y_TO_VELOCITY  :  RS : : PARTICLES_TRANSFORM_ALIGN_DISABLED ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_trail_length ( float  p_seconds )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND ( p_seconds  <  0.001 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									trail_length  =  p_seconds ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_trails ( particles ,  trail_enabled ,  trail_length ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									update ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_trail_sections ( int  p_sections )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND ( p_sections  <  2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND ( p_sections  >  128 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									trail_sections  =  p_sections ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									update ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_trail_section_subdivisions ( int  p_subdivisions )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND ( trail_section_subdivisions  <  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ERR_FAIL_COND ( trail_section_subdivisions  >  1024 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									trail_section_subdivisions  =  p_subdivisions ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									update ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  GPUParticles2D : : is_trail_enabled ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  trail_enabled ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_trail_length ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  trail_length ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  GPUParticles2D : : _update_collision_size ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									float  csize  =  collision_base_size ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( texture . is_valid ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										csize  * =  ( texture - > get_width ( )  +  texture - > get_height ( ) )  /  4.0 ;  //half size since its a radius
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_collision_base_size ( particles ,  csize ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_collision_base_size ( float  p_size )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									collision_base_size  =  p_size ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_update_collision_size ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_collision_base_size ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  collision_base_size ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_speed_scale ( float  p_scale )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									speed_scale  =  p_scale ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_speed_scale ( particles ,  p_scale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  GPUParticles2D : : is_emitting ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  RS : : get_singleton ( ) - > particles_get_emitting ( particles ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  GPUParticles2D : : get_amount ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  amount ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_lifetime ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									return  lifetime ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  GPUParticles2D : : get_trail_sections ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  trail_sections ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  GPUParticles2D : : get_trail_section_subdivisions ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  trail_section_subdivisions ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  GPUParticles2D : : get_one_shot ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  one_shot ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_pre_process_time ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  pre_process_time ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_explosiveness_ratio ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  explosiveness_ratio ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-24 21:18:52 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_randomness_ratio ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  randomness_ratio ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-24 21:18:52 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Rect2  GPUParticles2D : : get_visibility_rect ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  visibility_rect ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-24 21:18:52 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  GPUParticles2D : : get_use_local_coordinates ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  local_coords ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-24 21:18:52 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2020-05-14 14:29:06 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Material >  GPUParticles2D : : get_process_material ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  process_material ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								float  GPUParticles2D : : get_speed_scale ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  speed_scale ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_draw_order ( DrawOrder  p_order )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									draw_order  =  p_order ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_draw_order ( particles ,  RS : : ParticlesDrawOrder ( p_order ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								GPUParticles2D : : DrawOrder  GPUParticles2D : : get_draw_order ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  draw_order ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_fixed_fps ( int  p_count )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									fixed_fps  =  p_count ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_fixed_fps ( particles ,  p_count ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  GPUParticles2D : : get_fixed_fps ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  fixed_fps ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_fractional_delta ( bool  p_enable )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									fractional_delta  =  p_enable ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_fractional_delta ( particles ,  p_enable ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2015-05-24 21:18:52 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  GPUParticles2D : : get_fractional_delta ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  fractional_delta ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 05:01:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								TypedArray < String >  GPUParticles2D : : get_configuration_warnings ( )  const  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TypedArray < String >  warnings  =  Node : : get_configuration_warnings ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( RenderingServer : : get_singleton ( ) - > is_low_end ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 05:01:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										warnings . push_back ( TTR ( " GPU-based particles are not supported by the GLES2 video driver. \n Use the CPUParticles2D node instead. You can use the  \" Convert to CPUParticles2D \"  option for this purpose. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-09 20:49:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( process_material . is_null ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 05:01:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										warnings . push_back ( TTR ( " A material to process the particles is not assigned, so no behavior is imprinted. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 18:19:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										CanvasItemMaterial  * mat  =  Object : : cast_to < CanvasItemMaterial > ( get_material ( ) . ptr ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( get_material ( ) . is_null ( )  | |  ( mat  & &  ! mat - > get_particles_animation ( ) ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											const  ParticlesMaterial  * process  =  Object : : cast_to < ParticlesMaterial > ( process_material . ptr ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ( process  & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													( process - > get_param ( ParticlesMaterial : : PARAM_ANIM_SPEED )  ! =  0.0  | |  process - > get_param ( ParticlesMaterial : : PARAM_ANIM_OFFSET )  ! =  0.0  | | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
															process - > get_param_texture ( ParticlesMaterial : : PARAM_ANIM_SPEED ) . is_valid ( )  | |  process - > get_param_texture ( ParticlesMaterial : : PARAM_ANIM_OFFSET ) . is_valid ( ) ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 05:01:28 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												warnings . push_back ( TTR ( " Particles2D animation requires the usage of a CanvasItemMaterial with  \" Particles Animation \"  enabled. " ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-13 18:19:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-24 21:18:52 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  warnings ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Rect2  GPUParticles2D : : capture_rect ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									AABB  aabb  =  RS : : get_singleton ( ) - > particles_get_current_aabb ( particles ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Rect2  r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									r . position . x  =  aabb . position . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									r . position . y  =  aabb . position . y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									r . size . x  =  aabb . size . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									r . size . y  =  aabb . size . y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  r ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : set_texture ( const  Ref < Texture2D >  & p_texture )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									texture  =  p_texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_update_collision_size ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									update ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Ref < Texture2D >  GPUParticles2D : : get_texture ( )  const  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									return  texture ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : _validate_property ( PropertyInfo  & property )  const  {  
						 
					
						
							
								
									
										
										
										
											2014-02-13 18:03:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : restart ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_restart ( particles ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_emitting ( particles ,  true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : _notification ( int  p_what )  {  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_what  = =  NOTIFICATION_DRAW )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RID  texture_rid ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Size2  size ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( texture . is_valid ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											texture_rid  =  texture - > get_rid ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											size  =  texture - > get_size ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											size  =  Size2 ( 1 ,  1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-14 16:41:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( trail_enabled )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > mesh_clear ( mesh ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											PackedVector2Array  points ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											PackedVector2Array  uvs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											PackedInt32Array  bone_indices ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											PackedFloat32Array  bone_weights ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											PackedInt32Array  indices ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											int  total_segments  =  trail_sections  *  trail_section_subdivisions ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											float  depth  =  size . height  *  trail_sections ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											for  ( int  j  =  0 ;  j  < =  total_segments ;  j + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												float  v  =  j ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												v  / =  total_segments ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												float  y  =  depth  *  v ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												y  =  ( depth  *  0.5 )  -  y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												int  bone  =  j  /  trail_section_subdivisions ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												float  blend  =  1.0  -  float ( j  %  trail_section_subdivisions )  /  float ( trail_section_subdivisions ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												float  s  =  size . width ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												points . push_back ( Vector2 ( - s  *  0.5 ,  0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												points . push_back ( Vector2 ( + s  *  0.5 ,  0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												uvs . push_back ( Vector2 ( 0 ,  v ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												uvs . push_back ( Vector2 ( 1 ,  v ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												for  ( int  i  =  0 ;  i  <  2 ;  i + + )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_indices . push_back ( bone ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_indices . push_back ( MIN ( trail_sections ,  bone  +  1 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_indices . push_back ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_indices . push_back ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_weights . push_back ( blend ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_weights . push_back ( 1.0  -  blend ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_weights . push_back ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													bone_weights . push_back ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												if  ( j  >  0 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													int  base  =  j  *  2  -  2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													indices . push_back ( base  +  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													indices . push_back ( base  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													indices . push_back ( base  +  2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													indices . push_back ( base  +  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													indices . push_back ( base  +  3 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
													indices . push_back ( base  +  2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Array  arr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr . resize ( RS : : ARRAY_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_VERTEX ]  =  points ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_TEX_UV ]  =  uvs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_BONES ]  =  bone_indices ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_WEIGHTS ]  =  bone_weights ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_INDEX ]  =  indices ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > mesh_add_surface_from_arrays ( mesh ,  RS : : PRIMITIVE_TRIANGLES ,  arr ,  Array ( ) ,  Dictionary ( ) ,  RS : : ARRAY_FLAG_USE_2D_VERTICES ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-10-17 01:08:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											Vector < Transform3D >  xforms ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											for  ( int  i  =  0 ;  i  < =  trail_sections ;  i + + )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-17 01:08:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Transform3D  xform ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												/*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												xform . origin . y  =  depth  /  2.0  -  size . height  *  float ( i ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												xform . origin . y  =  - xform . origin . y ;  //bind is an inverse transform, so negate y */
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												xforms . push_back ( xform ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > particles_set_trail_bind_poses ( particles ,  xforms ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > mesh_clear ( mesh ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < Vector2 >  points ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											points . resize ( 4 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											points . write [ 0 ]  =  Vector2 ( - size . x  /  2.0 ,  - size . y  /  2.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											points . write [ 1 ]  =  Vector2 ( size . x  /  2.0 ,  - size . y  /  2.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											points . write [ 2 ]  =  Vector2 ( size . x  /  2.0 ,  size . y  /  2.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											points . write [ 3 ]  =  Vector2 ( - size . x  /  2.0 ,  size . y  /  2.0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < Vector2 >  uvs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											uvs . resize ( 4 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											uvs . write [ 0 ]  =  Vector2 ( 0 ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											uvs . write [ 1 ]  =  Vector2 ( 1 ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											uvs . write [ 2 ]  =  Vector2 ( 1 ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											uvs . write [ 3 ]  =  Vector2 ( 0 ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Vector < int >  indices ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . resize ( 6 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . write [ 0 ]  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . write [ 1 ]  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . write [ 2 ]  =  2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . write [ 3 ]  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . write [ 4 ]  =  2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											indices . write [ 5 ]  =  3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											Array  arr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr . resize ( RS : : ARRAY_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_VERTEX ]  =  points ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_TEX_UV ]  =  uvs ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											arr [ RS : : ARRAY_INDEX ]  =  indices ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > mesh_add_surface_from_arrays ( mesh ,  RS : : PRIMITIVE_TRIANGLES ,  arr ,  Array ( ) ,  Dictionary ( ) ,  RS : : ARRAY_FLAG_USE_2D_VERTICES ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-17 01:08:21 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > particles_set_trail_bind_poses ( particles ,  Vector < Transform3D > ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-24 12:15:43 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										RS : : get_singleton ( ) - > canvas_item_add_particles ( get_canvas_item ( ) ,  particles ,  texture_rid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-22 12:12:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ifdef TOOLS_ENABLED 
  
						 
					
						
							
								
									
										
										
										
											2021-06-18 16:02:50 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										if  ( Engine : : get_singleton ( ) - > is_editor_hint ( )  & &  ( this  = =  get_tree ( ) - > get_edited_scene_root ( )  | |  get_tree ( ) - > get_edited_scene_root ( ) - > is_ancestor_of ( this ) ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											draw_rect ( visibility_rect ,  Color ( 0 ,  0.7 ,  0.9 ,  0.4 ) ,  false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-22 12:12:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-29 18:53:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-07 19:01:30 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_what  = =  NOTIFICATION_PAUSED  | |  p_what  = =  NOTIFICATION_UNPAUSED )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( can_process ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > particles_set_speed_scale ( particles ,  speed_scale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-07 19:01:30 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											RS : : get_singleton ( ) - > particles_set_speed_scale ( particles ,  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-07 19:01:30 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									if  ( p_what  = =  NOTIFICATION_TRANSFORM_CHANGED )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_update_particle_emission_transform ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-29 18:53:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 11:20:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ( p_what  = =  NOTIFICATION_INTERNAL_PROCESS )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( one_shot  & &  ! is_emitting ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-02-10 17:18:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											notify_property_list_changed ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 11:20:27 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											set_process_internal ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-29 18:53:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  GPUParticles2D : : _bind_methods ( )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_emitting " ,  " emitting " ) ,  & GPUParticles2D : : set_emitting ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_amount " ,  " amount " ) ,  & GPUParticles2D : : set_amount ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_lifetime " ,  " secs " ) ,  & GPUParticles2D : : set_lifetime ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_one_shot " ,  " secs " ) ,  & GPUParticles2D : : set_one_shot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_pre_process_time " ,  " secs " ) ,  & GPUParticles2D : : set_pre_process_time ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_explosiveness_ratio " ,  " ratio " ) ,  & GPUParticles2D : : set_explosiveness_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_randomness_ratio " ,  " ratio " ) ,  & GPUParticles2D : : set_randomness_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_visibility_rect " ,  " visibility_rect " ) ,  & GPUParticles2D : : set_visibility_rect ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_use_local_coordinates " ,  " enable " ) ,  & GPUParticles2D : : set_use_local_coordinates ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_fixed_fps " ,  " fps " ) ,  & GPUParticles2D : : set_fixed_fps ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_fractional_delta " ,  " enable " ) ,  & GPUParticles2D : : set_fractional_delta ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_process_material " ,  " material " ) ,  & GPUParticles2D : : set_process_material ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_speed_scale " ,  " scale " ) ,  & GPUParticles2D : : set_speed_scale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_collision_base_size " ,  " size " ) ,  & GPUParticles2D : : set_collision_base_size ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " is_emitting " ) ,  & GPUParticles2D : : is_emitting ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_amount " ) ,  & GPUParticles2D : : get_amount ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_lifetime " ) ,  & GPUParticles2D : : get_lifetime ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_one_shot " ) ,  & GPUParticles2D : : get_one_shot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_pre_process_time " ) ,  & GPUParticles2D : : get_pre_process_time ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_explosiveness_ratio " ) ,  & GPUParticles2D : : get_explosiveness_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_randomness_ratio " ) ,  & GPUParticles2D : : get_randomness_ratio ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_visibility_rect " ) ,  & GPUParticles2D : : get_visibility_rect ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_use_local_coordinates " ) ,  & GPUParticles2D : : get_use_local_coordinates ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_fixed_fps " ) ,  & GPUParticles2D : : get_fixed_fps ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_fractional_delta " ) ,  & GPUParticles2D : : get_fractional_delta ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_process_material " ) ,  & GPUParticles2D : : get_process_material ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_speed_scale " ) ,  & GPUParticles2D : : get_speed_scale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_collision_base_size " ) ,  & GPUParticles2D : : get_collision_base_size ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_draw_order " ,  " order " ) ,  & GPUParticles2D : : set_draw_order ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_draw_order " ) ,  & GPUParticles2D : : get_draw_order ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_texture " ,  " texture " ) ,  & GPUParticles2D : : set_texture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_texture " ) ,  & GPUParticles2D : : get_texture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " capture_rect " ) ,  & GPUParticles2D : : capture_rect ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " restart " ) ,  & GPUParticles2D : : restart ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_trail_enabled " ,  " enabled " ) ,  & GPUParticles2D : : set_trail_enabled ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_trail_length " ,  " secs " ) ,  & GPUParticles2D : : set_trail_length ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " is_trail_enabled " ) ,  & GPUParticles2D : : is_trail_enabled ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_trail_length " ) ,  & GPUParticles2D : : get_trail_length ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_trail_sections " ,  " sections " ) ,  & GPUParticles2D : : set_trail_sections ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_trail_sections " ) ,  & GPUParticles2D : : get_trail_sections ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " set_trail_section_subdivisions " ,  " subdivisions " ) ,  & GPUParticles2D : : set_trail_section_subdivisions ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ClassDB : : bind_method ( D_METHOD ( " get_trail_section_subdivisions " ) ,  & GPUParticles2D : : get_trail_section_subdivisions ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " emitting " ) ,  " set_emitting " ,  " is_emitting " ) ; 
							 
						 
					
						
							
								
									
										
										
											
												Fix editor suffixes and degrees conversion
* Functions to convert to/from degrees are all gone. Conversion is done by the editor.
* Use PROPERTY_HINT_ANGLE instead of PROPERTY_HINT_RANGE to edit radian angles in degrees.
* Added possibility to add suffixes to range properties, use "min,max[,step][,suffix:<something>]" example "0,100,1,suffix:m"
* In general, can add suffixes for EditorSpinSlider
Not covered by this PR, will have to be addressed by future ones:
* Ability to switch radians/degrees in the inspector for angle properties (if actually wanted).
* Animations previously made will most likely break, need to add a way to make old ones compatible.
* Only added a "px" suffix to 2D position and a "m" one to 3D position, someone needs to go through the rest of the engine and add all remaining suffixes.
* Likely also need to track down usage of EditorSpinSlider outside properties to add suffixes to it too.
											 
										 
										
											2021-06-29 16:42:12 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " amount " ,  PROPERTY_HINT_RANGE ,  " 1,1000000,1,exp " ) ,  " set_amount " ,  " get_amount " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 18:57:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Time " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
											
												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 " ,  PROPERTY_HINT_RANGE ,  " 0.01,600.0,0.01,or_greater " ) ,  " set_lifetime " ,  " get_lifetime " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " one_shot " ) ,  " set_one_shot " ,  " get_one_shot " ) ; 
							 
						 
					
						
							
								
									
										
										
											
												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 ,  " preprocess " ,  PROPERTY_HINT_RANGE ,  " 0.00,600.0,0.01 " ) ,  " set_pre_process_time " ,  " get_pre_process_time " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " speed_scale " ,  PROPERTY_HINT_RANGE ,  " 0,64,0.01 " ) ,  " set_speed_scale " ,  " get_speed_scale " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " explosiveness " ,  PROPERTY_HINT_RANGE ,  " 0,1,0.01 " ) ,  " set_explosiveness_ratio " ,  " get_explosiveness_ratio " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " randomness " ,  PROPERTY_HINT_RANGE ,  " 0,1,0.01 " ) ,  " set_randomness_ratio " ,  " get_randomness_ratio " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " fixed_fps " ,  PROPERTY_HINT_RANGE ,  " 0,1000,1 " ) ,  " set_fixed_fps " ,  " get_fixed_fps " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " fract_delta " ) ,  " set_fractional_delta " ,  " get_fractional_delta " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Collision " ,  " collision_ " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " collision_base_size " ,  PROPERTY_HINT_RANGE ,  " 0,128,0.01,or_greater " ) ,  " set_collision_base_size " ,  " get_collision_base_size " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 18:57:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Drawing " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-17 11:47:29 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : RECT2 ,  " visibility_rect " ) ,  " set_visibility_rect " ,  " get_visibility_rect " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 18:57:28 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " local_coords " ) ,  " set_use_local_coordinates " ,  " get_use_local_coordinates " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " draw_order " ,  PROPERTY_HINT_ENUM ,  " Index,Lifetime,Reverse Lifetime " ) ,  " set_draw_order " ,  " get_draw_order " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_GROUP ( " Trails " ,  " trail_ " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : BOOL ,  " trail_enabled " ) ,  " set_trail_enabled " ,  " is_trail_enabled " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : FLOAT ,  " trail_length_secs " ,  PROPERTY_HINT_RANGE ,  " 0.01,10,0.01 " ) ,  " set_trail_length " ,  " get_trail_length " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " trail_sections " ,  PROPERTY_HINT_RANGE ,  " 2,128,1 " ) ,  " set_trail_sections " ,  " get_trail_sections " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : INT ,  " trail_section_subdivisions " ,  PROPERTY_HINT_RANGE ,  " 1,1024,1 " ) ,  " set_trail_section_subdivisions " ,  " get_trail_section_subdivisions " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Process Material " ,  " process_ " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-22 09:17:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " process_material " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " ShaderMaterial,ParticlesMaterial " ) ,  " set_process_material " ,  " get_process_material " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_GROUP ( " Textures " ,  " " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-11 15:43:37 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ADD_PROPERTY ( PropertyInfo ( Variant : : OBJECT ,  " texture " ,  PROPERTY_HINT_RESOURCE_TYPE ,  " Texture2D " ) ,  " set_texture " ,  " get_texture " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-20 17:45:01 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( DRAW_ORDER_INDEX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( DRAW_ORDER_LIFETIME ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									BIND_ENUM_CONSTANT ( DRAW_ORDER_REVERSE_LIFETIME ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								GPUParticles2D : : GPUParticles2D ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									particles  =  RS : : get_singleton ( ) - > particles_create ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-10 13:12:44 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_mode ( particles ,  RS : : PARTICLES_MODE_2D ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									mesh  =  RS : : get_singleton ( ) - > mesh_create ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_draw_passes ( particles ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > particles_set_draw_pass_mesh ( particles ,  0 ,  mesh ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-02 17:23:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									one_shot  =  false ;  // Needed so that set_emitting doesn't access uninitialized values
 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									set_emitting ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 08:01:15 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_one_shot ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_amount ( 8 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_lifetime ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_fixed_fps ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_fractional_delta ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_pre_process_time ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_explosiveness_ratio ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_randomness_ratio ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_visibility_rect ( Rect2 ( Vector2 ( - 100 ,  - 100 ) ,  Vector2 ( 200 ,  200 ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_use_local_coordinates ( true ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_draw_order ( DRAW_ORDER_LIFETIME ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_speed_scale ( 1 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									set_fixed_fps ( 30 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									set_collision_base_size ( collision_base_size ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-21 16:25:45 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-27 08:44:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								GPUParticles2D : : ~ GPUParticles2D ( )  {  
						 
					
						
							
								
									
										
										
										
											2020-03-27 15:21:27 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > free ( particles ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-20 11:25:06 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									RS : : get_singleton ( ) - > free ( mesh ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-02-09 22:10:30 -03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}