94 lines
1.6 KiB
C#
94 lines
1.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Godot;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class TextureChanneMixelChannelSetting:Resource
|
|
{
|
|
[Export]
|
|
public bool isAssigned = true;
|
|
|
|
[Export]
|
|
public float notAssignedValue = 0;
|
|
|
|
[Export]
|
|
public bool output_sRGB = true;
|
|
|
|
public enum ColorSource
|
|
{
|
|
Red, Green, Blue, Alpha
|
|
}
|
|
|
|
[Export]
|
|
public ColorSource source_channel;
|
|
|
|
[Export]
|
|
public bool source_sRGB = true;
|
|
|
|
[Export]
|
|
public Curve source_modifier;
|
|
|
|
float GetChannel( Color color, ColorSource colorSource )
|
|
{
|
|
if ( ColorSource.Red == colorSource )
|
|
{
|
|
return color.R;
|
|
}
|
|
|
|
if ( ColorSource.Green == colorSource )
|
|
{
|
|
return color.G;
|
|
}
|
|
|
|
if ( ColorSource.Blue == colorSource )
|
|
{
|
|
return color.B;
|
|
}
|
|
|
|
if ( ColorSource.Alpha == colorSource )
|
|
{
|
|
return color.A;
|
|
}
|
|
|
|
return 0.0f;
|
|
}
|
|
|
|
public float GetValue( Color sourceColor )
|
|
{
|
|
if ( ! isAssigned )
|
|
{
|
|
return notAssignedValue;
|
|
}
|
|
|
|
var value = GetChannel( sourceColor, source_channel );
|
|
|
|
if ( source_modifier == null && source_sRGB == output_sRGB )
|
|
{
|
|
return value;
|
|
}
|
|
|
|
if ( source_sRGB )
|
|
{
|
|
value = ColorX.SRGBtoLinear( value );
|
|
}
|
|
|
|
if ( source_modifier != null )
|
|
{
|
|
value = source_modifier.Sample( value );
|
|
}
|
|
|
|
if ( output_sRGB )
|
|
{
|
|
value = ColorX.LinearToSRGB( value );
|
|
}
|
|
|
|
return value;
|
|
}
|
|
}
|
|
} |