Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

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