proc suckMotorProgram {{duration 10}} { #globals global scene global state global sack tail head spine # Start the clock at 0 set u 0; set full $sack(full); set headLen $head(length); set squish $head(squish); set squash $head(squash); set tilt $spine(tilt); # Clock stops at 1 while {$u < 1} { ## # Notice object: a chocolate chip cookie. Yum, yum... ## if {$u < 1.0/60.0} { set head(squish) [expr {lerpUp(($u * 60), $squish, 0.45)}]; } {} if {$u > 1.0/60.0} { if {$u < (4.0/60.0)} { set head(squish) [expr {lerpDown((($u - 1.0/60.0) * 20), 0.0, 0.45)}]; } {} } {} ## # Eyes follow cookie the whole time ## # *** ## # Wag tail for a bit ## # Wags faster if happier if {$u < 0.2} { set tail(wig) [expr {sin (($u * 5) * ($state(happy) * 12) * pi())}]; set tail(wag) [expr {sin (($u * 5) * ($state(happy) * 8) * pi())}]; } { # Tail is straight by default set tail(wig) 0.0; set tail(wag) 0.0; } ## # Spine tilts back # Head stretches forward ## # Tilts more if hungrier (sack is emptier) if {$u > 0.2} { if {$u < 0.4} { set spine(tilt) [expr {lerpDown((($u - 0.2) * 5), (1 - $full), 0.0)}]; set head(length) [expr {lerpUp ((($u - 0.2) * 5), $headLen, 6.0)}]; } {} } {} ## # Suck # Drag the cookie in ## # *** ## # Spine returns to normal # Head stretches back ## if {$u > 0.8} { if {$u < 0.9} { set spine(tilt) [expr {lerpUp ((($u - 0.8) * 10), (1 - $full), $tilt)}]; set head(length) [expr {lerpDown((($u - 0.8) * 10), 3.0, 6.0 )}]; set head(squish) [expr {lerpUp ((($u - 0.8) * 10), 0.0, 0.4 )}]; set head(squash) [expr {lerpUp ((($u - 0.8) * 10), $squash, 0.4 )}]; if {$sack(full) < 1.0} { set sack(full) [expr {$sack(full) + 0.1}]; } {} } {} } {} ## # Head returns to normal ## if {$u > 0.9} { set head(length) [expr {lerpUp ((($u - 0.9) * 10), 3.0, $headLen)}]; set head(squish) [expr {lerpDown((($u - 0.9) * 10), $squish, 0.4 )}]; set head(squash) [expr {lerpDown((($u - 0.9) * 10), $squash, 0.4 )}]; } {} ## # Yum, yum ## # Increment u and syncronize set u [expr {$u + (1.0/(($duration * $scene(ticksPerSecond)) - 1) * [synchWithScene])}] } set sack(full) $full; set head(length) $headLen; set head(squish) $squish; set head(squash) $squash; set spine(tilt) $tilt; }