84 lines
2.7 KiB
GDScript3
84 lines
2.7 KiB
GDScript3
|
|
extends SceneTree
|
||
|
|
|
||
|
|
|
||
|
|
func _init() -> void:
|
||
|
|
var paths_to_check: Array[String] = [
|
||
|
|
# Mini characters (для отца + других NPC)
|
||
|
|
"res://assets/models/characters/character-male-a.glb",
|
||
|
|
"res://assets/models/characters/character-male-b.glb",
|
||
|
|
"res://assets/models/characters/character-male-c.glb",
|
||
|
|
"res://assets/models/characters/character-male-d.glb",
|
||
|
|
"res://assets/models/characters/character-male-e.glb",
|
||
|
|
"res://assets/models/characters/character-male-f.glb",
|
||
|
|
"res://assets/models/characters/character-female-a.glb",
|
||
|
|
# Furniture
|
||
|
|
"res://assets/models/furniture/bedSingle.glb",
|
||
|
|
"res://assets/models/furniture/desk.glb",
|
||
|
|
"res://assets/models/furniture/chairDesk.glb",
|
||
|
|
"res://assets/models/furniture/chair.glb",
|
||
|
|
"res://assets/models/furniture/computerScreen.glb",
|
||
|
|
"res://assets/models/furniture/computerKeyboard.glb",
|
||
|
|
"res://assets/models/furniture/bookcaseClosedDoors.glb",
|
||
|
|
"res://assets/models/furniture/cardboardBoxClosed.glb",
|
||
|
|
"res://assets/models/furniture/kitchenFridgeLarge.glb",
|
||
|
|
"res://assets/models/furniture/kitchenStove.glb",
|
||
|
|
"res://assets/models/furniture/kitchenSink.glb",
|
||
|
|
"res://assets/models/furniture/table.glb",
|
||
|
|
]
|
||
|
|
|
||
|
|
print("=== MODEL INSPECTION ===")
|
||
|
|
for path in paths_to_check:
|
||
|
|
var scene: PackedScene = load(path)
|
||
|
|
if scene == null:
|
||
|
|
print("FAIL load: %s" % path)
|
||
|
|
continue
|
||
|
|
var instance: Node = scene.instantiate()
|
||
|
|
if instance == null:
|
||
|
|
print("FAIL instantiate: %s" % path)
|
||
|
|
continue
|
||
|
|
var aabb: AABB = _get_total_aabb(instance)
|
||
|
|
print("--- %s ---" % path.get_file())
|
||
|
|
print(" size: x=%.3f y=%.3f z=%.3f" % [aabb.size.x, aabb.size.y, aabb.size.z])
|
||
|
|
print(" pos: x=%.3f y=%.3f z=%.3f" % [aabb.position.x, aabb.position.y, aabb.position.z])
|
||
|
|
var ap: AnimationPlayer = _find_anim_player(instance)
|
||
|
|
if ap != null:
|
||
|
|
var anims: PackedStringArray = ap.get_animation_list()
|
||
|
|
print(" animations (%d total):" % anims.size())
|
||
|
|
for name in anims:
|
||
|
|
print(" - %s" % name)
|
||
|
|
instance.queue_free()
|
||
|
|
print("=== END ===")
|
||
|
|
quit()
|
||
|
|
|
||
|
|
|
||
|
|
func _find_anim_player(node: Node) -> AnimationPlayer:
|
||
|
|
if node is AnimationPlayer:
|
||
|
|
return node as AnimationPlayer
|
||
|
|
for child in node.get_children():
|
||
|
|
var found: AnimationPlayer = _find_anim_player(child)
|
||
|
|
if found != null:
|
||
|
|
return found
|
||
|
|
return null
|
||
|
|
|
||
|
|
|
||
|
|
func _get_total_aabb(node: Node) -> AABB:
|
||
|
|
var bounds: AABB = AABB()
|
||
|
|
var first: bool = true
|
||
|
|
for mesh_node in _find_all_meshes(node):
|
||
|
|
var aabb: AABB = mesh_node.get_aabb()
|
||
|
|
if first:
|
||
|
|
bounds = aabb
|
||
|
|
first = false
|
||
|
|
else:
|
||
|
|
bounds = bounds.merge(aabb)
|
||
|
|
return bounds
|
||
|
|
|
||
|
|
|
||
|
|
func _find_all_meshes(node: Node) -> Array:
|
||
|
|
var result: Array = []
|
||
|
|
if node is MeshInstance3D:
|
||
|
|
result.append(node)
|
||
|
|
for child in node.get_children():
|
||
|
|
result.append_array(_find_all_meshes(child))
|
||
|
|
return result
|