void OnTouchStart() { if (gameplayScript.IsGameOver) { return; } Vector2 pos = InputScript.GetTouchPositionWorldSpace(); RaycastHit2D[] hits = Physics2D.RaycastAll(pos, Vector2.zero); for (int i = 0; i < hits.Length; i++) { possibleCurrentPick[i] = hits[i].collider.GetComponent <Lane>(); } bMouseCoordsOnClick = true; vMouseCoordsOnClick = pos; bMouseCoordsNow = true; vMouseCoordsNow = pos; currentPick = null; touchPoint.transform.position = new Vector3(pos.x, pos.y, 0.0f); touchPoint.SetActive(true); }
void OnTouchMove() { if (NoPossibleCurrentPickSelected()) { return; } if (gameplayScript.IsGameOver) { return; } Vector2 pos = InputScript.GetTouchPositionWorldSpace(); RaycastHit2D[] hits = Physics2D.RaycastAll(pos, Vector2.zero); bMouseCoordsNow = true; vMouseCoordsNow = pos; float dist = Vector3.Distance(vMouseCoordsNow, vMouseCoordsOnClick); float dotProduct = Vector3.Dot(Vector3.right, (vMouseCoordsNow - vMouseCoordsOnClick).normalized); if (!bCurrentPickTypeLocked && dist >= deadzone) { float absDotProduct = Mathf.Abs(dotProduct); if (absDotProduct >= 0.5) { currentPickType = Lane.LaneType.Columns; } else { currentPickType = Lane.LaneType.Row; } //find current pick for (int i = 0; i < possibleCurrentPick.Length; i++) { if (possibleCurrentPick[i].laneType == currentPickType) { currentPick = possibleCurrentPick[i]; } } if (currentPickType == Lane.LaneType.Row) { DotScript dot = GetDotAtXY(0, currentPick.id); dot.ToggleSelectVisibility(currentPickType, true); } else { DotScript dot = GetDotAtXY(currentPick.id, 0); dot.ToggleSelectVisibility(currentPickType, true); } bCurrentPickTypeLocked = true; } if (!currentPick) { return; } // find possible drop for (int i = 0; i < hits.Length; i++) { Lane possibleDrop = hits[i].collider.GetComponent <Lane>(); if (possibleDrop.laneType == currentPickType) { currentDrop = possibleDrop; } } if (possibleDropId != currentDrop.id) { possibleDropId = currentDrop.id; if (currentPick.id < currentDrop.id) { for (int j = currentDrop.id; currentPick.id < j; j--) { if (currentPickType == Lane.LaneType.Columns) { MoveColumn(j, j - 1); } else { MoveRow(j, j - 1); } } } else if (currentPick.id > currentDrop.id) { for (int j = currentDrop.id; j < currentPick.id; j++) { if (currentPickType == Lane.LaneType.Columns) { MoveColumn(j, j + 1); } else { MoveRow(j, j + 1); } } } if (currentPickType == Lane.LaneType.Columns) { MoveColumn(currentPick.id, currentDrop.id); } else { MoveRow(currentPick.id, currentDrop.id); } foreach (DotScript dot in dots) { dot.SwapName(); } UpdateConnections(); } // update current pick for (int i = 0; i < hits.Length; i++) { possibleCurrentPick[i] = hits[i].collider.GetComponent <Lane>(); } // find current pick for (int i = 0; i < possibleCurrentPick.Length; i++) { if (possibleCurrentPick[i].laneType == currentPickType) { currentPick = possibleCurrentPick[i]; } } touchPoint.transform.position = new Vector3(pos.x, pos.y, 0.0f); }