public override bool InitOne(ContentManager content, int id)
        {
            XmlDocument _doc = new XmlDocument();
            _doc.Load(_xmlInfo);
            XmlNode _map = _doc.SelectSingleNode(@"//Map[@id = '" + id.ToString() + "']");

            _prototype[id] = new Map();
            int _cols = int.Parse(_map.SelectSingleNode("Width").InnerText);
            int _rows = int.Parse(_map.SelectSingleNode("Height").InnerText);
            int _pieceWidth = int.Parse(_map.SelectSingleNode("PieceWidth").InnerText);
            int _pieceHeight = int.Parse(_map.SelectSingleNode("PieceHeight").InnerText);
            int _npiece = _prototype[id]._nsprite = _cols * _rows;
            _prototype[id]._sprite = new GameSprite[_npiece];
            string contentName = _map.SelectSingleNode("ContentName").InnerText;
            for (int i = 0; i < _npiece; ++i)
            {
                _prototype[id]._sprite[i] = new GameSprite(content.Load<Texture2D>(contentName + i.ToString("0000")), (i % _cols) * _pieceWidth, (i / _cols) * _pieceHeight);
            }
            ((Map)_prototype[id]).Width = _prototype[id]._sprite[0].Texture2D[0].Width * _cols;
            ((Map)_prototype[id]).Height = _prototype[id]._sprite[0].Texture2D[0].Height * _rows;
            ((Map)_prototype[id]).Cols = _cols;
            ((Map)_prototype[id]).Rows = _rows;
            ((Map)_prototype[id]).RpF = GlobalVariables.ScreenHeight / _pieceHeight + 1;
            ((Map)_prototype[id]).CpF = GlobalVariables.ScreenWidth / _pieceWidth + 1;
            ((Map)_prototype[id]).StartPointX = int.Parse(_map.SelectSingleNode("StartPointX").InnerText);
            ((Map)_prototype[id]).StartPointY = int.Parse(_map.SelectSingleNode("StartPointY").InnerText);
            ((Map)_prototype[id]).PieceWidth = int.Parse(_map.SelectSingleNode(@"PieceWidth").InnerText);
            ((Map)_prototype[id]).PieceHeight = int.Parse(_map.SelectSingleNode(@"PieceHeight").InnerText);

            string collisionName = _map.SelectSingleNode("Collision").InnerText;
            List<List<bool>> matrix = new List<List<bool>>();
            int collisionUnitDim = int.Parse(_map.SelectSingleNode("CollisionUnitDim").InnerText);
            int collisionMatrixWith = (int)((Map)_prototype[id]).Width / collisionUnitDim;
            int collisionMatrixHeight = (int)((Map)_prototype[id]).Height / collisionUnitDim;
            FileStream f = File.OpenRead(collisionName);

            List<bool> temp = new List<bool>();
            while (true)
            {
                int i = f.ReadByte();
                if (i == -1)
                    break;
                if (i == '\r' || i == ' ' || i == '\n')
                    continue;
                if (i == '1')
                    temp.Add(true);
                else
                    temp.Add(false);
                if (temp.Count == collisionMatrixWith)
                {
                    matrix.Add(temp);
                    temp = new List<bool>();
                }
            }
            ((Map)_prototype[id]).Matrix = matrix;
            ((Map)_prototype[id]).CollisionDim = collisionUnitDim;
            ((Map)_prototype[id]).MapName = _map.SelectSingleNode(@"MapName").InnerText;

            return true;
        }
 public override void SetMap(Map map)
 {
     base.SetMap(map);
     X = map.StartPointX * map.CollisionDim;
     Y = map.StartPointY * map.CollisionDim;
     GlobalVariables.dX = Math.Min(-X + GlobalVariables.ScreenWidth / 2, 0);
     GlobalVariables.dY = Math.Min(-Y + GlobalVariables.ScreenHeight / 2, 0);
     DestPoint = new Point((int)X, (int)Y);
 }
        public override void InitState(ContentManager content, MainGame owner)
        {
            base.InitState(content, owner);
            GlobalVariables.MonsterManager = new MonsterManager();
            GlobalVariables.MonsterManager.InitPrototypes(content, @"Data\monster\monster.xml");
            _charManager.InitPrototypes(content, @"Data\character\character.xml");
            _mapManager.InitPrototypes(content, @"Data\Map\map01.xml");
            _map = (Map)_mapManager.CreateObject(0);
            GlobalVariables.MapCollisionDim = _map.CollisionDim;
            _char = (PlayerCharacter)_charManager.CreateObject(0);
            _char.SetMap(_map);
            _listMonsters = _map.InitMonsterList();

            _frog = new Frog();
            _frog.Init(content);
            _frog.SetCharacter(_char);
        }
 /// <summary>
 /// Gán nhân vật với bản đồ
 /// </summary>
 /// <param name="map">Bản đồ cần gán</param>
 public virtual void SetMap(Map map)
 {
     _map = map;
     cellToMove = new List<Point>();
     IsStanding = true;
     _destPoint = new Point((int)X, (int)Y);
 }
        public override void InitState(GameObjectManager[] objectManagerArray, MainGame owner)
        {
            base.InitState(objectManagerArray, owner);
            _map = (Map)objectManagerArray[1].CreateObject(0);
            GlobalVariables.MapCollisionDim = _map.CollisionDim;
            _char = (PlayerCharacter)objectManagerArray[0].CreateObject(0);
            _char.SetMap(_map);
            _char.StateOwner = this;

            _map.Owner = this;
            _listMonsters = _map.InitMonsterList((MonsterManager)objectManagerArray[2],@"Data\Map\map01\map01_monster.xml");

            _frog = new Fog();
            _frog.Init(owner.Content);
            _frog.SetCharacter(_char);

            _displayMessageLayer = new DisplayMessageLayer();

            //Phần ???---------------------------------------------------------------------------
            _listPortral = _map.InitPortralList((PortralManager)objectManagerArray[4], @"Data\Map\map01\map01_portral.xml");
            _listObstacle = _map.InitObstacle((MapObstacleManager)objectManagerArray[5], @"Data\Map\map01\map01_obstacle.xml");
            _objectManagerArray = objectManagerArray;
            _listToDraw = new List<VisibleGameEntity>();

            _char.InitSkill();

            //Phần healthbar--------------------------------------------------------------------
            _healthBar = new HealthBar();
            _healthBar.SetCharacter(_char);

            List<GameObjectManager> _resourcesForHealthbar = new List<GameObjectManager>();
            _resourcesForHealthbar.Add(objectManagerArray[8]);
            _resourcesForHealthbar.Add(objectManagerArray[9]);
            _resourcesForHealthbar.Add(objectManagerArray[10]);
            _resourcesForHealthbar.Add(objectManagerArray[11]);
            _healthBar.GetResources(_resourcesForHealthbar);

            //Phần SkillBoard------------------------------------------------------------------
            _skillBoard = new SkillBoard();
            _skillBoard.SetCharacter(_char);

            List<GameObjectManager> _resourcesForSkillBoard = new List<GameObjectManager>();
            _resourcesForSkillBoard.Add(objectManagerArray[8]);
            _resourcesForSkillBoard.Add(objectManagerArray[10]);
            _resourcesForSkillBoard.Add(objectManagerArray[11]);
            _skillBoard.GetResources(_resourcesForSkillBoard);

            //Phần Left-hand selection frame
            _lhSkillSelectionFrame = new LHSkillSelectionFrame();
            _lhSkillSelectionFrame.SetCharacter(_char);

            List<GameObjectManager> _resourceForLHSSelectionFrame = new List<GameObjectManager>();
            _resourceForLHSSelectionFrame.Add(_objectManagerArray[8]);
            _resourceForLHSSelectionFrame.Add(_objectManagerArray[10]);
            _lhSkillSelectionFrame.GetResources(_resourceForLHSSelectionFrame);

            //Phần Right-hand selection frame
            _rhSkillSelectionFrame = new RHSkillSelectionFrame();
            _rhSkillSelectionFrame.SetCharacter(_char);
            _rhSkillSelectionFrame.GetResources(_resourceForLHSSelectionFrame);

            //Phần subMenu
            _subMenu = new SubMenu();
            List<GameObjectManager> _resourceForSubMenu = new List<GameObjectManager>();
            _resourceForSubMenu.Add(_objectManagerArray[8]);
            _resourceForSubMenu.Add(_objectManagerArray[10]);
            _subMenu.GetResources(_resourceForSubMenu);
            _subMenu.GetStateOwner(this);

            //Phần infoBoard
            _infoBoard = new InfoBoard();
            _infoBoard.SetCharacter(_char);
            List<GameObjectManager> _resourceForInfo = new List<GameObjectManager>();
            _resourceForInfo.Add(_objectManagerArray[8]);
            _resourceForInfo.Add(_objectManagerArray[10]);
            _resourceForInfo.Add(_objectManagerArray[11]);
            _infoBoard.GetResources(_resourceForInfo);
        }
        public override bool InitPrototypes(ContentManager content, string fileName)
        {
            try
            {
                _nprototype = 1;
                _prototype = new Map[_nprototype];
                _prototype[0] = new Map();
                XmlDocument doc = new XmlDocument();
                doc.Load(fileName);
                int _cols = int.Parse(doc.SelectSingleNode("//Width").InnerText);
                int _rows = int.Parse(doc.SelectSingleNode("//Height").InnerText);
                int _pieceWidth = int.Parse(doc.SelectSingleNode("//PieceWidth").InnerText);
                int _pieceHeight = int.Parse(doc.SelectSingleNode("//PieceHeight").InnerText);
                int _npiece = _prototype[0]._nsprite = _cols * _rows;
                _prototype[0]._sprite = new GameSprite[_npiece];
                string contentName = doc.SelectSingleNode("//ContentName").InnerText;
                for (int i = 0; i < _npiece; ++i)
                {
                    _prototype[0]._sprite[i] = new GameSprite(content.Load<Texture2D>(contentName + i.ToString("0000")),(i % _cols) * _pieceWidth,(i / _cols) * _pieceHeight);
                }
                ((Map)_prototype[0]).Width = _prototype[0]._sprite[0].Texture2D[0].Width * _cols;
                ((Map)_prototype[0]).Height = _prototype[0]._sprite[0].Texture2D[0].Height * _rows;
                ((Map)_prototype[0]).Cols = _cols;
                ((Map)_prototype[0]).Rows = _rows;
                ((Map)_prototype[0]).RpF = GlobalVariables.ScreenHeight / _pieceHeight + 1;
                ((Map)_prototype[0]).CpF = GlobalVariables.ScreenWidth / _pieceWidth + 1;
                ((Map)_prototype[0]).StartPointX = int.Parse(doc.SelectSingleNode("//StartPointX").InnerText);
                ((Map)_prototype[0]).StartPointY = int.Parse(doc.SelectSingleNode("//StartPointY").InnerText);

                string collisionName = doc.SelectSingleNode("//Collision").InnerText;
                List<List<bool>> matrix = new List<List<bool>>();
                int collisionUnitDim = int.Parse(doc.SelectSingleNode("//CollisionUnitDim").InnerText);
                int collisionMatrixWith = (int)((Map)_prototype[0]).Width / collisionUnitDim;
                int collisionMatrixHeight = (int)((Map)_prototype[0]).Height / collisionUnitDim;
                FileStream f = File.OpenRead(collisionName);

                List<bool> temp = new List<bool>();
                while (true)
                {
                    int i = f.ReadByte();
                    if (i == -1)
                        break;
                    if (i == '\r' || i == ' ' || i == '\n')
                        continue;
                    if (i == '1')
                        temp.Add(true);
                    else
                        temp.Add(false);
                    if (temp.Count == collisionMatrixWith)
                    {
                        matrix.Add(temp);
                        temp = new List<bool>();
                    }
                }
                ((Map)_prototype[0]).Matrix = matrix;
                ((Map)_prototype[0]).CollisionDim = collisionUnitDim;

                XmlNodeList Monsters = doc.SelectNodes(@"//Monster");
                ((Map)_prototype[0]).LstMonster = new List<Monster>();
                for (int i = 0; i < Monsters.Count; ++i)
                {
                    Monster mst = (Monster)GlobalVariables.MonsterManager.CreateObject(int.Parse(Monsters[i].SelectSingleNode(@"Type").InnerText));
                    ((Map)_prototype[0]).LstMonster.Add(mst);
                    ((Map)_prototype[0]).LstMonster[i].X = int.Parse(Monsters[i].SelectSingleNode(@"X").InnerText) * collisionUnitDim;
                    ((Map)_prototype[0]).LstMonster[i].Y = int.Parse(Monsters[i].SelectSingleNode(@"Y").InnerText) * collisionUnitDim;
                    ((Map)_prototype[0]).LstMonster[i].DestPoint = new Point((int)((Map)_prototype[0]).LstMonster[i].X, (int)((Map)_prototype[0]).LstMonster[i].Y);
                    ((Map)_prototype[0]).LstMonster[i].CellToMove = new List<Point>();
                    ((Map)_prototype[0]).LstMonster[i].SetMap((Map)_prototype[0]);
                }

                 return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }