Example #1
0
 protected TileGridLayer(string name, TileGridLayer layer)
     : base(name, layer)
 {
     _tileOriginX = layer._tileOriginX;
     _tileOriginY = layer._tileOriginY;
     _tilesHigh = layer._tilesHigh;
     _tilesWide = layer._tilesWide;
 }
Example #2
0
 protected TileGridLayer(string name, TileGridLayer layer)
     : base(name, layer)
 {
     _tileOriginX = layer._tileOriginX;
     _tileOriginY = layer._tileOriginY;
     _tilesHigh   = layer._tilesHigh;
     _tilesWide   = layer._tilesWide;
 }
Example #3
0
        public override void ApplyBrush(TileGridLayer tileLayer, int x, int y)
        {
            List <LocatedTile> updatedTiles = new List <LocatedTile>();

            foreach (LocatedTile tile in Tiles)
            {
                if (tileLayer.InRange(x + tile.X, y + tile.Y))
                {
                    tileLayer.AddTile(x + tile.X, y + tile.Y, tile.Tile);
                }
            }
        }
Example #4
0
        public override void ApplyBrush(TileGridLayer tileLayer, int x, int y)
        {
            List <LocatedTile> updatedTiles = new List <LocatedTile>();

            updatedTiles.Add(new LocatedTile(InnerApply(tileLayer, x, y), x, y));

            // Update valid neighboring tiles
            foreach (TileCoord coord in NeighborCoordSet(x, y))
            {
                if (ContainsMemberTile(tileLayer.TilesAt(coord)))
                {
                    updatedTiles.Add(new LocatedTile(InnerApply(tileLayer, coord.X, coord.Y), coord.X, coord.Y));
                }
            }
        }
Example #5
0
        private Tile InnerApply(TileGridLayer tileLayer, int x, int y)
        {
            TileCoord[] coordSet  = NeighborCoordSet(x, y);
            List <int>  neighbors = new List <int>();

            for (int i = 0; i < coordSet.Length; i++)
            {
                if (ContainsMemberTile(tileLayer.TilesAt(coordSet[i])))
                {
                    neighbors.Add(i + 1);
                }
            }

            List <LocatedTile> targetStack = new List <LocatedTile>();

            foreach (LocatedTile tile in tileLayer.TilesAt(new TileCoord(x, y)))
            {
                targetStack.Add(tile);
            }

            foreach (LocatedTile tile in targetStack)
            {
                if (IsMemberTile(tile))
                {
                    tileLayer.RemoveTile(x, y, tile.Tile);
                }
            }

            int  index   = _brushClass.ApplyRules(neighbors);
            Tile newTile = null;

            if (index >= 0 && index < _tiles.Count && _tiles[index].Tile != null)
            {
                newTile = _tiles[index].Tile;
            }

            if (newTile != null)
            {
                tileLayer.AddTile(x, y, newTile);
            }

            return(newTile);
        }
Example #6
0
        public override void ApplyBrush(TileGridLayer tileLayer, int x, int y)
        {
            List<LocatedTile> updatedTiles = new List<LocatedTile>();

            foreach (LocatedTile tile in Tiles)
                if (tileLayer.InRange(x + tile.X, y + tile.Y))
                    tileLayer.AddTile(x + tile.X, y + tile.Y, tile.Tile);
        }
Example #7
0
        private Tile InnerApply(TileGridLayer tileLayer, int x, int y)
        {
            TileCoord[] coordSet = NeighborCoordSet(x, y);
            List<int> neighbors = new List<int>();

            for (int i = 0; i < coordSet.Length; i++) {
                if (ContainsMemberTile(tileLayer.TilesAt(coordSet[i])))
                    neighbors.Add(i + 1);
            }

            List<LocatedTile> targetStack = new List<LocatedTile>();
            foreach (LocatedTile tile in tileLayer.TilesAt(new TileCoord(x, y)))
                targetStack.Add(tile);

            foreach (LocatedTile tile in targetStack) {
                if (IsMemberTile(tile))
                    tileLayer.RemoveTile(x, y, tile.Tile);
            }

            int index = _brushClass.ApplyRules(neighbors);
            Tile newTile = null;

            if (index >= 0 && index < _tiles.Count && _tiles[index].Tile != null)
                newTile = _tiles[index].Tile;

            if (newTile != null)
                tileLayer.AddTile(x, y, newTile);

            return newTile;
        }
Example #8
0
        public override void ApplyBrush(TileGridLayer tileLayer, int x, int y)
        {
            List<LocatedTile> updatedTiles = new List<LocatedTile>();

            updatedTiles.Add(new LocatedTile(InnerApply(tileLayer, x, y), x, y));

            // Update valid neighboring tiles
            foreach (TileCoord coord in NeighborCoordSet(x, y)) {
                if (ContainsMemberTile(tileLayer.TilesAt(coord)))
                    updatedTiles.Add(new LocatedTile(InnerApply(tileLayer, coord.X, coord.Y), coord.X, coord.Y));
            }
        }
Example #9
0
        public static LevelX ToXProxy(Level level)
        {
            if (level == null)
            {
                return(null);
            }

            foreach (Layer layer in level.Layers)
            {
                if (layer is TileGridLayer)
                {
                    TileGridLayer tileLayer = layer as TileGridLayer;
                    foreach (LocatedTile tile in tileLayer.Tiles)
                    {
                        if (!level._localTileIndex.ContainsValue(tile.Tile.Uid))
                        {
                            level._localTileIndex.Add(level._indexSequence++, tile.Tile.Uid);
                        }
                    }
                }
            }

            List <LevelX.TileIndexEntryX> tileIndexEntries = new List <LevelX.TileIndexEntryX>();

            foreach (var item in level._localTileIndex)
            {
                tileIndexEntries.Add(new LevelX.TileIndexEntryX()
                {
                    Id  = item.Key,
                    Uid = item.Value,
                });
            }

            LevelX.TileIndexX tileIndex = new LevelX.TileIndexX()
            {
                Entries  = tileIndexEntries,
                Sequence = level._indexSequence,
            };

            List <AbstractXmlSerializer <LevelX.LayerX> > layers = new List <AbstractXmlSerializer <LevelX.LayerX> >();

            foreach (Layer layer in level.Layers)
            {
                if (layer is MultiTileGridLayer)
                {
                    layers.Add(MultiTileGridLayer.ToXmlProxyX(layer as MultiTileGridLayer));
                }
                else if (layer is ObjectLayer)
                {
                    layers.Add(ObjectLayer.ToXmlProxyX(layer as ObjectLayer));
                }
            }

            LevelX.PropertyGroupX propGroup = new LevelX.PropertyGroupX()
            {
                LevelGuid = level.Uid,
                Extra     = (level.Extra != null && level.Extra.Count > 0) ? level.Extra.ToArray() : null,
            };

            if (level.Project != null)
            {
                propGroup.ProjectGuid = level.Project.Uid;
            }

            return(new LevelX()
            {
                PropertyGroup = propGroup,
                Name = level.Name,
                OriginX = level.OriginX,
                OriginY = level.OriginY,
                Width = level.Width,
                Height = level.Height,
                TileIndex = tileIndex,
                Layers = layers.Count > 0 ? layers : null,
            });
        }
Example #10
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; };
 }
Example #11
0
 public TileGridLayerPresenter(ILayerContext layerContext, TileGridLayer layer)
     : base(layerContext, layer)
 {
     _layer = layer;
 }
Example #12
0
 public abstract void ApplyBrush(TileGridLayer tileLayer, int x, int y);