extends Skeleton3D const JIGGLEBONE_SCENE = preload("res://addons/jigglebones/jigglebone.gd") @export var reparent_face := true @export var enable_jigglebones := true @export var jigglebone_configs: Array[JiggleboneConfig] # Called when the node enters the scene tree for the first time. func _ready() -> void: if enable_jigglebones: print("Adding jigglebones to skeleton: " + name) _add_jigglebones() # if ORG-face is not a child of DEF-spine.006, parent it # TODO: this ought to be done on import! if reparent_face: print("Reparenting face bone to head bone") _reparent_face() func _reparent_face() -> void: var face_idx = find_bone("ORG-face") var head_idx = find_bone("DEF-spine.005") if face_idx > -1 and head_idx > -1: set_bone_enabled(face_idx, false) set_bone_parent(face_idx, head_idx) set_bone_rest(face_idx, get_bone_rest(head_idx)) set_bone_pose(face_idx, get_bone_pose(head_idx)) else: printerr("Couldn't find face and head bones") func _add_jigglebones() -> void: for i in get_bone_count(): var bone_name = get_bone_name(i) for cfg in jigglebone_configs: if bone_name.contains(cfg.name_pattern): var jigglebone = JIGGLEBONE_SCENE.new() jigglebone.name = "Jigglebone_" + bone_name jigglebone.bone_name = bone_name jigglebone.stiffness = cfg.stiffness jigglebone.damping = cfg.damping jigglebone.forward_axis = cfg.forward_axis jigglebone.use_gravity = cfg.use_gravity add_child(jigglebone) print("Jigglebone added: \"" + jigglebone.name + "\" -> \"" + bone_name + "\"")