Advertisement
YMM

FlashPunk Platformer Solid

YMM
Jun 1st, 2012
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import net.flashpunk.Entity;
  4.     import net.flashpunk.utils.Draw;
  5.    
  6.     public class Solid extends Entity
  7.     {
  8.         static private var holder:Vector.<Actor> = new Vector.<Actor>; 
  9.         private var hCounter:Number = 0;
  10.         private var vCounter:Number = 0;
  11.        
  12.         public function Solid(x:Number, y:Number, width:Number, height:Number)
  13.         {
  14.             super(x, y);
  15.             setHitbox(width, height);
  16.             type = "Solid";
  17.         }
  18.        
  19.         override public function render():void
  20.         {
  21.             super.render();
  22.             Draw.hitbox(this, false);
  23.         }
  24.        
  25.         public function solidMoveExactH(amount:int):void
  26.         {
  27.             var i:int;
  28.             collidable = false;
  29.            
  30.             holder.length = 0;     
  31.             collideInto("Actor", x + amount, y, holder);
  32.            
  33.             if (amount > 0)
  34.             {
  35.                 for (i = 0; i < holder.length; i++)
  36.                     holder[i].moveExactH(amount - (holder[i].left - right), holder[i].squish);
  37.             }
  38.             else if (amount < 0)
  39.             {
  40.                 for (i = 0; i < holder.length; i++)
  41.                     holder[i].moveExactH(amount - (holder[i].right - left), holder[i].squish);
  42.             }
  43.            
  44.             holder.length = 0;     
  45.             collideInto("Actor", x, y - 1, holder);
  46.             for (i = 0; i < holder.length; i++)
  47.                 holder[i].moveExactH(amount);
  48.            
  49.             collidable = true;
  50.             x += amount;
  51.         }
  52.        
  53.         public function solidMoveExactV(amount:int):void
  54.         {
  55.             var i:int;
  56.             collidable = false;
  57.            
  58.             holder.length = 0;     
  59.             collideInto("Actor", x, y + amount, holder);
  60.            
  61.             if (amount > 0)
  62.             {
  63.                 for (i = 0; i < holder.length; i++)
  64.                     holder[i].moveExactV(amount - (holder[i].top - bottom), holder[i].squish);
  65.                    
  66.                 holder.length = 0;     
  67.                 collideInto("Actor", x, y - 1, holder);
  68.                 for (i = 0; i < holder.length; i++)
  69.                     holder[i].moveExactV(amount);
  70.             }
  71.             else if (amount < 0)
  72.             {
  73.                 for (i = 0; i < holder.length; i++)
  74.                 {
  75.                     if (holder[i].bottom < top)
  76.                         holder[i].platformCatch();
  77.                     holder[i].moveExactV(amount - (holder[i].bottom - top), holder[i].squish);
  78.                 }
  79.             }
  80.            
  81.             collidable = true;
  82.             y += amount;
  83.         }
  84.        
  85.         public function solidMove(h:Number, v:Number):void
  86.         {
  87.             hCounter += h;
  88.             var move:int = Math.round(hCounter);
  89.            
  90.             if (move != 0)
  91.             {
  92.                 hCounter -= move;
  93.                 solidMoveExactH(move);
  94.             }
  95.            
  96.             vCounter += v;
  97.             move = Math.round(vCounter);
  98.            
  99.             if (move != 0)
  100.             {
  101.                 vCounter -= move;
  102.                 solidMoveExactV(move);
  103.             }
  104.         }
  105.        
  106.         public function solidMoveTo(toX:Number, toY:Number):void
  107.         {
  108.             solidMove(toX - (x + hCounter), toY - (y + vCounter));
  109.         }
  110.        
  111.         public function get actualX():Number { return x + hCounter; }
  112.         public function get actualY():Number { return y + vCounter; }
  113.     }
  114.  
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement