Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid.graphics.sprite;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.gebauz.bauzoid.app.Consts;
import com.gebauz.bauzoid.parser.Preprocessor;
import com.gebauz.bauzoid.parser.ScanException;
import com.gebauz.bauzoid.parser.Tokenizer;

/** Utility functionality for sprites. */
public class SpriteUtil
{
        public static final String LOG_TAG = Consts.LOG_TAG + ":SpriteUtil";
        public static boolean verbose = true;
       
        private SpriteUtil() {}
       
        public static void log(String tag, String msg)
        {
                if (verbose)
                        Gdx.app.log(tag, msg);
        }
       
        static public SpriteRegionDefinition readSpriteRegionInfo(FileHandle file)
        {
                String fileContents = Preprocessor.stripComments(file.readString());
               
                SpriteRegionDefinition spriteInfo = new SpriteRegionDefinition();
               
                try
                {
                        Tokenizer tokenizer = new Tokenizer(fileContents);
                        tokenizer.setStringDelimiter(new char[] {'\'', '"'} );
                        while (!tokenizer.checkNoMoreTokens())
                        {
                                String identifier = tokenizer.readIdentifier();
                                if (identifier.equalsIgnoreCase("frame"))
                                {
                                        spriteInfo.frames.add(readFrameLine(tokenizer));
                                }
                                else
                                {
                                        throw new ScanException(LOG_TAG, "Syntax error at: " + tokenizer.getSurroundings());
                                }
                        }
                }
                catch (ScanException e)
                {
                        e.log(LOG_TAG);
                        return null;
                }
               
                if (spriteInfo.frames.size() == 0)
                {
                        log(LOG_TAG, "Atlas definition does not contain any frame information!");
                        return null;
                }
               
                return spriteInfo;
        }
       
/*      static public AtlasSprite createAtlasSpriteFromFile(Graphics graphics, String textureFile, FileHandle file)
        {
                AtlasDefinition spriteInfo = readAtlasSpriteInfo(file);
                if (spriteInfo != null)
                {
                        AtlasSprite sprite = new AtlasSprite(graphics, textureFile);
                        sprite.init();
                       
                        SpriteRegion regions[] = new SpriteRegion[spriteInfo.frames.size()];
                        for (int i = 0; i < spriteInfo.frames.size(); i++)
                        {
                                regions[i] = new SpriteRegion(sprite.getTexture(), spriteInfo.frames.get(i).x, spriteInfo.frames.get(i).y, spriteInfo.frames.get(i).w, spriteInfo.frames.get(i).h);
                        }
                        sprite.setRegions(regions);

                        return sprite;
                }                              
                return null;
        }*/

       
        /*static private String readTextureLine(Tokenizer t) throws ScanException
        {
                String result = t.readString();
                t.readToken(";");
                return result;
        }*/

       
        static private SpriteRegionDefinition.FrameInfo readFrameLine(Tokenizer t) throws ScanException
        {
                float x = 0;
                float y = 0;
                float w = 0;
                float h = 0;
               
                x = t.readNumber();
                t.readToken(", ");
               
                y = t.readNumber();
                t.readToken(", ");
               
                w = t.readNumber();
                t.readToken(", ");
               
                h = t.readNumber();
                t.readToken(";");
               
                return new SpriteRegionDefinition.FrameInfo(x, y, w, h);
        }

//      public AnimatedSprite createAnimatedSpriteFromFile(Graphics graphics, FileHandle file)
//      {
//              return null;
//      }

}