public void MoveSelected(Point oldPos, Point newPos, bool duplicate) { oldPos = new Point(oldPos.X / TILE_SIZE, oldPos.Y / TILE_SIZE); newPos = new Point(newPos.X / TILE_SIZE, newPos.Y / TILE_SIZE); if (oldPos != newPos) { duplicate &= FirstDrag; FirstDrag = false; Dictionary <Point, ushort> newDict = new Dictionary <Point, ushort>(); List <Point> newPoints = new List <Point>(SelectedTiles.Count); foreach (Point point in SelectedTiles.PopAll()) { Point newPoint = new Point(point.X + (newPos.X - oldPos.X), point.Y + (newPos.Y - oldPos.Y)); newPoints.Add(newPoint); if (SelectedTilesValue.ContainsKey(point)) { newDict[newPoint] = SelectedTilesValue[point]; } else { // Not moved yet newDict[newPoint] = Layer.Tiles[point.Y][point.X]; if (!duplicate) { RemoveTile(point); } } } if (duplicate) { Deselect(); // Create new actions group Actions.Add(new ActionDummy()); } SelectedTilesValue = newDict; SelectedTiles.AddPoints(newPoints); } }
public void StartDrag(bool duplicate) { List <Point> newPoints = SelectedTiles.PopAll(); Dictionary <Point, ushort> newDict = new Dictionary <Point, ushort>(); foreach (Point point in newPoints) { if (SelectedTilesValue.ContainsKey(point)) { newDict[point] = SelectedTilesValue[point]; } else { // Not moved yet newDict[point] = Layer.Tiles[point.Y][point.X]; if (!duplicate) { RemoveTile(point); } } } if (duplicate) { Deselect(); // Create new actions group Actions.Add(new ActionDummy()); } SelectedTilesValue = newDict; SelectedTiles.AddPoints(newPoints); InvalidateSelectedChunks(); selectedOOB.TexCoordsUpdated = false; selectedOOB.VerticesUpdated = false; dragging = true; draggedDistance = Point.Empty; }