[Bf-blender-cvs] [6dd1e480b58] functions: initial Action interface

Jacques Lucke noreply at git.blender.org
Mon Jul 8 17:57:22 CEST 2019


Commit: 6dd1e480b5867d3069c3d9aebf9fd9cca485eaeb
Author: Jacques Lucke
Date:   Mon Jul 8 16:21:44 2019 +0200
Branches: functions
https://developer.blender.org/rB6dd1e480b5867d3069c3d9aebf9fd9cca485eaeb

initial Action interface

===================================================================

M	source/blender/simulations/bparticles/actions.cpp
M	source/blender/simulations/bparticles/actions.hpp
M	source/blender/simulations/bparticles/events.cpp

===================================================================

diff --git a/source/blender/simulations/bparticles/actions.cpp b/source/blender/simulations/bparticles/actions.cpp
index fb76a1371aa..fd3b94084fa 100644
--- a/source/blender/simulations/bparticles/actions.cpp
+++ b/source/blender/simulations/bparticles/actions.cpp
@@ -9,7 +9,7 @@ Action::~Action()
 }
 
 class NoneAction : public Action {
-  void execute(EventExecuteInterface &UNUSED(interface), EventInfo &UNUSED(event_info)) override
+  void execute(ActionInterface &UNUSED(interface)) override
   {
   }
 };
@@ -30,14 +30,16 @@ class ChangeDirectionAction : public Action {
     delete m_post_action;
   }
 
-  void execute(EventExecuteInterface &interface, EventInfo &event_info) override
+  void execute(ActionInterface &interface) override
   {
-    ParticleSet particles = interface.particles();
+    EventExecuteInterface &execute_interface = interface.execute_interface();
+
+    ParticleSet particles = execute_interface.particles();
     auto velocities = particles.attributes().get_float3("Velocity");
-    auto position_offsets = interface.attribute_offsets().get_float3("Position");
-    auto velocity_offsets = interface.attribute_offsets().get_float3("Velocity");
+    auto position_offsets = execute_interface.attribute_offsets().get_float3("Position");
+    auto velocity_offsets = execute_interface.attribute_offsets().get_float3("Velocity");
 
-    auto caller = m_compute_inputs.get_caller(particles.attributes(), event_info);
+    auto caller = m_compute_inputs.get_caller(particles.attributes(), interface.event_info());
 
     FN_TUPLE_CALL_ALLOC_TUPLES(caller.body(), fn_in, fn_out);
 
@@ -51,18 +53,18 @@ class ChangeDirectionAction : public Action {
       float3 direction = fn_out.get<float3>(0);
 
       velocities[pindex] = direction;
-      position_offsets[pindex] = direction * interface.remaining_time_in_step(i);
+      position_offsets[pindex] = direction * execute_interface.remaining_time_in_step(i);
       velocity_offsets[pindex] = float3(0);
     }
 
-    m_post_action->execute(interface, event_info);
+    m_post_action->execute(interface);
   }
 };
 
 class KillAction : public Action {
-  void execute(EventExecuteInterface &interface, EventInfo &UNUSED(event_info)) override
+  void execute(ActionInterface &interface) override
   {
-    interface.kill(interface.particles().indices());
+    interface.execute_interface().kill(interface.execute_interface().particles().indices());
   }
 };
 
@@ -94,9 +96,9 @@ class ExplodeAction : public Action {
   {
   }
 
-  void execute(EventExecuteInterface &interface, EventInfo &event_info) override
+  void execute(ActionInterface &interface) override
   {
-    ParticleSet &particles = interface.particles();
+    ParticleSet &particles = interface.execute_interface().particles();
 
     auto positions = particles.attributes().get_float3("Position");
 
@@ -104,7 +106,7 @@ class ExplodeAction : public Action {
     SmallVector<float3> new_velocities;
     SmallVector<uint> original_indices;
 
-    auto caller = m_compute_inputs.get_caller(particles.attributes(), event_info);
+    auto caller = m_compute_inputs.get_caller(particles.attributes(), interface.event_info());
     FN_TUPLE_CALL_ALLOC_TUPLES(caller.body(), fn_in, fn_out);
 
     FN::ExecutionStack stack;
@@ -125,11 +127,12 @@ class ExplodeAction : public Action {
       }
     }
 
-    auto &target = interface.request_emit_target(m_new_particle_name, original_indices);
+    auto &target = interface.execute_interface().request_emit_target(m_new_particle_name,
+                                                                     original_indices);
     target.set_float3("Position", new_positions);
     target.set_float3("Velocity", new_velocities);
 
-    m_post_action->execute(interface, event_info);
+    m_post_action->execute(interface);
   }
 };
 
@@ -148,15 +151,17 @@ class ConditionAction : public Action {
   {
   }
 
-  void execute(EventExecuteInterface &interface, EventInfo &event_info) override
+  void execute(ActionInterface &interface) override
   {
+    EventExecuteInterface &execute_interface = interface.execute_interface();
+
     SmallVector<uint> true_indices, false_indices;
     SmallVector<float> true_times, false_times;
 
-    ParticleSet particles = interface.particles();
-    auto current_times = interface.current_times();
+    ParticleSet particles = execute_interface.particles();
+    auto current_times = execute_interface.current_times();
 
-    auto caller = m_compute_inputs.get_caller(particles.attributes(), event_info);
+    auto caller = m_compute_inputs.get_caller(particles.attributes(), interface.event_info());
     FN_TUPLE_CALL_ALLOC_TUPLES(caller.body(), fn_in, fn_out);
 
     FN::ExecutionStack stack;
@@ -176,22 +181,24 @@ class ConditionAction : public Action {
     }
 
     ParticleSet true_particles(particles.block(), true_indices);
-    EventExecuteInterface true_interface(true_particles,
-                                         interface.block_allocator(),
-                                         true_times,
-                                         interface.event_storage(),
-                                         interface.attribute_offsets(),
-                                         interface.step_end_time());
-    m_true_action->execute(true_interface, event_info);
+    EventExecuteInterface true_execute_interface(true_particles,
+                                                 execute_interface.block_allocator(),
+                                                 true_times,
+                                                 execute_interface.event_storage(),
+                                                 execute_interface.attribute_offsets(),
+                                                 execute_interface.step_end_time());
+    ActionInterface true_interface(true_execute_interface, interface.event_info());
+    m_true_action->execute(true_interface);
 
     ParticleSet false_particles(particles.block(), false_indices);
-    EventExecuteInterface false_interface(false_particles,
-                                          interface.block_allocator(),
-                                          false_times,
-                                          interface.event_storage(),
-                                          interface.attribute_offsets(),
-                                          interface.step_end_time());
-    m_false_action->execute(false_interface, event_info);
+    EventExecuteInterface false_execute_interface(false_particles,
+                                                  execute_interface.block_allocator(),
+                                                  false_times,
+                                                  execute_interface.event_storage(),
+                                                  execute_interface.attribute_offsets(),
+                                                  execute_interface.step_end_time());
+    ActionInterface false_interface(false_execute_interface, interface.event_info());
+    m_false_action->execute(false_interface);
   }
 };
 
diff --git a/source/blender/simulations/bparticles/actions.hpp b/source/blender/simulations/bparticles/actions.hpp
index d3bad503c51..782f5965bb6 100644
--- a/source/blender/simulations/bparticles/actions.hpp
+++ b/source/blender/simulations/bparticles/actions.hpp
@@ -90,11 +90,33 @@ class ParticleFunction {
   }
 };
 
+class ActionInterface {
+ private:
+  EventExecuteInterface &m_event_execute_interface;
+  EventInfo &m_event_info;
+
+ public:
+  ActionInterface(EventExecuteInterface &event_execute_interface, EventInfo &event_info)
+      : m_event_execute_interface(event_execute_interface), m_event_info(event_info)
+  {
+  }
+
+  EventExecuteInterface &execute_interface()
+  {
+    return m_event_execute_interface;
+  }
+
+  EventInfo &event_info()
+  {
+    return m_event_info;
+  }
+};
+
 class Action {
  public:
   virtual ~Action() = 0;
 
-  virtual void execute(EventExecuteInterface &interface, EventInfo &event_info) = 0;
+  virtual void execute(ActionInterface &interface) = 0;
 };
 
 Action *ACTION_none();
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index 9806cfcd943..a8a03eaa61d 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -87,7 +87,8 @@ class AgeReachedEvent : public Event {
     }
 
     EmptyEventInfo event_info;
-    m_action->execute(interface, event_info);
+    ActionInterface action_interface(interface, event_info);
+    m_action->execute(action_interface);
   }
 };
 
@@ -212,7 +213,8 @@ class MeshCollisionEventFilter : public Event {
     }
 
     CollisionEventInfo event_info(normals);
-    m_action->execute(interface, event_info);
+    ActionInterface action_interface(interface, event_info);
+    m_action->execute(action_interface);
   }
 };



More information about the Bf-blender-cvs mailing list