Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.burutaru.game.entities;

import com.gebauz.bauzoid.math.Matrix4;
import com.gebauz.bauzoid.math.collision.AABoundingBox;
import com.gebauz.bauzoid.math.collision.Shape;

/** Abstract base class for enemies that provides access to position, hit-check, and utility functionality. */
public abstract class Enemy implements ICollidable
{
        // Constants========================================================================================
       
        public static final float DAMAGE_COOLDOWN_TIME = 0.25f;

        // Embedded Types===================================================================================

        // Fields===========================================================================================
       
        private int mHealth = 10;
       
        /** Timer to prevent that an object is instantly killed. */
        private float mDamageCoolDown = -1.0f;

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

        public Enemy(int health)
        {
                mHealth = health;
        }
       
        public void update(float deltaTime)
        {
                if (mDamageCoolDown > 0.0f)
                        mDamageCoolDown -= deltaTime;
        }
       
        public abstract void render();
       
        @Override
        public void hit(int damage)
        {
                if (mDamageCoolDown > 0.0f)
                        return;                
               
                mHealth -= damage;
               
                if (mHealth <= 0)
                {
                        die();
                        return;
                }
               
                mDamageCoolDown = DAMAGE_COOLDOWN_TIME;
        }
       
        /** Do the same as checkHit as default. */
        @Override
        public boolean checkShipHit(Ship ship)
        {
                return checkHit(ship.getShape(), ship.getShapeTransform());            
        }
       
        public abstract void die();
       
        /** Similar to die, but simply vanishes. */
        public void vanish() { mHealth = -1; }
       
        // Getters/Setters==================================================================================
       
        public final void setHealth(int health) { mHealth = health; }
        public final void addHealth(int health) { mHealth += health; }
        public final int getHealth() { return mHealth; }
        public final boolean isAlive() { return (mHealth > 0); }


       
}