using Godot;

namespace Rokojori
{  
  // Generated by ShaderClassGenerator 

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

    public static readonly ColorPropertyName albedo = ColorPropertyName.Create( "albedo" );
    public static readonly Sampler2DPropertyName textureAlbedo = Sampler2DPropertyName.Create( "texture_albedo" );
    public static readonly Sampler2DPropertyName textureAlbedoNoise = Sampler2DPropertyName.Create( "texture_albedoNoise" );
    public static readonly FloatPropertyName albedoNoise = FloatPropertyName.Create( "albedoNoise" );
    public static readonly FloatPropertyName albedoNoiseOffset = FloatPropertyName.Create( "albedoNoiseOffset" );
    public static readonly FloatPropertyName albedoNoiseUvScale = FloatPropertyName.Create( "albedoNoiseUVScale" );
    public static readonly FloatPropertyName albedoNoiseToRoughness = FloatPropertyName.Create( "albedoNoiseToRoughness" );
    public static readonly FloatPropertyName roughness = FloatPropertyName.Create( "roughness" );
    public static readonly FloatPropertyName roughnessOffset = FloatPropertyName.Create( "roughnessOffset" );
    public static readonly FloatPropertyName roughnessOverwriteAmount = FloatPropertyName.Create( "roughnessOverwriteAmount" );
    public static readonly FloatPropertyName roughnessOverwriteValue = FloatPropertyName.Create( "roughnessOverwriteValue" );
    public static readonly Sampler2DPropertyName textureRoughness = Sampler2DPropertyName.Create( "texture_roughness" );
    public static readonly FloatPropertyName specular = FloatPropertyName.Create( "specular" );
    public static readonly Sampler2DPropertyName textureSpecular = Sampler2DPropertyName.Create( "texture_specular" );
    public static readonly Sampler2DPropertyName textureNormal = Sampler2DPropertyName.Create( "texture_normal" );
    public static readonly FloatPropertyName normalScale = FloatPropertyName.Create( "normal_scale" );
    public static readonly FloatPropertyName rim = FloatPropertyName.Create( "rim" );
    public static readonly FloatPropertyName rimTint = FloatPropertyName.Create( "rim_tint" );
    public static readonly Sampler2DPropertyName textureAmbientOcclusion = Sampler2DPropertyName.Create( "texture_ambient_occlusion" );
    public static readonly FloatPropertyName aoLightAffect = FloatPropertyName.Create( "ao_light_affect" );
    public static readonly Sampler2DPropertyName microNormalTexture = Sampler2DPropertyName.Create( "microNormalTexture" );
    public static readonly Sampler2DPropertyName microNormalMaskTexture = Sampler2DPropertyName.Create( "microNormalMaskTexture" );
    public static readonly FloatPropertyName microNormalScale = FloatPropertyName.Create( "microNormalScale" );
    public static readonly FloatPropertyName subsurfaceScatteringStrength = FloatPropertyName.Create( "subsurface_scattering_strength" );
    public static readonly Sampler2DPropertyName textureSubsurfaceScattering = Sampler2DPropertyName.Create( "texture_subsurface_scattering" );
    public static readonly Vector3PropertyName uv1Scale = Vector3PropertyName.Create( "uv1_scale" );
    public static readonly Vector3PropertyName uv1Offset = Vector3PropertyName.Create( "uv1_offset" );
    public static readonly Vector3PropertyName uv2Scale = Vector3PropertyName.Create( "uv2_scale" );
    public static readonly Vector3PropertyName uv2Offset = Vector3PropertyName.Create( "uv2_offset" );

  }

  [Tool]
  public partial class CCSkinMaterial:CustomMaterial
  {
    
    
    public readonly CustomMaterialProperty<Color> albedo;
    public readonly CustomMaterialProperty<Texture2D> textureAlbedo;
    public readonly CustomMaterialProperty<Texture2D> textureAlbedoNoise;
    public readonly CustomMaterialProperty<float> albedoNoise;
    public readonly CustomMaterialProperty<float> albedoNoiseOffset;
    public readonly CustomMaterialProperty<float> albedoNoiseUvScale;
    public readonly CustomMaterialProperty<float> albedoNoiseToRoughness;
    public readonly CustomMaterialProperty<float> roughness;
    public readonly CustomMaterialProperty<float> roughnessOffset;
    public readonly CustomMaterialProperty<float> roughnessOverwriteAmount;
    public readonly CustomMaterialProperty<float> roughnessOverwriteValue;
    public readonly CustomMaterialProperty<Texture2D> textureRoughness;
    public readonly CustomMaterialProperty<float> specular;
    public readonly CustomMaterialProperty<Texture2D> textureSpecular;
    public readonly CustomMaterialProperty<Texture2D> textureNormal;
    public readonly CustomMaterialProperty<float> normalScale;
    public readonly CustomMaterialProperty<float> rim;
    public readonly CustomMaterialProperty<float> rimTint;
    public readonly CustomMaterialProperty<Texture2D> textureAmbientOcclusion;
    public readonly CustomMaterialProperty<float> aoLightAffect;
    public readonly CustomMaterialProperty<Texture2D> microNormalTexture;
    public readonly CustomMaterialProperty<Texture2D> microNormalMaskTexture;
    public readonly CustomMaterialProperty<float> microNormalScale;
    public readonly CustomMaterialProperty<float> subsurfaceScatteringStrength;
    public readonly CustomMaterialProperty<Texture2D> textureSubsurfaceScattering;
    public readonly CustomMaterialProperty<Vector3> uv1Scale;
    public readonly CustomMaterialProperty<Vector3> uv1Offset;
    public readonly CustomMaterialProperty<Vector3> uv2Scale;
    public readonly CustomMaterialProperty<Vector3> uv2Offset;

    public CCSkinMaterial()
    {
      Shader = CCSkinShader.shader.Get();

      albedo = new CustomMaterialProperty<Color>( this, CCSkinShader.albedo );
      textureAlbedo = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureAlbedo );
      textureAlbedoNoise = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureAlbedoNoise );
      albedoNoise = new CustomMaterialProperty<float>( this, CCSkinShader.albedoNoise );
      albedoNoiseOffset = new CustomMaterialProperty<float>( this, CCSkinShader.albedoNoiseOffset );
      albedoNoiseUvScale = new CustomMaterialProperty<float>( this, CCSkinShader.albedoNoiseUvScale );
      albedoNoiseToRoughness = new CustomMaterialProperty<float>( this, CCSkinShader.albedoNoiseToRoughness );
      roughness = new CustomMaterialProperty<float>( this, CCSkinShader.roughness );
      roughnessOffset = new CustomMaterialProperty<float>( this, CCSkinShader.roughnessOffset );
      roughnessOverwriteAmount = new CustomMaterialProperty<float>( this, CCSkinShader.roughnessOverwriteAmount );
      roughnessOverwriteValue = new CustomMaterialProperty<float>( this, CCSkinShader.roughnessOverwriteValue );
      textureRoughness = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureRoughness );
      specular = new CustomMaterialProperty<float>( this, CCSkinShader.specular );
      textureSpecular = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureSpecular );
      textureNormal = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureNormal );
      normalScale = new CustomMaterialProperty<float>( this, CCSkinShader.normalScale );
      rim = new CustomMaterialProperty<float>( this, CCSkinShader.rim );
      rimTint = new CustomMaterialProperty<float>( this, CCSkinShader.rimTint );
      textureAmbientOcclusion = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureAmbientOcclusion );
      aoLightAffect = new CustomMaterialProperty<float>( this, CCSkinShader.aoLightAffect );
      microNormalTexture = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.microNormalTexture );
      microNormalMaskTexture = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.microNormalMaskTexture );
      microNormalScale = new CustomMaterialProperty<float>( this, CCSkinShader.microNormalScale );
      subsurfaceScatteringStrength = new CustomMaterialProperty<float>( this, CCSkinShader.subsurfaceScatteringStrength );
      textureSubsurfaceScattering = new CustomMaterialProperty<Texture2D>( this, CCSkinShader.textureSubsurfaceScattering );
      uv1Scale = new CustomMaterialProperty<Vector3>( this, CCSkinShader.uv1Scale );
      uv1Offset = new CustomMaterialProperty<Vector3>( this, CCSkinShader.uv1Offset );
      uv2Scale = new CustomMaterialProperty<Vector3>( this, CCSkinShader.uv2Scale );
      uv2Offset = new CustomMaterialProperty<Vector3>( this, CCSkinShader.uv2Offset );
    }

  }

}