Files
game-cards/addons/gut/scratch/get_parent_class.gd
2026-05-29 09:16:10 +08:00

94 lines
2.2 KiB
GDScript

extends SceneTree
const INNER_CLASSES_PATH = 'res://test/resources/doubler_test_objects/inner_classes.gd'
var InnerClasses = load(INNER_CLASSES_PATH)
class BaseClass:
var foo = 'bar'
class ILevelOne:
extends BaseClass
class ILevelTwo:
extends ILevelOne
var the_hash = make_class_db_hash()
func test_someting():
var ic = InnerClasses.new()
var ic_ia = InnerClasses.InnerA.new()
var dict = {}
dict[InnerClasses.InnerA] = 'poop'
dict[InnerClasses] = 'foobar'
dict[InnerClasses.AnotherInnerA] = 'bar -> foo'
print(ic_ia, ' is InnerClasses ', ic_ia.is_instance_of(InnerClasses))
print(ic_ia.get_class())
print(ic_ia.get_script())
print(dict[ic_ia.get_script()])
func print_stuff(thing):
var s = thing.get_script()
print(thing)
print(' -', s)
print(' -', s.get_instance_base_type())
print(' -', s.get_base_script())
print(' -', s.get_name())
print(' -', s.resource_name)
print(' -', s.get_rid())
# print(thing.get_class())
# print(thing.get_class().get_instance_base_type())
func find_top_of_inheritance(thing):
var p = thing.get_script()
var last_p = null
while(p != null):
last_p = p
p = p.get_base_script()
# last_p = ClassDB.get_class(last_p.get_class())
print('top parent = ', last_p)
print(the_hash[last_p.get_instance_base_type()])
func test_something_else():
var b = BaseClass.new()
var one = ILevelOne.new()
var two = ILevelTwo.new()
print_stuff(b)
print_stuff(one)
print_stuff(two)
print('RefCounted = ', RefCounted)
print('top should be ', BaseClass)
find_top_of_inheritance(two)
func make_class_db_hash_text():
var text = "var all_classes = {\n"
for classname in ClassDB.get_class_list():
if(ClassDB.can_instantiate(classname)):
text += str(' "', classname, '": ', classname, ", \n")
else:
text += str(' # ', classname, "\n")
text += "}"
print(GutUtils.add_line_numbers(text))
return text
func make_class_db_hash():
var source = make_class_db_hash_text()
return GutUtilscreate_script_from_source(source).new().all_classes
func _init():
test_something_else()
quit();