コード例 #1
0
    IEnumerator Coroutine_PaintAtPosition(RevealActor.RevealMode revealMode, Vector3 position, float radius, AnimationCurve falloff = null)
    {
        for (int i = 0; i < m_WorldSpaceVertices.Length; ++i)
        {
            float distance = (position - m_WorldSpaceVertices[i]).magnitude;

            if (distance > radius)
            {
                continue;
            }

            float amount;
            float currentAmount = m_TargetVertexColors[i].r;
            float startTime     = Time.time;
            if (falloff != null)
            {
                amount = falloff.Evaluate(distance / radius) * 255;
            }
            else
            {
                amount = (1 - Mathf.Pow(distance / radius, 4)) * 255;
            }

            // Ignore falloff for now
            switch (revealMode)
            {
            case RevealActor.RevealMode.REVEALMODE_SHOW:
                if (amount > currentAmount)
                {
                    m_TargetVertexColors[i].r = (byte)amount;
                    m_IsUpdating = true;
                }

                amount = 255 - amount;
                break;

            case RevealActor.RevealMode.REVEALMODE_HIDE:
                if (amount < currentAmount)
                {
                    m_TargetVertexColors[i].r = (byte)amount;
                    m_IsUpdating = true;
                }
                break;

            default:
                Debug.LogWarning("Should not be entering default case in RevealableTerrain PaintAtPosition");
                break;
            }

            if (startTime - Time.time >= 0.1f)
            {
                yield return(null);
            }
        }

        yield return(null);
    }
コード例 #2
0
 public void PaintAtPosition(RevealActor.RevealMode revealMode, Vector3 position, float radius, AnimationCurve falloff = null)
 {
     StartCoroutine(Coroutine_PaintAtPosition(revealMode, position, radius, falloff));
 }