Skip to content

Commit 62e1bdb

Browse files
committed
bendy_eye: + lid_follow driver
1 parent f43da6c commit 62e1bdb

File tree

1 file changed

+53
-8
lines changed

1 file changed

+53
-8
lines changed

rigs/experimental/bendy_eye.py

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -614,19 +614,62 @@ def make_constraints(self):
614614
cns.head_tail = 1.0
615615

616616
def make_drivers(self):
617-
618-
if not self.needs_driver:
619-
return ['']
620-
621617
bpy.ops.object.mode_set(mode='OBJECT')
622618
pose_bones = self.obj.pose.bones
623619

620+
eye_target = self.bones['eye_ctrl']['eye_target']
621+
622+
if self.lid_len % 2 == 0:
623+
i = int(self.lid_len/2)
624+
central_ctrl_top = self.get_ctrl_by_index(strip_org(self.lid_bones['top'][0]), i)
625+
central_ctrl_bottom = self.get_ctrl_by_index(strip_org(self.lid_bones['bottom'][0]), i)
626+
else:
627+
central_ctrl_top = self.bones['eye_ctrl']['top_lid_master']
628+
central_ctrl_bottom = self.bones['eye_ctrl']['bottom_lid_master']
629+
630+
prop_lid_follow_name = 'lid_follow'
631+
632+
pose_bones[eye_target][prop_lid_follow_name] = 1.0
633+
634+
prop = rna_idprop_ui_prop_get(pose_bones[eye_target], prop_lid_follow_name)
635+
prop["min"] = 0.0
636+
prop["max"] = 1.0
637+
prop["soft_min"] = 0.0
638+
prop["soft_max"] = 1.0
639+
prop["description"] = prop_lid_follow_name
640+
641+
drv = pose_bones[central_ctrl_top].constraints[0].driver_add("influence").driver
642+
drv.type = 'SUM'
643+
644+
var = drv.variables.new()
645+
var.name = prop_lid_follow_name
646+
var.type = "SINGLE_PROP"
647+
var.targets[0].id = self.obj
648+
var.targets[0].data_path = pose_bones[eye_target].path_from_id() + '[' + '"' + prop_lid_follow_name + '"' + ']'
649+
650+
drv = pose_bones[central_ctrl_bottom].constraints[0].driver_add("influence").driver
651+
drv.type = 'SUM'
652+
653+
var = drv.variables.new()
654+
var.name = prop_lid_follow_name
655+
var.type = "SINGLE_PROP"
656+
var.targets[0].id = self.obj
657+
var.targets[0].data_path = pose_bones[eye_target].path_from_id() + '[' + '"' + prop_lid_follow_name + '"' + ']'
658+
659+
all_ctrls = []
660+
all_ctrls.append(self.bones['eye_ctrl']['eye_target'])
661+
all_ctrls.append(self.bones['eye_ctrl']['master_eye'])
662+
default_controls_string = ", ".join(["'" + x + "'" for x in all_ctrls])
663+
664+
if not self.needs_driver:
665+
return [script % (default_controls_string, eye_target, prop_lid_follow_name)]
666+
624667
# eyefollow driver
625668
if self.paired_eye or self.is_clustered():
626669
if 'common' in self.bones['eye_ctrl'] and 'eyefollow' in self.bones['eye_mch']:
627670
bone = self.bones['eye_ctrl']['common']
628671
else:
629-
return ['']
672+
return [script % (default_controls_string, eye_target, prop_lid_follow_name)]
630673
else:
631674
bone = self.bones['eye_ctrl']['eye_target']
632675

@@ -645,7 +688,7 @@ def make_drivers(self):
645688
mch_eyes_parent = self.bones['eye_mch']['eyefollow']
646689

647690
drv = pose_bones[mch_eyes_parent].constraints[0].driver_add("influence").driver
648-
drv.type='SUM'
691+
drv.type = 'SUM'
649692

650693
var = drv.variables.new()
651694
var.name = prop_name
@@ -672,9 +715,11 @@ def make_drivers(self):
672715
controls_string = ", ".join(["'" + x + "'" for x in all_ctrls])
673716

674717
if main_ctrl:
675-
return [script % (controls_string, main_ctrl, prop_name)]
718+
script_out = script % (default_controls_string, eye_target, prop_lid_follow_name)
719+
script_out = script_out + (script % (controls_string, main_ctrl, prop_name))
720+
return [script_out]
676721

677-
return [""]
722+
return [script % (default_controls_string, eye_target, prop_lid_follow_name)]
678723

679724
def create_widgets(self):
680725

0 commit comments

Comments
 (0)