Files
HauntedBloodlines/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs
2025-05-29 22:31:40 +03:00

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));
}
}
}
}
}