Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.Bauzoid.graphics;

import com.gebauz.Bauzoid.graphics.sprite.AtlasSprite;
import com.gebauz.Bauzoid.graphics.sprite.AtlasSpriteInstance;
import com.gebauz.Bauzoid.math.Vector4;

public class Font extends GraphicsObject
{
       
        public static class CharacterInfo
        {
                private char mCharacter;
                private AtlasSpriteInstance mSpriteInstance = null;
               
                public float offsetX = 0;
                public float offsetY = 0;
               
                public float width;
       
                public CharacterInfo(char c)
                {
                        mCharacter = c;
                }
               
                public final char getCharacter()
                {
                        return mCharacter;
                }
               
                public void setSpriteInstance(AtlasSpriteInstance instance)
                {
                        mSpriteInstance = instance;
                }
               
                public final AtlasSpriteInstance getSpriteInstance()
                {
                        return mSpriteInstance;
                }
               
                public void render()
                {
                        if (mSpriteInstance == null)
                                return;
                       
                        mSpriteInstance.render();
                }
        }
       
        private CharacterInfo[] mCharacters = null;
        private float mAscent = 0.0f;
        private AtlasSprite mSprite = null;

        public Font(Graphics graphics)
        {
                super(graphics);

        }
       
        public void dispose()
        {
                mCharacters = null;            
        }
       
        public void setAscent(float ascent)
        {
                mAscent = ascent;
        }
       
        public void setCharacters(CharacterInfo[] characters)
        {
                mCharacters = characters;
        }
       
        public void setSprite(AtlasSprite sprite)
        {
                mSprite = sprite;
        }
       
        public void drawText(String text, float x, float y, Vector4 color)
        {
                drawText(text, x, y, color, 1.0f);
        }
       
        public void drawText(String text, float x, float y, Vector4 color, float scale)
        {
                float posX = x;
                float posY = y;
               
                for (int i = 0; i < text.length(); i++)
                {
                        if (text.charAt(i) == '\n')
                        {
                                posY += mAscent * scale;
                                posX = x;
                                continue;
                        }
                       
                        int n = getCharacterIndex(text.charAt(i));
                        if (n == -1)
                        {
                                n = getCharacterIndex(Character.toLowerCase(text.charAt(i)));
                                if (n == -1)
                                {
                                        n = getCharacterIndex(Character.toUpperCase(text.charAt(i)));
                                        if (n == -1)
                                                continue;
                                }
                        }
                       
                        CharacterInfo c = mCharacters[n];
                       
                        if (c.mSpriteInstance != null)
                        {                      
                                c.mSpriteInstance.x = posX;
                                c.mSpriteInstance.y = posY;
                                c.mSpriteInstance.color = color;
                                c.mSpriteInstance.w = mSprite.getRegionWidth(c.mSpriteInstance.getRegionIndex()) * scale;
                                c.mSpriteInstance.h = mSprite.getRegionHeight(c.mSpriteInstance.getRegionIndex()) * scale;
                                c.render();
                        }
                       
                        posX += c.width * scale;
                }
        }
       
        public int getCharacterIndex(char c)
        {
                for (int i = 0; i < mCharacters.length; i++)
                {
                        if (mCharacters[i].getCharacter() == c)
                                return i;
                }
               
                return -1;
        }
       
        public CharacterInfo getCharacter(char c)
        {
                int i = getCharacterIndex(c);
               
                if (i != -1)
                        return mCharacters[i];
               
                return null;
        }

}