| 865 | } |
| 866 | |
| 867 | void SceneDebuggerObject::deserialize(const Array &p_arr) { |
| 868 | #define CHECK_TYPE(p_what, p_type) ERR_FAIL_COND(p_what.get_type() != Variant::p_type); |
| 869 | ERR_FAIL_COND(p_arr.size() < 3); |
| 870 | CHECK_TYPE(p_arr[0], INT); |
| 871 | CHECK_TYPE(p_arr[1], STRING); |
| 872 | CHECK_TYPE(p_arr[2], ARRAY); |
| 873 | |
| 874 | id = uint64_t(p_arr[0]); |
| 875 | class_name = p_arr[1]; |
| 876 | Array props = p_arr[2]; |
| 877 | |
| 878 | for (int i = 0; i < props.size(); i++) { |
| 879 | CHECK_TYPE(props[i], ARRAY); |
| 880 | Array prop = props[i]; |
| 881 | |
| 882 | ERR_FAIL_COND(prop.size() != 6); |
| 883 | CHECK_TYPE(prop[0], STRING); |
| 884 | CHECK_TYPE(prop[1], INT); |
| 885 | CHECK_TYPE(prop[2], INT); |
| 886 | CHECK_TYPE(prop[3], STRING); |
| 887 | CHECK_TYPE(prop[4], INT); |
| 888 | |
| 889 | PropertyInfo pinfo; |
| 890 | pinfo.name = prop[0]; |
| 891 | pinfo.type = Variant::Type(int(prop[1])); |
| 892 | pinfo.hint = PropertyHint(int(prop[2])); |
| 893 | pinfo.hint_string = prop[3]; |
| 894 | pinfo.usage = PropertyUsageFlags(int(prop[4])); |
| 895 | Variant var = prop[5]; |
| 896 | |
| 897 | if (pinfo.type == Variant::OBJECT) { |
| 898 | if (var.is_zero()) { |
| 899 | var = Ref<Resource>(); |
| 900 | } else if (var.get_type() == Variant::OBJECT) { |
| 901 | if (((Object *)var)->is_class("EncodedObjectAsID")) { |
| 902 | var = Object::cast_to<EncodedObjectAsID>(var)->get_object_id(); |
| 903 | pinfo.type = var.get_type(); |
| 904 | pinfo.hint = PROPERTY_HINT_OBJECT_ID; |
| 905 | pinfo.hint_string = "Object"; |
| 906 | } |
| 907 | } |
| 908 | } |
| 909 | properties.push_back(SceneDebuggerProperty(pinfo, var)); |
| 910 | } |
| 911 | } |
| 912 | |
| 913 | /// SceneDebuggerTree |
| 914 | SceneDebuggerTree::SceneDebuggerTree(Node *p_root) { |