public void FallIntoPosition(PuzzleManager.OnTileFallComplete callback, int comboDepth) { if (m_fallingCoroutine != null) { StopCoroutine(m_fallingCoroutine); } IsFalling = true; m_fallingCoroutine = StartCoroutine(FallIntoPositionCoroutine(callback, comboDepth)); }
public IEnumerator FallIntoPositionCoroutine(PuzzleManager.OnTileFallComplete callback, int comboDepth) { float timer = 0; Vector3 startPosition = transform.localPosition; while (timer < FallTime) { timer += Time.deltaTime; float ratio = timer / FallTime; float yRatio = (transform.localPosition.y - startPosition.y) / (TargetFallingLocalPosition.y - startPosition.y); transform.localPosition = new Vector3( transform.localPosition.x, FallCurve.Evaluate(ratio) * (TargetFallingLocalPosition.y - startPosition.y) + startPosition.y, transform.localPosition.z); yield return(new WaitForEndOfFrame()); } IsFalling = false; m_fallingCoroutine = null; callback(this, comboDepth); }