[Bf-blender-cvs] [0bf6fa47297] functions: test multiple events
Jacques Lucke
noreply at git.blender.org
Thu Jun 20 15:51:26 CEST 2019
Commit: 0bf6fa47297fa5a16a31e8956e4f72b405add2b5
Author: Jacques Lucke
Date: Thu Jun 20 14:56:42 2019 +0200
Branches: functions
https://developer.blender.org/rB0bf6fa47297fa5a16a31e8956e4f72b405add2b5
test multiple events
===================================================================
M source/blender/simulations/bparticles/c_wrapper.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index b76a18674eb..e6692611a6e 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -62,7 +62,7 @@ class AgeReachedEvent : public Event {
void filter(AttributeArrays attributes,
ArrayRef<uint> particle_indices,
- IdealOffsets &ideal_offsets,
+ IdealOffsets &UNUSED(ideal_offsets),
ArrayRef<float> durations,
float end_time,
SmallVector<uint> &r_filtered_indices,
@@ -73,12 +73,13 @@ class AgeReachedEvent : public Event {
for (uint i = 0; i < particle_indices.size(); i++) {
uint pindex = particle_indices[i];
float duration = durations[i];
- float birth_time = birth_times[i];
+ float birth_time = birth_times[pindex];
float age = end_time - birth_time;
if (age >= m_age && age - duration < m_age) {
r_filtered_indices.append(i);
- r_time_factors.append(
- TimeSpan(end_time - duration, duration).get_factor(birth_time + m_age));
+ float time_factor =
+ TimeSpan(end_time - duration, duration).get_factor(birth_time + m_age) + 0.00001f;
+ r_time_factors.append(time_factor);
}
}
}
@@ -94,6 +95,25 @@ class KillAction : public Action {
}
};
+class MoveAction : public BParticles::Action {
+ private:
+ float3 m_offset;
+
+ public:
+ MoveAction(float3 offset) : m_offset(offset)
+ {
+ }
+
+ void execute(AttributeArrays attributes, ArrayRef<uint> particle_indices) override
+ {
+ auto positions = attributes.get_float3("Position");
+
+ for (uint pindex : particle_indices) {
+ positions[pindex] += m_offset;
+ }
+ }
+};
+
class ModifierStepParticleInfluences : public ParticleInfluences {
public:
SmallVector<Force *> m_forces;
@@ -165,8 +185,10 @@ void BParticles_simulate_modifier(NodeParticlesModifierData *UNUSED(npmd),
description.m_duration = 1.0f / 24.0f;
description.m_emitters.append(EMITTER_point({1, 1, 1}).release());
description.m_influences.m_forces.append(FORCE_directional({0, 0, -2}).release());
- description.m_influences.m_events.append(new AgeReachedEvent(3));
+ description.m_influences.m_events.append(new AgeReachedEvent(1));
description.m_influences.m_actions.append(new KillAction());
+ description.m_influences.m_events.append(new AgeReachedEvent(0.5f));
+ description.m_influences.m_actions.append(new MoveAction({0, 1, 0}));
simulate_step(state, description);
std::cout << "Active Blocks: " << state.m_container->active_blocks().size() << "\n";
More information about the Bf-blender-cvs
mailing list