Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.burutaru.game.entities.enemies;

import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.collision.Shape;
import com.gebauz.burutaru.game.GameLogic;
import com.gebauz.burutaru.game.entities.CollisionWorld;
import com.gebauz.burutaru.game.entities.CollisionWorld.CollisionInfo;
import com.gebauz.burutaru.game.entities.Entity;
import com.gebauz.burutaru.game.entities.effects.WeaponsImpact;
import com.gebauz.burutaru.game.entities.weapons.Projectile;

public class BasicShots extends Entity
{

        // Constants========================================================================================
       
        public static final int MAX_SHOTS = 50;
       
        public static final int BASICSHOT_DAMAGE = 2;
       
        public static final float SHOT_SIZE = 8;
       
        // Embedded Types===================================================================================
       
        public class Instance extends Projectile
        {
                private SpriteInstance mSpriteInstance = null;
               
                private Vector2 mMove = new Vector2();
                private Vector2 mDirection = new Vector2();

                public Instance()
                {
                        super(BASICSHOT_DAMAGE);
                        mSpriteInstance = mSprite.createSpriteInstanceForAll();
                        setAlive(false);
                }
               
                public void spawn(float x, float y, float dirX, float dirY, float speed)
                {
                        mSpriteInstance.transform.x = x;
                        mSpriteInstance.transform.y = y;
                        mSpriteInstance.transform.w = SHOT_SIZE;
                        mSpriteInstance.transform.h = SHOT_SIZE;
                        mSpriteInstance.transform.centerPivot();
                       
                        mDirection.set(dirX, dirY);
                        mDirection.setLength(speed);
                       
                        setAlive(true);
                }
               
                public void update(float deltaTime)
                {
                        mMove.set(mDirection.x * deltaTime, mDirection.y * deltaTime);
                       
                        mSpriteInstance.transform.x += mMove.x - getGameLogic().getLevel().getCurrentScrollVelocity().x;
                        mSpriteInstance.transform.y += mMove.y - getGameLogic().getLevel().getCurrentScrollVelocity().y;
                       
                        // check collision
                        if (getGameLogic().getCollisionWorld().checkCollisionPoint(CollisionWorld.FILTER_LEVEL_ELEMENTS | CollisionWorld.FILTER_PLAYER_SHIP,
                                        mSpriteInstance.transform.x, mSpriteInstance.transform.y, SHOT_SIZE/2, mCollisionResult))
                        {
                                if (mCollisionResult.collidingShip != null)
                                        mCollisionResult.collidingShip.damage(BASICSHOT_DAMAGE);
                               
                                getGameLogic().getWeaponsImpact().spawnImpact(mSpriteInstance.transform.x, mSpriteInstance.transform.y, WeaponsImpact.Type.SIMPLE_IMPACT);
                                setAlive(false);
                        }
                       
                        // check collision with player ship
                        //if (getGameLogic().getShip().checkHit()

                       
                        if (getGameLogic().isOutOfScreen(mSpriteInstance.transform))
                                setAlive(false);
                }
               
                public void render()
                {
                        mSpriteInstance.render();
                }
               
        }

        // Fields===========================================================================================
       
        private Instance[] mInstances = new Instance[MAX_SHOTS];
       
        private Sprite mSprite = null;
        private Shape mShape = null;

        private CollisionInfo mCollisionResult = new CollisionInfo();
       
        // Methods==========================================================================================
       
        public BasicShots(GameLogic gameLogic)
        {
                super(gameLogic);
                mSprite = new Sprite(getGraphics(), "data/textures/basicshot.png");
                mShape = new Shape(getGame(), "data/textures/basicshot.shape");
        }

        @Override
        public void initAsync()
        {
                mSprite.initAsync();
                mShape.initAsync();            
        }

        @Override
        public void init()
        {
                mSprite.init();
                mShape.init();
               
                for (int i = 0; i < MAX_SHOTS; i++)
                {
                        mInstances[i] = new Instance();
                }
        }

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

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

        @Override
        public void render()
        {
                for (int i = 0; i < MAX_SHOTS; i++)
                {
                        if (mInstances[i].isAlive())
                                mInstances[i].render();
                }
        }
       
        public void spawnShot(float x, float y, float dirX, float dirY, float speed)
        {
                for (int i = 0; i < MAX_SHOTS; i++)
                {
                        if (!mInstances[i].isAlive())
                        {
                                mInstances[i].spawn(x, y, dirX, dirY, speed);
                                //mBeamShotSfx.play();
                                break;
                        }
                }
        }
       
        // Getters/Setters==================================================================================

}