[Bf-blender-cvs] [2859cf69024] functions: cleanup executing actions

Jacques Lucke noreply at git.blender.org
Wed Jul 24 19:11:44 CEST 2019


Commit: 2859cf6902425634f0f085e95522388fb91d2b62
Author: Jacques Lucke
Date:   Wed Jul 24 13:50:36 2019 +0200
Branches: functions
https://developer.blender.org/rB2859cf6902425634f0f085e95522388fb91d2b62

cleanup executing actions

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

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

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

diff --git a/source/blender/simulations/bparticles/action_interface.hpp b/source/blender/simulations/bparticles/action_interface.hpp
index 26eddee3fb1..baf9e60cb03 100644
--- a/source/blender/simulations/bparticles/action_interface.hpp
+++ b/source/blender/simulations/bparticles/action_interface.hpp
@@ -80,22 +80,12 @@ class ActionInterface {
                   ArrayRef<float> remaining_durations,
                   EventInfo &event_info);
 
-  static void RunFromEmitter(std::unique_ptr<Action> &action,
-                             ParticleSets &particle_sets,
-                             EmitterInterface &emitter_interface,
-                             EventInfo *event_info = nullptr);
-  static void RunFromEvent(std::unique_ptr<Action> &action,
-                           EventExecuteInterface &event_interface,
-                           EventInfo *event_info = nullptr);
-  static void RunForSubset(std::unique_ptr<Action> &action,
-                           ArrayRef<uint> pindices,
-                           ActionInterface &action_interface);
-
   EventInfo &event_info();
 
   ParticleSet &particles();
   AttributeArrays attribute_offsets();
   float remaining_time_in_step(uint pindex);
+  ArrayRef<float> remaining_durations();
   ArrayRef<float> current_times();
   void kill(ArrayRef<uint> pindices);
   ParticleAllocator &particle_allocator();
@@ -107,6 +97,12 @@ class Action {
   virtual ~Action() = 0;
 
   virtual void execute(ActionInterface &interface) = 0;
+
+  void execute_from_emitter(ParticleSets &particle_sets,
+                            EmitterInterface &emitter_interface,
+                            EventInfo *event_info = nullptr);
+  void execute_from_event(EventExecuteInterface &event_interface, EventInfo *event_info = nullptr);
+  void execute_for_subset(ArrayRef<uint> pindices, ActionInterface &action_interface);
 };
 
 /* ActionInterface inline functions
@@ -136,10 +132,9 @@ class EmptyEventInfo : public EventInfo {
   }
 };
 
-inline void ActionInterface::RunFromEmitter(std::unique_ptr<Action> &action,
-                                            ParticleSets &particle_sets,
-                                            EmitterInterface &emitter_interface,
-                                            EventInfo *event_info)
+inline void Action::execute_from_emitter(ParticleSets &particle_sets,
+                                         EmitterInterface &emitter_interface,
+                                         EventInfo *event_info)
 {
   AttributesInfo info;
   AttributeArraysCore offsets_core(info, {}, 0);
@@ -158,13 +153,12 @@ inline void ActionInterface::RunFromEmitter(std::unique_ptr<Action> &action,
                                      particles.attributes().get_float("Birth Time"),
                                      durations,
                                      used_event_info);
-    action->execute(action_interface);
+    this->execute(action_interface);
   }
 }
 
-inline void ActionInterface::RunFromEvent(std::unique_ptr<Action> &action,
-                                          EventExecuteInterface &event_interface,
-                                          EventInfo *event_info)
+inline void Action::execute_from_event(EventExecuteInterface &event_interface,
+                                       EventInfo *event_info)
 {
   EmptyEventInfo empty_event_info;
   EventInfo &used_event_info = (event_info == nullptr) ? empty_event_info : *event_info;
@@ -176,21 +170,19 @@ inline void ActionInterface::RunFromEvent(std::unique_ptr<Action> &action,
                                    event_interface.current_times(),
                                    event_interface.remaining_durations(),
                                    used_event_info);
-  action->execute(action_interface);
+  this->execute(action_interface);
 }
 
-inline void ActionInterface::RunForSubset(std::unique_ptr<Action> &action,
-                                          ArrayRef<uint> pindices,
-                                          ActionInterface &action_interface)
+inline void Action::execute_for_subset(ArrayRef<uint> pindices, ActionInterface &action_interface)
 {
-  ActionInterface sub_interface(action_interface.m_particle_allocator,
-                                action_interface.m_array_allocator,
-                                ParticleSet(action_interface.m_particles.block(), pindices),
-                                action_interface.m_attribute_offsets,
-                                action_interface.m_current_times,
-                                action_interface.m_remaining_durations,
-                                action_interface.m_event_info);
-  action->execute(sub_interface);
+  ActionInterface sub_interface(action_interface.particle_allocator(),
+                                action_interface.array_allocator(),
+                                ParticleSet(action_interface.particles().block(), pindices),
+                                action_interface.attribute_offsets(),
+                                action_interface.current_times(),
+                                action_interface.remaining_durations(),
+                                action_interface.event_info());
+  this->execute(sub_interface);
 }
 
 inline EventInfo &ActionInterface::event_info()
@@ -213,6 +205,11 @@ inline float ActionInterface::remaining_time_in_step(uint pindex)
   return m_remaining_durations[pindex];
 }
 
+inline ArrayRef<float> ActionInterface::remaining_durations()
+{
+  return m_remaining_durations;
+}
+
 inline ArrayRef<float> ActionInterface::current_times()
 {
   return m_current_times;
diff --git a/source/blender/simulations/bparticles/actions.cpp b/source/blender/simulations/bparticles/actions.cpp
index eecc5956f4f..a85bd34b257 100644
--- a/source/blender/simulations/bparticles/actions.cpp
+++ b/source/blender/simulations/bparticles/actions.cpp
@@ -111,8 +111,8 @@ void ConditionAction::execute(ActionInterface &interface)
     }
   }
 
-  ActionInterface::RunForSubset(m_true_action, true_pindices, interface);
-  ActionInterface::RunForSubset(m_false_action, false_pindices, interface);
+  m_true_action->execute_for_subset(true_pindices, interface);
+  m_false_action->execute_for_subset(false_pindices, interface);
 }
 
 void ConditionAction::compute_conditions(ActionInterface &interface, ArrayRef<bool> r_conditions)
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 0bd09e4adb2..fb67d27c3d6 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -125,7 +125,7 @@ void SurfaceEmitter::emit(EmitterInterface &interface)
   new_particles.set_float("Size", sizes);
   new_particles.set_float("Birth Time", birth_times);
 
-  ActionInterface::RunFromEmitter(m_action, new_particles, interface);
+  m_action->execute_from_emitter(new_particles, interface);
 }
 
 void CustomFunctionEmitter::emit(EmitterInterface &interface)
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index 4e2db171572..8668c33a67c 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -57,7 +57,7 @@ void AgeReachedEvent::execute(EventExecuteInterface &interface)
     was_activated_before[pindex] = true;
   }
 
-  ActionInterface::RunFromEvent(m_action, interface);
+  m_action->execute_from_event(interface);
 }
 
 /* Collision Event
@@ -132,7 +132,7 @@ void MeshCollisionEvent::execute(EventExecuteInterface &interface)
   }
 
   CollisionEventInfo event_info(normals);
-  ActionInterface::RunFromEvent(m_action, interface, &event_info);
+  m_action->execute_from_event(interface, &event_info);
 }
 
 void CloseByPointsEvent::filter(EventFilterInterface &interface)
@@ -152,7 +152,7 @@ void CloseByPointsEvent::filter(EventFilterInterface &interface)
 
 void CloseByPointsEvent::execute(EventExecuteInterface &interface)
 {
-  ActionInterface::RunFromEvent(m_action, interface);
+  m_action->execute_from_event(interface);
 }
 
 }  // namespace BParticles



More information about the Bf-blender-cvs mailing list