Beispiel #1
0
    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));
    }
Beispiel #2
0
    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));
    }
Beispiel #3
0
    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));
        }
    }