[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