/// <summary> /// Уничтожить элемент. /// </summary> /// <param name="cellModel">Ячейка в которых находится элемент</param> private void DestroyElement(CellModel cellModel) { if (cellModel.Element == null) { return; } cellModel.Element.Destroy(); cellModel.SetElement(null); }
/// <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()); } }