public void SwapGems(Gem currentGem) { if (lastGem == null) { lastGem = currentGem; } else if (lastGem == currentGem) { lastGem = null; } else { if (lastGem.IsNeighborWith(currentGem)) { gem1Start = lastGem.transform.position; gem1End = currentGem.transform.position; gem2Start = currentGem.transform.position; gem2End = lastGem.transform.position; startTime = Time.time; TogglePhysics(true); gem1 = lastGem; gem2 = currentGem; isSwapping = true; } else { lastGem.AwakeSelector(); lastGem = currentGem; } } }
// Update is called once per frame void Update() { if (isMatched) { for (int i = 0; i < gems.Count; i++) { if (gems[i].isMatched) { gems[i].CreateGem(); gems[i].transform.position = new Vector3( gems[i].transform.position.x, gems[i].transform.position.y + 6, gems[i].transform.position.z); } } isMatched = false; } else if (isSwapping) { MoveGem(gem1, gem1End, gem1Start); MoveNegGem(gem2, gem2End, gem2Start); if (Vector3.Distance(gem1.transform.position, gem1End) < .1f || Vector3.Distance(gem2.transform.position, gem2End) < .1f) { gem1.transform.position = gem1End; gem2.transform.position = gem2End; lastGem = null; isSwapping = false; TogglePhysics(false); if (!SwapBack) { gem1.AwakeSelector(); gem2.AwakeSelector(); CheckForMatches(); } else { SwapBack = false; } } } else if (!CheckStateOfBoard()) { for (int i = 0; i < gems.Count; i++) { CheckForNearbyMatches(gems[i]); } if (!DoesBoardContainMatches()) { isMatched = true; for (int i = 0; i < gems.Count; i++) { gems[i].isMatched = true; } } } }