Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.burutaru.game.entities;

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.graphics.sprite.Sprite;
import com.gebauz.bauzoid.math.MathUtil;
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.BurutaruCustomServices;
import com.gebauz.burutaru.game.GameLogic;

public class CarrotEnemies extends EnemyList<CarrotEnemies.Instance>
{

        // Constants========================================================================================
       
        public static final int CARROT_HEALTH = 10;
       
        public static final float SPRITE_WIDTH = 110;
        public static final float SPRITE_HEIGHT = SPRITE_WIDTH/2;
        public static final float ANIM_DURATION = 1.2f;

        // Embedded Types===================================================================================
       
        public class Instance extends Enemy
        {
                public float lifeTime = 0;
               
                public AtlasSpriteInstance spriteInstance = null;
               
                public Instance(float x, float y)
                {
                        super(CARROT_HEALTH);
                        lifeTime = 0.0f;
                       
                        spriteInstance = new AtlasSpriteInstance(getGraphics(), mCarrotSprite, mCarrotFrames, mCarrotShape);
                       
                        spriteInstance.param.x = x;
                        spriteInstance.param.y = y;
                        spriteInstance.param.w = SPRITE_WIDTH;
                        spriteInstance.param.h = SPRITE_HEIGHT;
                        spriteInstance.param.pivotX = 0;
                        spriteInstance.param.pivotY = spriteInstance.param.h/2;
                        spriteInstance.param.mirrorX = true;
                }
               
                public void update(float deltaTime)
                {
                        super.update(deltaTime);
                       
                        lifeTime += deltaTime;
                       
                        // TODO: more complex behaviour
                        spriteInstance.param.x -= deltaTime * 150;
                       
                        if (spriteInstance.param.x < -SPRITE_WIDTH)
                                vanish();                      
                }
               
                public void render()
                {
                        float t = (lifeTime % ANIM_DURATION) / ANIM_DURATION;
                        int frame = MathUtil.clamp((int)(t * mCarrotFrames.length), 0, mCarrotFrames.length-1);
                       
                        spriteInstance.renderFrame(frame);
                       
                        BurutaruCustomServices.getInstance().getInGameFont().drawText("HP " + getHealth(), spriteInstance.param.x, spriteInstance.param.y);
                }

                @Override
                public boolean checkHit(Shape shape, Matrix4 shapeTransform)
                {
                        // shape is from bullet
                        Matrix4 myTransform = spriteInstance.param.getTransform();
                        Matrix4.multiply(myTransform, shapeTransform, myTransform.getInverse());

                        return shape.intersects(spriteInstance.getShape(), myTransform);
                }

                @Override
                public float getX()
                {
                        return spriteInstance.param.x;
                }

                @Override
                public float getY()
                {
                        return spriteInstance.param.y;
                }

                @Override
                public void die()
                {
                        getGameLogic().getExplosions().spawn(spriteInstance.param.x + spriteInstance.param.w/2, spriteInstance.param.y, SPRITE_WIDTH);
                       
                        int n = getGame().getRandomInt(0, 10);
                        if (n > 8)
                        {
                                getGameLogic().getPowerUps().randomSpawn(spriteInstance.param.x + spriteInstance.param.w/2, spriteInstance.param.y);
                        }
                }
               
                @Override
                public AABoundingBox getBounds()
                {
                        return spriteInstance.param.getBoundingBox();
                }
        }

        // Fields===========================================================================================

        private Shape mCarrotShape = null;
       
        private AtlasSprite mCarrotSprite = null;
        private AtlasSpriteFrame mCarrotFrames[] = null;
       
        private Sprite mTester = null;
       
        // Methods==========================================================================================

        public CarrotEnemies(GameLogic gameLogic)
        {
                super(gameLogic);
                mCarrotSprite = new AtlasSprite(getGraphics(), "data/textures/carrot.png", "data/textures/carrot.txt");
                mTester = new Sprite(getGraphics(), "data/textures/tester.png");
        }
       
        @Override
        public void initAsync()
        {
                mCarrotSprite.initAsync();
                mTester.initAsync();
        }

        @Override
        public void init()
        {
                mCarrotSprite.init();
                mCarrotFrames = mCarrotSprite.createSpriteInstances();
               
                mTester.init();

                mCarrotShape = ShapeUtil.createShapeFromFile("data/textures/carrot.shape");
        }

        @Override
        public void exit()
        {
                mCarrotShape = null;
                mCarrotFrames = null;
               
                if (mTester != null)
                {
                        mTester.dispose();
                        mTester = null;
                }
               
                if (mCarrotSprite != null)
                {
                        mCarrotSprite.dispose();
                        mCarrotSprite = null;
                }
        }

        public void spawn(float x, float y)
        {
                mEnemies.add(new Instance(x, y));
        }
       
        // Getters/Setters==================================================================================

}