137 lines
6.0 KiB
C#
137 lines
6.0 KiB
C#
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace AwesomeTechnologies.TouchReact
|
|||
|
{
|
|||
|
[CustomEditor(typeof(TouchReactSystem))]
|
|||
|
public class TouchReactSystemEditor : TouchReactBaseEditor
|
|||
|
{
|
|||
|
private int _currentTabIndex;
|
|||
|
private static readonly string[] TabNames =
|
|||
|
{
|
|||
|
"Settings", "Editor","Debug"
|
|||
|
};
|
|||
|
|
|||
|
public override void OnInspectorGUI()
|
|||
|
{
|
|||
|
HelpTopic = "home/vegetation-studio/components/touch-bend-system";
|
|||
|
LargeLogo = true;
|
|||
|
base.OnInspectorGUI();
|
|||
|
|
|||
|
_currentTabIndex = GUILayout.SelectionGrid(_currentTabIndex, TabNames, 3, EditorStyles.toolbarButton);
|
|||
|
|
|||
|
switch (_currentTabIndex)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
DrawSettingsInspector();
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
DrawEditorInspector();
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
DrawDebugInspector();
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void DrawSettingsInspector()
|
|||
|
{
|
|||
|
TouchReactSystem touchReactSystem = (TouchReactSystem)target;
|
|||
|
EditorGUILayout.HelpBox("Touch react system will bend grass and plants in an area around a camera. Only one instance per scene.", MessageType.Info);
|
|||
|
|
|||
|
|
|||
|
GUILayout.BeginVertical("box");
|
|||
|
EditorGUILayout.LabelField("Settings", LabelStyle);
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
touchReactSystem.AutoselectCamera = EditorGUILayout.Toggle("Auto select camera", touchReactSystem.AutoselectCamera);
|
|||
|
|
|||
|
if (!touchReactSystem.AutoselectCamera)
|
|||
|
{
|
|||
|
touchReactSystem.SelectedCamera = EditorGUILayout.ObjectField("Camera", touchReactSystem.SelectedCamera, typeof(Camera), true) as Camera;
|
|||
|
}
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
{
|
|||
|
touchReactSystem.Init();
|
|||
|
EditorUtility.SetDirty(touchReactSystem);
|
|||
|
}
|
|||
|
if (touchReactSystem.SelectedCamera == null)
|
|||
|
{
|
|||
|
EditorGUILayout.HelpBox("You need to select what camera will controll the vegetation system.", MessageType.Error);
|
|||
|
}
|
|||
|
|
|||
|
EditorGUILayout.HelpBox(
|
|||
|
"Select a camera to follow.",
|
|||
|
MessageType.Info);
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
//touchReactSystem.InvisibleLayer = EditorGUILayout.IntSlider("Touch React layer", touchReactSystem.InvisibleLayer, 0, 31);
|
|||
|
//EditorGUILayout.HelpBox("Select a layer not visible by any other camera. This is used to render a touch buffer for selected colliders and meshes within range.", MessageType.Info);
|
|||
|
|
|||
|
touchReactSystem.Speed = EditorGUILayout.Slider("Speed", touchReactSystem.Speed,0,10);
|
|||
|
EditorGUILayout.HelpBox("This sets the speed the grass will use to grow back to the original position", MessageType.Info);
|
|||
|
|
|||
|
touchReactSystem.TouchReactQuality = (TouchReactQuality)EditorGUILayout.EnumPopup("Buffer resolution", touchReactSystem.TouchReactQuality);
|
|||
|
EditorGUILayout.HelpBox("Pixel resolution of the touch react buffer. Low = 512x512, Normal = 1024x1024 and High =2048x2048", MessageType.Info);
|
|||
|
|
|||
|
touchReactSystem.OrthographicSize = EditorGUILayout.IntSlider("Affected area (meter)", touchReactSystem.OrthographicSize, 10, 500);
|
|||
|
EditorGUILayout.HelpBox("Area around camera affected by touch react. Increasing range reduces resolution on the mask.", MessageType.Info);
|
|||
|
|
|||
|
float resolution = (float)touchReactSystem.OrthographicSize / touchReactSystem.GetTouchReactQualityPixelResolution(touchReactSystem.TouchReactQuality);
|
|||
|
EditorGUILayout.LabelField("Current resolution " + resolution.ToString("F2") + " meter", LabelStyle);
|
|||
|
GUILayout.EndVertical();
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
{
|
|||
|
touchReactSystem.UpdateCamera();
|
|||
|
EditorUtility.SetDirty(touchReactSystem);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void DrawEditorInspector()
|
|||
|
{
|
|||
|
TouchReactSystem touchReactSystem = (TouchReactSystem)target;
|
|||
|
GUILayout.BeginVertical("box");
|
|||
|
EditorGUILayout.LabelField("Editor", LabelStyle);
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
touchReactSystem.HideTouchReactCamera = EditorGUILayout.Toggle("Hide TouchReact Camera", touchReactSystem.HideTouchReactCamera);
|
|||
|
EditorGUILayout.HelpBox("When enabled the touch react camera will be hidden in hierarchy", MessageType.Info);
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
{
|
|||
|
touchReactSystem.UpdateTouchReactCamera();
|
|||
|
EditorUtility.SetDirty(touchReactSystem);
|
|||
|
}
|
|||
|
GUILayout.EndVertical();
|
|||
|
}
|
|||
|
|
|||
|
void DrawDebugInspector()
|
|||
|
{
|
|||
|
TouchReactSystem touchReactSystem = (TouchReactSystem)target;
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
GUILayout.BeginVertical("box");
|
|||
|
EditorGUILayout.LabelField("Debug", LabelStyle);
|
|||
|
touchReactSystem.ShowDebugColliders = EditorGUILayout.Toggle("Show colliders/meshes", touchReactSystem.ShowDebugColliders);
|
|||
|
EditorGUILayout.HelpBox("Show colliders and meshes that affect grass.", MessageType.Info);
|
|||
|
GUILayout.EndVertical();
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
{
|
|||
|
EditorUtility.SetDirty(touchReactSystem);
|
|||
|
}
|
|||
|
|
|||
|
GUILayout.BeginVertical("box");
|
|||
|
EditorGUILayout.LabelField("Colliders", LabelStyle);
|
|||
|
EditorGUILayout.LabelField("Collider count: " + touchReactSystem.ColliderList.Count.ToString(), LabelStyle);
|
|||
|
GUILayout.EndVertical();
|
|||
|
|
|||
|
GUILayout.BeginVertical("box");
|
|||
|
EditorGUILayout.LabelField("Meshes", LabelStyle);
|
|||
|
EditorGUILayout.LabelField("Mesh count: " + touchReactSystem.MeshFilterList.Count.ToString(), LabelStyle);
|
|||
|
GUILayout.EndVertical();
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|