Skip to content

Commit 0d61c1c

Browse files
authored
Merge pull request #1974 from dsnopek/better-object-cast-to
Optimize `Object::cast_to<T>()` using `Object::is_class()` now that it takes a `StringName`
2 parents b4ce22a + bc96761 commit 0d61c1c

1 file changed

Lines changed: 10 additions & 18 deletions

File tree

include/godot_cpp/core/object.hpp

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -118,28 +118,20 @@ class ObjectDB {
118118

119119
template <typename T>
120120
T *Object::cast_to(Object *p_object) {
121-
if (p_object == nullptr) {
122-
return nullptr;
123-
}
124-
StringName class_name = T::get_class_static();
125-
GDExtensionObjectPtr casted = ::godot::gdextension_interface::object_cast_to(p_object->_owner, ::godot::gdextension_interface::classdb_get_class_tag(class_name._native_ptr()));
126-
if (casted == nullptr) {
127-
return nullptr;
128-
}
129-
return dynamic_cast<T *>(::godot::internal::get_object_instance_binding(casted));
121+
#if GODOT_VERSION_MINOR >= 7
122+
return p_object && p_object->is_class(T::get_class_static()) ? static_cast<T *>(p_object) : nullptr;
123+
#else
124+
return p_object ? dynamic_cast<T *>(p_object) : nullptr;
125+
#endif
130126
}
131127

132128
template <typename T>
133129
const T *Object::cast_to(const Object *p_object) {
134-
if (p_object == nullptr) {
135-
return nullptr;
136-
}
137-
StringName class_name = T::get_class_static();
138-
GDExtensionObjectPtr casted = ::godot::gdextension_interface::object_cast_to(p_object->_owner, ::godot::gdextension_interface::classdb_get_class_tag(class_name._native_ptr()));
139-
if (casted == nullptr) {
140-
return nullptr;
141-
}
142-
return dynamic_cast<const T *>(::godot::internal::get_object_instance_binding(casted));
130+
#if GODOT_VERSION_MINOR >= 7
131+
return p_object && p_object->is_class(T::get_class_static()) ? static_cast<T *>(p_object) : nullptr;
132+
#else
133+
return p_object ? dynamic_cast<T *>(p_object) : nullptr;
134+
#endif
143135
}
144136

145137
} // namespace godot

0 commit comments

Comments
 (0)