bool LinkableValueNode::set_link(int i,ValueNode::Handle x) { ValueNode::Handle previous(get_link(i)); if(set_link_vfunc(i,x)) { // Fix 2412072: remove the previous link from the parent_set unless one of the other links is also // using it when we convert a value to 'switch', both 'on' and 'off' are linked to the same valuenode // if we then disconnect one of the two, the one we disconnect is set to be a new valuenode_const // and the previously shared value is removed from the parent set even though the other is still // using it if(previous) { int size = link_count(), index; for (index=0; index < size; ++index) { if (i == index) continue; if (get_link(index) == previous) break; } if (index == size) remove_child(previous.get()); } add_child(x.get()); if(!x->is_exported() && get_parent_canvas()) { x->set_parent_canvas(get_parent_canvas()); } changed(); return true; } return false; }
void ValueNode_Random::randomize_seed() { int i = get_link_index_from_name("seed"); ValueNode::Handle link = get_link_vfunc(i); if(!link->is_exported() && link->get_name() == "constant") { int seed = time(NULL) + rand(); if (seed < 0) seed = -seed; random.set_seed(seed); set_link(i, ValueNode_Const::create(seed)); } }