[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