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;
        }
Ejemplo n.º 2
0
 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);
     }
 }