Nodes: Add emitters, events, forces and control flow socket types
authorJacques Lucke <jacques@blender.org>
Mon, 20 Apr 2020 11:41:21 +0000 (13:41 +0200)
committerJacques Lucke <jacques@blender.org>
Mon, 20 Apr 2020 11:41:21 +0000 (13:41 +0200)
These socket types will be necessary for particle nodes.
The way these sockets are drawn can be changed separately.

Reviewers: brecht

Differential Revision: https://developer.blender.org/D7349

source/blender/blenkernel/intern/lib_query.c
source/blender/blenkernel/intern/node.c
source/blender/blenloader/intern/readfile.c
source/blender/blenloader/intern/writefile.c
source/blender/editors/space_node/drawnode.c
source/blender/makesdna/DNA_node_types.h
source/blender/makesrna/intern/rna_nodetree.c
source/blender/nodes/intern/node_socket.c

index 804d7f2b4d652d005877f283fbb6c729faa34ea1..bddf8c0f81913235e46823724b9973d91cfb63ad 100644 (file)
@@ -229,6 +229,10 @@ static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 
index e3eb25297df57a765552ac42b49f5c03ee7aa821..4af87a3f5007abf20403d4c7614c02e58eaea2b2 100644 (file)
@@ -770,6 +770,10 @@ static void socket_id_user_increment(bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 }
@@ -796,6 +800,10 @@ static void socket_id_user_decrement(bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 }
@@ -919,6 +927,14 @@ const char *nodeStaticSocketType(int type, int subtype)
       return "NodeSocketObject";
     case SOCK_IMAGE:
       return "NodeSocketImage";
+    case SOCK_EMITTERS:
+      return "NodeSocketEmitters";
+    case SOCK_EVENTS:
+      return "NodeSocketEvents";
+    case SOCK_FORCES:
+      return "NodeSocketForces";
+    case SOCK_CONTROL_FLOW:
+      return "NodeSocketControlFlow";
   }
   return NULL;
 }
@@ -984,6 +1000,14 @@ const char *nodeStaticSocketInterfaceType(int type, int subtype)
       return "NodeSocketInterfaceObject";
     case SOCK_IMAGE:
       return "NodeSocketInterfaceImage";
+    case SOCK_EMITTERS:
+      return "NodeSocketInterfaceEmitters";
+    case SOCK_EVENTS:
+      return "NodeSocketInterfaceEvents";
+    case SOCK_FORCES:
+      return "NodeSocketInterfaceForces";
+    case SOCK_CONTROL_FLOW:
+      return "NodeSocketInterfaceControlFlow";
   }
   return NULL;
 }
index e4977718103893b6f78fab9faf03fed5ba9bddbc..e644f932f3522fc60e74bfa9dd76a955000f1a8c 100644 (file)
@@ -3626,6 +3626,10 @@ static void lib_link_node_socket(FileData *fd, Library *lib, bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       break;
   }
 }
@@ -11012,6 +11016,10 @@ static void expand_node_socket(FileData *fd, Main *mainvar, bNodeSocket *sock)
       case __SOCK_MESH:
       case SOCK_CUSTOM:
       case SOCK_SHADER:
+      case SOCK_EMITTERS:
+      case SOCK_EVENTS:
+      case SOCK_FORCES:
+      case SOCK_CONTROL_FLOW:
         break;
     }
   }
index 258b0b5c3269dda632a942c129cbfdd5e96e0731..a613603fff9e9064b657304cbef8bc29625a7f51 100644 (file)
@@ -1000,6 +1000,10 @@ static void write_node_socket_default_value(WriteData *wd, bNodeSocket *sock)
     case __SOCK_MESH:
     case SOCK_CUSTOM:
     case SOCK_SHADER:
+    case SOCK_EMITTERS:
+    case SOCK_EVENTS:
+    case SOCK_FORCES:
+    case SOCK_CONTROL_FLOW:
       BLI_assert(false);
       break;
   }
index 202e2f2940f059fbdb944858f1b01f1de9210105..24b0bfd831f7105c0f1cf431c8113b38e7384254 100644 (file)
@@ -3279,6 +3279,10 @@ static const float std_node_socket_colors[][4] = {
     {0.39, 0.39, 0.39, 1.0}, /* SOCK_STRING */
     {0.40, 0.10, 0.10, 1.0}, /* SOCK_OBJECT */
     {0.10, 0.40, 0.10, 1.0}, /* SOCK_IMAGE */
+    {0.80, 0.80, 0.20, 1.0}, /* SOCK_EMITTERS */
+    {0.80, 0.20, 0.80, 1.0}, /* SOCK_EVENTS */
+    {0.20, 0.80, 0.80, 1.0}, /* SOCK_FORCES */
+    {0.30, 0.30, 0.30, 1.0}, /* SOCK_CONTROL_FLOW */
 };
 
 /* common color callbacks for standard types */
index bf4d3d2e88649e2a009a6d8e08b9f6c5db9a70d2..d8c8b5a8a29a224b44ac4fcabca83914367a7c4e 100644 (file)
@@ -156,6 +156,10 @@ typedef enum eNodeSocketDatatype {
   SOCK_STRING = 7,
   SOCK_OBJECT = 8,
   SOCK_IMAGE = 9,
+  SOCK_EMITTERS = 10,
+  SOCK_EVENTS = 11,
+  SOCK_FORCES = 12,
+  SOCK_CONTROL_FLOW = 13,
 } eNodeSocketDatatype;
 
 /* socket shape */
index 9832b126cb7e57dd278ceeb855c3b8a38438a493..51bcb608db02463ea7c359e9fa981c44bc1ca0c8 100644 (file)
@@ -83,6 +83,10 @@ static const EnumPropertyItem node_socket_type_items[] = {
     {SOCK_SHADER, "SHADER", 0, "Shader", ""},
     {SOCK_OBJECT, "OBJECT", 0, "Object", ""},
     {SOCK_IMAGE, "IMAGE", 0, "Image", ""},
+    {SOCK_EMITTERS, "EMITTERS", 0, "Emitters", ""},
+    {SOCK_EVENTS, "EVENTS", 0, "Events", ""},
+    {SOCK_FORCES, "FORCES", 0, "Forces", ""},
+    {SOCK_CONTROL_FLOW, "CONTROL_FLOW", 0, "Control Flow", ""},
     {0, NULL, 0, NULL, NULL},
 };
 
@@ -8608,6 +8612,36 @@ static void rna_def_node_socket_image(BlenderRNA *brna,
   RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
 }
 
+static void rna_def_node_socket_effector(BlenderRNA *brna,
+                                         const char *identifier,
+                                         const char *interface_idname)
+{
+  StructRNA *srna;
+
+  srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+
+  srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+}
+
+static void rna_def_node_socket_control_flow(BlenderRNA *brna,
+                                             const char *identifier,
+                                             const char *interface_idname)
+{
+  StructRNA *srna;
+
+  srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+
+  srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
+  RNA_def_struct_ui_text(srna, "", "");
+  RNA_def_struct_sdna(srna, "bNodeSocket");
+}
+
 static void rna_def_node_socket_standard_types(BlenderRNA *brna)
 {
   /* XXX Workaround: Registered functions are not exposed in python by bpy,
@@ -8746,6 +8780,13 @@ static void rna_def_node_socket_standard_types(BlenderRNA *brna)
   rna_def_node_socket_object(brna, "NodeSocketObject", "NodeSocketInterfaceObject");
 
   rna_def_node_socket_image(brna, "NodeSocketImage", "NodeSocketInterfaceImage");
+
+  rna_def_node_socket_effector(brna, "NodeSocketEmitters", "NodeSocketInterfaceEmitters");
+  rna_def_node_socket_effector(brna, "NodeSocketEvents", "NodeSocketInterfaceEvents");
+  rna_def_node_socket_effector(brna, "NodeSocketForces", "NodeSocketInterfaceForces");
+
+  rna_def_node_socket_control_flow(
+      brna, "NodeSocketControlFlow", "NodeSocketInterfaceControlFlow");
 }
 
 static void rna_def_internal_node(BlenderRNA *brna)
index 4433038acf903064945ac8912942524ea213ee82..668dd3829cc107fa3cc3d76cdb62c6ec5df7b2b1 100644 (file)
@@ -498,6 +498,19 @@ static bNodeSocketType *make_socket_type_virtual(void)
   return stype;
 }
 
+static bNodeSocketType *make_socket_type_effector(int type)
+{
+  bNodeSocketType *stype = make_standard_socket_type(type, PROP_NONE);
+  stype->input_link_limit = 0xFFF;
+  return stype;
+}
+
+static bNodeSocketType *make_socket_type_control_flow(int type)
+{
+  bNodeSocketType *stype = make_standard_socket_type(type, PROP_NONE);
+  return stype;
+}
+
 void register_standard_node_socket_types(void)
 {
   /* draw callbacks are set in drawnode.c to avoid bad-level calls */
@@ -534,5 +547,11 @@ void register_standard_node_socket_types(void)
 
   nodeRegisterSocketType(make_standard_socket_type(SOCK_IMAGE, PROP_NONE));
 
+  nodeRegisterSocketType(make_socket_type_effector(SOCK_EMITTERS));
+  nodeRegisterSocketType(make_socket_type_effector(SOCK_EVENTS));
+  nodeRegisterSocketType(make_socket_type_effector(SOCK_FORCES));
+
+  nodeRegisterSocketType(make_socket_type_control_flow(SOCK_CONTROL_FLOW));
+
   nodeRegisterSocketType(make_socket_type_virtual());
 }