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); } } }
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); } }