[Bf-blender-cvs] [05d742427f0] functions: cleanup action builders
Jacques Lucke
noreply at git.blender.org
Thu Jul 11 17:15:45 CEST 2019
Commit: 05d742427f05f816c1baa123da6a3dbabeacc53a
Author: Jacques Lucke
Date: Thu Jul 11 15:39:06 2019 +0200
Branches: functions
https://developer.blender.org/rB05d742427f05f816c1baa123da6a3dbabeacc53a
cleanup action builders
===================================================================
M source/blender/simulations/bparticles/inserters.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 5f13a83c906..09f462227f9 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -103,8 +103,11 @@ static SharedFunction create_function_for_data_inputs(bNode *bnode,
}
static std::unique_ptr<Action> build_action(BuildContext &ctx, SocketWithNode start);
+using ActionFromNodeCallback =
+ std::function<std::unique_ptr<Action>(BuildContext &ctx, bNode *bnode)>;
+using ActionFromNodeCallbackMap = SmallMap<std::string, ActionFromNodeCallback>;
-static std::unique_ptr<Action> BUILD_ACTION_kill()
+static std::unique_ptr<Action> BUILD_ACTION_kill(BuildContext &UNUSED(ctx), bNode *UNUSED(bnode))
{
return ACTION_kill();
}
@@ -155,6 +158,16 @@ static std::unique_ptr<Action> BUILD_ACTION_condition(BuildContext &ctx, bNode *
return ACTION_condition(particle_fn, std::move(true_action), std::move(false_action));
}
+BLI_LAZY_INIT_STATIC(ActionFromNodeCallbackMap, get_action_builders)
+{
+ ActionFromNodeCallbackMap map;
+ map.add_new("bp_KillParticleNode", BUILD_ACTION_kill);
+ map.add_new("bp_ChangeParticleDirectionNode", BUILD_ACTION_change_direction);
+ map.add_new("bp_ExplodeParticleNode", BUILD_ACTION_explode);
+ map.add_new("bp_ParticleConditionNode", BUILD_ACTION_condition);
+ return map;
+}
+
static std::unique_ptr<Action> build_action(BuildContext &ctx, SocketWithNode start)
{
if (start.socket->in_out == SOCK_OUT) {
@@ -173,21 +186,8 @@ static std::unique_ptr<Action> build_action(BuildContext &ctx, SocketWithNode st
BLI_assert(start.socket->in_out == SOCK_IN);
bNode *bnode = start.node;
- if (STREQ(bnode->idname, "bp_KillParticleNode")) {
- return BUILD_ACTION_kill();
- }
- else if (STREQ(bnode->idname, "bp_ChangeParticleDirectionNode")) {
- return BUILD_ACTION_change_direction(ctx, bnode);
- }
- else if (STREQ(bnode->idname, "bp_ExplodeParticleNode")) {
- return BUILD_ACTION_explode(ctx, bnode);
- }
- else if (STREQ(bnode->idname, "bp_ParticleConditionNode")) {
- return BUILD_ACTION_condition(ctx, bnode);
- }
- else {
- return nullptr;
- }
+ auto builders = get_action_builders();
+ return builders.lookup(bnode->idname)(ctx, bnode);
}
static std::unique_ptr<Force> BUILD_FORCE_gravity(BuildContext &ctx, bNode *bnode)
More information about the Bf-blender-cvs
mailing list