Commit: d51f6b010df61c5f8c753536ce54ce51ef9e8817
Author: Jacques Lucke
Date:   Mon Sep 16 16:56:00 2019 +0200
Branches: functions
https://developer.blender.org/rBd51f6b010df61c5f8c753536ce54ce51ef9e8817

add execute input to initial grid emitter

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

M       release/scripts/startup/nodes/bparticle_nodes/initial_grid_emitter.py
M       source/blender/simulations/bparticles/action_interface.hpp
M       source/blender/simulations/bparticles/emitters.cpp
M       source/blender/simulations/bparticles/emitters.hpp
M       source/blender/simulations/bparticles/node_frontend.cpp

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

diff --git 
a/release/scripts/startup/nodes/bparticle_nodes/initial_grid_emitter.py 
b/release/scripts/startup/nodes/bparticle_nodes/initial_grid_emitter.py
index afefa21ad37..66ef9680c9e 100644
--- a/release/scripts/startup/nodes/bparticle_nodes/initial_grid_emitter.py
+++ b/release/scripts/startup/nodes/bparticle_nodes/initial_grid_emitter.py
@@ -7,10 +7,13 @@ class InitialGridEmitterNode(bpy.types.Node, BParticlesNode):
     bl_idname = "bp_InitialGridEmitterNode"
     bl_label = "Initial Grid Emitter"
 
+    execute_on_birth__prop: NodeBuilder.ExecuteInputProperty()
+
     def declaration(self, builder: NodeBuilder):
         builder.fixed_input("amount_x", "Amount X", "Integer", default=50)
         builder.fixed_input("amount_y", "Amount Y", "Integer", default=50)
         builder.fixed_input("step_x", "Step X", "Float", default=0.2)
         builder.fixed_input("step_y", "Step Y", "Float", default=0.2)
         builder.fixed_input("size", "Size", "Float", default=0.01)
+        builder.execute_input("execute_on_birth", "Execute on Birth", 
"execute_on_birth__prop")
         builder.influences_output("emitter", "Emitter")
diff --git a/source/blender/simulations/bparticles/action_interface.hpp 
b/source/blender/simulations/bparticles/action_interface.hpp
index 3a7d616af7d..31f6674d39b 100644
--- a/source/blender/simulations/bparticles/action_interface.hpp
+++ b/source/blender/simulations/bparticles/action_interface.hpp
@@ -91,6 +91,8 @@ class Action {
   void execute_from_emitter(AttributesRefGroup &new_particles,
                             EmitterInterface &emitter_interface,
                             const BuildContextF &build_context);
+  void execute_from_emitter(AttributesRefGroup &new_particles,
+                            EmitterInterface &emitter_interface);
   void execute_from_event(EventExecuteInterface &event_interface,
                           ActionContext *action_context = nullptr);
   void execute_from_offset_handler(OffsetHandlerInterface 
&offset_handler_interface,
@@ -161,6 +163,15 @@ inline void 
Action::execute_from_emitter(AttributesRefGroup &new_particles,
   }
 }
 
+inline void Action::execute_from_emitter(AttributesRefGroup &new_particles,
+                                         EmitterInterface &emitter_interface)
+{
+  this->execute_from_emitter<EmptyActionContext>(
+      new_particles, emitter_interface, [](IndexRange UNUSED(range), void 
*dst) {
+        new (dst) EmptyActionContext();
+      });
+}
+
 inline void Action::execute_from_event(EventExecuteInterface &event_interface,
                                        ActionContext *action_context)
 {
diff --git a/source/blender/simulations/bparticles/emitters.cpp 
b/source/blender/simulations/bparticles/emitters.cpp
index b7f0a745653..588fc4342e4 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -335,6 +335,8 @@ void InitialGridEmitter::emit(EmitterInterface &interface)
     new_particles.set<float3>("Position", new_positions);
     new_particles.fill<float>("Birth Time", interface.time_span().start());
     new_particles.fill<float>("Size", m_size);
+
+    m_action->execute_from_emitter(new_particles, interface);
   }
 }
 
diff --git a/source/blender/simulations/bparticles/emitters.hpp 
b/source/blender/simulations/bparticles/emitters.hpp
index ee9bf562dbe..adb03f8d1c6 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -71,6 +71,7 @@ class InitialGridEmitter : public Emitter {
   float m_step_x;
   float m_step_y;
   float m_size;
+  Action *m_action;
 
  public:
   InitialGridEmitter(ArrayRef<std::string> systems_to_emit,
@@ -78,13 +79,15 @@ class InitialGridEmitter : public Emitter {
                      uint amount_y,
                      float step_x,
                      float step_y,
-                     float size)
+                     float size,
+                     Action *action)
       : m_systems_to_emit(systems_to_emit),
         m_amount_x(amount_x),
         m_amount_y(amount_y),
         m_step_x(step_x),
         m_step_y(step_y),
-        m_size(size)
+        m_size(size),
+        m_action(action)
   {
   }
 
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp 
b/source/blender/simulations/bparticles/node_frontend.cpp
index 5b8e66d4ed7..979750239b3 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -546,6 +546,8 @@ static void PARSE_initial_grid_emitter(InfluencesCollector 
&collector,
     return;
   }
 
+  Action *action = vtree_data.build_action_list(vnode, "Execute on Birth");
+
   ArrayRef<std::string> system_names = vtree_data.find_target_system_names(
       vnode->output(0, "Emitter"));
   Emitter *emitter = new InitialGridEmitter(std::move(system_names),
@@ -553,7 +555,8 @@ static void PARSE_initial_grid_emitter(InfluencesCollector 
&collector,
                                             std::max(0, inputs->get<int>(1, 
"Amount Y")),
                                             inputs->get<float>(2, "Step X"),
                                             inputs->get<float>(3, "Step Y"),
-                                            inputs->get<float>(4, "Size"));
+                                            inputs->get<float>(4, "Size"),
+                                            action);
   collector.m_emitters.append(emitter);
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to