diff options
| author | willnationsdev <willnationsdev@gmail.com> | 2019-08-01 14:13:40 -0500 | 
|---|---|---|
| committer | willnationsdev <willnationsdev@gmail.com> | 2019-08-01 14:13:40 -0500 | 
| commit | 88f79802f692c9de0fbef353c3aa7eff9ed85c6b (patch) | |
| tree | ac54e23a4f266d069b932f255f4f131143b6e266 | |
| parent | 3a6102a6f716904bb158819146e3fed7590b8106 (diff) | |
Expose Script reflection methods to scripting API.
| -rw-r--r-- | core/script_language.cpp | 52 | ||||
| -rw-r--r-- | core/script_language.h | 6 | 
2 files changed, 58 insertions, 0 deletions
diff --git a/core/script_language.cpp b/core/script_language.cpp index 97758ced66..ee8589d76a 100644 --- a/core/script_language.cpp +++ b/core/script_language.cpp @@ -50,6 +50,52 @@ void Script::_notification(int p_what) {  	}  } +Variant Script::_get_property_default_value(const StringName &p_property) { +	Variant ret; +	get_property_default_value(p_property, ret); +	return ret; +} + +Array Script::_get_script_property_list() { +	Array ret; +	List<PropertyInfo> list; +	get_script_property_list(&list); +	for (List<PropertyInfo>::Element *E = list.front(); E; E = E->next()) { +		ret.append(E->get().operator Dictionary()); +	} +	return ret; +} + +Array Script::_get_script_method_list() { +	Array ret; +	List<MethodInfo> list; +	get_script_method_list(&list); +	for (List<MethodInfo>::Element *E = list.front(); E; E = E->next()) { +		ret.append(E->get().operator Dictionary()); +	} +	return ret; +} + +Array Script::_get_script_signal_list() { +	Array ret; +	List<MethodInfo> list; +	get_script_signal_list(&list); +	for (List<MethodInfo>::Element *E = list.front(); E; E = E->next()) { +		ret.append(E->get().operator Dictionary()); +	} +	return ret; +} + +Dictionary Script::_get_script_constant_map() { +	Dictionary ret; +	Map<StringName, Variant> map; +	get_constants(&map); +	for (Map<StringName, Variant>::Element *E = map.front(); E; E = E->next()) { +		ret[E->key()] = E->value(); +	} +	return ret; +} +  void Script::_bind_methods() {  	ClassDB::bind_method(D_METHOD("can_instance"), &Script::can_instance); @@ -64,6 +110,12 @@ void Script::_bind_methods() {  	ClassDB::bind_method(D_METHOD("has_script_signal", "signal_name"), &Script::has_script_signal); +	ClassDB::bind_method(D_METHOD("get_script_property_list"), &Script::_get_script_property_list); +	ClassDB::bind_method(D_METHOD("get_script_method_list"), &Script::_get_script_method_list); +	ClassDB::bind_method(D_METHOD("get_script_signal_list"), &Script::_get_script_signal_list); +	ClassDB::bind_method(D_METHOD("get_script_constant_map"), &Script::_get_script_constant_map); +	ClassDB::bind_method(D_METHOD("get_property_default_value"), &Script::_get_property_default_value); +  	ClassDB::bind_method(D_METHOD("is_tool"), &Script::is_tool);  	ADD_PROPERTY(PropertyInfo(Variant::STRING, "source_code", PROPERTY_HINT_NONE, "", 0), "set_source_code", "get_source_code"); diff --git a/core/script_language.h b/core/script_language.h index 87f103bb33..360b775cbd 100644 --- a/core/script_language.h +++ b/core/script_language.h @@ -113,6 +113,12 @@ protected:  	friend class PlaceHolderScriptInstance;  	virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder) {} +	Variant _get_property_default_value(const StringName &p_property); +	Array _get_script_property_list(); +	Array _get_script_method_list(); +	Array _get_script_signal_list(); +	Dictionary _get_script_constant_map(); +  public:  	virtual bool can_instance() const = 0;  |