79 lines
2.1 KiB
C#
79 lines
2.1 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
public struct Ripple
|
|
{
|
|
public Vector3 position;
|
|
public float startTime;
|
|
public float strength;
|
|
}
|
|
|
|
public struct RippleResult
|
|
{
|
|
public float height;
|
|
public float brightness;
|
|
}
|
|
|
|
public class RippleManager
|
|
{
|
|
private List<Ripple> ripples = new List<Ripple>();
|
|
private float rippleStrength;
|
|
private float rippleDuration;
|
|
private float rippleSpreadSpeed;
|
|
private float rippleSharpness;
|
|
private float rippleMaxRadius;
|
|
|
|
public RippleManager(float strength, float duration, float spreadSpeed, float sharpness, float maxRadius)
|
|
{
|
|
rippleStrength = strength;
|
|
rippleDuration = duration;
|
|
rippleSpreadSpeed = spreadSpeed;
|
|
rippleSharpness = sharpness;
|
|
rippleMaxRadius = maxRadius;
|
|
}
|
|
|
|
public void AddRipple(Vector3 position)
|
|
{
|
|
ripples.Add(new Ripple
|
|
{
|
|
position = position,
|
|
startTime = Time.time,
|
|
strength = rippleStrength
|
|
});
|
|
}
|
|
|
|
public void CleanupRipples()
|
|
{
|
|
ripples.RemoveAll(r => Time.time - r.startTime > rippleDuration);
|
|
}
|
|
|
|
public RippleResult GetRippleEffect(Vector3 position, float currentTime)
|
|
{
|
|
float totalHeight = 0f;
|
|
float totalBrightness = 0f;
|
|
|
|
foreach (var ripple in ripples)
|
|
{
|
|
float timeSinceStart = currentTime - ripple.startTime;
|
|
if (timeSinceStart > rippleDuration) continue;
|
|
|
|
float distance = Vector3.Distance(position, ripple.position);
|
|
float maxDistance = rippleSpreadSpeed * timeSinceStart;
|
|
|
|
if (distance > maxDistance || distance > rippleMaxRadius) continue;
|
|
|
|
float distFactor = Mathf.Exp(-distance * rippleSharpness);
|
|
float timeFactor = 1f - (timeSinceStart / rippleDuration);
|
|
float strength = ripple.strength * distFactor * timeFactor;
|
|
|
|
totalHeight += strength;
|
|
totalBrightness += strength;
|
|
}
|
|
|
|
return new RippleResult
|
|
{
|
|
height = totalHeight,
|
|
brightness = totalBrightness
|
|
};
|
|
}
|
|
} |