using Godot;

namespace Rokojori
{  
  // Generated by ShaderClassGenerator 

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

    public static readonly FloatPropertyName size = FloatPropertyName.Create( "size" );
    public static readonly FloatPropertyName randomPosition = FloatPropertyName.Create( "randomPosition" );
    public static readonly ColorPropertyName albedo = ColorPropertyName.Create( "albedo" );
    public static readonly FloatPropertyName rotation = FloatPropertyName.Create( "rotation" );
    public static readonly FloatPropertyName rotationNoiseAmount = FloatPropertyName.Create( "rotationNoiseAmount" );
    public static readonly FloatPropertyName rotationNoiseScale = FloatPropertyName.Create( "rotationNoiseScale" );
    public static readonly FloatPropertyName normalBlendAmount = FloatPropertyName.Create( "normalBlendAmount" );
    public static readonly Vector3PropertyName normalBlendDirection = Vector3PropertyName.Create( "normalBlendDirection" );
    public static readonly FloatPropertyName roughness = FloatPropertyName.Create( "roughness" );
    public static readonly FloatPropertyName metalness = FloatPropertyName.Create( "metalness" );
    public static readonly FloatPropertyName specular = FloatPropertyName.Create( "specular" );
    public static readonly FloatPropertyName alphaScissorThreshold = FloatPropertyName.Create( "alpha_scissor_threshold" );
    public static readonly FloatPropertyName alphaAntialiasingEdge = FloatPropertyName.Create( "alpha_antialiasing_edge" );
    public static readonly Vector2IPropertyName albedoTextureSize = Vector2IPropertyName.Create( "albedo_texture_size" );
    public static readonly Vector4PropertyName aoTextureChannel = Vector4PropertyName.Create( "ao_texture_channel" );
    public static readonly FloatPropertyName aoLightAffect = FloatPropertyName.Create( "ao_light_affect" );
    public static readonly FloatPropertyName yMapStart = FloatPropertyName.Create( "yMapStart" );
    public static readonly FloatPropertyName yMapEnd = FloatPropertyName.Create( "yMapEnd" );
    public static readonly FloatPropertyName yMapNoiseAmount = FloatPropertyName.Create( "yMapNoiseAmount" );
    public static readonly FloatPropertyName yMapNoiseScale = FloatPropertyName.Create( "yMapNoiseScale" );
    public static readonly FloatPropertyName discardNoiseScale = FloatPropertyName.Create( "discardNoiseScale" );
    public static readonly FloatPropertyName discardThreshold = FloatPropertyName.Create( "discardThreshold" );
    public static readonly FloatPropertyName fresnelNormalSource = FloatPropertyName.Create( "fresnelNormalSource" );
    public static readonly ColorPropertyName fresnelColor = ColorPropertyName.Create( "fresnelColor" );
    public static readonly FloatPropertyName fresnelSharpness = FloatPropertyName.Create( "fresnelSharpness" );
    public static readonly FloatPropertyName fresnelScale = FloatPropertyName.Create( "fresnelScale" );
    public static readonly FloatPropertyName windAmount = FloatPropertyName.Create( "windAmount" );
    public static readonly Vector2PropertyName windSpeed = Vector2PropertyName.Create( "windSpeed" );
    public static readonly FloatPropertyName windNoiseScale = FloatPropertyName.Create( "windNoiseScale" );
    public static readonly FloatPropertyName windStart = FloatPropertyName.Create( "windStart" );
    public static readonly FloatPropertyName windEnd = FloatPropertyName.Create( "windEnd" );
    public static readonly Sampler2DPropertyName textureAlbedo = Sampler2DPropertyName.Create( "texture_albedo" );
    public static readonly Sampler2DPropertyName textureNormals = Sampler2DPropertyName.Create( "texture_normals" );
    public static readonly Sampler2DPropertyName textureAmbientOcclusion = Sampler2DPropertyName.Create( "texture_ambient_occlusion" );
    public static readonly Sampler2DPropertyName textureYMapGradient = Sampler2DPropertyName.Create( "texture_yMapGradient" );

  }

  [Tool]
  public partial class QuadBillboardMaterial:CustomMaterial
  {
    
    
    public readonly CustomMaterialProperty<float> size;
    public readonly CustomMaterialProperty<float> randomPosition;
    public readonly CustomMaterialProperty<Color> albedo;
    public readonly CustomMaterialProperty<float> rotation;
    public readonly CustomMaterialProperty<float> rotationNoiseAmount;
    public readonly CustomMaterialProperty<float> rotationNoiseScale;
    public readonly CustomMaterialProperty<float> normalBlendAmount;
    public readonly CustomMaterialProperty<Vector3> normalBlendDirection;
    public readonly CustomMaterialProperty<float> roughness;
    public readonly CustomMaterialProperty<float> metalness;
    public readonly CustomMaterialProperty<float> specular;
    public readonly CustomMaterialProperty<float> alphaScissorThreshold;
    public readonly CustomMaterialProperty<float> alphaAntialiasingEdge;
    public readonly CustomMaterialProperty<Vector2I> albedoTextureSize;
    public readonly CustomMaterialProperty<Vector4> aoTextureChannel;
    public readonly CustomMaterialProperty<float> aoLightAffect;
    public readonly CustomMaterialProperty<float> yMapStart;
    public readonly CustomMaterialProperty<float> yMapEnd;
    public readonly CustomMaterialProperty<float> yMapNoiseAmount;
    public readonly CustomMaterialProperty<float> yMapNoiseScale;
    public readonly CustomMaterialProperty<float> discardNoiseScale;
    public readonly CustomMaterialProperty<float> discardThreshold;
    public readonly CustomMaterialProperty<float> fresnelNormalSource;
    public readonly CustomMaterialProperty<Color> fresnelColor;
    public readonly CustomMaterialProperty<float> fresnelSharpness;
    public readonly CustomMaterialProperty<float> fresnelScale;
    public readonly CustomMaterialProperty<float> windAmount;
    public readonly CustomMaterialProperty<Vector2> windSpeed;
    public readonly CustomMaterialProperty<float> windNoiseScale;
    public readonly CustomMaterialProperty<float> windStart;
    public readonly CustomMaterialProperty<float> windEnd;
    public readonly CustomMaterialProperty<Texture2D> textureAlbedo;
    public readonly CustomMaterialProperty<Texture2D> textureNormals;
    public readonly CustomMaterialProperty<Texture2D> textureAmbientOcclusion;
    public readonly CustomMaterialProperty<Texture2D> textureYMapGradient;

    public QuadBillboardMaterial()
    {
      Shader = QuadBillboardShader.shader.Get();

      size = new CustomMaterialProperty<float>( this, QuadBillboardShader.size );
      randomPosition = new CustomMaterialProperty<float>( this, QuadBillboardShader.randomPosition );
      albedo = new CustomMaterialProperty<Color>( this, QuadBillboardShader.albedo );
      rotation = new CustomMaterialProperty<float>( this, QuadBillboardShader.rotation );
      rotationNoiseAmount = new CustomMaterialProperty<float>( this, QuadBillboardShader.rotationNoiseAmount );
      rotationNoiseScale = new CustomMaterialProperty<float>( this, QuadBillboardShader.rotationNoiseScale );
      normalBlendAmount = new CustomMaterialProperty<float>( this, QuadBillboardShader.normalBlendAmount );
      normalBlendDirection = new CustomMaterialProperty<Vector3>( this, QuadBillboardShader.normalBlendDirection );
      roughness = new CustomMaterialProperty<float>( this, QuadBillboardShader.roughness );
      metalness = new CustomMaterialProperty<float>( this, QuadBillboardShader.metalness );
      specular = new CustomMaterialProperty<float>( this, QuadBillboardShader.specular );
      alphaScissorThreshold = new CustomMaterialProperty<float>( this, QuadBillboardShader.alphaScissorThreshold );
      alphaAntialiasingEdge = new CustomMaterialProperty<float>( this, QuadBillboardShader.alphaAntialiasingEdge );
      albedoTextureSize = new CustomMaterialProperty<Vector2I>( this, QuadBillboardShader.albedoTextureSize );
      aoTextureChannel = new CustomMaterialProperty<Vector4>( this, QuadBillboardShader.aoTextureChannel );
      aoLightAffect = new CustomMaterialProperty<float>( this, QuadBillboardShader.aoLightAffect );
      yMapStart = new CustomMaterialProperty<float>( this, QuadBillboardShader.yMapStart );
      yMapEnd = new CustomMaterialProperty<float>( this, QuadBillboardShader.yMapEnd );
      yMapNoiseAmount = new CustomMaterialProperty<float>( this, QuadBillboardShader.yMapNoiseAmount );
      yMapNoiseScale = new CustomMaterialProperty<float>( this, QuadBillboardShader.yMapNoiseScale );
      discardNoiseScale = new CustomMaterialProperty<float>( this, QuadBillboardShader.discardNoiseScale );
      discardThreshold = new CustomMaterialProperty<float>( this, QuadBillboardShader.discardThreshold );
      fresnelNormalSource = new CustomMaterialProperty<float>( this, QuadBillboardShader.fresnelNormalSource );
      fresnelColor = new CustomMaterialProperty<Color>( this, QuadBillboardShader.fresnelColor );
      fresnelSharpness = new CustomMaterialProperty<float>( this, QuadBillboardShader.fresnelSharpness );
      fresnelScale = new CustomMaterialProperty<float>( this, QuadBillboardShader.fresnelScale );
      windAmount = new CustomMaterialProperty<float>( this, QuadBillboardShader.windAmount );
      windSpeed = new CustomMaterialProperty<Vector2>( this, QuadBillboardShader.windSpeed );
      windNoiseScale = new CustomMaterialProperty<float>( this, QuadBillboardShader.windNoiseScale );
      windStart = new CustomMaterialProperty<float>( this, QuadBillboardShader.windStart );
      windEnd = new CustomMaterialProperty<float>( this, QuadBillboardShader.windEnd );
      textureAlbedo = new CustomMaterialProperty<Texture2D>( this, QuadBillboardShader.textureAlbedo );
      textureNormals = new CustomMaterialProperty<Texture2D>( this, QuadBillboardShader.textureNormals );
      textureAmbientOcclusion = new CustomMaterialProperty<Texture2D>( this, QuadBillboardShader.textureAmbientOcclusion );
      textureYMapGradient = new CustomMaterialProperty<Texture2D>( this, QuadBillboardShader.textureYMapGradient );
    }

  }

}