[Bf-blender-cvs] [9b3e1859eff] functions: simplify action builders
Jacques Lucke
noreply at git.blender.org
Thu Jul 25 15:10:38 CEST 2019
Commit: 9b3e1859eff9d0aa52719f22ac9223ac8f9a96c2
Author: Jacques Lucke
Date: Thu Jul 25 14:20:36 2019 +0200
Branches: functions
https://developer.blender.org/rB9b3e1859eff9d0aa52719f22ac9223ac8f9a96c2
simplify action builders
===================================================================
M source/blender/simulations/bparticles/actions.hpp
M source/blender/simulations/bparticles/inserters.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/actions.hpp b/source/blender/simulations/bparticles/actions.hpp
index a06fad36193..088ca8e1498 100644
--- a/source/blender/simulations/bparticles/actions.hpp
+++ b/source/blender/simulations/bparticles/actions.hpp
@@ -19,8 +19,8 @@ class ChangeDirectionAction : public Action {
std::unique_ptr<Action> m_post_action;
public:
- ChangeDirectionAction(ParticleFunction &compute_inputs, std::unique_ptr<Action> post_action)
- : m_compute_inputs(compute_inputs), m_post_action(std::move(post_action))
+ ChangeDirectionAction(ParticleFunction compute_inputs, std::unique_ptr<Action> post_action)
+ : m_compute_inputs(std::move(compute_inputs)), m_post_action(std::move(post_action))
{
}
@@ -35,10 +35,10 @@ class ExplodeAction : public Action {
public:
ExplodeAction(StringRef new_particle_name,
- ParticleFunction &compute_inputs,
+ ParticleFunction compute_inputs,
std::unique_ptr<Action> post_action)
: m_new_particle_name(new_particle_name.to_std_string()),
- m_compute_inputs(compute_inputs),
+ m_compute_inputs(std::move(compute_inputs)),
m_post_action(std::move(post_action))
{
}
@@ -52,10 +52,10 @@ class ConditionAction : public Action {
std::unique_ptr<Action> m_true_action, m_false_action;
public:
- ConditionAction(ParticleFunction &compute_inputs,
+ ConditionAction(ParticleFunction compute_inputs,
std::unique_ptr<Action> true_action,
std::unique_ptr<Action> false_action)
- : m_compute_inputs(compute_inputs),
+ : m_compute_inputs(std::move(compute_inputs)),
m_true_action(std::move(true_action)),
m_false_action(std::move(false_action))
{
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index bdbe7466728..b38237b75e6 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -110,46 +110,38 @@ ValueOrError<SharedFunction> create_function__event_inputs(VirtualNode *event_vn
static std::unique_ptr<Action> build_action(BuildContext &ctx,
VirtualSocket *start,
VirtualSocket *trigger);
-using ActionFromNodeCallback = std::function<std::unique_ptr<Action>(
- BuildContext &ctx, VirtualSocket *start, VirtualSocket *trigger)>;
+using ActionFromNodeCallback =
+ std::function<std::unique_ptr<Action>(BuildContext &ctx,
+ VirtualSocket *start,
+ VirtualSocket *trigger,
+ ParticleFunction compute_inputs_fn)>;
static std::unique_ptr<Action> BUILD_ACTION_kill(BuildContext &UNUSED(ctx),
VirtualSocket *UNUSED(start),
- VirtualSocket *UNUSED(trigger))
+ VirtualSocket *UNUSED(trigger),
+ ParticleFunction UNUSED(compute_inputs_fn))
{
return std::unique_ptr<Action>(new KillAction());
}
static std::unique_ptr<Action> BUILD_ACTION_change_direction(BuildContext &ctx,
VirtualSocket *start,
- VirtualSocket *trigger)
+ VirtualSocket *trigger,
+ ParticleFunction compute_inputs_fn)
{
VirtualNode *vnode = start->vnode();
- auto fn_or_error = create_function__action_inputs(vnode, ctx.data_graph);
- if (fn_or_error.is_error()) {
- return {};
- }
-
- SharedFunction fn = fn_or_error.extract_value();
- ParticleFunction particle_fn(fn);
auto post_action = build_action(ctx, vnode->output(0), trigger);
return std::unique_ptr<ChangeDirectionAction>(
- new ChangeDirectionAction(particle_fn, std::move(post_action)));
+ new ChangeDirectionAction(std::move(compute_inputs_fn), std::move(post_action)));
}
static std::unique_ptr<Action> BUILD_ACTION_explode(BuildContext &ctx,
VirtualSocket *start,
- VirtualSocket *trigger)
+ VirtualSocket *trigger,
+ ParticleFunction compute_inputs_fn)
{
VirtualNode *vnode = start->vnode();
- auto fn_or_error = create_function__action_inputs(vnode, ctx.data_graph);
- if (fn_or_error.is_error()) {
- return {};
- }
-
- SharedFunction fn = fn_or_error.extract_value();
- ParticleFunction particle_fn(fn);
PointerRNA rna = vnode->rna();
char name[65];
@@ -158,7 +150,8 @@ static std::unique_ptr<Action> BUILD_ACTION_explode(BuildContext &ctx,
auto post_action = build_action(ctx, vnode->output(0), trigger);
if (ctx.type_name_exists(name)) {
- return std::unique_ptr<Action>(new ExplodeAction(name, particle_fn, std::move(post_action)));
+ return std::unique_ptr<Action>(
+ new ExplodeAction(name, std::move(compute_inputs_fn), std::move(post_action)));
}
else {
return post_action;
@@ -167,22 +160,15 @@ static std::unique_ptr<Action> BUILD_ACTION_explode(BuildContext &ctx,
static std::unique_ptr<Action> BUILD_ACTION_condition(BuildContext &ctx,
VirtualSocket *start,
- VirtualSocket *trigger)
+ VirtualSocket *trigger,
+ ParticleFunction compute_inputs_fn)
{
VirtualNode *vnode = start->vnode();
- auto fn_or_error = create_function__action_inputs(vnode, ctx.data_graph);
- if (fn_or_error.is_error()) {
- return {};
- }
-
- SharedFunction fn = fn_or_error.extract_value();
- ParticleFunction particle_fn(fn);
-
auto true_action = build_action(ctx, vnode->output(0), trigger);
auto false_action = build_action(ctx, vnode->output(1), trigger);
- return std::unique_ptr<Action>(
- new ConditionAction(particle_fn, std::move(true_action), std::move(false_action)));
+ return std::unique_ptr<Action>(new ConditionAction(
+ std::move(compute_inputs_fn), std::move(true_action), std::move(false_action)));
}
BLI_LAZY_INIT_STATIC(StringMap<ActionFromNodeCallback>, get_action_builders)
@@ -213,10 +199,17 @@ static std::unique_ptr<Action> build_action(BuildContext &ctx,
}
BLI_assert(start->is_input());
- StringRef idname = start->vnode()->idname();
+ VirtualNode *vnode = start->vnode();
+
+ auto fn_or_error = create_function__action_inputs(vnode, ctx.data_graph);
+ if (fn_or_error.is_error()) {
+ return std::unique_ptr<Action>(new NoneAction());
+ }
+ StringRef idname = start->vnode()->idname();
auto builders = get_action_builders();
- return builders.lookup(idname)(ctx, start, trigger);
+ return builders.lookup(idname)(
+ ctx, start, trigger, ParticleFunction(fn_or_error.extract_value()));
}
static std::unique_ptr<Action> build_action_for_trigger(BuildContext &ctx, VirtualSocket *start)
More information about the Bf-blender-cvs
mailing list