using Godot;

namespace Rokojori
{  
  // Generated by ShaderClassGenerator 

  public class ScanGradientShader
  { 
    public static readonly CachedResource<Shader> shader = new CachedResource<Shader>( 
      "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Effects/ScanGradient/ScanGradient.gdshader"
    );    

    public static readonly ColorPropertyName albedo = ColorPropertyName.Create( "albedo" );
    public static readonly FloatPropertyName grow = FloatPropertyName.Create( "grow" );
    public static readonly FloatPropertyName range = FloatPropertyName.Create( "range" );
    public static readonly FloatPropertyName offset = FloatPropertyName.Create( "offset" );
    public static readonly FloatPropertyName rangeWobble = FloatPropertyName.Create( "rangeWobble" );
    public static readonly FloatPropertyName rangeWobbleDuration = FloatPropertyName.Create( "rangeWobbleDuration" );
    public static readonly FloatPropertyName offsetWobble = FloatPropertyName.Create( "offsetWobble" );
    public static readonly FloatPropertyName offsetWobbleDuration = FloatPropertyName.Create( "offsetWobbleDuration" );
    public static readonly FloatPropertyName noiseScale = FloatPropertyName.Create( "noiseScale" );
    public static readonly Vector3PropertyName noiseOffset = Vector3PropertyName.Create( "noiseOffset" );
    public static readonly FloatPropertyName noiseAmount = FloatPropertyName.Create( "noiseAmount" );
    public static readonly FloatPropertyName rgbScale = FloatPropertyName.Create( "rgbScale" );
    public static readonly FloatPropertyName alphaScale = FloatPropertyName.Create( "alphaScale" );
    public static readonly Sampler2DPropertyName textureAlbedo = Sampler2DPropertyName.Create( "texture_albedo" );
    public static readonly Sampler2DPropertyName scanTexture = Sampler2DPropertyName.Create( "scanTexture" );

  }

  [Tool]
  public partial class ScanGradientMaterial:CustomMaterial
  {
    public static readonly CachedResource<ScanGradientMaterial> White = CustomMaterial.Cached<ScanGradientMaterial>(
      "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Effects/ScanGradient/ScanGradient White.material"
    );
    
    public readonly CustomMaterialProperty<Color> albedo;
    public readonly CustomMaterialProperty<float> grow;
    public readonly CustomMaterialProperty<float> range;
    public readonly CustomMaterialProperty<float> offset;
    public readonly CustomMaterialProperty<float> rangeWobble;
    public readonly CustomMaterialProperty<float> rangeWobbleDuration;
    public readonly CustomMaterialProperty<float> offsetWobble;
    public readonly CustomMaterialProperty<float> offsetWobbleDuration;
    public readonly CustomMaterialProperty<float> noiseScale;
    public readonly CustomMaterialProperty<Vector3> noiseOffset;
    public readonly CustomMaterialProperty<float> noiseAmount;
    public readonly CustomMaterialProperty<float> rgbScale;
    public readonly CustomMaterialProperty<float> alphaScale;
    public readonly CustomMaterialProperty<Texture2D> textureAlbedo;
    public readonly CustomMaterialProperty<Texture2D> scanTexture;

    public ScanGradientMaterial()
    {
      Shader = ScanGradientShader.shader.Get();

      albedo = new CustomMaterialProperty<Color>( this, ScanGradientShader.albedo );
      grow = new CustomMaterialProperty<float>( this, ScanGradientShader.grow );
      range = new CustomMaterialProperty<float>( this, ScanGradientShader.range );
      offset = new CustomMaterialProperty<float>( this, ScanGradientShader.offset );
      rangeWobble = new CustomMaterialProperty<float>( this, ScanGradientShader.rangeWobble );
      rangeWobbleDuration = new CustomMaterialProperty<float>( this, ScanGradientShader.rangeWobbleDuration );
      offsetWobble = new CustomMaterialProperty<float>( this, ScanGradientShader.offsetWobble );
      offsetWobbleDuration = new CustomMaterialProperty<float>( this, ScanGradientShader.offsetWobbleDuration );
      noiseScale = new CustomMaterialProperty<float>( this, ScanGradientShader.noiseScale );
      noiseOffset = new CustomMaterialProperty<Vector3>( this, ScanGradientShader.noiseOffset );
      noiseAmount = new CustomMaterialProperty<float>( this, ScanGradientShader.noiseAmount );
      rgbScale = new CustomMaterialProperty<float>( this, ScanGradientShader.rgbScale );
      alphaScale = new CustomMaterialProperty<float>( this, ScanGradientShader.alphaScale );
      textureAlbedo = new CustomMaterialProperty<Texture2D>( this, ScanGradientShader.textureAlbedo );
      scanTexture = new CustomMaterialProperty<Texture2D>( this, ScanGradientShader.scanTexture );
    }

  }

}