public LevelEditorState(Surface _sfcGameWindow, string _name = "untitled") : base(_sfcGameWindow)
        {
            camera     = new Camera();
            name       = _name;
            map        = new Map();
            map.editor = true;
            vecPlayer  = new Vector(new Point(2, 3));
            player     = new EditorSprite(vecPlayer, new Player(0, 0));
            enemies    = new List <EditorSprite> ();
            if (name.EndsWith(".xml"))
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(Constants.Constants.GetResourcePath(name));
                map.FromXML(doc);
                XmlNode p = doc.SelectSingleNode("//player");
                player.gridPos.X = Convert.ToInt16(p.Attributes ["x"].InnerText);
                player.gridPos.Y = Convert.ToInt16(p.Attributes ["y"].InnerText);
                name             = name.Replace(".xml", "");
                foreach (XmlNode node in doc.SelectNodes("//enemy"))
                {
                    EnemyType    typ   = (EnemyType)Enum.Parse(typeof(EnemyType), node.Attributes ["type"].InnerText);
                    int          x     = Convert.ToInt16(node.Attributes ["x"].InnerText);
                    int          y     = Convert.ToInt16(node.Attributes ["y"].InnerText);
                    Enemy        enemy = Enemy.GetEnemy(typ, x, y);
                    EditorSprite s     = new EditorSprite(new Vector(new Point(x, y)), enemy);
                    Vector       vec   = map.GetTilePos(x, y);
                    s.x    = vec.X;
                    s.y    = vec.Y;
                    s.data = (object)typ;
                    enemies.Add(s);
                }
            }
            else
            {
                map.EmptyMap();
            }

            Vector v = map.GetTilePos((int)player.gridPos.X, (int)player.gridPos.Y);

            player.x = v.X;
            player.y = v.Y;

            grid = new EditorGrid();

            List <MenuObject> menuObjs = new List <MenuObject> ();

            foreach (TileType typ in Enum.GetValues(typeof(TileType)))
            {
                MenuText t = new MenuText(typ.ToString(), Color.Gold, Color.Black, TEXT_SIZE);
                menuObjs.Add(t);
            }
            foreach (EnemyType typ in Enum.GetValues(typeof(EnemyType)))
            {
                MenuText t = new MenuText(typ.ToString(), Color.Gold, Color.Gray, TEXT_SIZE);
                menuObjs.Add(t);
            }
            MenuText menuNoEnemy = new MenuText("NoEnemy", Color.Gold, Color.Gray, TEXT_SIZE);

            menuObjs.Add(menuNoEnemy);
            MenuText menuPlayer = new MenuText("Player", Color.Gold, Color.Blue, TEXT_SIZE);

            menuObjs.Add(menuPlayer);
            MenuText menuSave = new MenuText("Save", Color.Gold, Color.Red, TEXT_SIZE);

            menuSave.selectedHandler += EventSave;
            menuObjs.Add(menuSave);
            MenuText menuDelete = new MenuText("Delete", Color.Gold, Color.Red, TEXT_SIZE);

            menuDelete.selectedHandler += EventDelete;
            menuObjs.Add(menuDelete);
            MenuText menuQuit = new MenuText("Exit", Color.Gold, Color.Red, TEXT_SIZE);

            menuQuit.selectedHandler += delegate(MenuObject obj) {
                backToMenuHandler(obj);
            };
            menuObjs.Add(menuQuit);
            MenuText menuName = new MenuText(name, Color.Green, Color.Green, TEXT_SIZE);

            menuObjs.Add(menuName);
            menu = new Menu(menuObjs, MenuLayout.Horizontal, 5, 700);
            GenerateMenuBackground();
        }
        public LevelEditorState(Surface _sfcGameWindow, string _name="untitled")
            : base(_sfcGameWindow)
        {
            camera = new Camera ();
            name = _name;
            map = new Map ();
            map.editor = true;
            vecPlayer = new Vector (new Point (2, 3));
            player = new EditorSprite (vecPlayer, new Player (0, 0));
            enemies = new List<EditorSprite> ();
            if (name.EndsWith (".xml")) {
                XmlDocument doc = new XmlDocument ();
                doc.Load (Constants.Constants.GetResourcePath (name));
                map.FromXML (doc);
                XmlNode p = doc.SelectSingleNode ("//player");
                player.gridPos.X = Convert.ToInt16 (p.Attributes ["x"].InnerText);
                player.gridPos.Y = Convert.ToInt16 (p.Attributes ["y"].InnerText);
                name = name.Replace (".xml", "");
                foreach (XmlNode node in doc.SelectNodes("//enemy")) {
                    EnemyType typ = (EnemyType)Enum.Parse (typeof(EnemyType), node.Attributes ["type"].InnerText);
                    int x = Convert.ToInt16 (node.Attributes ["x"].InnerText);
                    int y = Convert.ToInt16 (node.Attributes ["y"].InnerText);
                    Enemy enemy = Enemy.GetEnemy (typ, x, y);
                    EditorSprite s = new EditorSprite (new Vector (new Point (x, y)), enemy);
                    Vector vec = map.GetTilePos (x, y);
                    s.x = vec.X;
                    s.y = vec.Y;
                    s.data = (object)typ;
                    enemies.Add (s);
                }
            } else {
                map.EmptyMap ();
            }

            Vector v = map.GetTilePos ((int)player.gridPos.X, (int)player.gridPos.Y);
            player.x = v.X;
            player.y = v.Y;

            grid = new EditorGrid ();

            List<MenuObject > menuObjs = new List<MenuObject> ();
            foreach (TileType typ in Enum.GetValues(typeof(TileType))) {
                MenuText t = new MenuText (typ.ToString (), Color.Gold, Color.Black, TEXT_SIZE);
                menuObjs.Add (t);
            }
            foreach (EnemyType typ in Enum.GetValues(typeof(EnemyType))) {
                MenuText t = new MenuText (typ.ToString (), Color.Gold, Color.Gray, TEXT_SIZE);
                menuObjs.Add (t);
            }
            MenuText menuNoEnemy = new MenuText ("NoEnemy", Color.Gold, Color.Gray, TEXT_SIZE);
            menuObjs.Add (menuNoEnemy);
            MenuText menuPlayer = new MenuText ("Player", Color.Gold, Color.Blue, TEXT_SIZE);
            menuObjs.Add (menuPlayer);
            MenuText menuSave = new MenuText ("Save", Color.Gold, Color.Red, TEXT_SIZE);
            menuSave.selectedHandler += EventSave;
            menuObjs.Add (menuSave);
            MenuText menuDelete = new MenuText ("Delete", Color.Gold, Color.Red, TEXT_SIZE);
            menuDelete.selectedHandler += EventDelete;
            menuObjs.Add (menuDelete);
            MenuText menuQuit = new MenuText ("Exit", Color.Gold, Color.Red, TEXT_SIZE);
            menuQuit.selectedHandler += delegate(MenuObject obj) {
                backToMenuHandler (obj);
            };
            menuObjs.Add (menuQuit);
            MenuText menuName = new MenuText (name, Color.Green, Color.Green, TEXT_SIZE);
            menuObjs.Add (menuName);
            menu = new Menu (menuObjs, MenuLayout.Horizontal, 5, 700);
            GenerateMenuBackground ();
        }