Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose Script reflection methods to scripting API. #31021

Merged
merged 1 commit into from
Sep 3, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions core/script_language.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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");
Expand Down
6 changes: 6 additions & 0 deletions core/script_language.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,12 @@ class Script : public Resource {
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;

Expand Down