Subversion Repositories AndroidProjects

Rev

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

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

import com.badlogic.gdx.audio.Sound;
import com.gebauz.bauzoid.game.StateMachine;
import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.collision.Shape;
import com.gebauz.bauzoid.parser.ParseUtil;
import com.gebauz.bauzoid.parser.ScanException;
import com.gebauz.bauzoid.parser.Tokenizer;
import com.gebauz.burutaru.GameConsts;
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.effects.Explosions;
import com.gebauz.burutaru.game.entities.enemies.BlobEnemy.BlobInstance;

public class DebrisEnemy extends SpriteShapeEnemy
{

        // Constants========================================================================================
       
        public static final int DEFAULT_HEALTH = 10;
        public static final int DEFAULT_WIDTH = 100;
        public static final int DEFAULT_HEIGHT = 100;
       
        // Embedded Types===================================================================================   

        public class DebrisInstance extends EnemyInstance
        {
               
                // Fields=======================================================================================
               
                public Vector2 mSize = new Vector2(DEFAULT_WIDTH, DEFAULT_HEIGHT);

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

                public DebrisInstance(String instanceName)
                {
                        super(DebrisEnemy.this, instanceName, DEFAULT_HEALTH);
                }

                @Override
                public void init()
                {
                        init(getSprite(), getDefaultShape());
                }
               
                public void init(Sprite parentSprite, Shape parentShape)
                {
                        mSpriteInstance = parentSprite.createSpriteInstanceForAll();
                        mSpriteInstance.transform.x = spawnTrigger.x;
                        mSpriteInstance.transform.y = spawnTrigger.y;
                        mSpriteInstance.transform.w = mSize.x;
                        mSpriteInstance.transform.h = mSize.y;
                        mSpriteInstance.centerPivot();

                        mShapeInstance = new Shape(parentShape);
                        mShapeInstance.init();                 
                        getGameLogic().getCollisionWorld().addEnemyCollider(this, mShapeInstance);                     
                }

                @Override
                public void spawn()
                {
                        hasSpawned = true;
                        if (spawnPosition != null)
                        {
                                mSpriteInstance.transform.x = spawnTrigger.x + spawnPosition.x - getGameLogic().getLevel().getCurrentPosition().x;
                                mSpriteInstance.transform.y = spawnTrigger.y + spawnPosition.y - getGameLogic().getLevel().getCurrentPosition().y;
                                mSpriteInstance.transform.angle = 0;
                        }
                        getGame().log("Spawned DebrisEnemy: " + name + " (" + mSpriteInstance.transform.x + ", " + mSpriteInstance.transform.y + ")");
                       
                        /*mMovement.set(mMoveDir.x, mMoveDir.y);
                        mMovement.setLength(mMoveSpeed);*/

                }

                @Override
                public void exit()
                {
                }
               
                @Override
                public void update(float deltaTime)
                {
                        if (mSpriteInstance != null)
                        {
                                mVelocity.set(mMovement.x*deltaTime, mMovement.y*deltaTime);
                               
                                mShapeInstance.transform.set(mSpriteInstance.transform);                                               
                                if (getGameLogic().getCollisionWorld().checkCollisionSat(CollisionWorld.FILTER_LEVEL_ELEMENTS, mShapeInstance, mVelocity, mCollisionResult))                           
                                {
                                        die();
                                       
                                        mVelocity.x += mCollisionResult.penetrationVector.x;
                                        mVelocity.y += mCollisionResult.penetrationVector.y;
                                }
                               
                                mSpriteInstance.transform.x += mVelocity.x;
                                mSpriteInstance.transform.y += mVelocity.y;
                        }

                        if (getGameLogic().isOutOfScreen(mSpriteInstance.transform, UNSPAWN_DISTANCE))
                                unspawn();
                       
                        super.update(deltaTime);
                }
               
                @Override
                public void render()
                {
                        super.render();
                }

                @Override
                public void die()
                {
                        getGameLogic().getExplosions().spawn(mSpriteInstance.transform.x, mSpriteInstance.transform.y, DEFAULT_WIDTH);
                        unspawn();
                }

                @Override
                public void addImpulse(float x, float y)
                {
                        mSpriteInstance.transform.x += x;
                        mSpriteInstance.transform.y += y;                      
                }

                /*@Override
                public Shape getShape()
                {
                        mShapeInstance.transform.set(mSpriteInstance.transform);
                        return mShapeInstance;
                }*/

               
                @Override
                public boolean readParameter(Tokenizer t, String id) throws ScanException
                {
                        if (id.equalsIgnoreCase("size"))
                        {
                                mSize = ParseUtil.readVector2(t);
                        }
            else
            {
                return super.readParameter(t, id);
            }

            t.readToken(";");
            return true;
                }
        }
       
        // Fields===========================================================================================
       
        private CollisionInfo mCollisionResult = new CollisionInfo();

        // Methods==========================================================================================
       
        public DebrisEnemy(GameLogic gameLogic)
        {
                super(gameLogic, "data/textures/enemies/elements/debris02.png", "data/textures/enemies/elements/debris02.shape");
               
                // TODO: load several types of debris
        }
       
        @Override
        public void initAsync()
        {
                super.initAsync();
        }
       
        @Override
        public void init()
        {
                super.init();
        }
       
        @Override
        public void exit()
        {
                super.exit();
        }

        @Override
        public EnemyInstance newInstance(String name)
        {
                DebrisInstance instance = new DebrisInstance(name);
                mEnemies.add(instance);
                return instance;
        }
       
        public EnemyInstance newInstance(String name, String spriteFile, String shapeFile)
        {
                DebrisInstance instance = new DebrisInstance(name);
                mEnemies.add(instance);
                return instance;
        }
       
        // Getters/Setters==================================================================================

}