void BounceCombo(params object[] parameters) { if (comboBounce != null) { StopCoroutine(comboBounce); } bool useNegative = (int)parameters[0] == 0; BounceSettings settings = useNegative ? negativeComboSettings : comboSettings; comboBounce = StartCoroutine(DoBounce(combo, settings)); }
void BounceMultiplier(params object[] parameters) { if (multiplierBounce != null) { StopCoroutine(multiplierBounce); } bool useNegative = ((float)(parameters[0])).AboutEqual(ScoreManager.Instance.GetDifficultyMultiplier()); BounceSettings settings = useNegative ? negativeMultiplierSettings : multiplierSettings; //TODO add sound effect for negative effect SFXManager.Instance.Play(SFXType.Score, transform.position); multiplierBounce = StartCoroutine(DoBounce(multiplierTrans, settings)); }
IEnumerator DoBounce(RectTransform tr, BounceSettings settings, float scaleMultiplier = 1.0f) { float t = 0.0f; float landRotation = Random.Range(-settings.rotationOffset, settings.rotationOffset) * scaleMultiplier; float originalRotation = tr.localEulerAngles.z; while (originalRotation > 180.0f) { originalRotation -= 360.0f; } while (originalRotation < -180.0f) { originalRotation += 360.0f; } Vector3 originalScale = Vector3.one; Color originalColor = Color.white; Color targetColor = Color.white; MaskableGraphic[] graphics = null; if (tr == combo) { originalScale = comboOriginalScale; originalColor = comboOriginalColor; graphics = comboGraphics; } else if (tr == score) { originalScale = scoreOriginalScale; originalColor = scoreOriginalColor; graphics = scoreGraphics; } else if (tr == health) { originalScale = healthOriginalScale; originalColor = healthOriginalColor; graphics = healthGraphics; } else if (tr == multiplierTrans) { originalScale = multiplierOriginalScale; originalColor = multiplierOriginalColor; graphics = multiplierGraphics; } while (t <= 1.0f) { t += Time.deltaTime * settings.speed; float scaleVal = scaleMultiplier * settings.amplitude * Mathf.Sin(t * Mathf.PI) + originalScale.x; tr.localScale = new Vector3(scaleVal, scaleVal, scaleVal); tr.localEulerAngles = new Vector3(0.0f, 0.0f, Mathf.Lerp(originalRotation, landRotation, t)); if (scaleMultiplier == 1.0f) { float lerpProgress = settings.colorForward ? t : 1.0f - t; Color color = Color.Lerp(originalColor, settings.bounceColor, lerpProgress); foreach (MaskableGraphic graphic in graphics) { graphic.color = color; } } yield return(null); } if (scaleMultiplier >= BOUNCE_THRESHOLD) { yield return(DoBounce(tr, settings, scaleMultiplier * settings.bounciness)); } }