home *** CD-ROM | disk | FTP | other *** search
- package core.objects
- {
- import Box2D.Collision.Shapes.b2CircleDef;
- import Box2D.Collision.Shapes.b2ShapeDef;
- import Box2D.Common.Math.b2Vec2;
- import Box2D.Dynamics.b2BodyDef;
- import caurina.transitions.Tweener;
- import core.events.CoreEvent;
- import flash.display.Sprite;
- import flash.geom.Point;
- import flash.media.Sound;
- import flash.text.TextField;
-
- public class Star extends Ball
- {
-
- private static var LIFE_TIME:uint = 40 * 10;
-
-
- private var skinInner:Sprite;
-
- public var score:uint;
-
- private var lifeTime:uint;
-
- private var sndStarCollect:Sound;
-
- private var skinScore:Sprite;
-
- private var skinScore_tf:TextField;
-
- public function Star(def:StarDef)
- {
- super(def);
- }
-
- override protected function updateHandler(e:CoreEvent) : void
- {
- if(lifeTime > LIFE_TIME)
- {
- lifeEnd();
- }
- ++lifeTime;
- }
-
- public function collidePlayer() : void
- {
- isDead = true;
- score = ballDef.r * 2;
- dispatchEvent(new CoreEvent(CoreEvent.STAR_COLLECT,this));
- var animSkin:Sprite = createSkin();
- skinInner = animSkin.getChildByName("inner") as Sprite;
- skinScore = animSkin.getChildByName("score") as Sprite;
- skinScore_tf = skinScore.getChildByName("score_tf") as TextField;
- var b2pos:b2Vec2 = body.GetPosition();
- var pos:Point = new Point(b2pos.x * engine.m_physScale,b2pos.y * engine.m_physScale);
- animSkin.x = pos.x;
- animSkin.y = pos.y;
- skinInner.width = ballDef.r * 2;
- skinInner.height = ballDef.r * 2;
- skinInner.rotation = body.GetAngle() * 180 / Math.PI;
- Tweener.addTween(skinInner,{
- "scaleX":skinInner.scaleX * 5,
- "scaleY":skinInner.scaleY * 5,
- "alpha":0,
- "time":1,
- "transition":"easeoutquad"
- });
- skinScore.visible = true;
- skinScore_tf.text = score.toString();
- skinScore.alpha = 0;
- Tweener.addTween(skinScore,{
- "y":-50,
- "time":1.5,
- "transition":"linear",
- "onComplete":animComplete,
- "onCompleteParams":[animSkin]
- });
- Tweener.addTween(skinScore,{
- "scaleX":5,
- "scaleY":5,
- "alpha":1,
- "time":0.5,
- "transition":"linear"
- });
- Tweener.addTween(skinScore,{
- "scaleX":1,
- "scaleY":1,
- "alpha":0,
- "time":0.5,
- "delay":1,
- "transition":"linear"
- });
- engine.sndChannel = sndStarCollect.play(0,0,engine.sndTransform);
- }
-
- override protected function createShapeDef() : b2ShapeDef
- {
- var shapeDef:b2CircleDef = new b2CircleDef();
- shapeDef.radius = ballDef.r / engine.m_physScale;
- shapeDef.density = 0;
- shapeDef.filter.categoryBits = 8;
- shapeDef.filter.maskBits = 4;
- return shapeDef;
- }
-
- override protected function createSkin() : Sprite
- {
- var SkinClass:Class = engine.assets.getAssetClass("StarAsset");
- var skin:Sprite = new SkinClass();
- skin.width = skin.height = ballDef.r * 2;
- engine.canvas.playerContainer.addChild(skin);
- return skin;
- }
-
- override protected function createBodyDef() : b2BodyDef
- {
- var bodyDef:b2BodyDef = new b2BodyDef();
- bodyDef.position.Set(ballDef.x / engine.m_physScale,ballDef.y / engine.m_physScale);
- bodyDef.userData = this;
- return bodyDef;
- }
-
- override protected function init() : void
- {
- super.init();
- lifeTime = 0;
- skinInner = skin.getChildByName("inner") as Sprite;
- skinScore = skin.getChildByName("score") as Sprite;
- skinScore_tf = skinScore.getChildByName("score_tf") as TextField;
- skinScore.visible = false;
- var scale:Number = ballDef.r * 2 / 60;
- skinInner.scaleX = skinInner.scaleY = 0;
- skinInner.rotation = 0;
- Tweener.addTween(skinInner,{
- "scaleX":scale,
- "scaleY":scale,
- "time":0.8,
- "transition":"easeinquad"
- });
- Tweener.addTween(skinInner,{
- "rotation":180,
- "time":0.4,
- "transition":"linear"
- });
- Tweener.addTween(skinInner,{
- "rotation":360,
- "time":0.4,
- "delay":0.4,
- "transition":"linear"
- });
- }
-
- private function animComplete(animSprite:Sprite) : void
- {
- animSprite.parent.removeChild(animSprite);
- }
-
- override protected function initSounds() : void
- {
- var StarCollectClass:Class = engine.assets.getAssetClass("SndStarCollect");
- sndStarCollect = new StarCollectClass();
- }
-
- private function lifeEnd() : void
- {
- isDead = true;
- dispatchEvent(new CoreEvent(CoreEvent.STAR_LIFE_END,this));
- var animSkin:Sprite = createSkin();
- skinInner = animSkin.getChildByName("inner") as Sprite;
- skinScore = animSkin.getChildByName("score") as Sprite;
- skinScore_tf = skinScore.getChildByName("score_tf") as TextField;
- skinScore.visible = false;
- var b2pos:b2Vec2 = body.GetPosition();
- var pos:Point = new Point(b2pos.x * engine.m_physScale,b2pos.y * engine.m_physScale);
- animSkin.x = pos.x;
- animSkin.y = pos.y;
- skinInner.width = ballDef.r * 2;
- skinInner.height = ballDef.r * 2;
- var scale:Number = ballDef.r * 2 / skinInner.width;
- Tweener.addTween(skinInner,{
- "scaleX":0,
- "scaleY":0,
- "time":0.8,
- "transition":"easeinback"
- });
- Tweener.addTween(skinInner,{
- "rotation":180,
- "time":0.4,
- "transition":"linear"
- });
- Tweener.addTween(skinInner,{
- "rotation":360,
- "time":0.4,
- "delay":0.4,
- "transition":"linear"
- });
- }
- }
- }
-