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

  1. package core.objects
  2. {
  3.    import Box2D.Collision.Shapes.b2ShapeDef;
  4.    import Box2D.Collision.b2ContactPoint;
  5.    import Box2D.Common.Math.b2Vec2;
  6.    import Box2D.Dynamics.b2Body;
  7.    import caurina.transitions.Tweener;
  8.    import core.BContactListener;
  9.    import core.events.CoreEvent;
  10.    import flash.display.Sprite;
  11.    
  12.    public class Meteor extends Ball
  13.    {
  14.        
  15.       
  16.       public var meteorDef:MeteorDef;
  17.       
  18.       private var trackTime:uint;
  19.       
  20.       private var currentTrackTime:uint;
  21.       
  22.       public function Meteor(def:MeteorDef)
  23.       {
  24.          this.meteorDef = def;
  25.          super(def);
  26.       }
  27.       
  28.       override protected function updateHandler(e:CoreEvent) : void
  29.       {
  30.          super.updateHandler(e);
  31.          ++currentTrackTime;
  32.          if(currentTrackTime >= trackTime)
  33.          {
  34.             currentTrackTime = 0;
  35.             createTrack();
  36.          }
  37.       }
  38.       
  39.       private function trackComplete(track:Sprite) : void
  40.       {
  41.          track.parent.removeChild(track);
  42.       }
  43.       
  44.       override protected function createShapeDef() : b2ShapeDef
  45.       {
  46.          var shapeDef:b2ShapeDef = null;
  47.          shapeDef = super.createShapeDef();
  48.          shapeDef.density = 4;
  49.          return shapeDef;
  50.       }
  51.       
  52.       private function animComplete(animSkin:Sprite) : void
  53.       {
  54.          animSkin.parent.removeChild(animSkin);
  55.       }
  56.       
  57.       private function collideAddHandler(e:CoreEvent) : void
  58.       {
  59.          var otherBody:b2Body = null;
  60.          var point:b2ContactPoint = e.data as b2ContactPoint;
  61.          var body1:b2Body = point.shape1.m_body;
  62.          var body2:b2Body = point.shape2.m_body;
  63.          if(body1.m_userData == this || body2.m_userData == this)
  64.          {
  65.             otherBody = body1.m_userData == this ? body2 : body1;
  66.             if(otherBody.m_userData is Platform)
  67.             {
  68.                collidePlatform();
  69.             }
  70.          }
  71.       }
  72.       
  73.       private function createTrack() : void
  74.       {
  75.          var TrackClass:Class = engine.assets.getAssetClass("MeteorTrackAsset");
  76.          var track:Sprite = new TrackClass();
  77.          track.x = skin.x;
  78.          track.y = skin.y;
  79.          Tweener.addTween(track,{
  80.             "alpha":0,
  81.             "time":0.5,
  82.             "transition":"linear",
  83.             "onComplete":trackComplete,
  84.             "onCompleteParams":[track]
  85.          });
  86.          engine.canvas.coinsContainer.addChild(track);
  87.       }
  88.       
  89.       private function collidePlatform() : void
  90.       {
  91.          isDead = true;
  92.          var animSkin:Sprite = createSkin();
  93.          var pos:b2Vec2 = body.GetPosition();
  94.          animSkin.x = pos.x * engine.m_physScale;
  95.          animSkin.y = pos.y * engine.m_physScale;
  96.          Tweener.addTween(animSkin,{
  97.             "alpha":0,
  98.             "time":0.5,
  99.             "transition":"linear",
  100.             "onComplete":animComplete,
  101.             "onCompleteParams":[animSkin]
  102.          });
  103.       }
  104.       
  105.       override protected function init() : void
  106.       {
  107.          super.init();
  108.          trackTime = 1;
  109.          currentTrackTime = 0;
  110.          var impulse:b2Vec2 = new b2Vec2(meteorDef.impulseX,meteorDef.impulseY);
  111.          body.ApplyImpulse(impulse,body.GetWorldCenter());
  112.          engine.contactListener.dispatcher.addEventListener(BContactListener.COLLIDE_ADD,collideAddHandler);
  113.       }
  114.       
  115.       override protected function createSkin() : Sprite
  116.       {
  117.          var SkinClass:Class = engine.assets.getAssetClass("MeteorAsset");
  118.          var skin:Sprite = new SkinClass();
  119.          skin.width = skin.height = ballDef.r * 2;
  120.          engine.canvas.coinsContainer.addChild(skin);
  121.          return skin;
  122.       }
  123.    }
  124. }
  125.