Example #1
0
        public Queue <WorldObject> Draw(SpriteBatch spriteBatch, Camera camera, Player player)
        {
            var tileStartX = (int)(camera.X - ScreenProperties.ScreenWidth / 3.0f) / TileSize - 1;
            var tileStartY = (int)(camera.Y - ScreenProperties.ScreenHeight / 3.0f) / TileSize - 1;
            var tileEndX   = (int)(camera.X + ScreenProperties.ScreenWidth / 3.0f) / TileSize + 1;
            var tileEndY   = (int)(camera.Y + ScreenProperties.ScreenHeight / 3.0f) / TileSize + 1;

            tileStartX = MathHelper.Clamp(tileStartX, 0, MapWidth);
            tileEndX   = MathHelper.Clamp(tileEndX, 0, MapWidth);
            tileStartY = MathHelper.Clamp(tileStartY, 0, MapHeight);
            tileEndY   = MathHelper.Clamp(tileEndY, 0, MapHeight);

            for (var i = tileStartX; i < tileEndX; i++)
            {
                for (var j = tileStartY; j < tileEndY; j++)
                {
                    if (_tiles[i, j].IsDry)
                    {
                        var tilePos = RenderHelper.CalculateNeighbourBit(_tiles[i, j]);
                        var x       = tilePos % 4;
                        var y       = tilePos / 4;

                        spriteBatch.Draw(ContentChest.Grass,
                                         new Vector2(i * TileSize, j * TileSize), new Rectangle(x * TileSize, y * TileSize, TileSize, TileSize), Color.White);
                    }
                    else
                    {
                        var tileTop = _tiles[i, j].North;
                        if (tileTop != null && tileTop.IsDry)
                        {
                            spriteBatch.Draw(WaterEdgeAnimation.Current, new Vector2(i * TileSize, j * TileSize),
                                             Color.White);
                        }
                        else
                        {
                            spriteBatch.Draw(ContentChest.Water, new Vector2(i * TileSize, j * TileSize), Color.White);
                        }
                    }

                    if (_tiles[i, j].DroppedItem != null)
                    {
                        var item = _tiles[i, j].DroppedItem;
                        spriteBatch.Draw(ContentChest.Items[item.FileName], new Rectangle(i * TileSize, j * TileSize, TileSize, TileSize), Color.White);
                    }
                    if (_tiles[i, j].WorldObject != null)
                    {
                        _objectQueue.Enqueue(_tiles[i, j].WorldObject);
                    }
                }
            }

            var stillToDraw = new Queue <WorldObject>();

            while (_objectQueue.Count > 0)
            {
                var obj = _objectQueue.Dequeue();

                if (obj.Tile.Y > player.Tile.Y)
                {
                    stillToDraw.Enqueue(obj);
                    continue;
                }

                DrawObject(spriteBatch, obj);
            }

            return(stillToDraw);
        }