using Godot;

namespace Rokojori
{  
  // Generated by ShaderClassGenerator 

  public class RoundedRectangleShader
  { 
    public static readonly CachedResource<Shader> shader = new CachedResource<Shader>( 
      "res://addons/rokojori_action_library/Runtime/UI/Shaders/RoundedRectangle/RoundedRectangle.gdshader"
    );    

    public static readonly Vector2PropertyName size = Vector2PropertyName.Create( "size" );
    public static readonly FloatPropertyName sharpness = FloatPropertyName.Create( "sharpness" );
    public static readonly FloatPropertyName borderRadius = FloatPropertyName.Create( "borderRadius" );
    public static readonly FloatPropertyName strokeSize = FloatPropertyName.Create( "strokeSize" );
    public static readonly FloatPropertyName offset = FloatPropertyName.Create( "offset" );
    public static readonly ColorPropertyName fillColor = ColorPropertyName.Create( "fillColor" );
    public static readonly Vector4PropertyName fillUvTransform = Vector4PropertyName.Create( "fillUVTransform" );
    public static readonly Vector4PropertyName screenfillMultiplyUvTransform = Vector4PropertyName.Create( "screenfillMultiplyUVTransform" );
    public static readonly Vector2PropertyName screenfillMultiplyUvMovement = Vector2PropertyName.Create( "screenfillMultiplyUVMovement" );
    public static readonly ColorPropertyName strokeColor = ColorPropertyName.Create( "strokeColor" );
    public static readonly Vector4PropertyName strokeUvTransform = Vector4PropertyName.Create( "strokeUVTransform" );
    public static readonly Vector4PropertyName screenStrokeMultiplyUvTransform = Vector4PropertyName.Create( "screenStrokeMultiplyUVTransform" );
    public static readonly Vector2PropertyName screenStrokeMultiplyUvMovment = Vector2PropertyName.Create( "screenStrokeMultiplyUVMovment" );
    public static readonly FloatPropertyName opacity = FloatPropertyName.Create( "opacity" );
    public static readonly Sampler2DPropertyName fill = Sampler2DPropertyName.Create( "fill" );
    public static readonly Sampler2DPropertyName screenFillMultiply = Sampler2DPropertyName.Create( "screenFillMultiply" );
    public static readonly Sampler2DPropertyName stroke = Sampler2DPropertyName.Create( "stroke" );
    public static readonly Sampler2DPropertyName screenStrokeMultiply = Sampler2DPropertyName.Create( "screenStrokeMultiply" );

  }

  [Tool]
  public partial class RoundedRectangleMaterial:CustomMaterial
  {
    
    
    public readonly CustomMaterialProperty<Vector2> size;
    public readonly CustomMaterialProperty<float> sharpness;
    public readonly CustomMaterialProperty<float> borderRadius;
    public readonly CustomMaterialProperty<float> strokeSize;
    public readonly CustomMaterialProperty<float> offset;
    public readonly CustomMaterialProperty<Color> fillColor;
    public readonly CustomMaterialProperty<Vector4> fillUvTransform;
    public readonly CustomMaterialProperty<Vector4> screenfillMultiplyUvTransform;
    public readonly CustomMaterialProperty<Vector2> screenfillMultiplyUvMovement;
    public readonly CustomMaterialProperty<Color> strokeColor;
    public readonly CustomMaterialProperty<Vector4> strokeUvTransform;
    public readonly CustomMaterialProperty<Vector4> screenStrokeMultiplyUvTransform;
    public readonly CustomMaterialProperty<Vector2> screenStrokeMultiplyUvMovment;
    public readonly CustomMaterialProperty<float> opacity;
    public readonly CustomMaterialProperty<Texture2D> fill;
    public readonly CustomMaterialProperty<Texture2D> screenFillMultiply;
    public readonly CustomMaterialProperty<Texture2D> stroke;
    public readonly CustomMaterialProperty<Texture2D> screenStrokeMultiply;

    public RoundedRectangleMaterial()
    {
      Shader = RoundedRectangleShader.shader.Get();

      size = new CustomMaterialProperty<Vector2>( this, RoundedRectangleShader.size );
      sharpness = new CustomMaterialProperty<float>( this, RoundedRectangleShader.sharpness );
      borderRadius = new CustomMaterialProperty<float>( this, RoundedRectangleShader.borderRadius );
      strokeSize = new CustomMaterialProperty<float>( this, RoundedRectangleShader.strokeSize );
      offset = new CustomMaterialProperty<float>( this, RoundedRectangleShader.offset );
      fillColor = new CustomMaterialProperty<Color>( this, RoundedRectangleShader.fillColor );
      fillUvTransform = new CustomMaterialProperty<Vector4>( this, RoundedRectangleShader.fillUvTransform );
      screenfillMultiplyUvTransform = new CustomMaterialProperty<Vector4>( this, RoundedRectangleShader.screenfillMultiplyUvTransform );
      screenfillMultiplyUvMovement = new CustomMaterialProperty<Vector2>( this, RoundedRectangleShader.screenfillMultiplyUvMovement );
      strokeColor = new CustomMaterialProperty<Color>( this, RoundedRectangleShader.strokeColor );
      strokeUvTransform = new CustomMaterialProperty<Vector4>( this, RoundedRectangleShader.strokeUvTransform );
      screenStrokeMultiplyUvTransform = new CustomMaterialProperty<Vector4>( this, RoundedRectangleShader.screenStrokeMultiplyUvTransform );
      screenStrokeMultiplyUvMovment = new CustomMaterialProperty<Vector2>( this, RoundedRectangleShader.screenStrokeMultiplyUvMovment );
      opacity = new CustomMaterialProperty<float>( this, RoundedRectangleShader.opacity );
      fill = new CustomMaterialProperty<Texture2D>( this, RoundedRectangleShader.fill );
      screenFillMultiply = new CustomMaterialProperty<Texture2D>( this, RoundedRectangleShader.screenFillMultiply );
      stroke = new CustomMaterialProperty<Texture2D>( this, RoundedRectangleShader.stroke );
      screenStrokeMultiply = new CustomMaterialProperty<Texture2D>( this, RoundedRectangleShader.screenStrokeMultiply );
    }

  }

}