using Godot;

namespace Rokojori
{  
  // Generated by ShaderClassGenerator 

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

    public static readonly ColorPropertyName albedo = ColorPropertyName.Create( "albedo" );
    public static readonly FloatPropertyName size = FloatPropertyName.Create( "size" );
    public static readonly FloatPropertyName sizeCloseScale = FloatPropertyName.Create( "sizeCloseScale" );
    public static readonly FloatPropertyName sizeFarScale = FloatPropertyName.Create( "sizeFarScale" );
    public static readonly FloatPropertyName closeDistance = FloatPropertyName.Create( "closeDistance" );
    public static readonly FloatPropertyName farDistance = FloatPropertyName.Create( "farDistance" );
    public static readonly FloatPropertyName opacityModulationStrength = FloatPropertyName.Create( "opacityModulationStrength" );
    public static readonly FloatPropertyName opacityModulationDuration = FloatPropertyName.Create( "opacityModulationDuration" );
    public static readonly FloatPropertyName scanLineAmount = FloatPropertyName.Create( "scanLineAmount" );
    public static readonly FloatPropertyName scanLineDivisions = FloatPropertyName.Create( "scanLineDivisions" );
    public static readonly FloatPropertyName scanLineSpeed = FloatPropertyName.Create( "scanLineSpeed" );

  }

  [Tool]
  [GlobalClass]
  public partial class FancyOutlineMaterial:CustomMaterial
  {
    public static readonly CachedResource<FancyOutlineMaterial> ScanWhite500Ms20x = CustomMaterial.Cached<FancyOutlineMaterial>(
      "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Effects/FancyOutline/FancyOutline Scan White 500ms 20x.material"
    );
    
    public readonly CustomMaterialProperty<Color> albedo;
    public readonly CustomMaterialProperty<float> size;
    public readonly CustomMaterialProperty<float> sizeCloseScale;
    public readonly CustomMaterialProperty<float> sizeFarScale;
    public readonly CustomMaterialProperty<float> closeDistance;
    public readonly CustomMaterialProperty<float> farDistance;
    public readonly CustomMaterialProperty<float> opacityModulationStrength;
    public readonly CustomMaterialProperty<float> opacityModulationDuration;
    public readonly CustomMaterialProperty<float> scanLineAmount;
    public readonly CustomMaterialProperty<float> scanLineDivisions;
    public readonly CustomMaterialProperty<float> scanLineSpeed;

    public FancyOutlineMaterial()
    {
      Shader = FancyOutlineShader.shader.Get();

      albedo = new CustomMaterialProperty<Color>( this, FancyOutlineShader.albedo );
      size = new CustomMaterialProperty<float>( this, FancyOutlineShader.size );
      sizeCloseScale = new CustomMaterialProperty<float>( this, FancyOutlineShader.sizeCloseScale );
      sizeFarScale = new CustomMaterialProperty<float>( this, FancyOutlineShader.sizeFarScale );
      closeDistance = new CustomMaterialProperty<float>( this, FancyOutlineShader.closeDistance );
      farDistance = new CustomMaterialProperty<float>( this, FancyOutlineShader.farDistance );
      opacityModulationStrength = new CustomMaterialProperty<float>( this, FancyOutlineShader.opacityModulationStrength );
      opacityModulationDuration = new CustomMaterialProperty<float>( this, FancyOutlineShader.opacityModulationDuration );
      scanLineAmount = new CustomMaterialProperty<float>( this, FancyOutlineShader.scanLineAmount );
      scanLineDivisions = new CustomMaterialProperty<float>( this, FancyOutlineShader.scanLineDivisions );
      scanLineSpeed = new CustomMaterialProperty<float>( this, FancyOutlineShader.scanLineSpeed );
    }

  }

}