Subversion Repositories AndroidProjects

Rev

Rev 1302 | Rev 1509 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.gebauz.burutaru.game.entities;

import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.GameLogic;


public class StarField extends Entity
{
        // Constants========================================================================================

        public static final int MAX_STARS = 28;
       
        public static final float MIN_SPEED = 10;
        public static final float MAX_SPEED = 400;
       
        public static final float MIN_SIZE = 2;
        public static final float MAX_SIZE = 8;

        // Embedded Types===================================================================================
       
        public class Particle
        {
                public float x = 0;
                public float y = 0;
                public float w = 0;
                public float h = 0;
                public float speed = MAX_SPEED/2;
                public float speedFactor = 1.0f;
                public boolean isAlive = false;
               
                private SpriteInstance mSpriteInstance = null;
               
                public Particle()
                {
                        x = getGame().getRandomFloat(0, GameConsts.VIRTUAL_SCREEN_WIDTH+150);
                        y = getGame().getRandomFloat(0, GameConsts.VIRTUAL_SCREEN_HEIGHT);
                        w = getGame().getRandomFloat(MIN_SIZE, MAX_SIZE);
                        h = w/2;
                        //speed = getGame().getRandomFloat(MIN_SPEED, MAX_SPEED);
                        speedFactor = getGame().getRandomFloat(0.1f, 2.0f);
                       
                        isAlive = true;
                       
                        mSpriteInstance = mStarSprite.createSpriteInstanceForAll();
                }
               
                public void spawn()
                {
                        x = GameConsts.VIRTUAL_SCREEN_WIDTH + getGame().getRandomFloat(10, 150);
                        y = getGame().getRandomFloat(0, GameConsts.VIRTUAL_SCREEN_HEIGHT);
                        w = getGame().getRandomFloat(MIN_SIZE, MAX_SIZE);
                        h = w/2;
                        //speed = getGame().getRandomFloat(MIN_SPEED, MAX_SPEED);
                        isAlive = true;
                }
               
                public void update(float deltaTime)
                {
                        x -= speed * deltaTime * speedFactor;
                       
                        x -= getGameLogic().getLevel().getCurrentScrollVelocity().x * speedFactor;
                        y -= getGameLogic().getLevel().getCurrentScrollVelocity().y * speedFactor;
                       
                        if (x < -w)
                                isAlive = false;
                }
               
                public void render()
                {
                        mSpriteInstance.transform.x = x;
                        mSpriteInstance.transform.y = y;
                        mSpriteInstance.transform.w = w;
                        mSpriteInstance.transform.h = h;
                        mSpriteInstance.centerPivot();
                        mSpriteInstance.render();
                }
        }

        // Fields===========================================================================================
       
        private Sprite mStarSprite = null;
       
        private Particle mParticles[] = new Particle[MAX_STARS];

        // Methods==========================================================================================
       
        public StarField(GameLogic gameLogic)
        {
                super(gameLogic);
                mStarSprite = new Sprite(getGraphics(), "data/textures/star.png");
        }

        @Override
        public void initAsync()
        {
                mStarSprite.initAsync();               
        }

        @Override
        public void init()
        {
                mStarSprite.init();
               
                for (int i = 0; i < mParticles.length; i++)
                {
                        mParticles[i] = new Particle();
                }
        }

        @Override
        public void exit()
        {
                mStarSprite.dispose();         
        }

        @Override
        public void update(float deltaTime)
        {
                for (int i = 0; i < mParticles.length; i++)
                {
                        if (mParticles[i].isAlive)
                                mParticles[i].update(deltaTime);
                       
                        if (!mParticles[i].isAlive)
                                spawn(i);
                }
        }

        @Override
        public void render()
        {
                for (int i = 0; i < mParticles.length; i++)
                {
                        if (mParticles[i].isAlive)
                                mParticles[i].render();
                }
        }
       
        public void spawn(int index)
        {
                if (!mParticles[index].isAlive)
                {
                        mParticles[index].spawn();
                }
        }
       
        // Getters/Setters==================================================================================

}