void SlideTile(TileSlot movedTile, Direction direction) { if (!movedTile.neighbours.ContainsKey(direction)) { return; } SlidingTile tileA = movedTile.tile; SlidingTile tileB = movedTile.neighbours[direction].tile; movedTile.tile = tileB; movedTile.neighbours[direction].tile = tileA; SetTileCoords(tileA, movedTile.neighbours[direction].position); SetTileCoords(tileB, movedTile.position); UpdateEmptySlot(); }
void GenerateTiles() { List <Sprite> tileImages = new List <Sprite>(Resources.LoadAll <Sprite>(puzzleImage.name)); #region GenerateTiles for (int i = 0; i < 9; i += 1) { Position tilePos = (Position)i + 1; Vector3 tileCoord = new Vector3(offset[tilePos].x * tileSize, 0, offset[tilePos].y * tileSize); SlidingTile newTile = Instantiate(tileObject, transform).GetComponent <SlidingTile>(); newTile.SetImage(tileImages[i]); newTile.position = tilePos; newTile.transform.localPosition = tileCoord; tiles.Add(new TileSlot(newTile, tilePos)); } #endregion GenerateTiles Debug.Log(tiles.Count); #region AssignNeighbours for (int i = 0; i < tiles.Count; i += 1) { switch (tiles[i].position) { case Position.TopLeft: tiles[i].neighbours.Add(Direction.RIGHT, TileAtPos(Position.TopCenter)); tiles[i].neighbours.Add(Direction.DOWN, TileAtPos(Position.MidLeft)); break; case Position.TopCenter: tiles[i].neighbours.Add(Direction.RIGHT, TileAtPos(Position.TopRight)); tiles[i].neighbours.Add(Direction.DOWN, TileAtPos(Position.MidCenter)); tiles[i].neighbours.Add(Direction.LEFT, TileAtPos(Position.TopLeft)); break; case Position.TopRight: tiles[i].neighbours.Add(Direction.DOWN, TileAtPos(Position.MidRight)); tiles[i].neighbours.Add(Direction.LEFT, TileAtPos(Position.TopCenter)); break; case Position.MidLeft: tiles[i].neighbours.Add(Direction.UP, TileAtPos(Position.TopLeft)); tiles[i].neighbours.Add(Direction.RIGHT, TileAtPos(Position.MidCenter)); tiles[i].neighbours.Add(Direction.DOWN, TileAtPos(Position.BotLeft)); break; case Position.MidCenter: tiles[i].neighbours.Add(Direction.UP, TileAtPos(Position.TopCenter)); tiles[i].neighbours.Add(Direction.RIGHT, TileAtPos(Position.MidRight)); tiles[i].neighbours.Add(Direction.DOWN, TileAtPos(Position.BotCenter)); tiles[i].neighbours.Add(Direction.LEFT, TileAtPos(Position.MidLeft)); break; case Position.MidRight: tiles[i].neighbours.Add(Direction.UP, TileAtPos(Position.TopRight)); tiles[i].neighbours.Add(Direction.DOWN, TileAtPos(Position.MidCenter)); tiles[i].neighbours.Add(Direction.LEFT, TileAtPos(Position.BotRight)); break; case Position.BotLeft: tiles[i].neighbours.Add(Direction.UP, TileAtPos(Position.MidLeft)); tiles[i].neighbours.Add(Direction.RIGHT, TileAtPos(Position.BotCenter)); break; case Position.BotCenter: tiles[i].neighbours.Add(Direction.UP, TileAtPos(Position.MidCenter)); tiles[i].neighbours.Add(Direction.RIGHT, TileAtPos(Position.BotLeft)); tiles[i].neighbours.Add(Direction.LEFT, TileAtPos(Position.BotRight)); break; case Position.BotRight: tiles[i].neighbours.Add(Direction.UP, TileAtPos(Position.MidRight)); tiles[i].neighbours.Add(Direction.LEFT, TileAtPos(Position.BotCenter)); break; } } #endregion AssignNeighbours }
public TileSlot(SlidingTile _tile, Position _pos) { tile = _tile; position = _pos; Debug.Log(position.ToString()); }
void SetTileCoords(SlidingTile tile, Position pos) { Vector3 tileCoord = new Vector3(offset[pos].x * tileSize, 0, offset[pos].y * tileSize); tile.transform.localPosition = tileCoord; }