/// <summary> /// Draws the an arc in world space from startPosition to endPosition, using the indicated color. /// </summary> /// <param name="startPosition">Start position.</param> /// <param name="endPosition">End position.</param> /// <param name="drawColor">Draw color.</param> public static void DrawArc(Vector3 startPosition, Vector3 endPosition, Color drawColor) { ParticleSystem pSystem = getParticleSystem(); float arcHeight = 3; // meters (local constant) float segLength = .1f; // meters (local constant) float particleSize = .3f; float particleLife = .2f; float speed = .1f; float distance = Vector3.Distance(startPosition, endPosition); float vertDistance = endPosition.y - startPosition.y; Vector3 planarDirection = endPosition - startPosition; planarDirection.Scale(Vector3.right + Vector3.forward); planarDirection.Normalize(); int numSegments = (int)Mathf.Clamp(distance / segLength, 1, 360); pSystem.Emit(startPosition, PRand.RandomVector3() * speed, particleSize, particleLife, drawColor); for (int i = 1; i < numSegments - 1; i++) { float verticalPosition = arcHeight * Mathf.Sin(Mathf.PI * i / numSegments); Vector3 pointPosition = planarDirection * i * segLength; pointPosition.y = verticalPosition + i * vertDistance / numSegments; pSystem.Emit(startPosition + pointPosition, PRand.RandomVector3() * speed, particleSize, particleLife, drawColor); } pSystem.Emit(endPosition, PRand.RandomVector3() * speed, particleSize, particleLife, drawColor); }
/// <summary> /// Returns a color with adjusted saturation. Equal chance to saturate or desaturate. /// </summary> /// <returns>A color.</returns> /// <param name="color">The source Color.</param> /// <param name="saturationVariance">Saturation variance.</param> public static Color RandomSaturation(Color color, float saturationVariance) { if (PRand.RandomBool()) { return(Palette.Desaturate(color, 0.5f * saturationVariance * Random.value)); } else { return(Palette.Saturate(color, 0.5f * saturationVariance * Random.value)); } }