Esempio n. 1
0
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"]);
	}

}
Esempio n. 2
0
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;

}