MrGravity.Import_Code.Importer.GetWalls C# (CSharp) Method

GetWalls() public method

UNUSED FOR NOW. MAY IN THE FUTURE, GATHER ALL THE INFO UP AND MAKE BIGGER BOUNDING BOXES FOR ENTIRE WALLS
public GetWalls ( Level level ) : List
level Level
return List
        public List<StaticObject> GetWalls(Level level)
        {
            var gridSize = GridSpace.GetGridCoord(level.Size);

            var final = new List<StaticObject>();

            var walls = new List<StaticObject>();
            var rows = new List<StaticObject>[(int)gridSize.Y];
            var cols = new List<StaticObject>[(int)gridSize.X];
            foreach (var entity in _mEntities)
                if (entity.MType == XmlKeys.Walls)
                    walls.Add(new Tile(_mContent, .8f, entity));

            CreateSortedIndicies(walls, rows, false);
            for(var i = 0; i < rows.Length; i++)
            {
                var next = -1;
                var collisionType = "";
                var wall = new List<StaticObject>();
                foreach (var obj in rows[i])
                {
                    var gridLoc = GridSpace.GetGridCoord(obj.MPosition);
                    if ((gridLoc.X != next || !collisionType.Equals(obj.CollisionType)) && wall.Count > 0)
                    {
                        if (wall.Count > 1)
                            final.Add(new Wall(.8f, wall));
                        else
                            walls.Add(wall[0]);

                        next = -1;
                        collisionType = "";
                        wall.Clear();
                    }

                    if(wall.Count == 0)
                    {
                        walls.Remove(obj);
                        wall.Add(obj);
                        next = (int)gridLoc.X + 1;
                        collisionType = obj.CollisionType;
                    }
                    else if (gridLoc.X == next && collisionType.Equals(obj.CollisionType))
                    {
                        walls.Remove(obj);
                        wall.Add(obj);
                        next++;
                    }
                }
                if (wall.Count > 0)
                {
                    if (wall.Count > 1)
                        final.Add(new Wall(.8f, wall));
                    else
                        walls.Add(wall[0]);

                    wall.Clear();
                }
            }

            CreateSortedIndicies(walls, cols,true);
            for (var i = 0; i < cols.Length; i++)
            {
                var next = -1;
                var collisionType = "";
                var wall = new List<StaticObject>();
                foreach (var obj in cols[i])
                {
                    var gridLoc = GridSpace.GetGridCoord(obj.MPosition);
                    if ((gridLoc.Y != next || !collisionType.Equals(obj.CollisionType)) && wall.Count > 0)
                    {
                        if (wall.Count > 1)
                            final.Add(new Wall(.8f, wall));
                        else
                            walls.Add(wall[0]);

                        next = -1;
                        wall.Clear();
                    }

                    if (wall.Count == 0)
                    {
                        walls.Remove(obj);
                        wall.Add(obj);
                        next = (int)gridLoc.Y + 1;
                        collisionType = obj.CollisionType;
                    }
                    else if (gridLoc.Y == next && collisionType.Equals(obj.CollisionType))
                    {
                        walls.Remove(obj);
                        wall.Add(obj);
                        next++;
                    }
                }

                if (wall.Count > 0)
                {
                    if (wall.Count > 1)
                        final.Add(new Wall(.8f, wall));
                    else
                        walls.Add(wall[0]);

                    wall.Clear();
                }
            }

            final.AddRange(walls);

            return final;
        }

Usage Example

Esempio n. 1
0
        /// <summary>
        /// Loads the level from the content manager
        /// </summary>
        /// <param name="content">Content Manager to load from</param>
        public void Load(ContentManager content)
        {
            _mObjects.Clear();
            Reset();

            var importer = new Importer(content);
            importer.ImportLevel(this);

            _mPlayer = new Player(content, ref _mPhysicsEnvironment,
                _mControls, .8f, EntityInfo.CreatePlayerInfo(GridSpace.GetGridCoord(StartingPoint)));

            _mObjects.Add(_mPlayer);
            _mObjects.AddRange(importer.GetObjects(ref _mPhysicsEnvironment));

            _mPlayerEnd = importer.GetPlayerEnd();
            if (_mPlayerEnd != null)
                _mObjects.Add(_mPlayerEnd);

            _mObjects.AddRange(importer.GetWalls(this).Cast<GameObject>());

            _mRails = importer.GetRails();

            _mTrigger.AddRange(importer.GetTriggers());

            PrepareCollisionMatrix();

            MNumCollected = 0;
            MNumCollectable = 0;

            //Clear the collection lists
            _mCollected.Clear();
            _mRemoveCollected.Clear();

            foreach (var gObject in _mObjects)
            {
                if (gObject.CollisionType == XmlKeys.Collectable)
                    MNumCollectable++;
            }
        }