Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.burutaru.game.entities;

import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.bauzoid.math.Matrix4;
import com.gebauz.bauzoid.math.collision.AABoundingBox;
import com.gebauz.bauzoid.math.collision.Shape;
import com.gebauz.bauzoid.math.collision.ShapeUtil;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.GameLogic;

public class PlasmaShots extends Entity
{

        // Constants========================================================================================
       
        public final static int PLASMA_SHOT_DAMAGE = 10;
       
        final static int MAX_PLASMA_SHOTS = 10;
       
        final static float PLASMA_SHOT_WIDTH = 40;
        final static float PLASMA_SHOT_HEIGHT = 10;
        final static float PLASMA_SHOT_SPEED = 1500;

        // Embedded Types===================================================================================
       
        public class Shot extends Projectile
        {
                public SpriteInstance spriteInstance = null;
               
                public Shot()
                {
                        super(PLASMA_SHOT_DAMAGE);
                        spriteInstance = new SpriteInstance(getGraphics(), mShotSprite, mShotShape);
                       
                        setAlive(false);
                }
               
                public void spawn(float x, float y)
                {
                        setAlive(true);
                       
                        spriteInstance.param.x = x;
                        spriteInstance.param.y = y;
                        spriteInstance.param.w = PLASMA_SHOT_WIDTH;
                        spriteInstance.param.h = PLASMA_SHOT_HEIGHT;
                        spriteInstance.param.centerPivot();
                }
               
                public void update(float deltaTime)
                {
                        spriteInstance.param.x += PLASMA_SHOT_SPEED * deltaTime;
                       
                        getGameLogic().checkProjectileHit(this);
                       
                        if (spriteInstance.param.x > GameConsts.VIRTUAL_SCREEN_WIDTH + PLASMA_SHOT_WIDTH)
                        {
                                setAlive(false);
                        }
                }
               
                public void render()
                {
                        if (!isAlive())
                                return;
                       
                        spriteInstance.render();
                }

                @Override
                public void processHit(ICollidable hitObject)
                {
                        // spawn impact effect
                        hitObject.hit(getDamage());
                        setAlive(false);
                }

                @Override
                public Shape getShape()
                {
                        return spriteInstance.getShape();
                }

                @Override
                public Matrix4 getShapeTransform()
                {
                        return spriteInstance.param.getTransform();
                }
               
                @Override
                public AABoundingBox getBounds()
                {
                        return spriteInstance.param.getBoundingBox();
                }
        }

        // Fields===========================================================================================
       
        private Sprite mShotSprite = null;
        private Shape mShotShape = null;
       
        private Shot mShotList[] = new Shot[MAX_PLASMA_SHOTS];
       
        private Sound mShotSound = null;
       
        // Methods==========================================================================================

        public PlasmaShots(GameLogic gameLogic)
        {
                super(gameLogic);
               
                mShotSprite = new Sprite(getGraphics(), "data/textures/plasma_shot.png");
        }
       
        @Override
        public void initAsync()
        {
                mShotSprite.initAsync();
        }

        @Override
        public void init()
        {
                mShotSound = getAudio().newManagedSound("data/sounds/plasma_shot.wav");
               
                mShotShape = ShapeUtil.createShapeFromFile("data/textures/plasma_shot.shape");
               
                mShotSprite.init();
                mShotSprite.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
               
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
                {
                        mShotList[i] = new Shot();
                }
        }

        @Override
        public void exit()
        {
                mShotShape = null;
               
                if (mShotSprite != null)
                {
                        mShotSprite.dispose();
                        mShotSprite = null;
                }
               
                if (mShotSound != null)
                {
                        getAudio().removeManagedSound(mShotSound);
                        mShotSound = null;
                }
        }

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

        @Override
        public void render()
        {
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
                {
                        mShotList[i].render();
                }
        }
       
        public void spawnShot(float x, float y)
        {
                for (int i = 0; i < MAX_PLASMA_SHOTS; i++)
                {
                        if (!mShotList[i].isAlive())
                        {
                                mShotList[i].spawn(x, y);
                                mShotSound.play();
                                break;
                        }
                }
        }
       
        // Getters/Setters==================================================================================
       
       
}