String VisualScriptYieldSignal::get_text() const { if (call_mode == CALL_MODE_SELF) return " " + String(signal) + "()"; else return " " + _get_base_type() + "." + String(signal) + "()"; }
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(); }
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]; }
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; } }