Ejemplo n.º 1
0
        public static Map Load(string filePath, ContentManager content)
        {
            Map map = null;

            var tmxMap = new TmxMap(filePath);

            Console.WriteLine("Loading map file: {0}", filePath);

            var layers = new Layer[tmxMap.Layers.Count + tmxMap.ObjectGroups.Count];

            var tilesets = new Tileset[tmxMap.Tilesets.Count];

            // Load the tilesets.
            for (int i = 0; i < tmxMap.Tilesets.Count; i++)
            {
                tilesets[i] = new Tileset(tmxMap.Tilesets[i], content);
            }

            for (int i = 0; i < tmxMap.Layers.Count; i++)
            {
                var tmxLayer = tmxMap.Layers[i];

                var graphicsDevice = (content.ServiceProvider.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService).GraphicsDevice;

                var tiles = new Tile[tmxLayer.Tiles.Count];

                for (int b = 0; b < tmxLayer.Tiles.Count; b++)
                {
                    tiles[b] = LoadTile(tmxLayer, tmxLayer.Tiles[b], tilesets, content, graphicsDevice);
                }

                layers[i] = new Layer(tiles, tmxMap.Layers[i].ZOrder);
            }

            MapObjectLoader gameObjectLoader = new MapObjectLoader();
            Layer[] objectLayers = gameObjectLoader.LoadObjectLayers(tmxMap, content);

            // Copy the objectLayers array to the layers array, starting at the first available slot, which is at the end of the tile layers.
            Array.Copy(objectLayers, 0, layers, tmxMap.Layers.Count, objectLayers.Length);

            // Sort the layers properly.
            Array.Sort(layers, (a, b) => a.ZOrder.CompareTo(b.ZOrder));

            map = new Map()
            {
                _layers = layers,
                _size = new Point(tmxMap.Width, tmxMap.Height),
                _spawnInformation = gameObjectLoader
            };

            Console.WriteLine("Finished loading map file: {0}", filePath);

            return map;
        }
Ejemplo n.º 2
0
        public Tile(Tileset tileset, Rectangle sourceRect, Vector2 position, double opacity)
        {
            _tileset = tileset;
            _position = position;
            _sourceRect = sourceRect;

            _opacity = (byte)(opacity * 255);

            if (_tileset != null)
                _destRect = new Rectangle((int)(position.X), (int)(position.Y), tileset.TileWidth, tileset.TileHeight);
        }
Ejemplo n.º 3
0
        private static Tile LoadTile(TmxLayer tmxLayer, TmxLayerTile tmxTile, Tileset[] tilesets, ContentManager content, GraphicsDevice graphicsDevice)
        {
            Tile tile = null;

            if (tmxTile.Gid != 0)
            {
                // Try and find the tileset.
                foreach (var tileset in tilesets)
                {
                    if (tmxTile.Gid >= tileset.FirstGid && tmxTile.Gid <= tileset.LastGid)
                    {
                        int srcY = (((tmxTile.Gid - tileset.FirstGid) / tileset.TilesPerRow) * 32);
                        int srcX = (((tmxTile.Gid - tileset.FirstGid) % tileset.TilesPerRow) * 32);

                        tile = new Tile(tileset, new Rectangle(srcX, srcY, tileset.TileWidth, tileset.TileHeight), new Vector2(tmxTile.X * 32, tmxTile.Y * 32), tmxLayer.Opacity);

                        break;
                    }
                }
            }

            return tile ?? new Tile(null, new Rectangle(), Vector2.Zero, tmxLayer.Opacity);
        }