Advertisement
gmlscripts

draw_sprite_shear

Mar 24th, 2015
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /// draw_sprite_shear(sprite,subimg,x,y,xshear,yshear)
  2. //
  3. //  Draws a given sprite sheared by a given amount.
  4. //
  5. //      sprite      sprite index, integer
  6. //      subimg      image index, integer
  7. //      x,y         screen position, real
  8. //      xshear      shear rate of x-axis, real
  9. //      yshear      shear rate of y-axis, real
  10. //
  11. /// GMLscripts.com/license
  12. {
  13.     var spr = argument0;
  14.     var sub = argument1;
  15.     var xps = argument2;
  16.     var yps = argument3;
  17.     var xsh = argument4;
  18.     var ysh = argument5;
  19.  
  20.     d3d_transform_stack_push();
  21.     d3d_transform_set_identity();
  22.     var dis = point_distance(0, 0, xsh, ysh);
  23.     if (dis > 0.000001)
  24.     {
  25.         // Do x-axis shear
  26.         var ang = point_direction(0, 0, xsh, ysh);
  27.         d3d_transform_add_rotation_y(ang);
  28.         d3d_transform_add_scaling(1 / sqrt(3), dis / 2, 1);
  29.         d3d_transform_add_rotation_z(60);
  30.         d3d_transform_add_scaling(3, -1, 1);
  31.         d3d_transform_add_rotation_z(30);
  32.         d3d_transform_add_scaling(1, -2 / sqrt(3) / dis, 1);
  33.         d3d_transform_add_rotation_y(-ang);
  34.  
  35.         // Do y-axis shear
  36.         ang = point_direction(0, 0, ysh, xsh);
  37.         d3d_transform_add_rotation_x(ang);
  38.         d3d_transform_add_scaling(-dis / 2, 1 / sqrt(3), 1);
  39.         d3d_transform_add_rotation_z(60);
  40.         d3d_transform_add_scaling(-1, 3, 1);
  41.         d3d_transform_add_rotation_z(30);
  42.         d3d_transform_add_scaling(2 / sqrt(3) / dis, 1, 1);
  43.         d3d_transform_add_rotation_x(-ang);
  44.     }
  45.     d3d_transform_add_translation(xps, yps, 0);
  46.     draw_sprite(spr, sub, 0, 0);
  47.     d3d_transform_stack_pop();
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement