Files
WhaleAdventure_VR/Assets/Stylized Water 3/Editor/Inspectors/AlignToWaterInspector.cs
2026-06-09 20:53:26 +09:00

137 lines
5.3 KiB
C#

// Stylized Water 3 by Staggart Creations (http://staggart.xyz)
// COPYRIGHT PROTECTED UNDER THE UNITY ASSET STORE EULA (https://unity.com/legal/as-terms)
// • Copying or referencing source code for the production of new asset store, or public, content is strictly prohibited!
// • Uploading this file to a public repository will subject it to an automated DMCA takedown request.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
using PrefabStageUtility = UnityEditor.SceneManagement.PrefabStageUtility;
namespace StylizedWater3
{
[CanEditMultipleObjects]
[CustomEditor(typeof(AlignToWater))]
public class AlignToWaterInspector : Editor
{
AlignToWater script;
SerializedProperty heightInterface;
SerializedProperty followTarget;
SerializedProperty surfaceSize;
SerializedProperty heightOffset;
SerializedProperty rollAmount;
SerializedProperty rotation;
SerializedProperty smoothing;
private bool isRiver;
private bool wavesEnabled;
private string proSkinPrefix => EditorGUIUtility.isProSkin ? "d_" : "";
private void OnEnable()
{
script = (AlignToWater)target;
heightInterface = serializedObject.FindProperty("heightInterface");
followTarget = serializedObject.FindProperty("followTarget");
surfaceSize = serializedObject.FindProperty("surfaceSize");
heightOffset = serializedObject.FindProperty("heightOffset");
rollAmount = serializedObject.FindProperty("rollAmount");
rotation = serializedObject.FindProperty("rotation");
smoothing = serializedObject.FindProperty("smoothing");
ValidateMaterial();
}
public override void OnInspectorGUI()
{
UI.DrawHeader();
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.Space(EditorGUIUtility.labelWidth);
AlignToWater.EnableInEditor =
GUILayout.Toggle(AlignToWater.EnableInEditor, new GUIContent(" Run in edit-mode (global)", EditorGUIUtility.IconContent(
(AlignToWater.EnableInEditor ? "animationvisibilitytoggleon" : "animationvisibilitytoggleoff")).image), "Button");
}
EditorGUILayout.Space();
serializedObject.Update();
if (script.rigidbody)
{
EditorGUILayout.HelpBox("RigidBody attachment detected! A fair reminder that this is not a physics-compatible component." +
"\n\n" +
"Physics will be overriden and its position and rotation will be set directly." +
"\nVertical forces applied to it will cause visible jittering.", MessageType.Warning);
}
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(heightInterface);
//UI.DrawNotification(isRiver, "Material has river mode enabled, buoyancy only works for flat water bodies", MessageType.Error);
//UI.DrawNotification(!wavesEnabled && !isRiver, "Material used on the water object does not have waves enabled.", MessageType.Error);
/*
if (script.waterObject && script.waterObject.material)
{
UI.DrawNotification((script.waterObject.material.GetFloat("_WorldSpaceUV") == 0f), "Material must use world-projected UV", "Change", ()=> script.waterObject.material.SetFloat("_WorldSpaceUV", 1f), MessageType.Error);
}
*/
EditorGUILayout.Space();
EditorGUILayout.PropertyField(surfaceSize);
EditorGUILayout.Space();
EditorGUILayout.PropertyField(followTarget);
EditorGUILayout.PropertyField(heightOffset);
EditorGUILayout.PropertyField(rollAmount);
EditorGUILayout.Separator();
EditorGUILayout.PropertyField(rotation);
EditorGUILayout.PropertyField(smoothing);
UI.DrawNotification(smoothing.floatValue == 0f && script.rigidbody, "Smoothing is required to mitigate jittering of the RigidBody", MessageType.Warning);
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
ValidateMaterial();
}
UI.DrawFooter();
}
private void ValidateMaterial()
{
/*
if (script.waterObject && script.waterObject.material)
{
if (script.waterObject.material != script.waterObject.meshRenderer.sharedMaterial) script.waterObject.material = script.waterObject.meshRenderer.sharedMaterial;
wavesEnabled = WaveParameters.WavesEnabled(script.waterObject.material);
isRiver = script.waterObject.material.IsKeywordEnabled(ShaderParams.Keywords.River);
}
*/
}
}
}