63 lines
1.0 KiB
C#
63 lines
1.0 KiB
C#
|
|
using Rokojori;
|
||
|
|
using Godot;
|
||
|
|
|
||
|
|
namespace Rokojori;
|
||
|
|
|
||
|
|
[GlobalClass,Tool]
|
||
|
|
public abstract partial class AdjustmentsMask: Resource
|
||
|
|
{
|
||
|
|
public enum Mode
|
||
|
|
{
|
||
|
|
Add,
|
||
|
|
Subtract,
|
||
|
|
Multiply,
|
||
|
|
Divide,
|
||
|
|
Max,
|
||
|
|
Min
|
||
|
|
}
|
||
|
|
|
||
|
|
[Export]
|
||
|
|
public Mode mode = Mode.Multiply;
|
||
|
|
|
||
|
|
public abstract float GetMask( Color rgb );
|
||
|
|
|
||
|
|
public static float Blend( AdjustmentsMask bottom, float bottomMask, AdjustmentsMask top, float topMask )
|
||
|
|
{
|
||
|
|
if ( bottom == null )
|
||
|
|
{
|
||
|
|
return bottomMask;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( Mode.Add == top.mode )
|
||
|
|
{
|
||
|
|
return bottomMask + topMask;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( Mode.Subtract == top.mode )
|
||
|
|
{
|
||
|
|
return bottomMask - topMask;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( Mode.Multiply == top.mode )
|
||
|
|
{
|
||
|
|
return bottomMask * topMask;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( Mode.Divide == top.mode )
|
||
|
|
{
|
||
|
|
return bottomMask / topMask;
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( Mode.Max == top.mode )
|
||
|
|
{
|
||
|
|
return Mathf.Max( bottomMask, topMask );
|
||
|
|
}
|
||
|
|
|
||
|
|
if ( Mode.Min == top.mode )
|
||
|
|
{
|
||
|
|
return Mathf.Min( bottomMask, topMask );
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
}
|