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); }
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); }