Skip to content

Instantly share code, notes, and snippets.

@Shilo
Created March 5, 2024 00:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Shilo/53036f19e0eab86bea4a3891deb8a70f to your computer and use it in GitHub Desktop.
Save Shilo/53036f19e0eab86bea4a3891deb8a70f to your computer and use it in GitHub Desktop.
Class helper methods to compare global/custom classes (class_name) in Godot 4.
class_name ClassUtil
static func is_class_name(object: Object, classname: String) -> bool:
if object.is_class(classname):
return true
return is_global_class_name(object, classname)
static func is_exact_class_name(object: Object, classname: String) -> bool:
if !has_global_class_name(object):
return object.get_class() == classname
return is_exact_global_class_name(object, classname)
static func is_global_class_name(object: Object, classname: String) -> bool:
var script: Script = object.get_script() as Script
while script:
if script.get_global_name() == classname:
return true
script = script.get_base_script()
return false
static func is_exact_global_class_name(object: Object, classname: String) -> bool:
var script: Script = object.get_script() as Script
return script && script.get_global_name() == classname
static func has_global_class_name(object: Object) -> bool:
return get_global_class_name(object).length() > 0
static func get_global_class_name(object: Object) -> StringName:
var script: Script = object.get_script() as Script
return script.get_global_name() if script else StringName()
extends Node
var compare_classes = [
"Object",
"Node",
"CustomNode",
"SubCustomNode"
]
func _ready():
for child in get_children():
print("%s:" % child)
print("\tclass_name = \"%s\"" % ClassUtil.get_global_class_name(child))
for compare_class in compare_classes:
print("\tis class %s = %s" % [compare_class, ClassUtil.is_class_name(child, compare_class)])
for compare_class in compare_classes:
print("\tis exact class %s = %s" % [compare_class, ClassUtil.is_exact_class_name(child, compare_class)])
print("\n")
Node:<Node#28185724130>:
class_name = ""
is class Object = true
is class Node = true
is class CustomNode = false
is class SubCustomNode = false
is exact class Object = false
is exact class Node = true
is exact class CustomNode = false
is exact class SubCustomNode = false
CustomNode:<Node#28202501347>:
class_name = "CustomNode"
is class Object = true
is class Node = true
is class CustomNode = true
is class SubCustomNode = false
is exact class Object = false
is exact class Node = false
is exact class CustomNode = true
is exact class SubCustomNode = false
SubCustomNode:<Node#28219278567>:
class_name = "SubCustomNode"
is class Object = true
is class Node = true
is class CustomNode = true
is class SubCustomNode = true
is exact class Object = false
is exact class Node = false
is exact class CustomNode = false
is exact class SubCustomNode = true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment