Commit: 872ee8bbe04fa9099582ce8e7cacf8b42a73d639
Author: Jacques Lucke
Date:   Tue Sep 17 12:32:44 2019 +0200
Branches: functions
https://developer.blender.org/rB872ee8bbe04fa9099582ce8e7cacf8b42a73d639

add some node mockups

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

M       release/scripts/startup/nodes/base.py
A       release/scripts/startup/nodes/bparticle_nodes/mockups.py
M       release/scripts/startup/nodes/search.py
M       release/scripts/startup/nodes/tree_panel.py

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

diff --git a/release/scripts/startup/nodes/base.py 
b/release/scripts/startup/nodes/base.py
index 630841e5078..e7d7491fdcf 100644
--- a/release/scripts/startup/nodes/base.py
+++ b/release/scripts/startup/nodes/base.py
@@ -5,6 +5,11 @@ import itertools
 from collections import defaultdict
 
 class BaseTree:
+    show_mockups: BoolProperty(
+        name="Show Mockups",
+        default=False,
+    )
+
     def new_link(self, a, b):
         if a.is_output:
             self.links.new(a, b)
diff --git a/release/scripts/startup/nodes/bparticle_nodes/mockups.py 
b/release/scripts/startup/nodes/bparticle_nodes/mockups.py
new file mode 100644
index 00000000000..e168f2edfb4
--- /dev/null
+++ b/release/scripts/startup/nodes/bparticle_nodes/mockups.py
@@ -0,0 +1,113 @@
+import bpy
+from bpy.props import *
+from .. base import BParticlesNode
+from .. node_builder import NodeBuilder
+
+
+class ParticleMeshDistanceNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_ParticleSurfaceDistanceNode"
+    bl_label = "Mockup - Particle Surface Distance"
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("object", "Object", "Object")
+        builder.fixed_output("distance", "Distance", "Float")
+        builder.fixed_output("is_inside", "Is Inside", "Boolean")
+
+
+class AddToGroupNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_AddToGroupNode"
+    bl_label = "Mockup - Add to Group"
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("group_name", "Group", "Text")
+        builder.execute_output("execute", "Execute")
+
+
+class RemoveFromGroupNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_RemoveFromGroupNode"
+    bl_label = "Mockup - Remove from Group"
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("group_name", "Group", "Text")
+        builder.execute_output("execute", "Execute")
+
+
+class IsInGroupNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_IsInGroupNode"
+    bl_label = "Mockup - Is in Group"
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("group_name", "Group", "Text")
+        builder.fixed_output("is_in_group", "Is in Group", "Boolean")
+
+
+class DerivedAttributeNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_DerivedAttributeNode"
+    bl_label = "Mockup - Derived Attribute"
+
+    predefined_attributes = {
+        "Position" : "Vector",
+        "Velocity" : "Vector",
+        "Color" : "Color",
+        "Size" : "Float",
+    }
+
+    attribute: EnumProperty(
+        name="Attribute",
+        items=[(name, name, "") for name in predefined_attributes.keys()] + 
[("Custom", "Custom", "")],
+        update=BParticlesNode.sync_tree,
+    )
+
+    attribute_type: EnumProperty(
+        name="Attribute Type",
+        items=[
+            ("Vector", "Vector", ""),
+            ("Float", "Float", ""),
+            ("Color", "Color", ""),
+        ],
+        update=BParticlesNode.sync_tree,
+    )
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("is_active", "Is Active", "Boolean")
+        if self.attribute == "Custom":
+            builder.fixed_input("name", "Attribute Name", "Text")
+            builder.fixed_input("value", "Value", self.attribute_type)
+        else:
+            builder.fixed_input("value", "Value", 
self.predefined_attributes[self.attribute])
+        builder.influences_output("influence", "Influence")
+
+    def draw(self, layout):
+        layout.prop(self, "attribute", text="")
+        if self.attribute == "Custom":
+            layout.prop(self, "attribute_type", text="")
+
+
+class SetAgeLimitNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_SetAgeLimitNode"
+    bl_label = "Mockup - Set Age Limit"
+
+    def declaration(self, builder: NodeBuilder):
+        builder.fixed_input("lifetime", "Lifetime (seconds)", "Float", 
default=3)
+        builder.fixed_input("variation", "Variation", "Float", default=0)
+        builder.execute_output("execute", "Execute")
+
+
+class AgeLimitReachedNode(bpy.types.Node, BParticlesNode):
+    bl_idname = "bp_AgeLimitReachedNode"
+    bl_label = "Mockup - Age Limit Reached"
+
+    kill: BoolProperty(
+        name="Kill",
+        default=True,
+        description="Kill the particle when its age limit is reached",
+    )
+
+    execute__prop: NodeBuilder.ExecuteInputProperty()
+
+    def declaration(self, builder: NodeBuilder):
+        builder.execute_input("execute", "Execute", "execute__prop")
+        builder.influences_output("event", "Event")
+
+    def draw(self, layout):
+        layout.prop(self, "kill")
diff --git a/release/scripts/startup/nodes/search.py 
b/release/scripts/startup/nodes/search.py
index a57756e38b7..b7046de9f27 100644
--- a/release/scripts/startup/nodes/search.py
+++ b/release/scripts/startup/nodes/search.py
@@ -11,7 +11,10 @@ class NodeSearch(bpy.types.Operator):
 
     def get_search_items(self, context):
         items = []
+        tree = context.space_data.edit_tree
         for node_cls in BaseNode.iter_final_subclasses():
+            if node_cls.bl_label.startswith("Mockup") and not 
tree.show_mockups:
+                continue
             for search_term, settings in node_cls.get_search_terms():
                 item = encode_search_item(node_cls.bl_idname, search_term, 
settings)
                 items.append(item)
diff --git a/release/scripts/startup/nodes/tree_panel.py 
b/release/scripts/startup/nodes/tree_panel.py
index 2dd622238f3..d85b5294e27 100644
--- a/release/scripts/startup/nodes/tree_panel.py
+++ b/release/scripts/startup/nodes/tree_panel.py
@@ -1,15 +1,18 @@
 import bpy
 from . ui import NodeSidebarPanel
-from . function_tree import FunctionTree
+from . base import BaseTree
 
 class TreePanel(bpy.types.Panel, NodeSidebarPanel):
     bl_idname = "FN_PT_tree_panel"
-    bl_label = "Functions Tree"
+    bl_label = "Tree"
 
     @classmethod
     def poll(self, context):
-        try: return isinstance(context.space_data.edit_tree, FunctionTree)
+        try: return isinstance(context.space_data.edit_tree, BaseTree)
         except: return False
 
     def draw(self, context):
         layout = self.layout
+
+        tree = context.space_data.edit_tree
+        layout.prop(tree, "show_mockups")

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

Reply via email to