Particle System: move data creation into RNA update
Relying on evaluation to initialize data causes issues w/ 2.8.
This commit is contained in:
parent
7277f8973b
commit
747534af00
|
@ -304,6 +304,7 @@ bool psys_check_edited(struct ParticleSystem *psys);
|
|||
|
||||
void psys_check_group_weights(struct ParticleSettings *part);
|
||||
int psys_uses_gravity(struct ParticleSimulationData *sim);
|
||||
void BKE_particlesettings_fluid_default_settings(struct ParticleSettings *part);
|
||||
|
||||
/* free */
|
||||
void BKE_particlesettings_free(struct ParticleSettings *part);
|
||||
|
|
|
@ -4140,7 +4140,7 @@ void psys_check_boid_data(ParticleSystem *psys)
|
|||
}
|
||||
}
|
||||
|
||||
static void fluid_default_settings(ParticleSettings *part)
|
||||
void BKE_particlesettings_fluid_default_settings(ParticleSettings *part)
|
||||
{
|
||||
SPHFluidSettings *fluid = part->fluid;
|
||||
|
||||
|
@ -4172,24 +4172,12 @@ static void psys_prepare_physics(ParticleSimulationData *sim)
|
|||
sim->psys->flag &= ~PSYS_KEYED;
|
||||
}
|
||||
|
||||
if (part->phystype == PART_PHYS_BOIDS && part->boids == NULL) {
|
||||
BoidState *state;
|
||||
|
||||
part->boids = MEM_callocN(sizeof(BoidSettings), "Boid Settings");
|
||||
boid_default_settings(part->boids);
|
||||
|
||||
state = boid_new_state(part->boids);
|
||||
BLI_addtail(&state->rules, boid_new_rule(eBoidRuleType_Separate));
|
||||
BLI_addtail(&state->rules, boid_new_rule(eBoidRuleType_Flock));
|
||||
|
||||
((BoidRule*)state->rules.first)->flag |= BOIDRULE_CURRENT;
|
||||
|
||||
state->flag |= BOIDSTATE_CURRENT;
|
||||
BLI_addtail(&part->boids->states, state);
|
||||
/* RNA Update must ensure this is true. */
|
||||
if (part->phystype == PART_PHYS_BOIDS) {
|
||||
BLI_assert(part->boids != NULL);
|
||||
}
|
||||
else if (part->phystype == PART_PHYS_FLUID && part->fluid == NULL) {
|
||||
part->fluid = MEM_callocN(sizeof(SPHFluidSettings), "SPH Fluid Settings");
|
||||
fluid_default_settings(part);
|
||||
else if (part->phystype == PART_PHYS_FLUID) {
|
||||
BLI_assert(part->fluid != NULL);
|
||||
}
|
||||
|
||||
psys_check_boid_data(sim->psys);
|
||||
|
|
|
@ -131,6 +131,7 @@ static const EnumPropertyItem part_hair_ren_as_items[] = {
|
|||
|
||||
#include "BLI_math.h"
|
||||
|
||||
#include "BKE_boids.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_cloth.h"
|
||||
#include "BKE_colortools.h"
|
||||
|
@ -679,9 +680,31 @@ static void rna_Particle_change_type(Main *bmain, Scene *scene, PointerRNA *ptr)
|
|||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
static void rna_Particle_change_physics(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Particle_change_physics_type(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
particle_recalc(bmain, scene, ptr, PSYS_RECALC_RESET | PSYS_RECALC_PHYS);
|
||||
|
||||
ParticleSettings *part = (ParticleSettings *)ptr->data;
|
||||
|
||||
if (part->phystype == PART_PHYS_BOIDS && part->boids == NULL) {
|
||||
BoidState *state;
|
||||
|
||||
part->boids = MEM_callocN(sizeof(BoidSettings), "Boid Settings");
|
||||
boid_default_settings(part->boids);
|
||||
|
||||
state = boid_new_state(part->boids);
|
||||
BLI_addtail(&state->rules, boid_new_rule(eBoidRuleType_Separate));
|
||||
BLI_addtail(&state->rules, boid_new_rule(eBoidRuleType_Flock));
|
||||
|
||||
((BoidRule*)state->rules.first)->flag |= BOIDRULE_CURRENT;
|
||||
|
||||
state->flag |= BOIDSTATE_CURRENT;
|
||||
BLI_addtail(&part->boids->states, state);
|
||||
}
|
||||
else if (part->phystype == PART_PHYS_FLUID && part->fluid == NULL) {
|
||||
part->fluid = MEM_callocN(sizeof(SPHFluidSettings), "SPH Fluid Settings");
|
||||
BKE_particlesettings_fluid_default_settings(part);
|
||||
}
|
||||
}
|
||||
|
||||
static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
@ -2265,7 +2288,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
|
|||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_enum_items(prop, phys_type_items);
|
||||
RNA_def_property_ui_text(prop, "Physics Type", "Particle physics type");
|
||||
RNA_def_property_update(prop, 0, "rna_Particle_change_physics");
|
||||
RNA_def_property_update(prop, 0, "rna_Particle_change_physics_type");
|
||||
|
||||
prop = RNA_def_property(srna, "rotation_mode", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "rotmode");
|
||||
|
|
Loading…
Reference in New Issue