home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / Beez.swf / scripts / core / objects / Rect.as < prev    next >
Encoding:
Text File  |  2008-09-03  |  3.7 KB  |  114 lines

  1. package core.objects
  2. {
  3.    import Box2D.Collision.Shapes.b2PolygonDef;
  4.    import Box2D.Collision.Shapes.b2ShapeDef;
  5.    import Box2D.Common.Math.b2Vec2;
  6.    import Box2D.Dynamics.b2Body;
  7.    import Box2D.Dynamics.b2BodyDef;
  8.    import caurina.transitions.Tweener;
  9.    import core.events.CoreEvent;
  10.    import flash.display.Sprite;
  11.    import flash.geom.Point;
  12.    
  13.    public class Rect extends BaseObject
  14.    {
  15.        
  16.       
  17.       public var rectDef:RectDef;
  18.       
  19.       public function Rect(def:RectDef)
  20.       {
  21.          this.rectDef = def;
  22.          super(def);
  23.       }
  24.       
  25.       override protected function init() : void
  26.       {
  27.          super.init();
  28.          updateSkin();
  29.          engine.dispatcher.addEventListener(CoreEvent.UPDATE,updateHandler);
  30.       }
  31.       
  32.       public function collidePlayer() : void
  33.       {
  34.          isDead = true;
  35.          var animSkin:Sprite = createSkin();
  36.          var b2pos:b2Vec2 = body.GetPosition();
  37.          var pos:Point = new Point(b2pos.x * engine.m_physScale,b2pos.y * engine.m_physScale);
  38.          var w:Number = skin.width;
  39.          animSkin.x = pos.x;
  40.          animSkin.y = pos.y;
  41.          animSkin.width = rectDef.width;
  42.          animSkin.height = rectDef.height;
  43.          animSkin.rotation = rectDef.rotation + body.GetAngle() * 180 / Math.PI;
  44.          Tweener.addTween(animSkin,{
  45.             "scaleX":animSkin.scaleX * 3,
  46.             "scaleY":animSkin.scaleY * 3,
  47.             "alpha":0,
  48.             "time":0.5,
  49.             "transition":"easeoutquad",
  50.             "onComplete":animComplete,
  51.             "onCompleteParams":[animSkin]
  52.          });
  53.       }
  54.       
  55.       override protected function createBodyDef() : b2BodyDef
  56.       {
  57.          var bodyDef:b2BodyDef = new b2BodyDef();
  58.          bodyDef.position.Set(rectDef.x / engine.m_physScale,rectDef.y / engine.m_physScale);
  59.          bodyDef.isBullet = true;
  60.          bodyDef.userData = this;
  61.          return bodyDef;
  62.       }
  63.       
  64.       protected function updateHandler(e:CoreEvent) : void
  65.       {
  66.          updateSkin();
  67.          skin.rotation = rectDef.rotation + body.GetAngle() * 180 / Math.PI;
  68.          var posY:Number = body.GetPosition().y * engine.m_physScale;
  69.          if(posY > 480 + rectDef.width + rectDef.height)
  70.          {
  71.             isDead = true;
  72.          }
  73.       }
  74.       
  75.       override protected function createSkin() : Sprite
  76.       {
  77.          var SkinClass:Class = engine.assets.getAssetClass("RectAsset");
  78.          var skin:Sprite = new SkinClass();
  79.          skin.width = rectDef.width;
  80.          skin.height = rectDef.height;
  81.          engine.canvas.coinsContainer.addChild(skin);
  82.          return skin;
  83.       }
  84.       
  85.       private function animComplete(animSprite:Sprite) : void
  86.       {
  87.          animSprite.parent.removeChild(animSprite);
  88.       }
  89.       
  90.       override protected function createBody(bodyDef:b2BodyDef, shapeDef:b2ShapeDef) : b2Body
  91.       {
  92.          var body:b2Body = engine.m_world.CreateBody(bodyDef);
  93.          body.CreateShape(shapeDef);
  94.          body.SetMassFromShapes();
  95.          return body;
  96.       }
  97.       
  98.       override protected function createShapeDef() : b2ShapeDef
  99.       {
  100.          var shapeDef:b2PolygonDef = null;
  101.          shapeDef = new b2PolygonDef();
  102.          var w2:Number = rectDef.width / engine.m_physScale / 2;
  103.          var h2:Number = rectDef.height / engine.m_physScale / 2;
  104.          shapeDef.SetAsOrientedBox(w2,h2,new b2Vec2(0,0),rectDef.rotation * Math.PI / 180);
  105.          shapeDef.density = 1;
  106.          shapeDef.friction = 0.5;
  107.          shapeDef.restitution = 0.2;
  108.          shapeDef.filter.categoryBits = 2;
  109.          shapeDef.filter.maskBits = 65535 & ~2;
  110.          return shapeDef;
  111.       }
  112.    }
  113. }
  114.