extends SceneTree
func _init() -> void:
var scene = load("res://assets/models/tumble/tumble.glb")
if scene == null:
print("Failed to load tumble.glb")
quit()
return
var inst = scene.instantiate()
root.add_child(inst)
# Find Skeleton3D
var skeletons = inst.find_children("*", "Skeleton3D", true, false)
if skeletons.is_empty():
print("No Skeleton3D found")
quit()
return
var skel: Skeleton3D = skeletons[0]
print("Skeleton: %s bones: %d" % [skel.get_name(), skel.get_bone_count()])
for i in skel.get_bone_count():
var bname = skel.get_bone_name(i)
var parent = skel.get_bone_parent(i)
var rest: Transform3D = skel.get_bone_rest(i)
var pos = rest.origin
print("Bone %d: '%s' parent=%d pos=(%.4f, %.4f, %.4f)" % [
i, bname, parent, pos.x, pos.y, pos.z
])
# Mesh info
print("")
var meshes = inst.find_children("*", "MeshInstance3D", true, false)
for m in meshes:
var mi: MeshInstance3D = m
var spath = mi.get_skeleton_path()
print("Mesh: %s skel_path=%s" % [mi.get_name(), str(spath)])
if mi.get_mesh():
var msh = mi.get_mesh()
print(" surfaces: %d" % msh.get_surface_count())
for s in msh.get_surface_count():
var arrays = msh.surface_get_arrays(s)
var vc: int = 0
if arrays[Mesh.ARRAY_VERTEX] != null:
vc = (arrays[Mesh.ARRAY_VERTEX] as PackedVector3Array).size()
var has_bones: bool = arrays.size() > Mesh.ARRAY_BONES and arrays[Mesh.ARRAY_BONES] != null
var has_weights: bool = arrays.size() > Mesh.ARRAY_WEIGHTS and arrays[Mesh.ARRAY_WEIGHTS] != null
var ic: int = 0
if arrays.size() > Mesh.ARRAY_INDEX and arrays[Mesh.ARRAY_INDEX] != null:
ic = (arrays[Mesh.ARRAY_INDEX] as PackedInt32Array).size()
print(" Surface %d: verts=%d indices=%d has_bones=%s has_weights=%s" % [
s, vc, ic, has_bones, has_weights
])
inst.queue_free()
quit()