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); }
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); }
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); } }
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); }
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 }