Exemple #1
0
void Node::_duplicate_signals(const Node* p_original,Node* p_copy) const {

	if (this!=p_original && get_owner()!=p_original)
		return;

	List<Connection> conns;
	get_all_signal_connections(&conns);

	for (List<Connection>::Element *E=conns.front();E;E=E->next()) {

		if (E->get().flags&CONNECT_PERSIST) {
			//user connected
			NodePath p = p_original->get_path_to(this);
			Node *copy = p_copy->get_node(p);

			Node *target = E->get().target->cast_to<Node>();
			if (!target)
				continue;
			NodePath ptarget = p_original->get_path_to(target);
			Node *copytarget = p_copy->get_node(ptarget);

			if (copy && copytarget) {
				copy->connect(E->get().signal,copytarget,E->get().method,E->get().binds,CONNECT_PERSIST);
			}
		}
	}

	for(int i=0;i<get_child_count();i++) {
		get_child(i)->_duplicate_signals(p_original,p_copy);
	}

}
Exemple #2
0
Array Object::_get_signal_connection_list(const String& p_signal) const{

	List<Connection> conns;
	get_all_signal_connections(&conns);

	Array ret;

	for (List<Connection>::Element *E=conns.front();E;E=E->next()) {

		Connection &c=E->get();
		if (c.signal == p_signal){
			Dictionary rc;
			rc["signal"]=c.signal;
			rc["method"]=c.method;
			rc["source"]=c.source;
			rc["target"]=c.target;
			rc["binds"]=c.binds;
			rc["flags"]=c.flags;
			ret.push_back(rc);
		}
	}

	return ret;

}