package com.gebauz.bauzoid.menu;
import com.gebauz.bauzoid.graphics.Font;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.Vector4;
import com.gebauz.bauzoid.menu.MenuItem.HorizontalAlign;
import com.gebauz.bauzoid.menu.MenuItem.VerticalAlign;
import com.gebauz.bauzoid.parser.Preprocessor;
import com.gebauz.bauzoid.parser.ScanException;
import com.gebauz.bauzoid.parser.Tokenizer;
public class TextElement
{
// Constants========================================================================================
// Embedded Types===================================================================================
// Members==========================================================================================
private String mCaption =
"";
private float mScale = 1.0f
;
private HorizontalAlign mTextAlignH= HorizontalAlign.
CENTER;
private VerticalAlign mTextAlignV = VerticalAlign.
CENTER;
private String mFontName =
null;
private boolean mShadow =
true;
private Vector4 mShadowColor =
new Vector4
(0,
0,
0, 0.5f
);
private Vector2 mShadowOffset =
new Vector2
(2,
2);
/** The owner of this element. */
private MenuItem mOwner =
null;
private float mTextWidth = 0.0f
;
private float mTextHeight = 0.0f
;
private Font mFont =
null;
private float mLineBreak = 1.0f
;
// Methods==========================================================================================
public TextElement
(MenuItem owner
)
{
mOwner = owner
;
}
public void init
()
{
// Get the first font that was added (typically the system font)
if (mFontName
!=
null)
{
mFont = mOwner.
getGame().
getFont(mFontName
);
}
if (mFont ==
null)
{
mFont = mOwner.
getGame().
getFonts().
getDefaultFont();
}
mFont.
setLineBreak(mLineBreak
);
//mFont = PonPonChunCustomServices.getInstance().getInGameFont();
/*if ((mFontName != null) && mFontName.equalsIgnoreCase("scoring"))
{
mFont = PonPonChunCustomServices.getInstance().getScoringFont();
}*/
mTextWidth = mFont.
getTextWidth(mCaption, mScale
);
mTextHeight = mFont.
getTextHeight(mCaption, mScale
);
}
public void exit
()
{
mFont =
null;
}
public void update
(float deltaTime
)
{
}
public void render
(float left,
float top,
float right,
float bottom
)
{
render
(left, top, right, bottom, mOwner.
getColor());
}
public void render
(float left,
float top,
float right,
float bottom, Vector4 color
)
{
// Calculate position
float x = left
;
float y = top
;
float w = right - left
;
float h = bottom - top
;
if (mTextAlignH == HorizontalAlign.
RIGHT)
x = left + w - mTextWidth
;
else if (mTextAlignH == HorizontalAlign.
CENTER)
x = left + w/
2 - mTextWidth/
2;
if (mTextAlignV == VerticalAlign.
BOTTOM)
y = top + h - mTextHeight
;
else if (mTextAlignV == VerticalAlign.
CENTER)
y = top + h/
2 - mTextHeight/
2;
if (mShadow
)
{
float oldAlpha = mShadowColor.
w;
mShadowColor.
w *= mOwner.
getParent().
getFadeAlpha();
mFont.
drawText(mCaption, x + mShadowOffset.
x, y + mShadowOffset.
y, mShadowColor, mScale
);
mShadowColor.
w = oldAlpha
;
}
float oldAlpha = mShadowColor.
w;
color.
w *= mOwner.
getParent().
getFadeAlpha();
mFont.
drawText(mCaption, x, y, color, mScale
);
color.
w = oldAlpha
;
}
public boolean parseLine
(String identifier, Tokenizer tokenizer
) throws ScanException
{
if (identifier.
equalsIgnoreCase("caption"))
{
mCaption = Preprocessor.
escapeString(MenuUtil.
parseString(tokenizer
));
}
else if (identifier.
equalsIgnoreCase("scale"))
{
mScale = MenuUtil.
parseNumber(tokenizer
);
}
else if (identifier.
equalsIgnoreCase("textAlign"))
{
mTextAlignH = MenuUtil.
stringToHorizontalAlignment(tokenizer.
readIdentifier());
tokenizer.
readToken(",");
mTextAlignV = MenuUtil.
stringToVerticalAlignment(tokenizer.
readIdentifier());
tokenizer.
readToken(";");
}
else if (identifier.
equalsIgnoreCase("font"))
{
mFontName = MenuUtil.
parseString(tokenizer
);
}
else if (identifier.
equalsIgnoreCase("lineBreak"))
{
mLineBreak = MenuUtil.
parseNumber(tokenizer
);
}
else if (identifier.
equalsIgnoreCase("shadow"))
{
mShadow = MenuUtil.
parseBool(tokenizer
);
}
else if (identifier.
equalsIgnoreCase("shadowOffset"))
{
setShadowOffset
(MenuUtil.
parseVector2(tokenizer
));
}
else if (identifier.
equalsIgnoreCase("shadowColor"))
{
setShadowColor
(MenuUtil.
parseVector4(tokenizer
));
}
else
{
return false;
}
return true;
}
// Getters/Setters==================================================================================
public String getCaption
() { return mCaption
; }
public void setCaption
(String caption
)
{
mCaption = caption
;
mTextWidth = mFont.
getTextWidth(mCaption, mScale
);
mTextHeight = mFont.
getTextHeight(mCaption, mScale
);
}
public float getScale
() { return mScale
; }
public void setScale
(float scale
)
{
mScale = scale
;
mTextWidth = mFont.
getTextWidth(mCaption, mScale
);
mTextHeight = mFont.
getTextHeight(mCaption, mScale
);
}
public float getLineBreak
() { return mLineBreak
; }
public void setLineBreak
(float lineBreak
)
{
mLineBreak = lineBreak
;
mFont.
setLineBreak(mLineBreak
);
mTextHeight = mFont.
getTextHeight(mCaption, mScale
);
}
public float getTextWidth
() { return mTextWidth
; }
public float getTextHeight
() { return mTextHeight
; }
public HorizontalAlign getTextAlignH
() { return mTextAlignH
; }
public void setTextAlignH
(HorizontalAlign textAlignH
) { mTextAlignH = textAlignH
; }
public VerticalAlign getTextAlignV
() { return mTextAlignV
; }
public void setTextAlignV
(VerticalAlign textAlignV
) { mTextAlignV = textAlignV
; }
public boolean isShadow
() { return mShadow
; }
public void setShadow
(boolean shadow
) { mShadow = shadow
; }
public Vector4 getShadowColor
() { return mShadowColor
; }
public void setShadowColor
(Vector4 shadowColor
) { mShadowColor = shadowColor
; }
public Vector2 getShadowOffset
() { return mShadowOffset
; }
public void setShadowOffset
(Vector2 shadowOffset
) { mShadowOffset = shadowOffset
; }
}