コード例 #1
0
ファイル: LevelProcessor.cs プロジェクト: Jorch72/CS-Treefrog
        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);
        }
コード例 #2
0
 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; };
 }
コード例 #3
0
ファイル: LevelProcessor.cs プロジェクト: Jorch72/CS-Treefrog
        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);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: LevelWriter.cs プロジェクト: Jorch72/CS-Treefrog
        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));
            }
        }
コード例 #6
0
 public TileGridLayerPresenter(ILayerContext layerContext, TileGridLayer layer)
     : base(layerContext, layer)
 {
     _layer = layer;
 }