Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.pingK.game;

import java.util.Vector;

import com.gebauz.framework.util.MathUtil;
import com.gebauz.framework.util.Sprite2D;
import com.gebauz.framework.util.Vector4;
import com.gebauz.pingK.R;

public class PaddleImpact
{
        public class ImpactElement
        {
                private Sprite2D mImpactSprite = null;
                private float x;
                private float y;
                private float mRotation;
                private float mLifeTime;
               
                public ImpactElement(Sprite2D sprite, float posX, float posY, float rotation)
                {
                        mImpactSprite = sprite;
                        x = posX;
                        y = posY;
                        mRotation = rotation;
                        mLifeTime = 0.0f;
                }
               
                public void update(float deltaTime)
                {
                        mLifeTime += deltaTime;
                }
               
                public void render()
                {
                        mImpactSprite.x = x;
                        mImpactSprite.y = y;
                        mImpactSprite.angle = mRotation;
                       
                        float alpha = 1.0f - MathUtil.clamp(mLifeTime / GameConsts.PADDLE_IMPACT_LIFETIME, 0.0f, 1.0f);
                       
                        mImpactSprite.setColor(new Vector4(1.0f, 1.0f, 1.0f, alpha));
                        mImpactSprite.render();
                }
               
                public boolean isDone()
                {
                        return (mLifeTime > GameConsts.PADDLE_IMPACT_LIFETIME);                
                }
        }
       
        private GameLogic mGameLogic = null;
        private Sprite2D mImpactSprite = new Sprite2D();
       
        private Vector<ImpactElement> mImpacts = new Vector<ImpactElement>();
       
        public PaddleImpact(GameLogic gameLogic)
        {
                mGameLogic = gameLogic;
               
                mImpactSprite.init(R.drawable.paddleimpact, 0, 0, GameConsts.PADDLE_IMPACT_WIDTH, GameConsts.PADDLE_IMPACT_HEIGHT);
        }
       
        public void update(float deltaTime)
        {
                int i = 0;
                while (i < mImpacts.size())
                {
                        ImpactElement element = mImpacts.get(i);
                        element.update(deltaTime);
                       
                        if (element.isDone())
                        {
                                mImpacts.remove(i);
                                continue;
                        }
                       
                        i++;
                }
        }
       
        public void render()
        {
                for (int i = 0; i < mImpacts.size(); i++)
                {
                        mImpacts.get(i).render();
                }
        }
       
        public void addImpact(float x, float y, float rot)
        {
                mImpacts.add(new ImpactElement(mImpactSprite, x, y, rot));
        }
}