void Shader::_set(const String& p_name, const Variant& p_value) { if (p_name.begins_with("nodes/")) { int idx=p_name.get_slice("/",1).to_int(); Dictionary data=p_value; ERR_FAIL_COND(!data.has("type")); String type=data["type"]; VS::ShaderNodeType node_type=VS::NODE_TYPE_MAX; for(int i=0;i<NODE_TYPE_MAX;i++) { if (type==VisualServer::shader_node_get_type_info((VS::ShaderNodeType)i).name) node_type=(VS::ShaderNodeType)i; } ERR_FAIL_COND(node_type==VS::NODE_TYPE_MAX); node_add( (NodeType)node_type, idx ); if (data.has("param")) node_set_param(idx,data["param"]); if (data.has("pos")) node_set_pos(idx,data["pos"]); } if (p_name.begins_with("conns/")) { Dictionary data=p_value; ERR_FAIL_COND( !data.has("src_id") ); ERR_FAIL_COND( !data.has("src_slot") ); ERR_FAIL_COND( !data.has("dst_id") ); ERR_FAIL_COND( !data.has("dst_slot") ); connect(data["src_id"],data["src_slot"],data["dst_id"],data["dst_slot"]); } }
bool AnimationTreePlayer::_set(const StringName& p_name, const Variant& p_value) { if (String(p_name)=="base_path") { set_base_path(p_value); return true; } if (String(p_name)=="master_player") { set_master_player(p_value); return true; } if(String(p_name) == SceneStringNames::get_singleton()->playback_active) { set_active(p_value); return true; } if (String(p_name)!="data") return false; Dictionary data=p_value; Array nodes=data.get_valid("nodes"); for(int i=0;i<nodes.size();i++) { Dictionary node = nodes[i]; StringName id = node.get_valid("id"); Point2 pos = node.get_valid("pos"); NodeType nt=NODE_MAX; String type = node.get_valid("type"); if (type=="output") nt=NODE_OUTPUT; else if (type=="animation") nt=NODE_ANIMATION; else if (type=="oneshot") nt=NODE_ONESHOT; else if (type=="mix") nt=NODE_MIX; else if (type=="blend2") nt=NODE_BLEND2; else if (type=="blend3") nt=NODE_BLEND3; else if (type=="blend4") nt=NODE_BLEND4; else if (type=="timescale") nt=NODE_TIMESCALE; else if (type=="timeseek") nt=NODE_TIMESEEK; else if (type=="transition") nt=NODE_TRANSITION; ERR_FAIL_COND_V(nt==NODE_MAX,false); if (nt!=NODE_OUTPUT) add_node(nt,id); node_set_pos(id,pos); switch(nt) { case NODE_OUTPUT: { } break; case NODE_ANIMATION: { if (node.has("from")) animation_node_set_master_animation(id,node.get_valid("from")); else animation_node_set_animation(id,node.get_valid("animation")); } break; case NODE_ONESHOT: { oneshot_node_set_fadein_time(id,node.get_valid("fade_in")); oneshot_node_set_fadeout_time(id,node.get_valid("fade_out")); oneshot_node_set_mix_mode(id,node.get_valid("mix")); oneshot_node_set_autorestart(id,node.get_valid("autorestart")); oneshot_node_set_autorestart_delay(id,node.get_valid("autorestart_delay")); oneshot_node_set_autorestart_random_delay(id,node.get_valid("autorestart_random_delay")); Array filters= node.get_valid("filter"); for(int i=0;i<filters.size();i++) { oneshot_node_set_filter_path(id,filters[i],true); } } break; case NODE_MIX: { mix_node_set_amount(id,node.get_valid("mix")); } break; case NODE_BLEND2: { blend2_node_set_amount(id,node.get_valid("blend")); Array filters= node.get_valid("filter"); for(int i=0;i<filters.size();i++) { blend2_node_set_filter_path(id,filters[i],true); } } break; case NODE_BLEND3: { blend3_node_set_amount(id,node.get_valid("blend")); } break; case NODE_BLEND4: { blend4_node_set_amount(id,node.get_valid("blend")); } break; case NODE_TIMESCALE: { timescale_node_set_scale(id,node.get_valid("scale")); } break; case NODE_TIMESEEK: { } break; case NODE_TRANSITION: { transition_node_set_xfade_time(id,node.get_valid("xfade")); Array transitions = node.get_valid("transitions"); transition_node_set_input_count(id,transitions.size()); for(int x=0;x<transitions.size();x++) { Dictionary d =transitions[x]; bool aa = d.get_valid("auto_advance"); transition_node_set_input_auto_advance(id,x,aa); } } break; default: {}; } } Array connections = data.get_valid("connections"); ERR_FAIL_COND_V(connections.size()%3,false); int cc=connections.size()/3; for(int i=0;i<cc;i++) { StringName src = connections[i*3+0]; StringName dst = connections[i*3+1]; int dst_in = connections[i*3+2]; connect(src,dst,dst_in); } set_active(data.get_valid("active")); set_master_player(data.get_valid("master")); return true; }