public void LoadTileMapFromExisitingFile(string imagePath, ILoaderInterface loaderInterface) { TilesModel.LoadFromExistingFile(imagePath, loaderInterface); }
public void LoadTileMapFromExisitingFile(string imagePath, ILoaderInterface loaderInterface) { canvasWorldViewGroup.LoadTileMapFromExisitingFile(imagePath, loaderInterface); }
public static void LoadFromExistingFile(this ITilesModel tilesModel, String imagePath, ILoaderInterface loaderInterface = null) { if (tilesModel == null) { throw new Exception(); } Image background = Image.FromFile(imagePath); tilesModel.TileRows = background.Height / tilesModel.TileHeight; if (background.Height % tilesModel.TileHeight != 0) { tilesModel.TileRows++; } tilesModel.TileColumns = background.Width / tilesModel.TileWidth; if (background.Width % tilesModel.TileWidth != 0) { tilesModel.TileColumns++; } Image newImage = new Bitmap(tilesModel.TileColumns * tilesModel.TileWidth, tilesModel.TileRows * tilesModel.TileHeight); RectangleF r = new RectangleF(0, 0, background.Width, background.Height); Graphics.FromImage(newImage).DrawImageFromOtherImage(background, r, r); background.Dispose(); background = newImage; tilesModel.Matrix = new int[tilesModel.TileRows, tilesModel.TileColumns]; List <TileModel> tileModels = new List <TileModel>(); if (loaderInterface != null) { loaderInterface.EnableWaiting(); } int currentVolume = 0; for (int rIndex = 0; rIndex < tilesModel.TileRows; rIndex++) { for (int cIndex = 0; cIndex < tilesModel.TileColumns; cIndex++) { Rectangle cropedRect = new Rectangle(cIndex * tilesModel.TileWidth, rIndex * tilesModel.TileHeight, tilesModel.TileWidth, tilesModel.TileHeight); Image cropedImage = background.CropImage(cropedRect); TileModel tileHasImage = tileModels.TileHasImage(cropedImage); if (tileHasImage != null) { tilesModel.Matrix[rIndex, cIndex] = tileHasImage.Index; } else { TileModel tileModel = new TileModel() { Image = cropedImage, Index = tileModels.Count }; tileModels.Add(tileModel); tilesModel.Matrix[rIndex, cIndex] = tileModel.Index; } if (loaderInterface != null) { currentVolume++; loaderInterface.SetVolumeWaiting((int)100.0f * currentVolume / (tilesModel.TileRows * tilesModel.TileColumns)); } } } tilesModel.TilesheetColumns = (int)(Math.Sqrt(tileModels.Count)); int tileSheetColumns = tilesModel.TilesheetColumns; int tileSheetRows = tileModels.Count / tilesModel.TilesheetColumns; if (tileModels.Count % tilesModel.TilesheetColumns != 0) { tileSheetRows++; } tilesModel.Tilesheet = new Bitmap(tilesModel.TilesheetColumns * tilesModel.TileWidth, tileSheetRows * tilesModel.TileHeight); foreach (var tilesheet in tileModels) { int index = tilesheet.Index; int x = (index % tileSheetColumns) * tilesModel.TileWidth; int y = (index / tileSheetColumns) * tilesModel.TileHeight; Graphics.FromImage(tilesModel.Tilesheet).DrawImageFromOtherImage(tilesheet.Image, new RectangleF(0, 0, tilesheet.Image.Width, tilesheet.Image.Height), new RectangleF(x, y, tilesheet.Image.Width, tilesheet.Image.Height) ); tilesheet.Image.Dispose(); } background.Dispose(); if (loaderInterface != null) { loaderInterface.DisableWaiting(); } }