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