Beispiel #1
0
        void IDragHandler.OnDrag(PointerEventData eventData)
        {
            if (tile.LockedInput)
            {
                return;
            }

            Vector2 dragDelta = eventData.position - beginDragPosition;

            if (dragDelta.magnitude > DRAG_DISTANCE_THRESHOLD)
            {
                TileDirection dragDirection;

                if (Mathf.Abs(dragDelta.x) > Mathf.Abs(dragDelta.y))
                {
                    dragDirection = Mathf.Sign(dragDelta.x) > 0 ? TileDirection.Right : TileDirection.Left;
                }
                else
                {
                    dragDirection = Mathf.Sign(dragDelta.y) > 0 ? TileDirection.Up : TileDirection.Down;
                }

                Tile otherTile = tableNavigator.FindTileInDirection(tile.Position, dragDirection);

                if (otherTile == null)
                {
                    tile.ToggleSelect(false);

                    table.DeselectedTile(tile);
                }
                else
                {
                    table.SwitchTiles(tile, otherTile);
                }
            }
        }
Beispiel #2
0
        public TileType FindMatchingTypeInDirection(Vector2Int tablePosition, TileDirection direction)
        {
            switch (direction)
            {
            case TileDirection.Left:
            {
                // can't match to the left if not two away from left
                if (!tableNavigator.TileExistsInDirection(new Vector2Int(tablePosition.x - 1, tablePosition.y), direction))
                {
                    return(null);
                }

                _tileA = tableNavigator.FindTileInDirection(tablePosition, direction);
                _tileB = tableNavigator.FindTileInDirection(_tileA.Position, direction);

                break;
            }

            case TileDirection.Right:
            {
                // can't match to the right if not two away from right
                if (!tableNavigator.TileExistsInDirection(new Vector2Int(tablePosition.x + 1, tablePosition.y), direction))
                {
                    return(null);
                }

                _tileA = tableNavigator.FindTileInDirection(tablePosition, direction);
                _tileB = tableNavigator.FindTileInDirection(_tileA.Position, direction);

                break;
            }

            case TileDirection.Up:
            {
                // can't match up if not 2 away from top
                if (!tableNavigator.TileExistsInDirection(new Vector2Int(tablePosition.x, tablePosition.y - 1), direction))
                {
                    return(null);
                }

                _tileA = tableNavigator.FindTileInDirection(tablePosition, direction);
                _tileB = tableNavigator.FindTileInDirection(_tileA.Position, direction);

                break;
            }

            case TileDirection.Down:
            {
                // can't match up if not 2 away from bottom
                if (!tableNavigator.TileExistsInDirection(new Vector2Int(tablePosition.x, tablePosition.y + 1), direction))
                {
                    return(null);
                }

                _tileA = tableNavigator.FindTileInDirection(tablePosition, direction);
                _tileB = tableNavigator.FindTileInDirection(_tileA.Position, direction);

                break;
            }

            case TileDirection.Horizontal:
            {
                // can't match horizontally if position is in left or right corners
                if (!tableNavigator.TileExistsInDirection(new Vector2Int(tablePosition.x, tablePosition.y), direction))
                {
                    return(null);
                }

                _tileA = tableNavigator.FindTileInDirection(tablePosition, direction);
                _tileB = tableNavigator.FindTileInDirection(_tileA.Position, direction);

                break;
            }

            case TileDirection.Vertical:
            {
                // can't match vertically if position is in top or bottom corners
                if (!tableNavigator.TileExistsInDirection(new Vector2Int(tablePosition.x, tablePosition.y), direction))
                {
                    return(null);
                }

                _tileA = tableNavigator.FindTileInDirection(tablePosition, direction);
                _tileB = tableNavigator.FindTileInDirection(_tileA.Position, direction);

                break;
            }

            default:
                throw new UnityException(TableNavigator.INVALID_DIRECTION_MESSAGE);
            }

            if (_tileA.Equals(_tileB))
            {
                return(_tileA.Type);
            }
            else
            {
                return(null);
            }
        }