public override TileMap Process(TileMapData input, ContentProcessorContext context)
        {
            TileMap tileMap = new TileMap(input.TileWidth, input.TileWidth, input.Width, input.Height);

            foreach (var tsRef in input.TileSets)
            {
                string tsPath = $"{TILE_SET_PATH}/{Path.GetFileNameWithoutExtension(tsRef.Source)}";
                tileMap.AddTileSetReference(tsRef.FirstGid, tsPath);
            }

            foreach (var layer in input.Layers)
            {
                TileMatrix tileMatrix = TileMatrix.ParseCsv(layer.Data);
                tileMap.AddLayer(new TileMapTileLayer(tileMap, layer.Id, layer.Name, tileMatrix));
            }

            foreach (var objGroup in input.ObjectGroups)
            {
                TileMapObjectLayer objLayer = new TileMapObjectLayer(tileMap, objGroup.Id, objGroup.Name);
                tileMap.AddLayer(objLayer);

                foreach (var objData in objGroup.Objects)
                {
                    if (objData.Point != null)
                    {
                        var pointObj = new TileMapPointObject(objData.Name, objData.Type, objData.Id, (float)objData.X, (float)objData.Y);
                        ProcessObjectProperties(objData, pointObj);

                        objLayer.AddObject(pointObj);
                    }
                    else if (objData.Polygon != null)
                    {
                        IEnumerable <Vector2> vertices = objData.Polygon.GetVertices();
                        var polygonObj = new TileMapPolygonObject(vertices, objData.Name, objData.Type, objData.Id, (float)objData.X, (float)objData.Y);

                        objLayer.AddObject(polygonObj);
                    }
                    else
                    {
                        TileMapRectangleObject tileMapRectangleObject = new TileMapRectangleObject(objData.Width, objData.Height, objData.Name, objData.Type, objData.Id, (float)objData.X, (float)objData.Y);

                        objLayer.AddObject(tileMapRectangleObject);
                    }
                }
            }

            return(tileMap);
        }