Ember

HairShader

Sep 3rd, 2012
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import Box2D.Common.Math.*;
  4.     import flash.display.*;
  5.  
  6.     public class HairShader extends Object
  7.     {
  8.         public var y:Number;
  9.         public var sprite:MovieClip;
  10.         public var dir:Number;
  11.         public var spring_coeff:Number;
  12.         public var objects:Array;
  13.         public var dr:Number;
  14.         public var shifta:Number;
  15.         public var root:World;
  16.         public var color:int;
  17.         public var tex_dy:int;
  18.         public var r:Number;
  19.         public var n:int;
  20.         public var shiftx:Number;
  21.         public var shifty:Number;
  22.         public var x:Number;
  23.         public var parent_sprite:MovieClip;
  24.         public static var grav:Number;
  25.         public static var wind:Number;
  26.         public static var m:Number;
  27.         public static var new_r:Number;
  28.         public static var dx:Number;
  29.         public static var dy:Number;
  30.         public static var dz:Number;
  31.  
  32.         public function HairShader(param1:Number, param2:Number, param3:Number, param4:Number, param5:Number, param6:int, param7:World, param8:MovieClip, param9:int) : void
  33.         {
  34.             var _loc_10:* = 0;
  35.             var _loc_11:* = null;
  36.             root = param7;
  37.             x = param1;
  38.             y = param2;
  39.             r = param3;
  40.             n = param5;
  41.             color = param6;
  42.             parent_sprite = param8;
  43.             sprite = new MovieClip();
  44.             if (parent_sprite)
  45.             {
  46.                 parent_sprite.addChild(sprite);
  47.             }
  48.             sprite.x = x;
  49.             sprite.y = y;
  50.             sprite.mouseEnabled = false;
  51.             objects = new Array();
  52.             dir = 0;
  53.             dr = param4 / (n - 1);
  54.             _loc_10 = 0;
  55.             while (_loc_10 < n)
  56.             {
  57.                
  58.                 _loc_11 = new ClothJoint(x + _loc_10 * dr, y, 0 + _loc_10 * 0.1, 10);
  59.                 _loc_11.mass = Math.pow((n - _loc_10) / n, 1.2) * r;
  60.                 objects.push(_loc_11);
  61.                 _loc_10++;
  62.             }
  63.             grav = root.gravity_y * 0.5;
  64.             wind = 0.4;
  65.             spring_coeff = 1;
  66.             tex_dy = param9;
  67.             return;
  68.         }// end function
  69.  
  70.         public function LinkUpdate(param1:ClothJoint, param2:ClothJoint) : void
  71.         {
  72.             dx = param2.x - param1.x;
  73.             dy = param2.y - param1.y;
  74.             dz = param2.z - param1.z;
  75.             new_r = Math.sqrt(dx * dx + dy * dy + dz * dz);
  76.             m = (new_r - dr) / new_r;
  77.             dx = dx * m;
  78.             dy = dy * m;
  79.             dz = dz * m;
  80.             param1.x = param1.x + dx * 0.1;
  81.             param1.y = param1.y + dy * 0.1;
  82.             param1.z = param1.z + dz * 0.1;
  83.             param2.x = param2.x - dx * 0.9;
  84.             param2.y = param2.y - dy * 0.9;
  85.             param2.z = param2.z - dz * 0.9;
  86.             return;
  87.         }// end function
  88.  
  89.         public function RenderBlack() : void
  90.         {
  91.             var _loc_1:* = 0;
  92.             sprite.graphics.clear();
  93.             sprite.graphics.lineStyle(2, 0);
  94.             sprite.graphics.moveTo(objects[0].x - x, objects[0].y - y);
  95.             _loc_1 = 0;
  96.             while (_loc_1 < n)
  97.             {
  98.                
  99.                 sprite.graphics.lineTo(objects[_loc_1].x - x, objects[_loc_1].y - y);
  100.                 _loc_1++;
  101.             }
  102.             return;
  103.         }// end function
  104.  
  105.         public function Kill() : void
  106.         {
  107.             if (!root)
  108.             {
  109.                 return;
  110.             }
  111.             root.RemoveSprite(sprite);
  112.             sprite = null;
  113.             parent_sprite = null;
  114.             objects = null;
  115.             root = null;
  116.             return;
  117.         }// end function
  118.  
  119.         public function Update(param1:Number, param2:Number, param3:Number, param4:Number = -1) : void
  120.         {
  121.             var _loc_5:* = 0;
  122.             var _loc_6:* = null;
  123.             var _loc_7:* = null;
  124.             var _loc_8:* = null;
  125.             var _loc_9:* = null;
  126.             var _loc_10:* = null;
  127.             var _loc_11:* = null;
  128.             var _loc_12:* = null;
  129.             var _loc_13:* = null;
  130.             var _loc_14:* = param1;
  131.             x = param1;
  132.             sprite.x = _loc_14;
  133.             var _loc_14:* = param2;
  134.             y = param2;
  135.             sprite.y = _loc_14;
  136.             dir = param3;
  137.             _loc_5 = 0;
  138.             while (_loc_5 < n)
  139.             {
  140.                
  141.                 _loc_13 = objects[_loc_5];
  142.                 objects[_loc_5].y = _loc_13.y + (grav + root.wind_z * 0.1);
  143.                 _loc_13.x = _loc_13.x + root.wind_x * wind;
  144.                 _loc_13.z = _loc_13.z + (-root.wind_x) * wind * 0.2;
  145.                 dx = (_loc_13.x - _loc_13.oldx) * 0.75;
  146.                 dy = (_loc_13.y - _loc_13.oldy) * 0.75;
  147.                 dz = (_loc_13.z - _loc_13.oldz) * 0.75;
  148.                 _loc_13.oldx = _loc_13.x;
  149.                 _loc_13.oldy = _loc_13.y;
  150.                 _loc_13.oldz = _loc_13.z;
  151.                 _loc_13.x = _loc_13.x + dx;
  152.                 _loc_13.y = _loc_13.y + dy;
  153.                 _loc_13.z = _loc_13.z + dz;
  154.                 _loc_5++;
  155.             }
  156.             objects[0].x = x;
  157.             objects[0].y = y;
  158.             objects[0].z = 0;
  159.             _loc_6 = new b2Vec2(dr, 0);
  160.             _loc_6.Rotate(dir);
  161.             objects[1].x = root.interpolate(objects[1].x, x + _loc_6.x, 0.5 * spring_coeff);
  162.             objects[1].y = root.interpolate(objects[1].y, y + _loc_6.y, 0.5 * spring_coeff);
  163.             _loc_6.Add(_loc_6);
  164.             objects[2].x = root.interpolate(objects[2].x, x + _loc_6.x, 0.2 * spring_coeff);
  165.             objects[2].y = root.interpolate(objects[2].y, y + _loc_6.y, 0.2 * spring_coeff);
  166.             _loc_5 = 0;
  167.             while (_loc_5 < (n - 1))
  168.             {
  169.                
  170.                 LinkUpdate(objects[_loc_5], objects[(_loc_5 + 1)]);
  171.                 _loc_5++;
  172.             }
  173.             objects[0].x = x;
  174.             objects[0].y = y;
  175.             objects[0].z = 0;
  176.             _loc_6.Multiply(0.5);
  177.             objects[1].x = root.interpolate(objects[1].x, x + _loc_6.x, spring_coeff);
  178.             objects[1].y = root.interpolate(objects[1].y, y + _loc_6.y, spring_coeff);
  179.             if (param4 > 0)
  180.             {
  181.                 _loc_6.Set(dr, 0);
  182.                 _loc_6.Rotate(dir);
  183.                 _loc_5 = 2;
  184.                 while (_loc_5 < n - 3)
  185.                 {
  186.                    
  187.                     objects[_loc_5].x = root.interpolate(objects[_loc_5].x, objects[(_loc_5 - 1)].x + _loc_6.x, param4);
  188.                     objects[_loc_5].y = root.interpolate(objects[_loc_5].y, objects[(_loc_5 - 1)].y + _loc_6.y, param4);
  189.                     _loc_6.x = _loc_6.x + (objects[(_loc_5 + 1)].x - objects[_loc_5].x) * 0.5;
  190.                     _loc_6.y = _loc_6.y + (objects[(_loc_5 + 1)].y - objects[_loc_5].y) * 0.5;
  191.                     _loc_6.Multiply(dr / _loc_6.Length());
  192.                     param4 = param4 * 0.8;
  193.                     _loc_5++;
  194.                 }
  195.             }
  196.             _loc_5 = 0;
  197.             while (_loc_5 < n - 2)
  198.             {
  199.                
  200.                 DoubleLinkUpdate(objects[_loc_5], objects[_loc_5 + 2], 1, dr * 2);
  201.                 _loc_5++;
  202.             }
  203.             _loc_5 = 0;
  204.             while (_loc_5 < n - 3)
  205.             {
  206.                
  207.                 DoubleLinkUpdate(objects[_loc_5], objects[_loc_5 + 3], 1, dr * 3);
  208.                 _loc_5++;
  209.             }
  210.             _loc_7 = new b2Vec2(objects[1].x - objects[0].x, objects[1].y - objects[0].y);
  211.             _loc_7.Perpendicular();
  212.             _loc_7.Normalize();
  213.             _loc_8 = new b2Vec2();
  214.             _loc_9 = new b2Vec2();
  215.             _loc_9.SetV(_loc_7);
  216.             _loc_9.Multiply(objects[0].mass);
  217.             _loc_10 = new b2Vec2();
  218.             _loc_11 = root.GetTexture("hair_tex1");
  219.             _loc_12 = new AABB(0, tex_dy, _loc_11.width / (n - 1), 16 + r);
  220.             sprite.graphics.clear();
  221.             _loc_5 = 1;
  222.             while (_loc_5 < n)
  223.             {
  224.                
  225.                 if (_loc_5 < (n - 1))
  226.                 {
  227.                     _loc_8.Set(objects[(_loc_5 + 1)].x - objects[_loc_5].x, objects[(_loc_5 + 1)].y - objects[_loc_5].y);
  228.                     _loc_8.Perpendicular();
  229.                     _loc_8.Normalize();
  230.                     _loc_10.SetV(_loc_8);
  231.                     _loc_10.Add(_loc_7);
  232.                     _loc_10.Normalize();
  233.                     _loc_10.Multiply(objects[_loc_5].mass);
  234.                 }
  235.                 else
  236.                 {
  237.                     _loc_10.Set();
  238.                 }
  239.                 root.RenderQuad(_loc_11, sprite.graphics, _loc_12, objects[(_loc_5 - 1)].x + _loc_9.x - x, objects[(_loc_5 - 1)].y + _loc_9.y - y, objects[_loc_5].x + _loc_10.x - x, objects[_loc_5].y + _loc_10.y - y, objects[_loc_5].x - _loc_10.x - x, objects[_loc_5].y - _loc_10.y - y, objects[(_loc_5 - 1)].x - _loc_9.x - x, objects[(_loc_5 - 1)].y - _loc_9.y - y);
  240.                 _loc_12.x = _loc_12.x + _loc_12.w;
  241.                 _loc_7.SetV(_loc_8);
  242.                 _loc_9.SetV(_loc_10);
  243.                 _loc_5++;
  244.             }
  245.             return;
  246.         }// end function
  247.  
  248.         public function Move(param1:Number, param2:Number, param3:Number) : void
  249.         {
  250.             var _loc_4:* = 0;
  251.             _loc_4 = n - 1;
  252.             while (_loc_4 >= 0)
  253.             {
  254.                
  255.                 objects[_loc_4].oldx = objects[_loc_4].oldx - param1;
  256.                 objects[_loc_4].oldy = objects[_loc_4].oldy - param2;
  257.                 param1 = param1 * param3;
  258.                 param2 = param2 * param3;
  259.                 _loc_4 = _loc_4 - 1;
  260.             }
  261.             return;
  262.         }// end function
  263.  
  264.         public function DoubleLinkUpdate(param1:ClothJoint, param2:ClothJoint, param3:Number, param4:Number) : void
  265.         {
  266.             dx = param2.x - param1.x;
  267.             dy = param2.y - param1.y;
  268.             dz = param2.z - param1.z;
  269.             new_r = Math.sqrt(dx * dx + dy * dy + dz * dz);
  270.             m = (new_r - param4) / new_r * 0.5 * param3;
  271.             dx = dx * m;
  272.             dy = dy * m;
  273.             dz = dz * m;
  274.             param1.x = param1.x + dx * 0.2;
  275.             param1.y = param1.y + dy * 0.2;
  276.             param1.z = param1.z + dz * 0.2;
  277.             param2.x = param2.x - dx * 0.8;
  278.             param2.y = param2.y - dy * 0.8;
  279.             param2.z = param2.z - dz * 0.8;
  280.             return;
  281.         }// end function
  282.  
  283.         public function SetAhoge() : void
  284.         {
  285.             var _loc_1:* = 0;
  286.             _loc_1 = 0;
  287.             while (_loc_1 < n)
  288.             {
  289.                
  290.                 objects[_loc_1].mass = Math.pow(0.5 - Math.abs((n - _loc_1) / n - 0.5), 1.2) * r;
  291.                 _loc_1++;
  292.             }
  293.             return;
  294.         }// end function
  295.  
  296.     }
  297. }
Advertisement
Add Comment
Please, Sign In to add comment