[Bf-blender-cvs] [db89c657468] functions: remove separate EventFilter class

Jacques Lucke noreply at git.blender.org
Mon Jul 8 17:56:58 CEST 2019


Commit: db89c6574688aa84a042b1f17a234256e7d93d8e
Author: Jacques Lucke
Date:   Mon Jul 8 12:57:39 2019 +0200
Branches: functions
https://developer.blender.org/rBdb89c6574688aa84a042b1f17a234256e7d93d8e

remove separate EventFilter class

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

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

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

diff --git a/source/blender/simulations/bparticles/c_wrapper.cpp b/source/blender/simulations/bparticles/c_wrapper.cpp
index 3afd9566ce7..f78d3d5b2dc 100644
--- a/source/blender/simulations/bparticles/c_wrapper.cpp
+++ b/source/blender/simulations/bparticles/c_wrapper.cpp
@@ -66,39 +66,6 @@ void BParticles_state_free(BParticlesState state)
   delete unwrap(state);
 }
 
-class EventFilterWithAction : public Event {
- private:
-  EventFilter *m_filter;
-  Action *m_action;
-
- public:
-  EventFilterWithAction(EventFilter *filter, Action *action) : m_filter(filter), m_action(action)
-  {
-  }
-
-  ~EventFilterWithAction()
-  {
-    delete m_filter;
-    delete m_action;
-  }
-
-  void filter(EventFilterInterface &interface) override
-  {
-    m_filter->filter(interface);
-  }
-
-  void execute(EventExecuteInterface &interface) override
-  {
-    m_filter->triggered(interface);
-    m_action->execute(interface);
-  }
-
-  EventFilter *get_filter() const
-  {
-    return m_filter;
-  }
-};
-
 class EulerIntegrator : public Integrator {
  private:
   AttributesInfo m_offset_attributes_info;
@@ -196,9 +163,10 @@ class ModifierParticleType : public ParticleType {
     interface.use(AttributeType::Float3, "Velocity");
 
     for (Event *event : m_events) {
-      EventFilterWithAction *event_action = dynamic_cast<EventFilterWithAction *>(event);
-      BLI_assert(event_action);
-      event_action->get_filter()->attributes(interface);
+      CustomEvent *custom_event = dynamic_cast<CustomEvent *>(event);
+      if (custom_event != nullptr) {
+        custom_event->attributes(interface);
+      }
     }
   }
 };
@@ -443,12 +411,11 @@ static void INSERT_EVENT_age_reached(bNode *event_node,
       continue;
     }
 
-    EventFilter *event_filter = EVENT_age_reached(event_node->name, fn);
     Action *action = build_action({(bNodeSocket *)event_node->outputs.first, event_node},
                                   indexed_tree,
                                   data_graph,
                                   step_description);
-    Event *event = new EventFilterWithAction(event_filter, action);
+    Event *event = EVENT_age_reached(event_node->name, fn, action);
 
     bNode *type_node = linked.node;
     step_description.m_types.lookup_ref(type_node->name)->m_events.append(event);
@@ -474,12 +441,11 @@ static void INSERT_EVENT_mesh_collision(bNode *event_node,
       continue;
     }
 
-    EventFilter *event_filter = EVENT_mesh_collision(event_node->name, object);
     Action *action = build_action({(bNodeSocket *)event_node->outputs.first, event_node},
                                   indexed_tree,
                                   data_graph,
                                   step_description);
-    Event *event = new EventFilterWithAction(event_filter, action);
+    Event *event = EVENT_mesh_collision(event_node->name, object, action);
 
     bNode *type_node = linked.node;
     step_description.m_types.lookup_ref(type_node->name)->m_events.append(event);
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index 3a49d98c208..02977d37ccf 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -8,19 +8,24 @@
 
 namespace BParticles {
 
-EventFilter::~EventFilter()
+CustomEvent::~CustomEvent()
 {
 }
 
-class AgeReachedEvent : public EventFilter {
+class AgeReachedEvent : public CustomEvent {
  private:
   std::string m_identifier;
   SharedFunction m_compute_age_fn;
   TupleCallBody *m_compute_age_body;
+  std::unique_ptr<Action> m_action;
 
  public:
-  AgeReachedEvent(StringRef identifier, SharedFunction &compute_age_fn)
-      : m_identifier(identifier.to_std_string()), m_compute_age_fn(compute_age_fn)
+  AgeReachedEvent(StringRef identifier,
+                  SharedFunction &compute_age_fn,
+                  std::unique_ptr<Action> action)
+      : m_identifier(identifier.to_std_string()),
+        m_compute_age_fn(compute_age_fn),
+        m_action(std::move(action))
   {
     m_compute_age_body = compute_age_fn->body<TupleCallBody>();
   }
@@ -69,7 +74,7 @@ class AgeReachedEvent : public EventFilter {
     }
   }
 
-  void triggered(EventExecuteInterface &interface) override
+  void execute(EventExecuteInterface &interface) override
   {
     ParticleSet particles = interface.particles();
 
@@ -77,16 +82,19 @@ class AgeReachedEvent : public EventFilter {
     for (uint pindex : particles.indices()) {
       was_activated_before[pindex] = true;
     }
+
+    m_action->execute(interface);
   }
 };
 
-class MeshCollisionEventFilter : public EventFilter {
+class MeshCollisionEventFilter : public Event {
  private:
   std::string m_identifier;
   Object *m_object;
   BVHTreeFromMesh m_bvhtree_data;
   float4x4 m_local_to_world;
   float4x4 m_world_to_local;
+  std::unique_ptr<Action> m_action;
 
   struct RayCastResult {
     bool success;
@@ -96,8 +104,8 @@ class MeshCollisionEventFilter : public EventFilter {
   };
 
  public:
-  MeshCollisionEventFilter(StringRef identifier, Object *object)
-      : m_identifier(identifier.to_std_string()), m_object(object)
+  MeshCollisionEventFilter(StringRef identifier, Object *object, std::unique_ptr<Action> action)
+      : m_identifier(identifier.to_std_string()), m_object(object), m_action(std::move(action))
   {
     BLI_assert(object->type == OB_MESH);
     m_local_to_world = m_object->obmat;
@@ -147,16 +155,23 @@ class MeshCollisionEventFilter : public EventFilter {
 
     return {hit.index >= 0, hit.index, float3(hit.no), hit.dist};
   }
+
+  void execute(EventExecuteInterface &interface) override
+  {
+    m_action->execute(interface);
+  }
 };
 
-EventFilter *EVENT_age_reached(StringRef identifier, SharedFunction &compute_age_fn)
+CustomEvent *EVENT_age_reached(StringRef identifier,
+                               SharedFunction &compute_age_fn,
+                               Action *action)
 {
-  return new AgeReachedEvent(identifier, compute_age_fn);
+  return new AgeReachedEvent(identifier, compute_age_fn, std::unique_ptr<Action>(action));
 }
 
-EventFilter *EVENT_mesh_collision(StringRef identifier, Object *object)
+Event *EVENT_mesh_collision(StringRef identifier, Object *object, Action *action)
 {
-  return new MeshCollisionEventFilter(identifier, object);
+  return new MeshCollisionEventFilter(identifier, object, std::unique_ptr<Action>(action));
 }
 
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/events.hpp b/source/blender/simulations/bparticles/events.hpp
index e4f84423ac5..52fdeb30d10 100644
--- a/source/blender/simulations/bparticles/events.hpp
+++ b/source/blender/simulations/bparticles/events.hpp
@@ -9,22 +9,18 @@ namespace BParticles {
 
 using BLI::float4x4;
 
-class EventFilter {
+class CustomEvent : public Event {
  public:
-  virtual ~EventFilter() = 0;
-
-  virtual void filter(EventFilterInterface &interface) = 0;
-
-  virtual void triggered(EventExecuteInterface &UNUSED(interface))
-  {
-  }
+  virtual ~CustomEvent();
 
   virtual void attributes(TypeAttributeInterface &UNUSED(interface))
   {
   }
 };
 
-EventFilter *EVENT_mesh_collision(StringRef identifier, Object *object);
-EventFilter *EVENT_age_reached(StringRef identifier, SharedFunction &compute_age_fn);
+Event *EVENT_mesh_collision(StringRef identifier, Object *object, Action *action);
+CustomEvent *EVENT_age_reached(StringRef identifier,
+                               SharedFunction &compute_age_fn,
+                               Action *action);
 
 }  // namespace BParticles



More information about the Bf-blender-cvs mailing list