home *** CD-ROM | disk | FTP | other *** search
- package core.objects
- {
- import Box2D.Collision.Shapes.b2ShapeDef;
- import Box2D.Collision.b2ContactPoint;
- import Box2D.Common.Math.b2Vec2;
- import Box2D.Dynamics.b2Body;
- import caurina.transitions.Tweener;
- import core.BContactListener;
- import core.events.CoreEvent;
- import flash.display.Sprite;
-
- public class Meteor extends Ball
- {
-
-
- public var meteorDef:MeteorDef;
-
- private var trackTime:uint;
-
- private var currentTrackTime:uint;
-
- public function Meteor(def:MeteorDef)
- {
- this.meteorDef = def;
- super(def);
- }
-
- override protected function updateHandler(e:CoreEvent) : void
- {
- super.updateHandler(e);
- ++currentTrackTime;
- if(currentTrackTime >= trackTime)
- {
- currentTrackTime = 0;
- createTrack();
- }
- }
-
- private function trackComplete(track:Sprite) : void
- {
- track.parent.removeChild(track);
- }
-
- override protected function createShapeDef() : b2ShapeDef
- {
- var shapeDef:b2ShapeDef = null;
- shapeDef = super.createShapeDef();
- shapeDef.density = 4;
- return shapeDef;
- }
-
- private function animComplete(animSkin:Sprite) : void
- {
- animSkin.parent.removeChild(animSkin);
- }
-
- private function collideAddHandler(e:CoreEvent) : void
- {
- var otherBody:b2Body = null;
- var point:b2ContactPoint = e.data as b2ContactPoint;
- var body1:b2Body = point.shape1.m_body;
- var body2:b2Body = point.shape2.m_body;
- if(body1.m_userData == this || body2.m_userData == this)
- {
- otherBody = body1.m_userData == this ? body2 : body1;
- if(otherBody.m_userData is Platform)
- {
- collidePlatform();
- }
- }
- }
-
- private function createTrack() : void
- {
- var TrackClass:Class = engine.assets.getAssetClass("MeteorTrackAsset");
- var track:Sprite = new TrackClass();
- track.x = skin.x;
- track.y = skin.y;
- Tweener.addTween(track,{
- "alpha":0,
- "time":0.5,
- "transition":"linear",
- "onComplete":trackComplete,
- "onCompleteParams":[track]
- });
- engine.canvas.coinsContainer.addChild(track);
- }
-
- private function collidePlatform() : void
- {
- isDead = true;
- var animSkin:Sprite = createSkin();
- var pos:b2Vec2 = body.GetPosition();
- animSkin.x = pos.x * engine.m_physScale;
- animSkin.y = pos.y * engine.m_physScale;
- Tweener.addTween(animSkin,{
- "alpha":0,
- "time":0.5,
- "transition":"linear",
- "onComplete":animComplete,
- "onCompleteParams":[animSkin]
- });
- }
-
- override protected function init() : void
- {
- super.init();
- trackTime = 1;
- currentTrackTime = 0;
- var impulse:b2Vec2 = new b2Vec2(meteorDef.impulseX,meteorDef.impulseY);
- body.ApplyImpulse(impulse,body.GetWorldCenter());
- engine.contactListener.dispatcher.addEventListener(BContactListener.COLLIDE_ADD,collideAddHandler);
- }
-
- override protected function createSkin() : Sprite
- {
- var SkinClass:Class = engine.assets.getAssetClass("MeteorAsset");
- var skin:Sprite = new SkinClass();
- skin.width = skin.height = ballDef.r * 2;
- engine.canvas.coinsContainer.addChild(skin);
- return skin;
- }
- }
- }
-