2025-07-08 10:46:31 +00:00
//Stylized Water 2
//Staggart Creations (http://staggart.xyz)
//Copyright protected under Unity Asset Store EULA
using UnityEditor ;
using UnityEngine ;
namespace StylizedWater2
{
[CustomEditor(typeof(WaterGrid))]
public class CreateWaterGridInspector : Editor
{
private WaterGrid script ;
private SerializedProperty material ;
private SerializedProperty followSceneCamera ;
private SerializedProperty autoAssignCamera ;
private SerializedProperty followTarget ;
private SerializedProperty scale ;
private SerializedProperty vertexDistance ;
private SerializedProperty rowsColumns ;
private int vertexCount ;
private void OnEnable ( )
{
script = ( WaterGrid ) target ;
script . m_rowsColumns = script . rowsColumns ;
material = serializedObject . FindProperty ( "material" ) ;
followSceneCamera = serializedObject . FindProperty ( "followSceneCamera" ) ;
autoAssignCamera = serializedObject . FindProperty ( "autoAssignCamera" ) ;
followTarget = serializedObject . FindProperty ( "followTarget" ) ;
scale = serializedObject . FindProperty ( "scale" ) ;
vertexDistance = serializedObject . FindProperty ( "vertexDistance" ) ;
rowsColumns = serializedObject . FindProperty ( "rowsColumns" ) ;
}
public override void OnInspectorGUI ( )
{
UI . DrawHeader ( ) ;
using ( new EditorGUILayout . HorizontalScope ( ) )
{
GUILayout . Space ( EditorGUIUtility . labelWidth ) ;
WaterGrid . DisplayGrid = GUILayout . Toggle ( WaterGrid . DisplayGrid , new GUIContent ( " Display Grid" , EditorGUIUtility . IconContent ( ( WaterGrid . DisplayGrid ? "animationvisibilitytoggleon" : "animationvisibilitytoggleoff" ) ) . image ) , "Button" ) ;
WaterGrid . DisplayWireframe = GUILayout . Toggle ( WaterGrid . DisplayWireframe , new GUIContent ( " Show Wireframe" , EditorGUIUtility . IconContent ( ( WaterGrid . DisplayWireframe ? "animationvisibilitytoggleon" : "animationvisibilitytoggleoff" ) ) . image ) , "Button" ) ;
}
serializedObject . Update ( ) ;
EditorGUI . BeginChangeCheck ( ) ;
EditorGUILayout . LabelField ( "Appearance" , EditorStyles . boldLabel ) ;
EditorGUILayout . PropertyField ( material ) ;
if ( material . objectReferenceValue = = null ) EditorGUILayout . HelpBox ( "A material must be assigned" , MessageType . Error ) ;
EditorGUILayout . Space ( ) ;
EditorGUILayout . LabelField ( "Movement" , EditorStyles . boldLabel ) ;
EditorGUILayout . PropertyField ( followSceneCamera ) ;
using ( new EditorGUI . DisabledScope ( autoAssignCamera . boolValue ) )
{
EditorGUILayout . PropertyField ( followTarget ) ;
}
EditorGUI . indentLevel + + ;
EditorGUILayout . PropertyField ( autoAssignCamera ) ;
EditorGUI . indentLevel - - ;
EditorGUILayout . Space ( ) ;
EditorGUILayout . LabelField ( "Grid geometry" , EditorStyles . boldLabel ) ;
EditorGUILayout . PropertyField ( scale , GUILayout . MaxWidth ( EditorGUIUtility . labelWidth + 95f ) ) ;
using ( new EditorGUILayout . HorizontalScope ( ) )
{
EditorGUILayout . PrefixLabel ( rowsColumns . displayName ) ;
using ( new EditorGUI . DisabledScope ( rowsColumns . intValue < = 0 ) )
{
if ( GUILayout . Button ( "-" , EditorStyles . miniButtonLeft , GUILayout . Width ( 25f ) ) )
{
rowsColumns . intValue - - ;
}
}
EditorGUILayout . PropertyField ( rowsColumns , GUIContent . none , GUILayout . MaxWidth ( 40f ) ) ;
if ( GUILayout . Button ( "+" , EditorStyles . miniButtonRight , GUILayout . Width ( 25f ) ) )
{
rowsColumns . intValue + + ;
}
EditorGUILayout . LabelField ( $"= {rowsColumns.intValue * rowsColumns.intValue} tiles" , EditorStyles . miniLabel ) ;
}
EditorGUILayout . Space ( ) ;
EditorGUILayout . PropertyField ( vertexDistance , new GUIContent ( "Min. vertex distance" , vertexDistance . tooltip ) ) ;
vertexCount = Mathf . FloorToInt ( ( ( scale . floatValue / rowsColumns . intValue ) / vertexDistance . floatValue ) * ( ( scale . floatValue / rowsColumns . intValue ) / vertexDistance . floatValue ) ) ;
//EditorGUILayout.HelpBox($"Vertex count: {vertexCount}", MessageType.None);
if ( EditorGUI . EndChangeCheck ( ) )
{
serializedObject . ApplyModifiedProperties ( ) ;
//Executed here since objects can't be destroyed from OnValidate
script . Recreate ( ) ;
}
UI . DrawFooter ( ) ;
}
}
}