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); }
}