diff options
| author | David Snopek <dsnopek@gmail.com> | 2024-04-24 14:43:53 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-24 14:43:53 -0500 |
| commit | d304f12dcde0bed8fe86dbaa31c3e3d56d2d5c17 (patch) | |
| tree | d1a351f712811c0b7e201c17195f7ee93fd6f614 /src/core/object.cpp | |
| parent | 61450b3e1beee413f38b586a361e1f9fe6de1492 (diff) | |
| parent | 2a041b5240b5f8d22e56ffa0f96e6d5b91acd95f (diff) | |
| download | redot-cpp-d304f12dcde0bed8fe86dbaa31c3e3d56d2d5c17.tar.gz | |
Merge pull request #1443 from Naros/property-method-dict-helpers
Implement to/from dict helpers for PropertyInfo/MethodInfo
Diffstat (limited to 'src/core/object.cpp')
| -rw-r--r-- | src/core/object.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/core/object.cpp b/src/core/object.cpp index dc3c879..d2e10ff 100644 --- a/src/core/object.cpp +++ b/src/core/object.cpp @@ -60,8 +60,66 @@ Object *get_object_instance_binding(GodotObject *p_engine_object) { return reinterpret_cast<Object *>(gdextension_interface_object_get_instance_binding(p_engine_object, token, binding_callbacks)); } +TypedArray<Dictionary> convert_property_list(const std::vector<PropertyInfo> &p_list) { + TypedArray<Dictionary> va; + for (const PropertyInfo &pi : p_list) { + va.push_back(Dictionary(pi)); + } + return va; +} + } // namespace internal +MethodInfo::operator Dictionary() const { + Dictionary dict; + dict["name"] = name; + dict["args"] = internal::convert_property_list(arguments); + Array da; + for (int i = 0; i < default_arguments.size(); i++) { + da.push_back(default_arguments[i]); + } + dict["default_args"] = da; + dict["flags"] = flags; + dict["id"] = id; + Dictionary r = return_val; + dict["return"] = r; + return dict; +} + +MethodInfo MethodInfo::from_dict(const Dictionary &p_dict) { + MethodInfo mi; + + if (p_dict.has("name")) { + mi.name = p_dict["name"]; + } + Array args; + if (p_dict.has("args")) { + args = p_dict["args"]; + } + + for (int i = 0; i < args.size(); i++) { + Dictionary d = args[i]; + mi.arguments.push_back(PropertyInfo::from_dict(d)); + } + Array defargs; + if (p_dict.has("default_args")) { + defargs = p_dict["default_args"]; + } + for (int i = 0; i < defargs.size(); i++) { + mi.default_arguments.push_back(defargs[i]); + } + + if (p_dict.has("return")) { + mi.return_val = PropertyInfo::from_dict(p_dict["return"]); + } + + if (p_dict.has("flags")) { + mi.flags = p_dict["flags"]; + } + + return mi; +} + MethodInfo::MethodInfo() : flags(GDEXTENSION_METHOD_FLAG_NORMAL) {} |
