public void Replicate() { int randomIndex = Random.Range(0, validReplicationList.Count); int randomIndexSpecial = Random.Range(0, validReplicationListSpecial.Count); Match3BoardPiece targetBoardPiece; if (validReplicationList.Count != 0) { targetBoardPiece = freezerNeighbors[validReplicationList[randomIndex]]; } else { targetBoardPiece = freezerNeighbors[validReplicationListSpecial[randomIndexSpecial]]; } NormalTile oldTile = targetBoardPiece.Tile as NormalTile; //Create new freezer tile Match3BoardRenderer.Instance.SpawnSpecificTileAt(targetBoardPiece.BoardPosition, typeof(FreezerTile), TileColorType.None, false); FreezerTile newFreezerTile = (targetBoardPiece.Tile as FreezerTile); //Raise CREATE event RaiseOnFreezerTileCreateEvent(newFreezerTile); newFreezerTile.StartCoroutine(newFreezerTile.PlayCreateAnimation()); if (oldTile != null) { oldTile.DisableTileLogic(); GameObject.Destroy(oldTile.gameObject); } Match3BoardGameLogic.Instance.IsBoardStable = false; Match3BoardGameLogic.Instance.TryCheckStableBoard(); }