/******************************************************************************/
/*
  Project   - MudBun
  Publisher - Long Bunny Labs
              http://LongBunnyLabs.com
  Author    - Ming-Lun "Allen" Chou
              http://AllenChou.net
*/
/******************************************************************************/

using UnityEditor;

namespace MudBun
{
  public class MudMeshMultiTexturedMaterialEditor : ShaderGUI
  {
    public override void OnGUI(MaterialEditor editor, MaterialProperty[] aProp)
    {
      var _AlphaCutoutThreshold = FindProperty("_AlphaCutoutThreshold", aProp);
      editor.ShaderProperty(_AlphaCutoutThreshold, _AlphaCutoutThreshold.displayName);

      var _Dithering = FindProperty("_Dithering", aProp);
      editor.ShaderProperty(_Dithering, _Dithering.displayName);

      var _DitherTexture = FindProperty("_DitherTexture", aProp);
      editor.ShaderProperty(_DitherTexture, _DitherTexture.displayName);

      var _DitherTextureSize = FindProperty("_DitherTextureSize", aProp);
      editor.ShaderProperty(_DitherTextureSize, _DitherTextureSize.displayName);

      var _RandomDither = FindProperty("_RandomDither", aProp);
      editor.ShaderProperty(_RandomDither, _RandomDither.displayName);

      EditorGUILayout.Space();

      var _UseTex0 = FindProperty("_UseTex0", aProp);
      editor.ShaderProperty(_UseTex0, _UseTex0.displayName);
      if (_UseTex0.floatValue > 0.0f)
      {
        var _MainTex = FindProperty("_MainTex", aProp);
        var _MainTexX = FindProperty("_MainTexX", aProp);
        var _MainTexY = FindProperty("_MainTexY", aProp);
        var _MainTexZ = FindProperty("_MainTexZ", aProp);
        editor.ShaderProperty(_MainTex, _MainTex.displayName);
        editor.ShaderProperty(_MainTexX, _MainTexX.displayName);
        editor.ShaderProperty(_MainTexY, _MainTexY.displayName);
        editor.ShaderProperty(_MainTexZ, _MainTexZ.displayName);
        EditorGUILayout.Space();
      }

      var _UseTex1 = FindProperty("_UseTex1", aProp);
      editor.ShaderProperty(_UseTex1, _UseTex1.displayName);
      if (_UseTex1.floatValue > 0.0f)
      {
        var _Tex1 = FindProperty("_Tex1", aProp);
        var _Tex1X = FindProperty("_Tex1X", aProp);
        var _Tex1Y = FindProperty("_Tex1Y", aProp);
        var _Tex1Z = FindProperty("_Tex1Z", aProp);
        editor.ShaderProperty(_Tex1, _Tex1.displayName);
        editor.ShaderProperty(_Tex1X, _Tex1X.displayName);
        editor.ShaderProperty(_Tex1Y, _Tex1Y.displayName);
        editor.ShaderProperty(_Tex1Z, _Tex1Z.displayName);
        EditorGUILayout.Space();
      }

      var _UseTex2 = FindProperty("_UseTex2", aProp);
      editor.ShaderProperty(_UseTex2, _UseTex2.displayName);
      if (_UseTex2.floatValue > 0.0f)
      {
        var _Tex2 = FindProperty("_Tex2", aProp);
        var _Tex2X = FindProperty("_Tex2X", aProp);
        var _Tex2Y = FindProperty("_Tex2Y", aProp);
        var _Tex2Z = FindProperty("_Tex2Z", aProp);
        editor.ShaderProperty(_Tex2, _Tex2.displayName);
        editor.ShaderProperty(_Tex2X, _Tex2X.displayName);
        editor.ShaderProperty(_Tex2Y, _Tex2Y.displayName);
        editor.ShaderProperty(_Tex2Z, _Tex2Z.displayName);
        EditorGUILayout.Space();
      }

      var _UseTex3 = FindProperty("_UseTex3", aProp);
      editor.ShaderProperty(_UseTex3, _UseTex3.displayName);
      if (_UseTex3.floatValue > 0.0f)
      {
        var _Tex3 = FindProperty("_Tex3", aProp);
        var _Tex3X = FindProperty("_Tex3X", aProp);
        var _Tex3Y = FindProperty("_Tex3Y", aProp);
        var _Tex3Z = FindProperty("_Tex3Z", aProp);
        editor.ShaderProperty(_Tex3, _Tex3.displayName);
        editor.ShaderProperty(_Tex3X, _Tex3X.displayName);
        editor.ShaderProperty(_Tex3Y, _Tex3Y.displayName);
        editor.ShaderProperty(_Tex3Z, _Tex3Z.displayName);
      }

      EditorGUILayout.Space();

      var _UseNorm0 = FindProperty("_UseNorm0", aProp);
      editor.ShaderProperty(_UseNorm0, _UseNorm0.displayName);
      if (_UseNorm0.floatValue > 0.0f)
      {
        var _MainNorm = FindProperty("_MainNorm", aProp);
        var _MainNormX = FindProperty("_MainNormX", aProp);
        var _MainNormY = FindProperty("_MainNormY", aProp);
        var _MainNormZ = FindProperty("_MainNormZ", aProp);
        editor.ShaderProperty(_MainNorm, _MainNorm.displayName);
        editor.ShaderProperty(_MainNormX, _MainNormX.displayName);
        editor.ShaderProperty(_MainNormY, _MainNormY.displayName);
        editor.ShaderProperty(_MainNormZ, _MainNormZ.displayName);
        EditorGUILayout.Space();
      }

      var _UseNorm1 = FindProperty("_UseNorm1", aProp);
      editor.ShaderProperty(_UseNorm1, _UseNorm1.displayName);
      if (_UseNorm1.floatValue > 0.0f)
      {
        var _Norm1 = FindProperty("_Norm1", aProp);
        var _Norm1X = FindProperty("_Norm1X", aProp);
        var _Norm1Y = FindProperty("_Norm1Y", aProp);
        var _Norm1Z = FindProperty("_Norm1Z", aProp);
        editor.ShaderProperty(_Norm1, _Norm1.displayName);
        editor.ShaderProperty(_Norm1X, _Norm1X.displayName);
        editor.ShaderProperty(_Norm1Y, _Norm1Y.displayName);
        editor.ShaderProperty(_Norm1Z, _Norm1Z.displayName);
        EditorGUILayout.Space();
      }

      var _UseNorm2 = FindProperty("_UseNorm2", aProp);
      editor.ShaderProperty(_UseNorm2, _UseNorm2.displayName);
      if (_UseNorm2.floatValue > 0.0f)
      {
        var _Norm2 = FindProperty("_Norm2", aProp);
        var _Norm2X = FindProperty("_Norm2X", aProp);
        var _Norm2Y = FindProperty("_Norm2Y", aProp);
        var _Norm2Z = FindProperty("_Norm2Z", aProp);
        editor.ShaderProperty(_Norm2, _Norm2.displayName);
        editor.ShaderProperty(_Norm2X, _Norm2X.displayName);
        editor.ShaderProperty(_Norm2Y, _Norm2Y.displayName);
        editor.ShaderProperty(_Norm2Z, _Norm2Z.displayName);
        EditorGUILayout.Space();
      }

      var _UseNorm3 = FindProperty("_UseNorm3", aProp);
      editor.ShaderProperty(_UseNorm3, _UseNorm3.displayName);
      if (_UseNorm3.floatValue > 0.0f)
      {
        var _Norm3 = FindProperty("_Norm3", aProp);
        var _Norm3X = FindProperty("_Norm3X", aProp);
        var _Norm3Y = FindProperty("_Norm3Y", aProp);
        var _Norm3Z = FindProperty("_Norm3Z", aProp);
        editor.ShaderProperty(_Norm3, _Norm3.displayName);
        editor.ShaderProperty(_Norm3X, _Norm3X.displayName);
        editor.ShaderProperty(_Norm3Y, _Norm3Y.displayName);
        editor.ShaderProperty(_Norm3Z, _Norm3Z.displayName);
      }

      EditorGUILayout.Space();

      editor.RenderQueueField();
      editor.DoubleSidedGIField();
    }
  }
}



