CliffAppearanceInspector.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // Fantasy Adventure Environment
  2. // Copyright Staggart Creations
  3. // staggart.xyz
  4. using UnityEngine;
  5. using System.Collections;
  6. using UnityEditor;
  7. namespace FAE
  8. {
  9. [CustomEditor(typeof(CliffAppearance))]
  10. public class CliffAppearanceInspector : Editor
  11. {
  12. CliffAppearance ca;
  13. private bool showHelp = false;
  14. private GameObject selection;
  15. new SerializedObject serializedObject;
  16. public SerializedProperty targetMaterials;
  17. public SerializedProperty objectColor;
  18. public SerializedProperty roughness;
  19. public SerializedProperty detailNormalMap;
  20. public SerializedProperty detailNormalStrength;
  21. public SerializedProperty globalColorMap;
  22. public SerializedProperty globalColor;
  23. public SerializedProperty globalTiling;
  24. public SerializedProperty useCoverageShader;
  25. public SerializedProperty coverageColorMap;
  26. public SerializedProperty coverageNormalMap;
  27. public SerializedProperty coverageAmount;
  28. public SerializedProperty coverageTiling;
  29. public SerializedProperty coverageMap;
  30. #if UNITY_EDITOR
  31. void OnEnable()
  32. {
  33. selection = Selection.activeGameObject;
  34. if (selection)
  35. {
  36. ca = Selection.activeGameObject.GetComponent<CliffAppearance>();
  37. }
  38. serializedObject = new SerializedObject(ca);
  39. targetMaterials = serializedObject.FindProperty("targetMaterials");
  40. objectColor = serializedObject.FindProperty("objectColor");
  41. roughness = serializedObject.FindProperty("roughness");
  42. detailNormalMap = serializedObject.FindProperty("detailNormalMap");
  43. detailNormalStrength = serializedObject.FindProperty("detailNormalStrength");
  44. globalColorMap = serializedObject.FindProperty("globalColorMap");
  45. globalColor = serializedObject.FindProperty("globalColor");
  46. globalTiling = serializedObject.FindProperty("globalTiling");
  47. useCoverageShader = serializedObject.FindProperty("useCoverageShader");
  48. coverageColorMap = serializedObject.FindProperty("coverageColorMap");
  49. coverageNormalMap = serializedObject.FindProperty("coverageNormalMap");
  50. coverageAmount = serializedObject.FindProperty("coverageAmount");
  51. coverageTiling = serializedObject.FindProperty("coverageTiling");
  52. coverageMap = serializedObject.FindProperty("coverageMap");
  53. }
  54. public override void OnInspectorGUI()
  55. {
  56. EditorGUI.BeginChangeCheck();
  57. Undo.RecordObject(this, "Component");
  58. if (selection) Undo.RecordObject(selection, "CliffAppearance");
  59. if (ca.cliffShader == null)
  60. {
  61. EditorGUILayout.HelpBox("Cliff shader could not be found!", MessageType.Error);
  62. }
  63. if (ca.cliffCoverageShader == null)
  64. {
  65. EditorGUILayout.HelpBox("Cliff Coverage shader could not be found!", MessageType.Error);
  66. }
  67. serializedObject.Update();
  68. DrawFields();
  69. serializedObject.ApplyModifiedProperties();
  70. if (GUI.changed || EditorGUI.EndChangeCheck())
  71. {
  72. EditorUtility.SetDirty(selection);
  73. EditorUtility.SetDirty((CliffAppearance)target);
  74. EditorUtility.SetDirty(this);
  75. ca.Apply();
  76. }
  77. }
  78. private void DrawFields()
  79. {
  80. DoHeader();
  81. EditorGUILayout.PropertyField(targetMaterials, true);
  82. EditorGUILayout.Space();
  83. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  84. EditorGUILayout.LabelField("Coverage", EditorStyles.toolbarButton);
  85. EditorGUILayout.Space();
  86. EditorGUILayout.PropertyField(useCoverageShader, new GUIContent("Enable"));
  87. if (showHelp) EditorGUILayout.HelpBox("Covers the objects from the Y-axis", MessageType.Info);
  88. if (ca.useCoverageShader)
  89. {
  90. EditorGUILayout.HelpBox("Currently this feature requires you to have the PigmentMapGenerator script on your terrain", MessageType.Info);
  91. EditorGUILayout.PropertyField(coverageMap, new GUIContent("Coverage map"));
  92. if (showHelp) EditorGUILayout.HelpBox("This grayscale map represents the coverage amount on the terrain \n\nThe bottom left of the texture equals the pivot point of the terrain", MessageType.Info);
  93. EditorGUILayout.PropertyField(coverageColorMap, new GUIContent("Albedo"));
  94. EditorGUILayout.PropertyField(coverageNormalMap, new GUIContent("Normals"));
  95. coverageAmount.floatValue = EditorGUILayout.Slider("Amount", coverageAmount.floatValue, 0f, 1f);
  96. coverageTiling.floatValue = EditorGUILayout.Slider("Tiling", coverageTiling.floatValue, 0f, 20f);
  97. }
  98. EditorGUILayout.Space();
  99. EditorGUILayout.EndVertical();
  100. EditorGUILayout.Space();
  101. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  102. EditorGUILayout.LabelField("Object", EditorStyles.toolbarButton);
  103. EditorGUILayout.Space();
  104. objectColor.colorValue = EditorGUILayout.ColorField("Color", objectColor.colorValue);
  105. roughness.floatValue = EditorGUILayout.Slider("Roughness", roughness.floatValue, 0f, 1f);
  106. EditorGUILayout.Space();
  107. EditorGUILayout.EndVertical();
  108. EditorGUILayout.Space();
  109. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  110. EditorGUILayout.LabelField("Detail", EditorStyles.toolbarButton);
  111. EditorGUILayout.Space();
  112. if (showHelp) EditorGUILayout.HelpBox("Normal details visible up close", MessageType.Info);
  113. EditorGUILayout.PropertyField(detailNormalMap, new GUIContent("Detail normal map"));
  114. detailNormalStrength.floatValue = EditorGUILayout.Slider("Normal strength", detailNormalStrength.floatValue, 0f, 1f);
  115. EditorGUILayout.Space();
  116. EditorGUILayout.EndVertical();
  117. EditorGUILayout.Space();
  118. EditorGUILayout.BeginVertical(EditorStyles.helpBox);
  119. EditorGUILayout.LabelField("Global", EditorStyles.toolbarButton);
  120. EditorGUILayout.Space();
  121. if (showHelp) EditorGUILayout.HelpBox("A tri-planar projected color map which tiles across all the objects seamlessly", MessageType.Info);
  122. EditorGUILayout.PropertyField(globalColorMap, new GUIContent("Global color map"));
  123. globalColor.colorValue = EditorGUILayout.ColorField("Color", globalColor.colorValue);
  124. globalTiling.floatValue = EditorGUILayout.Slider("Tiling", globalTiling.floatValue, 0f, 1f);
  125. EditorGUILayout.Space();
  126. EditorGUILayout.EndVertical();
  127. GUIHelper.DrawFooter();
  128. }
  129. private void DoHeader()
  130. {
  131. EditorGUILayout.BeginHorizontal();
  132. showHelp = GUILayout.Toggle(showHelp, "Toggle help", "Button");
  133. GUILayout.Label("FAE Cliff Appearance", GUIHelper.Header);
  134. EditorGUILayout.EndHorizontal();
  135. if (showHelp) EditorGUILayout.HelpBox("This script allows you to edit multiple materials that use the FAE/Cliff shader.", MessageType.Info);
  136. }
  137. #endif
  138. }
  139. }