Subversion Repositories AndroidProjects

Rev

Rev 906 | Rev 923 | Go to most recent revision | 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.SpriteParameters;
import com.gebauz.bauzoid.graphics.sprite.TileBatch;
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========================================================================================
       
        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;
        final static float PLASMA_SHOT_SPEED = 150;

        // Embedded Types===================================================================================
       
        public class Shot
        {
                public float x = 0;
                public float y = 0;
                public boolean isActive = false;
               
                private SpriteParameters mParams = new SpriteParameters();
               
                public Shot()
                {
                }
               
                public void spawn(float _x, float _y)
                {
                        x = _x; y = _y;
                        isActive = true;
                }
               
                public void update(float deltaTime)
                {
                        x += PLASMA_SHOT_SPEED * deltaTime;
                       
                        mParams.x = x;
                        mParams.y = y;
                        mParams.w = PLASMA_SHOT_WIDTH;
                        mParams.h = PLASMA_SHOT_HEIGHT;
                        mParams.centerPivot();
                       
                        // check for hits
                        /*if (getGameLogic().checkForHit(x, y, PLASMA_SHOT_WIDTH, PLASMA_SHOT_HEIGHT))
                        {
                                isActive = false;
                        }*/

                       
                        if (getGameLogic().checkForHit(mShotShape, mParams.getTransform()))
                        {
                                isActive = false;
                        }                                      
                       
                        if (x > GameConsts.VIRTUAL_SCREEN_WIDTH + PLASMA_SHOT_WIDTH)
                        {
                                isActive = false;
                        }
                }
               
                public void render()
                {
                        if (!isActive)
                                return;
                       
                        /*mShotSprite.param.x = x;
                        mShotSprite.param.y = y;
                        mShotSprite.param.w = PLASMA_SHOT_WIDTH;
                        mShotSprite.param.h = PLASMA_SHOT_HEIGHT;
                        mShotSprite.centerPivot();*/

                       
                        mShotSprite.param.apply(mParams);
                        mShotSprite.render();
                }              
        }

        // 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].isActive)
                                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].isActive)
                        {
                                mShotList[i].spawn(x, y);
                                mShotSound.play();
                                break;
                        }
                }
        }
       
        // Getters/Setters==================================================================================
       
       
}