/// <summary> /// When a click(touch) moved over the GridCell. /// </summary> private void GridCellClickMoved() { if (currentLine == null) { Debug.Log("Current Line is undefined"); return; } if (currentGridCell == null) { Debug.Log("Current GridCell is undefined"); return; } if (previousGridCell == null) { Debug.Log("Previous GridCell is undefined"); return; } if (currentGridCell.index == previousGridCell.index) { return; } ///If the current grid cell is not adjacent of the previous grid cell,then ignore it if (!previousGridCell.OneOfAdjacents(currentGridCell.index)) { Debug.Log("Current grid cell of index " + currentGridCell.index + " is Ignored [Reason : Not Adjacent Of Previous GridCell " + previousGridCell.index); return; } ///If the current grid cell is currently used if (currentGridCell.currentlyUsed) { if (currentGridCell.gridLineIndex == -1) { return; } if (currentGridCell.gridLineIndex == previousGridCell.gridLineIndex) { gridLines [currentGridCell.gridLineIndex].RemoveElements(currentGridCell.index); previousGridCell = currentGridCell; Debug.Log("Remove some Elements from the Line Path of index " + currentGridCell.gridLineIndex); ///Increase the movements counter IncreaseMovements(); return; //skip next } else { Debug.Log("Clear the Line Path of index " + currentGridCell.gridLineIndex); gridLines [currentGridCell.gridLineIndex].ClearPath(); } } ///If the current grid cell is not empty or it's not a partner of the previous grid cell if (!currentGridCell.isEmpty && currentGridCell.index != previousGridCell.tragetIndex) { Debug.Log("Current grid cell of index " + currentGridCell.index + " is Ignored [Reason : Not the wanted Traget]"); return; //skip next } ///Increase the movements counter IncreaseMovements(); ///Setting up the attributes for the current grid cell currentGridCell.currentlyUsed = true; currentGridCell.gridLineIndex = previousGridCell.gridLineIndex; if (currentGridCell.gridLineIndex == -1) { return; } if (currentGridCell.isEmpty) { currentGridCell.tragetIndex = previousGridCell.tragetIndex; } ///Link the color of top background of the current grid cell with the top background color of the previous grid cell currentGridCell.topBackgroundColor = previousGridCell.topBackgroundColor; Debug.Log("New GridCell of Index " + currentGridCell.index + " added to the Line Path of index " + currentLine.index); ///Add the current grid cell index to the current traced grid cells list currentLine.path.Add(currentGridCell.index); ///Determine the New Line Point tempPoint = currentGridCell.transform.position; tempPoint.z = gridLineZPosition; ///Add the position of the New Line Point to the current line gridLines [currentGridCell.gridLineIndex].AddPoint(tempPoint); bool playBubble = true; if (!currentGridCell.isEmpty) { //Two pairs connected if (previousGridCell.tragetIndex == currentGridCell.index) { Debug.Log("Two GridCells connected [GridCell " + (gridLines [currentGridCell.gridLineIndex].GetFirstPathElement()) + " with GridCell " + (gridLines [currentGridCell.gridLineIndex].GetLastPathElement()) + "]"); currentLine.completedLine = true; GridCell gridCell = null; for (int i = 0; i < currentLine.path.Count; i++) { gridCell = gridCells [currentLine.path [i]]; if (i == 0 || i == currentLine.path.Count - 1) { //Setting up the connect pairs GameObjectUtil.FindChildByTag(gridCell.transform, "GridCellContent").GetComponent <SpriteRenderer> ().sprite = currentLevel.dotsPairs [gridCell.elementPairIndex].connectSprite; } ///Setting up the color of the top background of the grid cell tempColor = previousGridCell.topBackgroundColor; tempColor.a = gridCellTopBackgroundAlpha; tempSpriteRendererd = gridCell.transform.Find("background").GetComponent <SpriteRenderer> (); tempSpriteRendererd.color = tempColor; ///Enable the top backgroud of the grid cell tempSpriteRendererd.enabled = true; } ///Play the connected sound effect at the center of the unity world AudioSource.PlayClipAtPoint(connectedSFX, Vector3.zero, effectsAudioSource.volume); playBubble = false; Release(null); //检查是否过关 CheckLevelComplete(); return; } } if (playBubble) { ///Play the water buttle sound effect at the center of the unity world AudioSource.PlayClipAtPoint(waterBubbleSFX, Vector3.zero, effectsAudioSource.volume); } previousGridCell = currentGridCell; }