Ejemplo n.º 1
0
    public static ITEXDraw GetTexDraw(GameObject obj)
    {
        if (!obj)
        {
            return(null);
        }
        ITEXDraw             target = null;
        List <MonoBehaviour> l      = ListPool <MonoBehaviour> .Get();

        obj.GetComponents <MonoBehaviour>(l);
        for (int i = 0; i < l.Count; i++)
        {
            if (l[i] is ITEXDraw)
            {
                target = (ITEXDraw)l[i];
                break;
            }
        }
        ListPool <MonoBehaviour> .ReleaseNoFlush(l);

        return(target);
    }
Ejemplo n.º 2
0
    public static MatWarnType GetMaterialIssue(Material mat, ITEXDraw texDraw)
    {
        var cases = MatWarnType.Okay;

        if (!mat)
        {
            cases = MatWarnType.Null;
        }
        else
        {
            var keyWord = mat.GetTag("TexMaterialType", false, "Null");
            if (keyWord == "Null")
            {
                cases = MatWarnType.NotATexDrawMaterial;
            }
            else if (keyWord == "Standard")
            {
                cases = MatWarnType.Okay;
            }
            else if (!TEXPreference.main.watchedMaterial.Contains(mat))
            {
                cases = MatWarnType.NotRegistered;
            }
            else if (keyWord != "RequireUV2" && keyWord != "Surface")
            {
                cases = MatWarnType.AmbigueShaderTags;
            }
            else if (texDraw == null)
            {
                cases = MatWarnType.Okay;
            }
            else if (keyWord == "RequireUV2" && texDraw.autoFill == Filling.None)
            {
                cases = MatWarnType.RequireUV2Fill;
            }
        }
        return(cases);
    }
Ejemplo n.º 3
0
    public static void DoMaterialGUI(SerializedProperty material, ITEXDraw texDraw)
    {
        var cases = MatWarnType.Okay;

        GUILayout.BeginHorizontal();
        EditorGUILayout.PropertyField(material, GUILayout.ExpandWidth(true));
        {
            var pref = TEXPreference.main;
            // 0 = Normal, 1 = Null, 2 = Multiple Value, 3 = Not registered

            if (material.hasMultipleDifferentValues)
            {
                cases = MatWarnType.MultipleValues;
            }
            else
            {
                var mat = (Material)material.objectReferenceValue;
                cases = GetMaterialIssue(mat, texDraw);
            }

            GUI.enabled = cases != MatWarnType.MultipleValues && cases != MatWarnType.NotATexDrawMaterial;
            if (GUILayout.Button(matCaseLabels[(int)cases], EditorStyles.miniButton, GUILayout.Width(80), GUILayout.Height(16)))
            {
                switch (cases)
                {
                case MatWarnType.Okay:
                case MatWarnType.Null:
                    var existMat = material.objectReferenceValue ?? pref.defaultMaterial;
                    var path     = EditorUtility.SaveFilePanel("Save new Material into ...",
                                                               Path.GetDirectoryName(AssetDatabase.GetAssetPath(existMat)),
                                                               existMat.name + " - Copy",
                                                               "mat");
                    if (string.IsNullOrEmpty(path))
                    {
                        break;
                    }
                    path = path.Replace(Application.dataPath, "Assets");
                    var newMat = Object.Instantiate <Material>((Material)existMat);
                    material.objectReferenceValue = newMat;
                    AssetDatabase.CreateAsset(newMat, path);
                    ArrayUtility.Add(ref pref.watchedMaterial, newMat);
                    pref.RebuildMaterial();
                    AssetDatabase.SaveAssets();
                    cases = MatWarnType.Okay;
                    break;

                case MatWarnType.NotRegistered:
                    if (AssetDatabase.Contains(material.objectReferenceValue))
                    {
                        ArrayUtility.Add(ref pref.watchedMaterial, (Material)material.objectReferenceValue);
                        pref.RebuildMaterial();
                        AssetDatabase.SaveAssets();
                        cases = MatWarnType.Okay;
                    }
                    break;

                case MatWarnType.RequireUV2Fill:
                    texDraw.autoFill = Filling.LocalContinous;
                    break;
                }
            }
            GUI.enabled = true;
        }
        GUILayout.EndHorizontal();
        if (cases == MatWarnType.NotRegistered)
        {
            EditorGUILayout.HelpBox("This material isn't registered in TexPreference's Watch List", MessageType.Warning);
        }
        else if (cases == MatWarnType.RequireUV2Fill)
        {
            EditorGUILayout.HelpBox("Auto Fill must set other than \'None\' to make this material works properly", MessageType.Warning);
        }
        else if (cases == MatWarnType.NotATexDrawMaterial)
        {
            EditorGUILayout.HelpBox("This material's shader is not compatible with TEXDraw, nor the shader implements \"TexMaterialType\" tag", MessageType.Warning);
        }
        else if (cases == MatWarnType.AmbigueShaderTags)
        {
            EditorGUILayout.HelpBox("This material's shader have ambigue \"TexMaterialType\" tag value, possible values are \'Standard\' and \'Surface\'", MessageType.Warning);
        }
    }
Ejemplo n.º 4
0
    public static MatWarnType GetMaterialIssue(Material mat, ITEXDraw texDraw)
    {
        var cases = MatWarnType.Okay;

        if (!mat)
        {
            cases = MatWarnType.Null;
#if TEXDRAW_TMP
            var keyWord = TEXPreference.main.defaultMaterial.GetTag("TexMaterialType", false, "Null");
            if (keyWord == "RequireTMPFix" && !((Component)texDraw).GetComponent <TEXSupFixTMP>())
            {
                cases = MatWarnType.RequireTMPIntegration;
            }
#endif
        }
        else
        {
            var keyWord = mat.GetTag("TexMaterialType", false, "Null");
            if (keyWord == "Null")
            {
                cases = MatWarnType.NotATexDrawMaterial;
            }
            else if (keyWord == "Standard")
            {
                cases = MatWarnType.Okay;
            }
            else if (!TEXPreference.main.watchedMaterial.Contains(mat))
            {
                cases = MatWarnType.NotRegistered;
            }
#if TEXDRAW_TMP
            else if (keyWord == "RequireTMPFix" && !((Component)texDraw).GetComponent <TEXSupFixTMP>())
            {
                cases = MatWarnType.RequireTMPIntegration;
            }
#endif
            else if (keyWord != "RequireUV2" && keyWord != "RequireTMPFix")
            {
                cases = MatWarnType.AmbigueShaderTags;
            }
            else if (texDraw == null)
            {
                cases = MatWarnType.Okay;
            }
            else if (keyWord == "RequireUV2" && texDraw.autoFill == Filling.None)
            {
                cases = MatWarnType.RequireUV2Fill;
            }
            else if (texDraw.autoFill == Filling.WorldContinous && !((Component)texDraw).GetComponent <TEXSupTransformFollow>())
            {
                cases = MatWarnType.RequireTransformFollow;
            }
        }
        if (texDraw is TEXDraw && !((Component)texDraw).GetComponent <TEXSupTransformFollow>())
        {
            if (GetRotationAngle((TEXDraw)texDraw) > 10)
            {
                cases = MatWarnType.RequireRotationFix;
            }
        }
        return(cases);
    }
Ejemplo n.º 5
0
    public static void DoMaterialGUI(SerializedProperty material, ITEXDraw texDraw)
    {
        var cases = MatWarnType.Okay;

        GUILayout.BeginHorizontal();
        EditorGUILayout.PropertyField(material, GUILayout.ExpandWidth(true));
        {
            var pref = TEXPreference.main;
            // 0 = Normal, 1 = Null, 2 = Multiple Value, 3 = Not registered

            if (material.hasMultipleDifferentValues)
            {
                cases = MatWarnType.MultipleValues;
            }
            else
            {
                var mat = (Material)material.objectReferenceValue;
                cases = GetMaterialIssue(mat, texDraw);
            }

            GUI.enabled = cases != MatWarnType.MultipleValues && cases != MatWarnType.NotATexDrawMaterial;
            if (GUILayout.Button(matCaseLabels[(int)cases], EditorStyles.miniButton, GUILayout.Width(80), GUILayout.Height(16)))
            {
                switch (cases)
                {
                case MatWarnType.Okay:
                case MatWarnType.Null:
                    var existMat = material.objectReferenceValue ?? pref.defaultMaterial;
                    var path     = EditorUtility.SaveFilePanel("Save new Material into ...",
                                                               Path.GetDirectoryName(AssetDatabase.GetAssetPath(existMat)),
                                                               existMat.name + " - Copy",
                                                               "mat");
                    if (string.IsNullOrEmpty(path))
                    {
                        break;
                    }
                    path = path.Replace(Application.dataPath, "Assets");
                    var newMat = Object.Instantiate <Material>((Material)existMat);
                    material.objectReferenceValue = newMat;
                    AssetDatabase.CreateAsset(newMat, path);
                    ArrayUtility.Add(ref pref.watchedMaterial, newMat);
                    pref.RebuildMaterial();
                    AssetDatabase.SaveAssets();
                    cases = MatWarnType.Okay;
                    break;

                case MatWarnType.NotRegistered:
                    if (AssetDatabase.Contains(material.objectReferenceValue))
                    {
                        ArrayUtility.Add(ref pref.watchedMaterial, (Material)material.objectReferenceValue);
                        pref.RebuildMaterial();
                        AssetDatabase.SaveAssets();
                        cases = MatWarnType.Okay;
                    }
                    break;

                case MatWarnType.RequireUV2Fill:
                    texDraw.autoFill = Filling.LocalContinous;
                    break;

                case MatWarnType.RequireTransformFollow:
                case MatWarnType.RequireRotationFix:
                    ((Component)texDraw).gameObject.AddComponent <TEXSupTransformFollow>();
                    break;

#if TEXDRAW_TMP
                case  MatWarnType.RequireTMPIntegration:
                    ((Component)texDraw).gameObject.AddComponent <TEXSupFixTMP>();
                    break;
#endif
                }
            }
            GUI.enabled = true;
        }
        GUILayout.EndHorizontal();
        if (cases == MatWarnType.NotRegistered)
        {
            EditorGUILayout.HelpBox("The material doesn't registered in Preference's Watched List", MessageType.Warning);
        }
        else if (cases == MatWarnType.RequireUV2Fill)
        {
            EditorGUILayout.HelpBox("Auto Fill must set other than \'None\' to make this material works properly", MessageType.Warning);
        }
        else if (cases == MatWarnType.RequireTransformFollow)
        {
            EditorGUILayout.HelpBox("World Continous requires TEXSupTransformFollow to make it interact properly", MessageType.Warning);
        }
        else if (cases == MatWarnType.RequireRotationFix)
        {
            EditorGUILayout.HelpBox("Rotated TEXDraw UI requires TEXSupTransformFollow to fix tangent issue", MessageType.Warning);
        }
        else if (cases == MatWarnType.NotATexDrawMaterial)
        {
            EditorGUILayout.HelpBox("Selected Material doesn't use TEXDraw shaders, or it's shader doesn't implement \"TexMaterialType\" Tag", MessageType.Warning);
        }
        else if (cases == MatWarnType.AmbigueShaderTags)
#if TEXDRAW_TMP
        { EditorGUILayout.HelpBox("Shader have Ambigue \"TexMaterialType\" Tag Value, possible values are \'Standard\', \'RequireUV2\', and \'RequireTMPFix\'", MessageType.Warning); }
        else if (cases == MatWarnType.RequireTMPIntegration)
        {
            EditorGUILayout.HelpBox("Need to attach TEXSupFixTMP to make it work properly", MessageType.Warning);
        }
#else
        { EditorGUILayout.HelpBox("Shader have Ambigue \"TexMaterialType\" Tag Value, possible values are \'Standard\' and \'RequireUV2\'", MessageType.Warning); }
#endif
    }