Example #1
0
 /// <summary>
 /// Уничтожить элемент.
 /// </summary>
 /// <param name="cellModel">Ячейка в которых находится элемент</param>
 private void DestroyElement(CellModel cellModel)
 {
     if (cellModel.Element == null)
     {
         return;
     }
     cellModel.Element.Destroy();
     cellModel.SetElement(null);
 }
Example #2
0
        /// <summary>
        /// Поменять местами элементы.
        /// </summary>
        /// <param name="cell">Ячейка с элементом для замены</param>
        /// <param name="direction">Направление замены</param>
        public void SwapElements(CellModel cell, MovementDirection direction)
        {
            if (WaitFinishMovementElements > 0)
            {
                return;
            }
            ElementModel firstElement;
            ElementModel secondElement;

            switch (direction)
            {
            case MovementDirection.Up:
                if (!_exchange.CheckSwap(MovementDirection.Up))
                {
                    return;
                }
                if (cell.Y + 1 >= _field.Height)
                {
                    return;
                }
                firstElement  = cell.Element;
                secondElement = _field.GetCell(cell.X, cell.Y + 1).Element;
                cell.SetElement(secondElement);
                _field.GetCell(cell.X, cell.Y + 1).SetElement(firstElement);
                break;

            case MovementDirection.Right:
                if (!_exchange.CheckSwap(MovementDirection.Right))
                {
                    return;
                }
                if (cell.X + 1 >= _field.Width)
                {
                    return;
                }
                firstElement  = cell.Element;
                secondElement = _field.GetCell(cell.X + 1, cell.Y).Element;
                cell.SetElement(secondElement);
                _field.GetCell(cell.X + 1, cell.Y).SetElement(firstElement);
                break;

            case MovementDirection.Down:
                if (!_exchange.CheckSwap(MovementDirection.Down))
                {
                    return;
                }
                if (cell.Y - 1 < 0)
                {
                    return;
                }
                firstElement  = cell.Element;
                secondElement = _field.GetCell(cell.X, cell.Y - 1).Element;
                cell.SetElement(secondElement);
                _field.GetCell(cell.X, cell.Y - 1).SetElement(firstElement);
                break;

            case MovementDirection.Left:
                if (!_exchange.CheckSwap(MovementDirection.Left))
                {
                    return;
                }
                if (cell.X - 1 < 0)
                {
                    return;
                }
                firstElement  = cell.Element;
                secondElement = _field.GetCell(cell.X - 1, cell.Y).Element;
                cell.SetElement(secondElement);
                _field.GetCell(cell.X - 1, cell.Y).SetElement(firstElement);
                break;

            default:
                throw new ArgumentOutOfRangeException("direction", direction, null);
            }
            if (firstElement != null && secondElement != null)
            {
                WaitFinishMovementElements = 2;
                firstElement.Swap(direction);
                secondElement.Swap(direction.InvertDirection());
            }
        }