package com.gebauz.burutaru.game.entities;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.gebauz.bauzoid.graphics.sprite.SimpleSprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteTransform;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.burutaru.game.GameLogic;
public class VirtualPad
extends Entity
{
// Constants========================================================================================
public static final float PAD_SIZE_START = 64.0f
;
public static final float PAD_SIZE_CURRENT = 80.0f
;
public static final float ARROW_WIDTH = 64.0f
;
public static final float ARROW_HEIGHT = 16.0f
;
// Embedded Types===================================================================================
// Fields===========================================================================================
private boolean mVisible =
false;
private float mStartX = 0.0f
;
private float mStartY = 0.0f
;
private float mCurrentX = 0.0f
;
private float mCurrentY = 0.0f
;
private SimpleSprite mPadSprite =
null;
private SimpleSprite mArrowSprite =
null;
// Methods==========================================================================================
public VirtualPad
(GameLogic gameLogic
)
{
super(gameLogic
);
mPadSprite =
new SimpleSprite
(getGraphics
(),
"data/textures/vstick.png");
mArrowSprite =
new SimpleSprite
(getGraphics
(),
"data/textures/vstick_arrow.png");
}
@
Override
public void initAsync
()
{
mPadSprite.
initAsync();
mArrowSprite.
initAsync();
}
@
Override
public void init
()
{
mPadSprite.
init();
mPadSprite.
getSprite().
getTexture().
setFilter(TextureFilter.
Linear, TextureFilter.
Linear);
mArrowSprite.
init();
mArrowSprite.
getSprite().
getTexture().
setFilter(TextureFilter.
Linear, TextureFilter.
Linear);
}
@
Override
public void exit
()
{
if (mPadSprite
!=
null)
{
mPadSprite.
dispose();
mPadSprite =
null;
}
if (mArrowSprite
!=
null)
{
mArrowSprite.
dispose();
mArrowSprite =
null;
}
}
@
Override
public void update
(float deltaTime
)
{
}
@
Override
public void render
()
{
if (mVisible
)
{
{
SpriteTransform param = mPadSprite.
getSpriteTransform();
param.
x = mStartX
;
param.
y = mStartY
;
param.
w = PAD_SIZE_START
;
param.
h = PAD_SIZE_START
;
param.
centerPivot();
mPadSprite.
render();
}
{
float diffX = mCurrentX - mStartX
;
float diffY = mCurrentY - mStartY
;
float len =
(float)Math.
sqrt(diffX
*diffX + diffY
*diffY
);
SpriteTransform param = mArrowSprite.
getSpriteTransform();
param.
x = mStartX + diffX/
2;
param.
y = mStartY + diffY/
2;
param.
w = len
* 2;
param.
h = ARROW_HEIGHT
;
param.
centerPivot();
param.
angle = MathUtil.
radToDeg((float)Math.
atan2(diffY, - diffX
));
mArrowSprite.
render();
}
{
SpriteTransform param = mPadSprite.
getSpriteTransform();
param.
x = mCurrentX
;
param.
y = mCurrentY
;
param.
w = PAD_SIZE_CURRENT
;
param.
h = PAD_SIZE_CURRENT
;
param.
centerPivot();
mPadSprite.
render();
}
}
}
// Getters/Setters==================================================================================
public void setVisible
(boolean visible
) { mVisible = visible
; }
public void setPositions
(float startX,
float startY,
float x,
float y
)
{
mStartX = startX
; mStartY = startY
;
mCurrentX = x
; mCurrentY = y
;
}
}