Subversion Repositories AndroidProjects

Rev

Rev 950 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.gebauz.burutaru.game.entities;

import java.util.Vector;

import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.gebauz.bauzoid.graphics.sprite.AtlasSprite;
import com.gebauz.bauzoid.graphics.sprite.AtlasSpriteFrame;
import com.gebauz.bauzoid.graphics.sprite.AtlasSpriteInstance;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.bauzoid.math.collision.AABoundingBox;
import com.gebauz.burutaru.game.GameLogic;

public class Explosions extends Entity
{
        // Constants========================================================================================
       
        public static final int NUM_EXPLO_FRAMES = 8*8;
       
        public static final float EXPLO_DURATION = 1.0f;
        public static final float EXPLO_SIZE = 80.0f;

        // Embedded Types===================================================================================
       
        public class Instance
        {
                public AtlasSpriteInstance spriteInstance = null;
                public float lifeTime = 0.0f;
               
                public Instance(float x, float y, float size)
                {
                        lifeTime = 0.0f;
                       
                        spriteInstance = new AtlasSpriteInstance(getGraphics(), mExploSprite, mExploFrames, null);
                       
                        spriteInstance.param.x = x;
                        spriteInstance.param.y = y;
                        spriteInstance.param.w = size;
                        spriteInstance.param.h = size;
                        spriteInstance.param.centerPivot();
                }
               
                public void update(float deltaTime)
                {
                        if (lifeTime < EXPLO_DURATION)
                        {
                                lifeTime += deltaTime;
                        }
                       
                        spriteInstance.param.x += getGameLogic().getGlobalScrollX() * deltaTime;
                        spriteInstance.param.y += getGameLogic().getGlobalScrollY() * deltaTime;
                }
               
                public void render()
                {                      
                        if (isAlive())
                        {                              
                                float t = lifeTime / EXPLO_DURATION;
                                int frame = MathUtil.clamp((int)(t * mExploFrames.length), 0, mExploFrames.length-1);
                               
                                spriteInstance.renderFrame(frame);
                        }
                }
               
                public boolean isAlive()
                {
                        return (lifeTime <= EXPLO_DURATION);
                }
        }

        // Fields===========================================================================================
       
        private Vector<Instance> mExplosions = new Vector<Instance>();
       
        private AtlasSprite mExploSprite = null;
        private AtlasSpriteFrame mExploFrames[] = null;
       
        private Sound mExploSound = null;

        // Methods==========================================================================================

        public Explosions(GameLogic gameLogic)
        {
                super(gameLogic);
                mExploSprite = new AtlasSprite(getGraphics(), "data/textures/explosion.png", "data/textures/explosion.txt");
        }

        @Override
        public void initAsync()
        {
                mExploSprite.initAsync();
        }
       
        @Override
        public void init()
        {
                mExploSound = getAudio().newManagedSound("data/sounds/explosion.wav");
               
                mExploSprite.init();
                mExploSprite.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
                mExploFrames = mExploSprite.createSpriteInstances();           

        }

        @Override
        public void exit()
        {
                for (int i = 0; i < mExploFrames.length; i++)
                        mExploFrames[i] = null;
                mExploFrames = null;
               
                if (mExploSprite != null)
                {
                        mExploSprite.dispose();
                        mExploSprite = null;
                }
               
                if (mExploSound != null)
                {
                        getAudio().removeManagedSound(mExploSound);
                        mExploSound = null;
                }
        }

        @Override
        public void update(float deltaTime)
        {
                int i = 0;
                while (i < mExplosions.size())
                {
                        mExplosions.get(i).update(deltaTime);
                       
                        if (!mExplosions.get(i).isAlive())
                        {
                                mExplosions.remove(i);
                                continue;
                        }
                        ++i;
                }
        }

        @Override
        public void render()
        {
                for (int i = 0; i < mExplosions.size(); i++)
                {
                        mExplosions.get(i).render();
                }
        }
       
        public void spawn(float x, float y, float size)
        {
                mExplosions.add(new Instance(x, y, size));
               
                mExploSound.play();
        }
       
        // Getters/Setters==================================================================================

}