using Godot;

namespace Rokojori
{  
  // Generated by ShaderClassGenerator 

  public class FlareSuperBaseShader
  { 
    public static readonly CachedResource<Shader> shader = new CachedResource<Shader>( 
      "C:/rokojori/godot-projects/winter-tales/addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/FlareSuperBase.gdshader"
    );    

    public static readonly ColorPropertyName color = ColorPropertyName.Create( "color" );
    public static readonly FloatPropertyName opacity = FloatPropertyName.Create( "opacity" );
    public static readonly Sampler2DPropertyName opacityCurve = Sampler2DPropertyName.Create( "opacityCurve" );
    public static readonly FloatPropertyName colorDistortion = FloatPropertyName.Create( "colorDistortion" );
    public static readonly FloatPropertyName alphaDistortion = FloatPropertyName.Create( "alphaDistortion" );
    public static readonly Vector4PropertyName centerHsl = Vector4PropertyName.Create( "centerHSL" );
    public static readonly Vector4PropertyName outsideHsl = Vector4PropertyName.Create( "outsideHSL" );
    public static readonly FloatPropertyName sizeX = FloatPropertyName.Create( "sizeX" );
    public static readonly FloatPropertyName sizeY = FloatPropertyName.Create( "sizeY" );
    public static readonly FloatPropertyName worldSizeScale = FloatPropertyName.Create( "worldSizeScale" );
    public static readonly FloatPropertyName screenSizeScale = FloatPropertyName.Create( "screenSizeScale" );
    public static readonly FloatPropertyName worldSizeVsScreenSize = FloatPropertyName.Create( "worldSize_vs_screenSize" );
    public static readonly Vector2PropertyName screenOffsetScale = Vector2PropertyName.Create( "screenOffsetScale" );
    public static readonly Vector2PropertyName screenOffsetLayerSpread = Vector2PropertyName.Create( "screenOffsetLayerSpread" );
    public static readonly BoolPropertyName useQuickOcclusionTest = BoolPropertyName.Create( "useQuickOcclusionTest" );
    public static readonly FloatPropertyName occlusionZOffset = FloatPropertyName.Create( "occlusionZOffset" );
    public static readonly IntPropertyName occlusionTestMaxSteps = IntPropertyName.Create( "occlusionTestMaxSteps" );
    public static readonly FloatPropertyName occlusionTestStepStride = FloatPropertyName.Create( "occlusionTestStepStride" );
    public static readonly FloatPropertyName occlusionTestViewDependingScaleAmount = FloatPropertyName.Create( "occlusionTest_ViewDependingScaleAmount" );
    public static readonly FloatPropertyName occlusionTestViewDependingDistance = FloatPropertyName.Create( "occlusionTest_ViewDependingDistance" );

  }

  [Tool]
  public partial class FlareSuperBaseMaterial:CustomMaterial
  {
    
    
    public readonly CustomMaterialProperty<Color> color;
    public readonly CustomMaterialProperty<float> opacity;
    public readonly CustomMaterialProperty<Texture2D> opacityCurve;
    public readonly CustomMaterialProperty<float> colorDistortion;
    public readonly CustomMaterialProperty<float> alphaDistortion;
    public readonly CustomMaterialProperty<Vector4> centerHsl;
    public readonly CustomMaterialProperty<Vector4> outsideHsl;
    public readonly CustomMaterialProperty<float> sizeX;
    public readonly CustomMaterialProperty<float> sizeY;
    public readonly CustomMaterialProperty<float> worldSizeScale;
    public readonly CustomMaterialProperty<float> screenSizeScale;
    public readonly CustomMaterialProperty<float> worldSizeVsScreenSize;
    public readonly CustomMaterialProperty<Vector2> screenOffsetScale;
    public readonly CustomMaterialProperty<Vector2> screenOffsetLayerSpread;
    public readonly CustomMaterialProperty<bool> useQuickOcclusionTest;
    public readonly CustomMaterialProperty<float> occlusionZOffset;
    public readonly CustomMaterialProperty<int> occlusionTestMaxSteps;
    public readonly CustomMaterialProperty<float> occlusionTestStepStride;
    public readonly CustomMaterialProperty<float> occlusionTestViewDependingScaleAmount;
    public readonly CustomMaterialProperty<float> occlusionTestViewDependingDistance;

    public FlareSuperBaseMaterial()
    {
      Shader = FlareSuperBaseShader.shader.Get();

      color = new CustomMaterialProperty<Color>( this, FlareSuperBaseShader.color );
      opacity = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.opacity );
      opacityCurve = new CustomMaterialProperty<Texture2D>( this, FlareSuperBaseShader.opacityCurve );
      colorDistortion = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.colorDistortion );
      alphaDistortion = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.alphaDistortion );
      centerHsl = new CustomMaterialProperty<Vector4>( this, FlareSuperBaseShader.centerHsl );
      outsideHsl = new CustomMaterialProperty<Vector4>( this, FlareSuperBaseShader.outsideHsl );
      sizeX = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.sizeX );
      sizeY = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.sizeY );
      worldSizeScale = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.worldSizeScale );
      screenSizeScale = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.screenSizeScale );
      worldSizeVsScreenSize = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.worldSizeVsScreenSize );
      screenOffsetScale = new CustomMaterialProperty<Vector2>( this, FlareSuperBaseShader.screenOffsetScale );
      screenOffsetLayerSpread = new CustomMaterialProperty<Vector2>( this, FlareSuperBaseShader.screenOffsetLayerSpread );
      useQuickOcclusionTest = new CustomMaterialProperty<bool>( this, FlareSuperBaseShader.useQuickOcclusionTest );
      occlusionZOffset = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.occlusionZOffset );
      occlusionTestMaxSteps = new CustomMaterialProperty<int>( this, FlareSuperBaseShader.occlusionTestMaxSteps );
      occlusionTestStepStride = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.occlusionTestStepStride );
      occlusionTestViewDependingScaleAmount = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.occlusionTestViewDependingScaleAmount );
      occlusionTestViewDependingDistance = new CustomMaterialProperty<float>( this, FlareSuperBaseShader.occlusionTestViewDependingDistance );
    }

  }

}