Example #1
0
        public void Do()
        {
            foreach (var kv in tiles)
            {
                undoCopyPastes.Enqueue(new UndoCopyPaste(kv.Key, mapTiles[kv.Key], mapResources[kv.Key], mapHeight[kv.Key]));

                if (copyFilters.HasFlag(MapCopyFilters.Terrain))
                {
                    mapTiles[kv.Key] = kv.Value.Item1;
                }

                if (copyFilters.HasFlag(MapCopyFilters.Resources))
                {
                    mapResources[kv.Key] = kv.Value.Item2;
                }

                mapHeight[kv.Key] = kv.Value.Item3;
            }

            if (copyFilters.HasFlag(MapCopyFilters.Actors))
            {
                var removeActors = dest.SelectMany(editorLayer.PreviewsAt).Distinct().ToList();
                foreach (var preview in removeActors)
                {
                    removedActors.Enqueue(preview);
                    editorLayer.Remove(preview);
                }
            }

            foreach (var kv in previews)
            {
                addedActorPreviews.Enqueue(editorLayer.Add(kv.Value));
            }
        }
Example #2
0
        void Copy(CellRegion source, CVec offset)
        {
            var gridType     = worldRenderer.World.Map.Grid.Type;
            var mapTiles     = worldRenderer.World.Map.Tiles;
            var mapHeight    = worldRenderer.World.Map.Height;
            var mapResources = worldRenderer.World.Map.Resources;

            var dest = new CellRegion(gridType, source.TopLeft + offset, source.BottomRight + offset);

            var previews = new Dictionary <string, ActorReference>();
            var tiles    = new Dictionary <CPos, Tuple <TerrainTile, ResourceTile, byte> >();

            foreach (var cell in source)
            {
                if (!mapTiles.Contains(cell) || !mapTiles.Contains(cell + offset))
                {
                    continue;
                }

                tiles.Add(cell + offset, Tuple.Create(mapTiles[cell], mapResources[cell], mapHeight[cell]));

                foreach (var preview in editorLayer.PreviewsAt(cell))
                {
                    if (previews.ContainsKey(preview.ID))
                    {
                        continue;
                    }

                    var copy = preview.Export();
                    if (copy.InitDict.Contains <LocationInit>())
                    {
                        var location = copy.InitDict.Get <LocationInit>();
                        copy.InitDict.Remove(location);
                        copy.InitDict.Add(new LocationInit(location.Value(worldRenderer.World) + offset));
                    }

                    previews.Add(preview.ID, copy);
                }
            }

            foreach (var kv in tiles)
            {
                mapTiles[kv.Key]     = kv.Value.Item1;
                mapResources[kv.Key] = kv.Value.Item2;
                mapHeight[kv.Key]    = kv.Value.Item3;
            }

            var removeActors = dest.SelectMany(editorLayer.PreviewsAt).Distinct().ToList();

            foreach (var preview in removeActors)
            {
                editorLayer.Remove(preview);
            }

            foreach (var kv in previews)
            {
                editorLayer.Add(kv.Value);
            }
        }
Example #3
0
        void Copy(CellRegion source, CVec offset)
        {
            var gridType = worldRenderer.World.Map.Grid.Type;
            var mapTiles = worldRenderer.World.Map.Tiles;
            var mapHeight = worldRenderer.World.Map.Height;
            var mapResources = worldRenderer.World.Map.Resources;

            var dest = new CellRegion(gridType, source.TopLeft + offset, source.BottomRight + offset);

            var previews = new Dictionary<string, ActorReference>();
            var tiles = new Dictionary<CPos, Tuple<TerrainTile, ResourceTile, byte>>();

            foreach (var cell in source)
            {
                if (!mapTiles.Contains(cell) || !mapTiles.Contains(cell + offset))
                    continue;

                tiles.Add(cell + offset, Tuple.Create(mapTiles[cell], mapResources[cell], mapHeight[cell]));

                foreach (var preview in editorLayer.PreviewsAt(cell))
                {
                    if (previews.ContainsKey(preview.ID))
                        continue;

                    var copy = preview.Export();
                    if (copy.InitDict.Contains<LocationInit>())
                    {
                        var location = copy.InitDict.Get<LocationInit>();
                        copy.InitDict.Remove(location);
                        copy.InitDict.Add(new LocationInit(location.Value(worldRenderer.World) + offset));
                    }

                    previews.Add(preview.ID, copy);
                }
            }

            foreach (var kv in tiles)
            {
                mapTiles[kv.Key] = kv.Value.Item1;
                mapResources[kv.Key] = kv.Value.Item2;
                mapHeight[kv.Key] = kv.Value.Item3;
            }

            var removeActors = dest.SelectMany(editorLayer.PreviewsAt).Distinct().ToList();
            foreach (var preview in removeActors)
                editorLayer.Remove(preview);

            foreach (var kv in previews)
                editorLayer.Add(kv.Value);
        }