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); }
public void PaintAtPosition(RevealActor.RevealMode revealMode, Vector3 position, float radius, AnimationCurve falloff = null) { StartCoroutine(Coroutine_PaintAtPosition(revealMode, position, radius, falloff)); }