mirror of
https://github.com/godotengine/godot.git
synced 2024-11-14 08:03:05 +00:00
Merge pull request #26613 from KoBeWi/direction_of_particles
Add a Direction property to ParticlesMaterial
This commit is contained in:
commit
c08877777d
@ -262,6 +262,16 @@ void CPUParticles2D::restart() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUParticles2D::set_direction(Vector2 p_direction) {
|
||||||
|
|
||||||
|
direction = p_direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 CPUParticles2D::get_direction() const {
|
||||||
|
|
||||||
|
return direction;
|
||||||
|
}
|
||||||
|
|
||||||
void CPUParticles2D::set_spread(float p_spread) {
|
void CPUParticles2D::set_spread(float p_spread) {
|
||||||
|
|
||||||
spread = p_spread;
|
spread = p_spread;
|
||||||
@ -631,7 +641,7 @@ void CPUParticles2D::_particles_process(float p_delta) {
|
|||||||
p.hue_rot_rand = Math::randf();
|
p.hue_rot_rand = Math::randf();
|
||||||
p.anim_offset_rand = Math::randf();
|
p.anim_offset_rand = Math::randf();
|
||||||
|
|
||||||
float angle1_rad = (Math::randf() * 2.0 - 1.0) * Math_PI * spread / 180.0;
|
float angle1_rad = Math::atan2(direction.y, direction.x) + (Math::randf() * 2.0 - 1.0) * Math_PI * spread / 180.0;
|
||||||
Vector2 rot = Vector2(Math::cos(angle1_rad), Math::sin(angle1_rad));
|
Vector2 rot = Vector2(Math::cos(angle1_rad), Math::sin(angle1_rad));
|
||||||
p.velocity = rot * parameters[PARAM_INITIAL_LINEAR_VELOCITY] * Math::lerp(1.0f, float(Math::randf()), randomness[PARAM_INITIAL_LINEAR_VELOCITY]);
|
p.velocity = rot * parameters[PARAM_INITIAL_LINEAR_VELOCITY] * Math::lerp(1.0f, float(Math::randf()), randomness[PARAM_INITIAL_LINEAR_VELOCITY]);
|
||||||
|
|
||||||
@ -1121,6 +1131,8 @@ void CPUParticles2D::convert_from_particles(Node *p_particles) {
|
|||||||
if (material.is_null())
|
if (material.is_null())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Vector3 dir = material->get_direction();
|
||||||
|
set_direction(Vector2(dir.x, dir.y));
|
||||||
set_spread(material->get_spread());
|
set_spread(material->get_spread());
|
||||||
set_flatness(material->get_flatness());
|
set_flatness(material->get_flatness());
|
||||||
|
|
||||||
@ -1226,6 +1238,9 @@ void CPUParticles2D::_bind_methods() {
|
|||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_direction", "direction"), &CPUParticles2D::set_direction);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_direction"), &CPUParticles2D::get_direction);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_spread", "degrees"), &CPUParticles2D::set_spread);
|
ClassDB::bind_method(D_METHOD("set_spread", "degrees"), &CPUParticles2D::set_spread);
|
||||||
ClassDB::bind_method(D_METHOD("get_spread"), &CPUParticles2D::get_spread);
|
ClassDB::bind_method(D_METHOD("get_spread"), &CPUParticles2D::get_spread);
|
||||||
|
|
||||||
@ -1284,7 +1299,8 @@ void CPUParticles2D::_bind_methods() {
|
|||||||
ADD_PROPERTY(PropertyInfo(Variant::POOL_COLOR_ARRAY, "emission_colors"), "set_emission_colors", "get_emission_colors");
|
ADD_PROPERTY(PropertyInfo(Variant::POOL_COLOR_ARRAY, "emission_colors"), "set_emission_colors", "get_emission_colors");
|
||||||
ADD_GROUP("Flags", "flag_");
|
ADD_GROUP("Flags", "flag_");
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_align_y"), "set_particle_flag", "get_particle_flag", FLAG_ALIGN_Y_TO_VELOCITY);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_align_y"), "set_particle_flag", "get_particle_flag", FLAG_ALIGN_Y_TO_VELOCITY);
|
||||||
ADD_GROUP("Spread", "");
|
ADD_GROUP("Direction", "");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "direction"), "set_direction", "get_direction");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "spread", PROPERTY_HINT_RANGE, "0,180,0.01"), "set_spread", "get_spread");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "spread", PROPERTY_HINT_RANGE, "0,180,0.01"), "set_spread", "get_spread");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "flatness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_flatness", "get_flatness");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "flatness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_flatness", "get_flatness");
|
||||||
ADD_GROUP("Gravity", "");
|
ADD_GROUP("Gravity", "");
|
||||||
@ -1392,6 +1408,7 @@ CPUParticles2D::CPUParticles2D() {
|
|||||||
set_draw_order(DRAW_ORDER_INDEX);
|
set_draw_order(DRAW_ORDER_INDEX);
|
||||||
set_speed_scale(1);
|
set_speed_scale(1);
|
||||||
|
|
||||||
|
set_direction(Vector2(1, 0));
|
||||||
set_spread(45);
|
set_spread(45);
|
||||||
set_flatness(0);
|
set_flatness(0);
|
||||||
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 0);
|
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 0);
|
||||||
|
@ -153,6 +153,7 @@ private:
|
|||||||
|
|
||||||
////////
|
////////
|
||||||
|
|
||||||
|
Vector2 direction;
|
||||||
float spread;
|
float spread;
|
||||||
float flatness;
|
float flatness;
|
||||||
|
|
||||||
@ -234,6 +235,9 @@ public:
|
|||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
|
|
||||||
|
void set_direction(Vector2 p_direction);
|
||||||
|
Vector2 get_direction() const;
|
||||||
|
|
||||||
void set_spread(float p_spread);
|
void set_spread(float p_spread);
|
||||||
float get_spread() const;
|
float get_spread() const;
|
||||||
|
|
||||||
|
@ -237,6 +237,16 @@ void CPUParticles::restart() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPUParticles::set_direction(Vector3 p_direction) {
|
||||||
|
|
||||||
|
direction = p_direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 CPUParticles::get_direction() const {
|
||||||
|
|
||||||
|
return direction;
|
||||||
|
}
|
||||||
|
|
||||||
void CPUParticles::set_spread(float p_spread) {
|
void CPUParticles::set_spread(float p_spread) {
|
||||||
|
|
||||||
spread = p_spread;
|
spread = p_spread;
|
||||||
@ -604,13 +614,13 @@ void CPUParticles::_particles_process(float p_delta) {
|
|||||||
p.anim_offset_rand = Math::randf();
|
p.anim_offset_rand = Math::randf();
|
||||||
|
|
||||||
if (flags[FLAG_DISABLE_Z]) {
|
if (flags[FLAG_DISABLE_Z]) {
|
||||||
float angle1_rad = (Math::randf() * 2.0 - 1.0) * Math_PI * spread / 180.0;
|
float angle1_rad = Math::atan2(direction.y, direction.x) + (Math::randf() * 2.0 - 1.0) * Math_PI * spread / 180.0;
|
||||||
Vector3 rot = Vector3(Math::cos(angle1_rad), Math::sin(angle1_rad), 0.0);
|
Vector3 rot = Vector3(Math::cos(angle1_rad), Math::sin(angle1_rad), 0.0);
|
||||||
p.velocity = rot * parameters[PARAM_INITIAL_LINEAR_VELOCITY] * Math::lerp(1.0f, float(Math::randf()), randomness[PARAM_INITIAL_LINEAR_VELOCITY]);
|
p.velocity = rot * parameters[PARAM_INITIAL_LINEAR_VELOCITY] * Math::lerp(1.0f, float(Math::randf()), randomness[PARAM_INITIAL_LINEAR_VELOCITY]);
|
||||||
} else {
|
} else {
|
||||||
//initiate velocity spread in 3D
|
//initiate velocity spread in 3D
|
||||||
float angle1_rad = (Math::randf() * 2.0 - 1.0) * Math_PI * spread / 180.0;
|
float angle1_rad = Math::atan2(direction.x, direction.z) + (Math::randf() * 2.0 - 1.0) * Math_PI * spread / 180.0;
|
||||||
float angle2_rad = (Math::randf() * 2.0 - 1.0) * (1.0 - flatness) * Math_PI * spread / 180.0;
|
float angle2_rad = Math::atan2(direction.y, Math::abs(direction.z)) + (Math::randf() * 2.0 - 1.0) * (1.0 - flatness) * Math_PI * spread / 180.0;
|
||||||
|
|
||||||
Vector3 direction_xz = Vector3(Math::sin(angle1_rad), 0, Math::cos(angle1_rad));
|
Vector3 direction_xz = Vector3(Math::sin(angle1_rad), 0, Math::cos(angle1_rad));
|
||||||
Vector3 direction_yz = Vector3(0, Math::sin(angle2_rad), Math::cos(angle2_rad));
|
Vector3 direction_yz = Vector3(0, Math::sin(angle2_rad), Math::cos(angle2_rad));
|
||||||
@ -1189,6 +1199,7 @@ void CPUParticles::convert_from_particles(Node *p_particles) {
|
|||||||
if (material.is_null())
|
if (material.is_null())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
set_direction(material->get_direction());
|
||||||
set_spread(material->get_spread());
|
set_spread(material->get_spread());
|
||||||
set_flatness(material->get_flatness());
|
set_flatness(material->get_flatness());
|
||||||
|
|
||||||
@ -1290,6 +1301,9 @@ void CPUParticles::_bind_methods() {
|
|||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_direction", "direction"), &CPUParticles::set_direction);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_direction"), &CPUParticles::get_direction);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_spread", "degrees"), &CPUParticles::set_spread);
|
ClassDB::bind_method(D_METHOD("set_spread", "degrees"), &CPUParticles::set_spread);
|
||||||
ClassDB::bind_method(D_METHOD("get_spread"), &CPUParticles::get_spread);
|
ClassDB::bind_method(D_METHOD("get_spread"), &CPUParticles::get_spread);
|
||||||
|
|
||||||
@ -1350,7 +1364,8 @@ void CPUParticles::_bind_methods() {
|
|||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_align_y"), "set_particle_flag", "get_particle_flag", FLAG_ALIGN_Y_TO_VELOCITY);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_align_y"), "set_particle_flag", "get_particle_flag", FLAG_ALIGN_Y_TO_VELOCITY);
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_rotate_y"), "set_particle_flag", "get_particle_flag", FLAG_ROTATE_Y);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_rotate_y"), "set_particle_flag", "get_particle_flag", FLAG_ROTATE_Y);
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_disable_z"), "set_particle_flag", "get_particle_flag", FLAG_DISABLE_Z);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_disable_z"), "set_particle_flag", "get_particle_flag", FLAG_DISABLE_Z);
|
||||||
ADD_GROUP("Spread", "");
|
ADD_GROUP("Direction", "");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "direction"), "set_direction", "get_direction");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "spread", PROPERTY_HINT_RANGE, "0,180,0.01"), "set_spread", "get_spread");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "spread", PROPERTY_HINT_RANGE, "0,180,0.01"), "set_spread", "get_spread");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "flatness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_flatness", "get_flatness");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "flatness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_flatness", "get_flatness");
|
||||||
ADD_GROUP("Gravity", "");
|
ADD_GROUP("Gravity", "");
|
||||||
@ -1460,6 +1475,7 @@ CPUParticles::CPUParticles() {
|
|||||||
set_draw_order(DRAW_ORDER_INDEX);
|
set_draw_order(DRAW_ORDER_INDEX);
|
||||||
set_speed_scale(1);
|
set_speed_scale(1);
|
||||||
|
|
||||||
|
set_direction(Vector3(1, 0, 0));
|
||||||
set_spread(45);
|
set_spread(45);
|
||||||
set_flatness(0);
|
set_flatness(0);
|
||||||
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 0);
|
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 0);
|
||||||
|
@ -152,6 +152,7 @@ private:
|
|||||||
|
|
||||||
////////
|
////////
|
||||||
|
|
||||||
|
Vector3 direction;
|
||||||
float spread;
|
float spread;
|
||||||
float flatness;
|
float flatness;
|
||||||
|
|
||||||
@ -231,6 +232,9 @@ public:
|
|||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
|
|
||||||
|
void set_direction(Vector3 p_direction);
|
||||||
|
Vector3 get_direction() const;
|
||||||
|
|
||||||
void set_spread(float p_spread);
|
void set_spread(float p_spread);
|
||||||
float get_spread() const;
|
float get_spread() const;
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ void ParticlesMaterial::init_shaders() {
|
|||||||
|
|
||||||
shader_names = memnew(ShaderNames);
|
shader_names = memnew(ShaderNames);
|
||||||
|
|
||||||
|
shader_names->direction = "direction";
|
||||||
shader_names->spread = "spread";
|
shader_names->spread = "spread";
|
||||||
shader_names->flatness = "flatness";
|
shader_names->flatness = "flatness";
|
||||||
shader_names->initial_linear_velocity = "initial_linear_velocity";
|
shader_names->initial_linear_velocity = "initial_linear_velocity";
|
||||||
@ -144,6 +145,7 @@ void ParticlesMaterial::_update_shader() {
|
|||||||
|
|
||||||
String code = "shader_type particles;\n";
|
String code = "shader_type particles;\n";
|
||||||
|
|
||||||
|
code += "uniform vec3 direction;\n";
|
||||||
code += "uniform float spread;\n";
|
code += "uniform float spread;\n";
|
||||||
code += "uniform float flatness;\n";
|
code += "uniform float flatness;\n";
|
||||||
code += "uniform float initial_linear_velocity;\n";
|
code += "uniform float initial_linear_velocity;\n";
|
||||||
@ -304,20 +306,20 @@ void ParticlesMaterial::_update_shader() {
|
|||||||
|
|
||||||
if (flags[FLAG_DISABLE_Z]) {
|
if (flags[FLAG_DISABLE_Z]) {
|
||||||
|
|
||||||
code += " float angle1_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad;\n";
|
code += " float angle1_rad = atan(direction.y, direction.x) + rand_from_seed_m1_p1(alt_seed) * spread_rad;\n";
|
||||||
code += " vec3 rot = vec3(cos(angle1_rad), sin(angle1_rad), 0.0);\n";
|
code += " vec3 rot = vec3(cos(angle1_rad), sin(angle1_rad), 0.0);\n";
|
||||||
code += " VELOCITY = rot * initial_linear_velocity * mix(1.0, rand_from_seed(alt_seed), initial_linear_velocity_random);\n";
|
code += " VELOCITY = rot * initial_linear_velocity * mix(1.0, rand_from_seed(alt_seed), initial_linear_velocity_random);\n";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//initiate velocity spread in 3D
|
//initiate velocity spread in 3D
|
||||||
code += " float angle1_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad;\n";
|
code += " float angle1_rad = atan(direction.x, direction.z) + rand_from_seed_m1_p1(alt_seed) * spread_rad;\n";
|
||||||
code += " float angle2_rad = rand_from_seed_m1_p1(alt_seed) * spread_rad * (1.0 - flatness);\n";
|
code += " float angle2_rad = atan(direction.y, abs(direction.z)) + rand_from_seed_m1_p1(alt_seed) * spread_rad * (1.0 - flatness);\n";
|
||||||
code += " vec3 direction_xz = vec3(sin(angle1_rad), 0.0, cos(angle1_rad));\n";
|
code += " vec3 direction_xz = vec3(sin(angle1_rad), 0.0, cos(angle1_rad));\n";
|
||||||
code += " vec3 direction_yz = vec3(0.0, sin(angle2_rad), cos(angle2_rad));\n";
|
code += " vec3 direction_yz = vec3(0.0, sin(angle2_rad), cos(angle2_rad));\n";
|
||||||
code += " direction_yz.z = direction_yz.z / max(0.0001,sqrt(abs(direction_yz.z))); // better uniform distribution\n";
|
code += " direction_yz.z = direction_yz.z / max(0.0001,sqrt(abs(direction_yz.z))); // better uniform distribution\n";
|
||||||
code += " vec3 direction = vec3(direction_xz.x * direction_yz.z, direction_yz.y, direction_xz.z * direction_yz.z);\n";
|
code += " vec3 vec_direction = vec3(direction_xz.x * direction_yz.z, direction_yz.y, direction_xz.z * direction_yz.z);\n";
|
||||||
code += " direction = normalize(direction);\n";
|
code += " vec_direction = normalize(vec_direction);\n";
|
||||||
code += " VELOCITY = direction * initial_linear_velocity * mix(1.0, rand_from_seed(alt_seed), initial_linear_velocity_random);\n";
|
code += " VELOCITY = vec_direction * initial_linear_velocity * mix(1.0, rand_from_seed(alt_seed), initial_linear_velocity_random);\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
code += " float base_angle = (initial_angle + tex_angle) * mix(1.0, angle_rand, initial_angle_random);\n";
|
code += " float base_angle = (initial_angle + tex_angle) * mix(1.0, angle_rand, initial_angle_random);\n";
|
||||||
@ -627,6 +629,17 @@ bool ParticlesMaterial::_is_shader_dirty() const {
|
|||||||
return dirty;
|
return dirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ParticlesMaterial::set_direction(Vector3 p_direction) {
|
||||||
|
|
||||||
|
direction = p_direction;
|
||||||
|
VisualServer::get_singleton()->material_set_param(_get_material(), shader_names->direction, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 ParticlesMaterial::get_direction() const {
|
||||||
|
|
||||||
|
return direction;
|
||||||
|
}
|
||||||
|
|
||||||
void ParticlesMaterial::set_spread(float p_spread) {
|
void ParticlesMaterial::set_spread(float p_spread) {
|
||||||
|
|
||||||
spread = p_spread;
|
spread = p_spread;
|
||||||
@ -1042,6 +1055,9 @@ Shader::Mode ParticlesMaterial::get_shader_mode() const {
|
|||||||
|
|
||||||
void ParticlesMaterial::_bind_methods() {
|
void ParticlesMaterial::_bind_methods() {
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("set_direction", "degrees"), &ParticlesMaterial::set_direction);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_direction"), &ParticlesMaterial::get_direction);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_spread", "degrees"), &ParticlesMaterial::set_spread);
|
ClassDB::bind_method(D_METHOD("set_spread", "degrees"), &ParticlesMaterial::set_spread);
|
||||||
ClassDB::bind_method(D_METHOD("get_spread"), &ParticlesMaterial::get_spread);
|
ClassDB::bind_method(D_METHOD("get_spread"), &ParticlesMaterial::get_spread);
|
||||||
|
|
||||||
@ -1115,7 +1131,8 @@ void ParticlesMaterial::_bind_methods() {
|
|||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_align_y"), "set_flag", "get_flag", FLAG_ALIGN_Y_TO_VELOCITY);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_align_y"), "set_flag", "get_flag", FLAG_ALIGN_Y_TO_VELOCITY);
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_rotate_y"), "set_flag", "get_flag", FLAG_ROTATE_Y);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_rotate_y"), "set_flag", "get_flag", FLAG_ROTATE_Y);
|
||||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_disable_z"), "set_flag", "get_flag", FLAG_DISABLE_Z);
|
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "flag_disable_z"), "set_flag", "get_flag", FLAG_DISABLE_Z);
|
||||||
ADD_GROUP("Spread", "");
|
ADD_GROUP("Direction", "");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "direction"), "set_direction", "get_direction");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "spread", PROPERTY_HINT_RANGE, "0,180,0.01"), "set_spread", "get_spread");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "spread", PROPERTY_HINT_RANGE, "0,180,0.01"), "set_spread", "get_spread");
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "flatness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_flatness", "get_flatness");
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "flatness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_flatness", "get_flatness");
|
||||||
ADD_GROUP("Gravity", "");
|
ADD_GROUP("Gravity", "");
|
||||||
@ -1200,6 +1217,7 @@ void ParticlesMaterial::_bind_methods() {
|
|||||||
ParticlesMaterial::ParticlesMaterial() :
|
ParticlesMaterial::ParticlesMaterial() :
|
||||||
element(this) {
|
element(this) {
|
||||||
|
|
||||||
|
set_direction(Vector3(1, 0, 0));
|
||||||
set_spread(45);
|
set_spread(45);
|
||||||
set_flatness(0);
|
set_flatness(0);
|
||||||
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 0);
|
set_param(PARAM_INITIAL_LINEAR_VELOCITY, 0);
|
||||||
|
@ -129,6 +129,7 @@ private:
|
|||||||
static SelfList<ParticlesMaterial>::List *dirty_materials;
|
static SelfList<ParticlesMaterial>::List *dirty_materials;
|
||||||
|
|
||||||
struct ShaderNames {
|
struct ShaderNames {
|
||||||
|
StringName direction;
|
||||||
StringName spread;
|
StringName spread;
|
||||||
StringName flatness;
|
StringName flatness;
|
||||||
StringName initial_linear_velocity;
|
StringName initial_linear_velocity;
|
||||||
@ -194,6 +195,7 @@ private:
|
|||||||
_FORCE_INLINE_ void _queue_shader_change();
|
_FORCE_INLINE_ void _queue_shader_change();
|
||||||
_FORCE_INLINE_ bool _is_shader_dirty() const;
|
_FORCE_INLINE_ bool _is_shader_dirty() const;
|
||||||
|
|
||||||
|
Vector3 direction;
|
||||||
float spread;
|
float spread;
|
||||||
float flatness;
|
float flatness;
|
||||||
|
|
||||||
@ -230,6 +232,9 @@ protected:
|
|||||||
virtual void _validate_property(PropertyInfo &property) const;
|
virtual void _validate_property(PropertyInfo &property) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void set_direction(Vector3 p_direction);
|
||||||
|
Vector3 get_direction() const;
|
||||||
|
|
||||||
void set_spread(float p_spread);
|
void set_spread(float p_spread);
|
||||||
float get_spread() const;
|
float get_spread() const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user