Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.bauzoid.menu;

import com.badlogic.gdx.files.FileHandle;
import com.gebauz.bauzoid.app.Consts;
import com.gebauz.bauzoid.game.Game;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.Vector3;
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;

/** Utility functions for Menu handling. */
public class MenuUtil
{
        // Constants========================================================================================
        public static final String LOG_TAG = Consts.LOG_TAG + ":MenuUtil";
       
        // Static variables=================================================================================
        public static boolean verbose = true;
       
        // Embedded Types===================================================================================

        // Methods==========================================================================================

        public static Menu createMenuFromFile(Game game, FileHandle file)
        {
                String fileContents = Preprocessor.stripComments(file.readString());
               
                Menu menu = null;
               
                try
                {
                        Tokenizer tokenizer = new Tokenizer(fileContents);
                        tokenizer.setStringDelimiter(new char[] {'\'', '"'} );
                       
                        while (!tokenizer.checkNoMoreTokens())
                        {
                                String identifier = tokenizer.readIdentifier();
                               
                                if (identifier.equalsIgnoreCase("Menu"))
                                {
                                        String menuName = tokenizer.readString();
                                       
                                        menu = new Menu(game, menuName);
                                       
                                        tokenizer.readToken("{");                                      
                                        while (!tokenizer.checkToken("}"))
                                        {
                                                menu.parseLine(tokenizer);
                                        }                                      
                                        tokenizer.readToken("}");
                                }
                                else
                                {
                                        throw new ScanException(LOG_TAG, "Syntax error at: " + tokenizer.getSurroundings());
                                }
                        }
                }
                catch (ScanException e)
                {
                        e.log(LOG_TAG);
                        if (menu != null)
                        {
                                menu.exit();
                                menu = null;
                        }
                }
               
                return menu;
        }
       
        // Parsing Tools======================================================================================
       
       
        public static HorizontalAlign stringToHorizontalAlignment(String align)
        {
                if (align.equalsIgnoreCase("right"))
                        return HorizontalAlign.RIGHT;
                else if (align.equalsIgnoreCase("center"))
                        return HorizontalAlign.CENTER;
                else //if (align.equalsIgnoreCase("left"))
                        return HorizontalAlign.LEFT;
        }
       
        public static VerticalAlign stringToVerticalAlignment(String align)
        {
                if (align.equalsIgnoreCase("bottom"))
                        return VerticalAlign.BOTTOM;
                else if (align.equalsIgnoreCase("center"))
                        return VerticalAlign.CENTER;
                else //if (align.equalsIgnoreCase("left"))
                        return VerticalAlign.TOP;
        }
       
        public static float parseNumber(Tokenizer t) throws ScanException
        {
                float result = t.readNumber();
                t.readToken(";");
                return result;
        }
       
        public static Vector2 parseVector2(Tokenizer t) throws ScanException
        {
                Vector2 result = new Vector2();
                result.x = t.readNumber();
                t.readToken(",");
                result.y = t.readNumber();
                t.readToken(";");
                return result;
        }
       
        public static Vector3 parseVector3(Tokenizer t) throws ScanException
        {
                Vector3 result = new Vector3();
                result.x = t.readNumber();
                t.readToken(",");
                result.y = t.readNumber();
                t.readToken(",");
                result.z = t.readNumber();
                t.readToken(";");
                return result;
        }
       
        public static Vector4 parseVector4(Tokenizer t) throws ScanException
        {
                Vector4 result = new Vector4();
                result.x = t.readNumber();
                t.readToken(",");
                result.y = t.readNumber();
                t.readToken(",");
                result.z = t.readNumber();
                t.readToken(",");
                result.w = t.readNumber();
                t.readToken(";");
                return result;
        }
       
        public static String parseString(Tokenizer t, String defaultValue) throws ScanException
        {
                String result = defaultValue;
                result = t.readString();
                t.readToken(";");
                return result;
        }
       
        public static String parseString(Tokenizer t) throws ScanException
        {
                return parseString(t, "");
        }
       
        public static boolean parseBool(Tokenizer t) throws ScanException
        {
                boolean result = false;
                String boolValue = t.readIdentifier();
               
                if (boolValue.equalsIgnoreCase("true"))
                        result = true;
                else if (boolValue.equalsIgnoreCase("false"))
                        result = false;
                else
                        throw new ScanException(Tokenizer.UNEXPECTED_TOKEN + " Expected boolean value (true/false)", t.getSurroundings());
               
                t.readToken(";");
               
                return result;
        }

}