﻿using UnityEngine;
using UnityEditor;
 
public class LuxURPCustomSingleSidedShaderGUI : ShaderGUI
{
    public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
    {
        base.OnGUI(materialEditor, properties);

        Material material = materialEditor.target as Material;

    //  Old signature
        if (material.HasProperty("_Culling")) {
            var _Culling = ShaderGUI.FindProperty("_Culling", properties);
            if(_Culling.floatValue == 0.0f) {
                if (material.doubleSidedGI == false) {
                    Debug.Log ("Double Sided Global Illumination enabled.");
                }
                material.doubleSidedGI = true;
            }
        }
    //  Handle both cases
        if (material.HasProperty("_Cull")) {
            var _Cull = ShaderGUI.FindProperty("_Cull", properties);
            if(_Cull.floatValue == 0.0f) {
                if (material.doubleSidedGI == false) {
                    Debug.Log ("Double Sided Global Illumination enabled.");
                }
                material.doubleSidedGI = true;
            }
        }

        if (material.HasProperty("_AlphaClip")) {
            var _AlphaClip = ShaderGUI.FindProperty("_AlphaClip", properties);
            if(_AlphaClip.floatValue == 1.0f) {
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
                material.SetOverrideTag("RenderType", "TransparentCutout");
            }
            else {
                material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Geometry;
                material.SetOverrideTag("RenderType", "Opaque");
            //  In case alpha testing is disabled we also want to disable alpha to coverage.
                if(material.HasProperty("_Coverage")) {
                    material.SetFloat("_Coverage", 0.0f);
                }
            }
        }

        //material.renderQueue = (int)UnityEngine.Rendering.RenderQueue.AlphaTest;
        //material.SetOverrideTag("RenderType", "TransparentCutout");

    //  Needed to make the Selection Outline work
        if (material.HasProperty("_MainTex") && material.HasProperty("_BaseMap") ) {
            if (material.GetTexture("_BaseMap") != null) {
                material.SetTexture("_MainTex", material.GetTexture("_BaseMap"));
            }
        }
    }
}