Ejemplo n.º 1
0
        public void Patch(Map targetMap, Diff mapDiff, ITileSheetProvider tileSheetProvider, IDisplayDevice displayDevice)
        {
            Utilities.MergeProperties(targetMap.Properties, mapDiff.Map.Properties);

            Diff.MapData mapData = mapDiff.Map;

            // Add tilesheets
            MergeTileSheets(targetMap, mapData.TileSheets, tileSheetProvider, displayDevice);

            MergeLayers(targetMap, mapData.Layers);
        }
Ejemplo n.º 2
0
        private void MergeTileSheets(Map targetMap, Diff.TileSheetData[] tileSheets, ITileSheetProvider tileSheetProvider, IDisplayDevice displayDevice)
        {
            if (tileSheets == null)
            {
                return;
            }

            void AddTileSheet(Diff.TileSheetData tileSheetData)
            {
                string    imageSource = tileSheetProvider.GetTileSheetPath(tileSheetData.Id);
                TileSheet tileSheet   = new TileSheet(
                    id: tileSheetData.Id,
                    map: targetMap,
                    imageSource: imageSource ?? tileSheetData.ImageSource,
                    sheetSize: tileSheetData.SheetSize,
                    tileSize: tileSheetData.TileSize
                    );

                targetMap.AddTileSheet(tileSheet);
            }

            foreach (Diff.TileSheetData tileSheetData in tileSheets)
            {
                TileSheet tileSheet = targetMap.GetTileSheet(tileSheetData.Id);
                switch (tileSheetData.EditType)
                {
                case EditType.Add:
                    AddTileSheet(tileSheetData);
                    break;

                case EditType.Delete:
                    targetMap.RemoveTileSheet(tileSheet);
                    break;

                case EditType.Merge:
                case EditType.Replace:
                    targetMap.RemoveTileSheet(tileSheet);
                    AddTileSheet(tileSheetData);
                    break;
                }
            }

            targetMap.LoadTileSheets(displayDevice);
        }