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==================================================================================
}