コード例 #1
0
String VisualScriptYieldSignal::get_text() const {

	if (call_mode == CALL_MODE_SELF)
		return "  " + String(signal) + "()";
	else
		return "  " + _get_base_type() + "." + String(signal) + "()";
}
コード例 #2
0
int VisualScriptYieldSignal::get_output_value_port_count() const {

	MethodInfo sr;

	if (!ClassDB::get_signal(_get_base_type(), signal, &sr))
		return 0;

	return sr.arguments.size();
}
コード例 #3
0
PropertyInfo VisualScriptYieldSignal::get_output_value_port_info(int p_idx) const {

	MethodInfo sr;

	if (!ClassDB::get_signal(_get_base_type(), signal, &sr))
		return PropertyInfo(); //no signal
	ERR_FAIL_INDEX_V(p_idx, sr.arguments.size(), PropertyInfo());
	return sr.arguments[p_idx];
}
コード例 #4
0
void VisualScriptYieldSignal::_validate_property(PropertyInfo& property) const {

	if (property.name=="signal/base_type") {
		if (call_mode!=CALL_MODE_INSTANCE) {
			property.usage=PROPERTY_USAGE_NOEDITOR;
		}
	}


	if (property.name=="signal/node_path") {
		if (call_mode!=CALL_MODE_NODE_PATH) {
			property.usage=0;
		} else {

			Node *bnode = _get_base_node();
			if (bnode) {
				property.hint_string=bnode->get_path(); //convert to loong string
			} else {

			}
		}
	}

	if (property.name=="signal/signal") {
		property.hint=PROPERTY_HINT_ENUM;


		List<MethodInfo> methods;

		ObjectTypeDB::get_signal_list(_get_base_type(),&methods);

		List<String> mstring;
		for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
			if (E->get().name.begins_with("_"))
				continue;
			mstring.push_back(E->get().name.get_slice(":",0));
		}

		mstring.sort();

		String ml;
		for (List<String>::Element *E=mstring.front();E;E=E->next()) {

			if (ml!=String())
				ml+=",";
			ml+=E->get();
		}

		property.hint_string=ml;
	}


}