package com.gebauz.burutaru.game.entities;
import java.util.Vector;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
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.math.MathUtil;
import com.gebauz.bauzoid.math.collision.AABoundingBox;
import com.gebauz.burutaru.game.GameLogic;
public class Explosions
extends Entity
{
// Constants========================================================================================
public static final int NUM_EXPLO_FRAMES =
8*8;
public static final float EXPLO_DURATION = 1.0f
;
public static final float EXPLO_SIZE = 80.0f
;
// Embedded Types===================================================================================
public class Instance
{
public AtlasSpriteInstance spriteInstance =
null;
public float lifeTime = 0.0f
;
public Instance
(float x,
float y,
float size
)
{
lifeTime = 0.0f
;
spriteInstance =
new AtlasSpriteInstance
(getGraphics
(), mExploSprite, mExploFrames,
null);
spriteInstance.
param.
x = x
;
spriteInstance.
param.
y = y
;
spriteInstance.
param.
w = size
;
spriteInstance.
param.
h = size
;
spriteInstance.
param.
centerPivot();
}
public void update
(float deltaTime
)
{
if (lifeTime
< EXPLO_DURATION
)
{
lifeTime += deltaTime
;
}
spriteInstance.
param.
x += getGameLogic
().
getGlobalScrollX() * deltaTime
;
spriteInstance.
param.
y += getGameLogic
().
getGlobalScrollY() * deltaTime
;
}
public void render
()
{
if (isAlive
())
{
float t = lifeTime / EXPLO_DURATION
;
int frame = MathUtil.
clamp((int)(t
* mExploFrames.
length),
0, mExploFrames.
length-
1);
spriteInstance.
renderFrame(frame
);
}
}
public boolean isAlive
()
{
return (lifeTime
<= EXPLO_DURATION
);
}
}
// Fields===========================================================================================
private Vector<Instance
> mExplosions =
new Vector<Instance
>();
private AtlasSprite mExploSprite =
null;
private AtlasSpriteFrame mExploFrames
[] =
null;
private Sound mExploSound =
null;
// Methods==========================================================================================
public Explosions
(GameLogic gameLogic
)
{
super(gameLogic
);
mExploSprite =
new AtlasSprite
(getGraphics
(),
"data/textures/explosion.png",
"data/textures/explosion.txt");
}
@
Override
public void initAsync
()
{
mExploSprite.
initAsync();
}
@
Override
public void init
()
{
mExploSound = getAudio
().
newManagedSound("data/sounds/explosion.wav");
mExploSprite.
init();
mExploSprite.
getTexture().
setFilter(TextureFilter.
Linear, TextureFilter.
Linear);
mExploFrames = mExploSprite.
createSpriteInstances();
}
@
Override
public void exit
()
{
for (int i =
0; i
< mExploFrames.
length; i++
)
mExploFrames
[i
] =
null;
mExploFrames =
null;
if (mExploSprite
!=
null)
{
mExploSprite.
dispose();
mExploSprite =
null;
}
if (mExploSound
!=
null)
{
getAudio
().
removeManagedSound(mExploSound
);
mExploSound =
null;
}
}
@
Override
public void update
(float deltaTime
)
{
int i =
0;
while (i
< mExplosions.
size())
{
mExplosions.
get(i
).
update(deltaTime
);
if (!mExplosions.
get(i
).
isAlive())
{
mExplosions.
remove(i
);
continue;
}
++i
;
}
}
@
Override
public void render
()
{
for (int i =
0; i
< mExplosions.
size(); i++
)
{
mExplosions.
get(i
).
render();
}
}
public void spawn
(float x,
float y,
float size
)
{
mExplosions.
add(new Instance
(x, y, size
));
mExploSound.
play();
}
// Getters/Setters==================================================================================
}