[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