Merge pull request #55399 from RPicster/particlesmaterial-sphere-emittershape
ParticleMaterial: Sphere emission shape emitting from the volume.
This commit is contained in:
@ -508,7 +508,7 @@ bool CPUParticles3D::get_split_scale() {
|
||||
}
|
||||
|
||||
void CPUParticles3D::_validate_property(PropertyInfo &property) const {
|
||||
if (property.name == "emission_sphere_radius" && emission_shape != EMISSION_SHAPE_SPHERE) {
|
||||
if (property.name == "emission_sphere_radius" && (emission_shape != EMISSION_SHAPE_SPHERE && emission_shape != EMISSION_SHAPE_SPHERE_SURFACE)) {
|
||||
property.usage = PROPERTY_USAGE_NONE;
|
||||
}
|
||||
|
||||
@ -802,6 +802,13 @@ void CPUParticles3D::_particles_process(double p_delta) {
|
||||
//do none
|
||||
} break;
|
||||
case EMISSION_SHAPE_SPHERE: {
|
||||
real_t s = 2.0 * Math::randf() - 1.0;
|
||||
real_t t = Math_TAU * Math::randf();
|
||||
real_t x = Math::randf();
|
||||
real_t radius = emission_sphere_radius * Math::sqrt(1.0 - s * s);
|
||||
p.transform.origin = Vector3(0, 0, 0).lerp(Vector3(radius * Math::cos(t), radius * Math::sin(t), emission_sphere_radius * s), x);
|
||||
} break;
|
||||
case EMISSION_SHAPE_SPHERE_SURFACE: {
|
||||
real_t s = 2.0 * Math::randf() - 1.0;
|
||||
real_t t = Math_TAU * Math::randf();
|
||||
real_t radius = emission_sphere_radius * Math::sqrt(1.0 - s * s);
|
||||
@ -1530,7 +1537,7 @@ void CPUParticles3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("convert_from_particles", "particles"), &CPUParticles3D::convert_from_particles);
|
||||
|
||||
ADD_GROUP("Emission Shape", "emission_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "emission_shape", PROPERTY_HINT_ENUM, "Point,Sphere,Box,Points,Directed Points,Ring", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_emission_shape", "get_emission_shape");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "emission_shape", PROPERTY_HINT_ENUM, "Point,Sphere,Sphere Surface,Box,Points,Directed Points,Ring", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_emission_shape", "get_emission_shape");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "emission_sphere_radius", PROPERTY_HINT_RANGE, "0.01,128,0.01"), "set_emission_sphere_radius", "get_emission_sphere_radius");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "emission_box_extents"), "set_emission_box_extents", "get_emission_box_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR3_ARRAY, "emission_points"), "set_emission_points", "get_emission_points");
|
||||
@ -1627,6 +1634,7 @@ void CPUParticles3D::_bind_methods() {
|
||||
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINT);
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_SPHERE);
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_SPHERE_SURFACE);
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_BOX);
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINTS);
|
||||
BIND_ENUM_CONSTANT(EMISSION_SHAPE_DIRECTED_POINTS);
|
||||
|
||||
Reference in New Issue
Block a user