diff --git a/source/blender/nodes/shader/nodes/node_shader_map_range.cc b/source/blender/nodes/shader/nodes/node_shader_map_range.cc index 9ba9a279c57..a487e07bd5a 100644 --- a/source/blender/nodes/shader/nodes/node_shader_map_range.cc +++ b/source/blender/nodes/shader/nodes/node_shader_map_range.cc @@ -66,24 +66,32 @@ static void node_shader_update_map_range(bNodeTree *ntree, bNode *node) const CustomDataType data_type = static_cast(storage.data_type); const int type = (data_type == CD_PROP_FLOAT) ? SOCK_FLOAT : SOCK_VECTOR; - LISTBASE_FOREACH (bNodeSocket *, socket, &node->inputs) { - nodeSetSocketAvailability(ntree, socket, socket->type == type); - } + Array new_input_availability(BLI_listbase_count(&node->inputs)); + Array new_output_availability(BLI_listbase_count(&node->outputs)); - LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) { - nodeSetSocketAvailability(ntree, socket, socket->type == type); + int index; + LISTBASE_FOREACH_INDEX (bNodeSocket *, socket, &node->inputs, index) { + new_input_availability[index] = socket->type == type; + } + LISTBASE_FOREACH_INDEX (bNodeSocket *, socket, &node->outputs, index) { + new_output_availability[index] = socket->type == type; } if (storage.interpolation_type != NODE_MAP_RANGE_STEPPED) { if (type == SOCK_FLOAT) { - bNodeSocket *sockSteps = (bNodeSocket *)BLI_findlink(&node->inputs, 5); - nodeSetSocketAvailability(ntree, sockSteps, false); + new_input_availability[5] = false; } else { - bNodeSocket *sockSteps = (bNodeSocket *)BLI_findlink(&node->inputs, 11); - nodeSetSocketAvailability(ntree, sockSteps, false); + new_input_availability[11] = false; } } + + LISTBASE_FOREACH_INDEX (bNodeSocket *, socket, &node->inputs, index) { + nodeSetSocketAvailability(ntree, socket, new_input_availability[index]); + } + LISTBASE_FOREACH_INDEX (bNodeSocket *, socket, &node->outputs, index) { + nodeSetSocketAvailability(ntree, socket, new_output_availability[index]); + } } static void node_shader_init_map_range(bNodeTree *UNUSED(ntree), bNode *node)