55 lines
1.5 KiB
C#
55 lines
1.5 KiB
C#
using UnityEngine;
|
|
|
|
namespace Obi
|
|
{
|
|
public class ObiFloatSmoothBrushMode : IObiBrushMode
|
|
{
|
|
ObiBlueprintFloatProperty property;
|
|
|
|
public ObiFloatSmoothBrushMode(ObiBlueprintFloatProperty property)
|
|
{
|
|
this.property = property;
|
|
}
|
|
|
|
public string name
|
|
{
|
|
get { return "Smooth"; }
|
|
}
|
|
|
|
public bool needsInputValue
|
|
{
|
|
get { return false; }
|
|
}
|
|
|
|
public void ApplyStamps(ObiBrushBase brush, bool modified)
|
|
{
|
|
var floatProperty = (ObiBlueprintFloatProperty)property;
|
|
|
|
float averageValue = 0;
|
|
float totalWeight = 0;
|
|
|
|
for (int i = 0; i < brush.weights.Length; ++i)
|
|
{
|
|
if (!property.Masked(i) && brush.weights[i] > 0)
|
|
{
|
|
averageValue += floatProperty.Get(i) * brush.weights[i];
|
|
totalWeight += brush.weights[i];
|
|
}
|
|
|
|
}
|
|
averageValue /= totalWeight;
|
|
|
|
for (int i = 0; i < brush.weights.Length; ++i)
|
|
{
|
|
if (!property.Masked(i) && brush.weights[i] > 0)
|
|
{
|
|
float currentValue = floatProperty.Get(i);
|
|
float delta = brush.opacity * brush.speed * (Mathf.Lerp(currentValue,averageValue,brush.weights[i]) - currentValue);
|
|
|
|
floatProperty.Set(i, currentValue + delta * (modified ? -1 : 1));
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
} |