3 const JIGGLEBONE_SCENE = preload("res://addons/jigglebones/jigglebone.gd")
6 @export var reparent_face := true
7 @export var enable_jigglebones := true
8 @export var jigglebone_configs: Array[JiggleboneConfig]
11 # Called when the node enters the scene tree for the first time.
12 func _ready() -> void:
13 if enable_jigglebones:
14 print("Adding jigglebones to skeleton: " + name)
17 # if ORG-face is not a child of DEF-spine.006, parent it
18 # TODO: this ought to be done on import!
20 print("Reparenting face bone to head bone")
24 func _reparent_face() -> void:
25 var face_idx = find_bone("ORG-face")
26 var head_idx = find_bone("DEF-spine.005")
27 if face_idx > -1 and head_idx > -1:
28 set_bone_enabled(face_idx, false)
29 set_bone_parent(face_idx, head_idx)
30 set_bone_rest(face_idx, get_bone_rest(head_idx))
31 set_bone_pose(face_idx, get_bone_pose(head_idx))
33 printerr("Couldn't find face and head bones")
36 func _add_jigglebones() -> void:
37 for i in get_bone_count():
38 var bone_name = get_bone_name(i)
39 for cfg in jigglebone_configs:
40 if bone_name.contains(cfg.name_pattern):
41 var jigglebone = JIGGLEBONE_SCENE.new()
42 jigglebone.name = "Jigglebone_" + bone_name
43 jigglebone.bone_name = bone_name
44 jigglebone.stiffness = cfg.stiffness
45 jigglebone.damping = cfg.damping
46 jigglebone.forward_axis = cfg.forward_axis
47 jigglebone.use_gravity = cfg.use_gravity
49 print("Jigglebone added: \"" + jigglebone.name + "\" -> \"" + bone_name + "\"")