private TileGridLayer ProcessTileLayer(TileGridLayer layer, TilePool layerTilePool, Dictionary <Guid, Guid> tileUidMap) { MultiTileGridLayer outLayer = new MultiTileGridLayer(layer.Name, layer.TileWidth, layer.TileHeight, layer.TilesWide, layer.TilesHigh) { IsVisible = layer.IsVisible, Opacity = layer.Opacity, RasterMode = layer.RasterMode, }; foreach (Property prop in layer.PropertyManager.CustomProperties) { outLayer.PropertyManager.CustomProperties.Add(prop); } foreach (LocatedTile tile in layer.Tiles) { Guid tileUid; if (!tileUidMap.TryGetValue(tile.Tile.Uid, out tileUid)) { Tile mappedTile = layerTilePool.Tiles.Add(tile.Tile.Pool.Tiles.GetTileTexture(tile.Tile.Uid)); tileUidMap[tile.Tile.Uid] = mappedTile.Uid; tileUid = mappedTile.Uid; foreach (Property prop in tile.Tile.PropertyManager.CustomProperties) { mappedTile.PropertyManager.CustomProperties.Add(prop); } } outLayer.AddTile(tile.X, tile.Y, layerTilePool.Tiles[tileUid]); } return(outLayer); }
private void AttachEvents(TileGridLayer layer) { layer.Modified += (s, e) => { _eventsFired |= EventFlags.Modified; }; layer.LayerSizeChanged += (s, e) => { _eventsFired |= EventFlags.LayerSizeChanged; }; layer.TileAdded += (s, e) => { _eventsFired |= EventFlags.TileAdded; }; layer.TileRemoved += (s, e) => { _eventsFired |= EventFlags.TileRemoved; }; layer.TileCleared += (s, e) => { _eventsFired |= EventFlags.TileCleared; }; }
private Level ProcessLevel(Level level) { Project inputProject = level.Project; Project outputProject = new Project(); Level outputLevel = new Level(level.Name, level.OriginX, level.OriginY, level.Width, level.Height); outputProject.Levels.Add(outputLevel); outputLevel.Project = outputProject; Dictionary <string, TilePool> pools = new Dictionary <string, TilePool>(); Dictionary <Guid, Guid> tileUidMap = new Dictionary <Guid, Guid>(); ObjectPool objPool = new ObjectPool("default"); foreach (Layer layer in level.Layers) { TileGridLayer tileLayer = layer as TileGridLayer; if (tileLayer != null) { string key = KeyFromDims(tileLayer.TileWidth, tileLayer.TileHeight); if (!pools.ContainsKey(key)) { pools[key] = outputProject.TilePoolManager.CreatePool(key, tileLayer.TileWidth, tileLayer.TileHeight); } outputLevel.Layers.Add(ProcessTileLayer(tileLayer, pools[key], tileUidMap)); } ObjectLayer objLayer = layer as ObjectLayer; if (objLayer != null) { outputLevel.Layers.Add(ProcessObjectLayer(objLayer, objPool)); } } if (objPool.Count > 0) { outputProject.ObjectPoolManager.Pools.Add(objPool); } return(outputLevel); }
private void CommandExportRaster() { if (!CommandCanExportRaster()) { return; } SaveFileDialog ofd = new SaveFileDialog(); ofd.Title = "Export Layer to Image"; ofd.Filter = "Portable Network Graphics (*.png)|*.png|Windows Bitmap (*.bmp)|*.bmp|All Files|*"; ofd.OverwritePrompt = true; ofd.RestoreDirectory = false; if (ofd.ShowDialog() != DialogResult.OK) { return; } TileGridLayer layer = Layer as TileGridLayer; Rectangle levelBounds = LayerContext.Geometry.LevelBounds; try { using (SysDrawing.Bitmap raster = new SysDrawing.Bitmap(levelBounds.Width, levelBounds.Height, SysImaging.PixelFormat.Format32bppArgb)) { using (SysDrawing.Graphics gsurface = SysDrawing.Graphics.FromImage(raster)) { gsurface.CompositingMode = SysDrawing2D.CompositingMode.SourceOver; gsurface.InterpolationMode = SysDrawing2D.InterpolationMode.NearestNeighbor; foreach (LocatedTile tile in layer.Tiles) { RasterizeTile(gsurface, tile); } } raster.Save(ofd.FileName, SysImaging.ImageFormat.Png); } } catch (Exception e) { MessageBox.Show("Layer rasterization failed with the following exception:\n\n" + e.Message, "Rasterization Failed", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private void WriteTileLayer(ContentWriter output, LevelContent content, TileGridLayer layer) { output.Write((short)layer.TileWidth); output.Write((short)layer.TileHeight); output.Write((short)layer.TilesWide); output.Write((short)layer.TilesHigh); int tileCount = 0; foreach (LocatedTile tile in layer.Tiles) { tileCount++; } output.Write(tileCount); foreach (LocatedTile tile in layer.Tiles) { output.Write((short)tile.X); output.Write((short)tile.Y); output.Write(content.Translate(tile.Tile.Uid)); } }
public TileGridLayerPresenter(ILayerContext layerContext, TileGridLayer layer) : base(layerContext, layer) { _layer = layer; }