From bc96761901ace67357ca7a75c1bd7769b40dd695 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Tue, 21 Apr 2026 14:23:21 -0500 Subject: [PATCH] Optimize `Object::cast_to()` using `Object::is_class()` now that it takes a `StringName` --- include/godot_cpp/core/object.hpp | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/include/godot_cpp/core/object.hpp b/include/godot_cpp/core/object.hpp index fbd08f670..138274b15 100644 --- a/include/godot_cpp/core/object.hpp +++ b/include/godot_cpp/core/object.hpp @@ -118,28 +118,20 @@ class ObjectDB { template T *Object::cast_to(Object *p_object) { - if (p_object == nullptr) { - return nullptr; - } - StringName class_name = T::get_class_static(); - GDExtensionObjectPtr casted = ::godot::gdextension_interface::object_cast_to(p_object->_owner, ::godot::gdextension_interface::classdb_get_class_tag(class_name._native_ptr())); - if (casted == nullptr) { - return nullptr; - } - return dynamic_cast(::godot::internal::get_object_instance_binding(casted)); +#if GODOT_VERSION_MINOR >= 7 + return p_object && p_object->is_class(T::get_class_static()) ? static_cast(p_object) : nullptr; +#else + return p_object ? dynamic_cast(p_object) : nullptr; +#endif } template const T *Object::cast_to(const Object *p_object) { - if (p_object == nullptr) { - return nullptr; - } - StringName class_name = T::get_class_static(); - GDExtensionObjectPtr casted = ::godot::gdextension_interface::object_cast_to(p_object->_owner, ::godot::gdextension_interface::classdb_get_class_tag(class_name._native_ptr())); - if (casted == nullptr) { - return nullptr; - } - return dynamic_cast(::godot::internal::get_object_instance_binding(casted)); +#if GODOT_VERSION_MINOR >= 7 + return p_object && p_object->is_class(T::get_class_static()) ? static_cast(p_object) : nullptr; +#else + return p_object ? dynamic_cast(p_object) : nullptr; +#endif } } // namespace godot