Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid2.graphics.sprite;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.gebauz.bauzoid2.parser.Preprocessor;
import com.gebauz.bauzoid2.parser.ScanException;
import com.gebauz.bauzoid2.parser.Tokenizer;

/** Utility functionality for sprites. */
public class SpriteUtil
{
        public static final String 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 SpriteSheetDefinition readSpriteRegionInfo(FileHandle file)
        {
                String fileContents = Preprocessor.stripComments(file.readString());
               
                SpriteSheetDefinition spriteInfo = new SpriteSheetDefinition();
               
                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 private SpriteSheetDefinition.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 SpriteSheetDefinition.FrameInfo(x, y, w, h);
        }

}