| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- var TadpoleTail = function(tadpole) {
- var tail = this;
- tail.joints = [];
-
- var tadpole = tadpole;
- var jointSpacing = 1.4;
- var animationRate = 0;
-
-
- tail.update = function() {
- animationRate += (.2 + tadpole.momentum / 10);
-
- for(var i = 0, len = tail.joints.length; i < len; i++) {
- var tailJoint = tail.joints[i];
- var parentJoint = tail.joints[i-1] || tadpole;
- var anglediff = (parentJoint.angle - tailJoint.angle);
-
- while(anglediff < -Math.PI) {
- anglediff += Math.PI * 2;
- }
- while(anglediff > Math.PI) {
- anglediff -= Math.PI * 2;
- }
-
- tailJoint.angle += anglediff * (jointSpacing * 3 + (Math.min(tadpole.momentum / 2, Math.PI * 1.8))) / 8;
- tailJoint.angle += Math.cos(animationRate - (i / 3)) * ((tadpole.momentum + .3) / 40);
-
- if(i == 0) {
- tailJoint.x = parentJoint.x + Math.cos(tailJoint.angle + Math.PI) * 5;
- tailJoint.y = parentJoint.y + Math.sin(tailJoint.angle + Math.PI) * 5;
- } else {
- tailJoint.x = parentJoint.x + Math.cos(tailJoint.angle + Math.PI) * jointSpacing;
- tailJoint.y = parentJoint.y + Math.sin(tailJoint.angle + Math.PI) * jointSpacing;
- }
- }
- };
-
- tail.draw = function(context) {
- var path = [[],[]];
-
- for(var i = 0, len = tail.joints.length; i < len; i++) {
- var tailJoint = tail.joints[i];
-
- var falloff = (tail.joints.length - i) / tail.joints.length;
- var jointSize = (tadpole.size - 1.8) * falloff;
-
- var x1 = tailJoint.x + Math.cos(tailJoint.angle + Math.PI * 1.5) * jointSize;
- var y1 = tailJoint.y + Math.sin(tailJoint.angle + Math.PI * 1.5) * jointSize;
-
- var x2 = tailJoint.x + Math.cos(tailJoint.angle + Math.PI / 2) * jointSize;
- var y2 = tailJoint.y + Math.sin(tailJoint.angle + Math.PI / 2) * jointSize;
-
- path[0].push({x: x1, y: y1});
- path[1].push({x: x2, y: y2});
- }
-
- for(var i = 0; i < path[0].length; i++) {
- context.lineTo(path[0][i].x, path[0][i].y);
- }
- path[1].reverse();
- for(var i = 0; i < path[1].length; i++) {
- context.lineTo(path[1][i].x, path[1][i].y);
- }
- };
-
- (function() {
- for(var i = 0; i < 15; i++) {
- tail.joints.push({
- x: 0,
- y: 0,
- angle: Math.PI*2,
- })
- }
- })();
- }
|