Browse Source

Expose Script reflection methods to scripting API.

willnationsdev 6 years ago
parent
commit
88f79802f6
2 changed files with 58 additions and 0 deletions
  1. 52 0
      core/script_language.cpp
  2. 6 0
      core/script_language.h

+ 52 - 0
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() {
 void Script::_bind_methods() {
 
 
 	ClassDB::bind_method(D_METHOD("can_instance"), &Script::can_instance);
 	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("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);
 	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");
 	ADD_PROPERTY(PropertyInfo(Variant::STRING, "source_code", PROPERTY_HINT_NONE, "", 0), "set_source_code", "get_source_code");

+ 6 - 0
core/script_language.h

@@ -113,6 +113,12 @@ protected:
 	friend class PlaceHolderScriptInstance;
 	friend class PlaceHolderScriptInstance;
 	virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder) {}
 	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:
 public:
 	virtual bool can_instance() const = 0;
 	virtual bool can_instance() const = 0;