From ad8f208bdbcd9d3334c4d57d2e5554dfdb3a36d0 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 23 Aug 2016 19:29:07 -0300 Subject: Proper function/property selection in visual script editing for property. This one has an ordered list, built-in description, search, etc. --- modules/visual_script/visual_script_func_nodes.cpp | 662 ++------------------- 1 file changed, 59 insertions(+), 603 deletions(-) (limited to 'modules/visual_script/visual_script_func_nodes.cpp') diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp index 14bc0bc828..12bc395474 100644 --- a/modules/visual_script/visual_script_func_nodes.cpp +++ b/modules/visual_script/visual_script_func_nodes.cpp @@ -372,48 +372,30 @@ void VisualScriptFunctionCall::_validate_property(PropertyInfo& property) const } if (property.name=="function/function") { - property.hint=PROPERTY_HINT_ENUM; - - - List methods; if (call_mode==CALL_MODE_BASIC_TYPE) { - if (basic_type==Variant::NIL) { - property.usage=0; - return; //nothing for nil - } - Variant::CallError ce; - Variant v = Variant::construct(basic_type,NULL,0,ce); - v.get_method_list(&methods); - - - } else { - - StringName base = _get_base_type(); - ObjectTypeDB::get_method_list(base,&methods); - - - } - - List mstring; - for (List::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(); + property.hint=PROPERTY_HINT_METHOD_OF_VARIANT_TYPE; + property.hint_string=Variant::get_type_name(basic_type); - String ml; - for (List::Element *E=mstring.front();E;E=E->next()) { + } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) { + property.hint=PROPERTY_HINT_METHOD_OF_SCRIPT; + property.hint_string=itos(get_visual_script()->get_instance_ID()); + } else if (call_mode==CALL_MODE_INSTANCE) { + property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE; + property.hint_string=base_type; + } else if (call_mode==CALL_MODE_NODE_PATH) { + Node *node = _get_base_node(); + if (node) { + property.hint=PROPERTY_HINT_METHOD_OF_INSTANCE; + property.hint_string=itos(node->get_instance_ID()); + } else { + property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE; + property.hint_string=get_base_type(); + } - if (ml!=String()) - ml+=","; - ml+=E->get(); } - property.hint_string=ml; } if (property.name=="function/use_default_args") { @@ -472,7 +454,7 @@ void VisualScriptFunctionCall::_bind_methods() { bt+=Variant::get_type_name(Variant::Type(i)); } - ADD_PROPERTY(PropertyInfo(Variant::INT,"function/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"function/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type"),_SCS("set_call_mode"),_SCS("get_call_mode")); ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); ADD_PROPERTY(PropertyInfo(Variant::INT,"function/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type")); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"function/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path")); @@ -577,7 +559,7 @@ VisualScriptNodeInstance* VisualScriptFunctionCall::instance(VisualScriptInstanc } VisualScriptFunctionCall::VisualScriptFunctionCall() { - call_mode=CALL_MODE_INSTANCE; + call_mode=CALL_MODE_SELF; basic_type=Variant::NIL; use_default_args=0; base_type="Object"; @@ -978,61 +960,30 @@ void VisualScriptPropertySet::_validate_property(PropertyInfo& property) const { } if (property.name=="property/property") { - property.hint=PROPERTY_HINT_ENUM; - - - List pinfo; - if (call_mode==CALL_MODE_BASIC_TYPE) { - Variant::CallError ce; - Variant v; - if (basic_type==Variant::INPUT_EVENT) { - InputEvent ev; - ev.type=event_type; - v=ev; - } else { - v = Variant::construct(basic_type,NULL,0,ce); - } - v.get_property_list(&pinfo); - } else if (call_mode==CALL_MODE_NODE_PATH) { + property.hint=PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE; + property.hint_string=Variant::get_type_name(basic_type); - Node *n = _get_base_node(); - if (n) { - n->get_property_list(&pinfo); + } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) { + property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT; + property.hint_string=itos(get_visual_script()->get_instance_ID()); + } else if (call_mode==CALL_MODE_INSTANCE) { + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=base_type; + } else if (call_mode==CALL_MODE_NODE_PATH) { + Node *node = _get_base_node(); + if (node) { + property.hint=PROPERTY_HINT_PROPERTY_OF_INSTANCE; + property.hint_string=itos(node->get_instance_ID()); } else { - ObjectTypeDB::get_property_list(_get_base_type(),&pinfo); + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=get_base_type(); } - } else { - - ObjectTypeDB::get_property_list(_get_base_type(),&pinfo); - - } - - List mstring; - - for (List::Element *E=pinfo.front();E;E=E->next()) { - - if (E->get().usage&PROPERTY_USAGE_EDITOR) { - mstring.push_back(E->get().name); - } } - String ml; - for (List::Element *E=mstring.front();E;E=E->next()) { - - if (ml!=String()) - ml+=","; - ml+=E->get(); - } - - if (ml==String()) { - property.usage=PROPERTY_USAGE_NOEDITOR; //do not show for editing if empty - } else { - property.hint_string=ml; - } } if (property.name=="value/builtin") { @@ -1117,7 +1068,7 @@ void VisualScriptPropertySet::_bind_methods() { } - ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type"),_SCS("set_call_mode"),_SCS("get_call_mode")); ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); ADD_PROPERTY(PropertyInfo(Variant::INT,"property/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type")); ADD_PROPERTY(PropertyInfo(Variant::INT,"property/event_type",PROPERTY_HINT_ENUM,et),_SCS("set_event_type"),_SCS("get_event_type")); @@ -1250,7 +1201,7 @@ VisualScriptNodeInstance* VisualScriptPropertySet::instance(VisualScriptInstance VisualScriptPropertySet::VisualScriptPropertySet() { - call_mode=CALL_MODE_INSTANCE; + call_mode=CALL_MODE_SELF; base_type="Object"; basic_type=Variant::NIL; event_type=InputEvent::NONE; @@ -1586,55 +1537,28 @@ void VisualScriptPropertyGet::_validate_property(PropertyInfo& property) const { } if (property.name=="property/property") { - property.hint=PROPERTY_HINT_ENUM; - - - List pinfo; if (call_mode==CALL_MODE_BASIC_TYPE) { - Variant::CallError ce; - Variant v; - if (basic_type==Variant::INPUT_EVENT) { - InputEvent ev; - ev.type=event_type; - v=ev; - } else { - v = Variant::construct(basic_type,NULL,0,ce); - } - v.get_property_list(&pinfo); - } else if (call_mode==CALL_MODE_NODE_PATH) { + property.hint=PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE; + property.hint_string=Variant::get_type_name(basic_type); - Node *n = _get_base_node(); - if (n) { - n->get_property_list(&pinfo); + } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) { + property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT; + property.hint_string=itos(get_visual_script()->get_instance_ID()); + } else if (call_mode==CALL_MODE_INSTANCE) { + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=base_type; + } else if (call_mode==CALL_MODE_NODE_PATH) { + Node *node = _get_base_node(); + if (node) { + property.hint=PROPERTY_HINT_PROPERTY_OF_INSTANCE; + property.hint_string=itos(node->get_instance_ID()); } else { - ObjectTypeDB::get_property_list(_get_base_type(),&pinfo); + property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE; + property.hint_string=get_base_type(); } - } else { - ObjectTypeDB::get_property_list(_get_base_type(),&pinfo); - } - - List mstring; - for (List::Element *E=pinfo.front();E;E=E->next()) { - - if (E->get().usage&PROPERTY_USAGE_EDITOR) - mstring.push_back(E->get().name); - } - - String ml; - for (List::Element *E=mstring.front();E;E=E->next()) { - - if (ml!=String()) - ml+=","; - ml+=E->get(); - } - - if (ml==String()) { - property.usage=PROPERTY_USAGE_NOEDITOR; //do not show for editing if empty - } else { - property.hint_string=ml; } } @@ -1680,7 +1604,7 @@ void VisualScriptPropertyGet::_bind_methods() { } - ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode")); + ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance"),_SCS("set_call_mode"),_SCS("get_call_mode")); ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type")); ADD_PROPERTY(PropertyInfo(Variant::INT,"property/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type")); ADD_PROPERTY(PropertyInfo(Variant::INT,"property/event_type",PROPERTY_HINT_ENUM,et),_SCS("set_event_type"),_SCS("get_event_type")); @@ -1797,7 +1721,7 @@ VisualScriptNodeInstance* VisualScriptPropertyGet::instance(VisualScriptInstance VisualScriptPropertyGet::VisualScriptPropertyGet() { - call_mode=CALL_MODE_INSTANCE; + call_mode=CALL_MODE_SELF; base_type="Object"; basic_type=Variant::NIL; event_type=InputEvent::NONE; @@ -1814,463 +1738,6 @@ static Ref create_property_get_node(const String& p_name) { } -////////////////////////////////////////// -////////////////SCRIPT CALL////////////////////// -////////////////////////////////////////// - -int VisualScriptScriptCall::get_output_sequence_port_count() const { - - return 1; -} - -bool VisualScriptScriptCall::has_input_sequence_port() const{ - - return true; -} - -Node *VisualScriptScriptCall::_get_base_node() const { - -#ifdef TOOLS_ENABLED - Ref