HeavenStudio/Assets/Plugins/BezierSolution/Editor/BezierSettings.cs

757 lines
20 KiB
C#

using UnityEditor;
using UnityEngine;
namespace BezierSolution.Extras
{
public static class BezierSettings
{
#region Colors
private static Color? m_splineColor = null;
public static Color NormalSplineColor
{
get
{
if( m_splineColor == null )
m_splineColor = GetColor( "BezierSolution_SplineColor", new Color( 0.8f, 0.6f, 0.8f, 1f ) );
return m_splineColor.Value;
}
set
{
m_splineColor = value;
SetColor( "BezierSolution_SplineColor", value );
}
}
private static Color? m_selectedSplineColor = null;
public static Color SelectedSplineColor
{
get
{
if( m_selectedSplineColor == null )
m_selectedSplineColor = GetColor( "BezierSolution_SelectedSplineColor", new Color( 0.8f, 0.6f, 0.8f, 1f ) );
return m_selectedSplineColor.Value;
}
set
{
m_selectedSplineColor = value;
SetColor( "BezierSolution_SelectedSplineColor", value );
}
}
private static Color? m_endPointColor = null;
public static Color NormalEndPointColor
{
get
{
if( m_endPointColor == null )
m_endPointColor = GetColor( "BezierSolution_EndPointColor", Color.white );
return m_endPointColor.Value;
}
set
{
m_endPointColor = value;
SetColor( "BezierSolution_EndPointColor", value );
}
}
private static Color? m_selectedEndPointColor = null;
public static Color SelectedEndPointColor
{
get
{
if( m_selectedEndPointColor == null )
m_selectedEndPointColor = GetColor( "BezierSolution_SelectedEndPointColor", Color.yellow );
return m_selectedEndPointColor.Value;
}
set
{
m_selectedEndPointColor = value;
SetColor( "BezierSolution_SelectedEndPointColor", value );
}
}
private static Color? m_controlPointColor = null;
public static Color NormalControlPointColor
{
get
{
if( m_controlPointColor == null )
m_controlPointColor = GetColor( "BezierSolution_ControlPointColor", Color.white );
return m_controlPointColor.Value;
}
set
{
m_controlPointColor = value;
SetColor( "BezierSolution_ControlPointColor", value );
}
}
private static Color? m_selectedControlPointColor = null;
public static Color SelectedControlPointColor
{
get
{
if( m_selectedControlPointColor == null )
m_selectedControlPointColor = GetColor( "BezierSolution_SelectedControlPointColor", Color.green );
return m_selectedControlPointColor.Value;
}
set
{
m_selectedControlPointColor = value;
SetColor( "BezierSolution_SelectedControlPointColor", value );
}
}
private static Color? m_quickEditModeNewEndPointColor = null;
public static Color QuickEditModeNewEndPointColor
{
get
{
if( m_quickEditModeNewEndPointColor == null )
m_quickEditModeNewEndPointColor = GetColor( "BezierSolution_QuickEditNewPointColor", Color.cyan );
return m_quickEditModeNewEndPointColor.Value;
}
set
{
m_quickEditModeNewEndPointColor = value;
SetColor( "BezierSolution_QuickEditNewPointColor", value );
}
}
private static Color? m_quickEditModeDeleteEndPointColor = null;
public static Color QuickEditModeDeleteEndPointColor
{
get
{
if( m_quickEditModeDeleteEndPointColor == null )
m_quickEditModeDeleteEndPointColor = GetColor( "BezierSolution_QuickEditDeletePointColor", Color.red );
return m_quickEditModeDeleteEndPointColor.Value;
}
set
{
m_quickEditModeDeleteEndPointColor = value;
SetColor( "BezierSolution_QuickEditDeletePointColor", value );
}
}
private static Color? m_normalsPreviewColor = null;
public static Color NormalsPreviewColor
{
get
{
if( m_normalsPreviewColor == null )
m_normalsPreviewColor = GetColor( "BezierSolution_NormalsPreviewColor", Color.blue );
return m_normalsPreviewColor.Value;
}
set
{
m_normalsPreviewColor = value;
SetColor( "BezierSolution_NormalsPreviewColor", value );
}
}
private static Color? m_evenlySpacedPointsColor = null;
public static Color EvenlySpacedPointsColor
{
get
{
if( m_evenlySpacedPointsColor == null )
m_evenlySpacedPointsColor = GetColor( "BezierSolution_EvenlySpacedPointsColor", Color.white );
return m_evenlySpacedPointsColor.Value;
}
set
{
m_evenlySpacedPointsColor = value;
SetColor( "BezierSolution_EvenlySpacedPointsColor", value );
}
}
#endregion
#region Size Adjustments
private static float? m_splineThickness = null;
public static float SplineThickness
{
get
{
if( m_splineThickness == null )
m_splineThickness = EditorPrefs.GetFloat( "BezierSolution_SplineThickness", 8f );
return m_splineThickness.Value;
}
set
{
m_splineThickness = value;
EditorPrefs.SetFloat( "BezierSolution_SplineThickness", value );
}
}
private static float? m_endPointSize = null;
public static float EndPointSize
{
get
{
if( m_endPointSize == null )
m_endPointSize = EditorPrefs.GetFloat( "BezierSolution_EndPointSize", 0.075f );
return m_endPointSize.Value;
}
set
{
m_endPointSize = value;
EditorPrefs.SetFloat( "BezierSolution_EndPointSize", value );
}
}
private static float? m_selectedEndPointSize = null;
public static float SelectedEndPointSize
{
get
{
if( m_selectedEndPointSize == null )
m_selectedEndPointSize = EditorPrefs.GetFloat( "BezierSolution_SelectedEndPointSize", 0.075f * 1.5f );
return m_selectedEndPointSize.Value;
}
set
{
m_selectedEndPointSize = value;
EditorPrefs.SetFloat( "BezierSolution_SelectedEndPointSize", value );
}
}
private static float? m_controlPointSize = null;
public static float ControlPointSize
{
get
{
if( m_controlPointSize == null )
m_controlPointSize = EditorPrefs.GetFloat( "BezierSolution_ControlPointSize", 0.05f );
return m_controlPointSize.Value;
}
set
{
m_controlPointSize = value;
EditorPrefs.SetFloat( "BezierSolution_ControlPointSize", value );
}
}
private static float? m_quickEditModeNewEndPointSize = null;
public static float QuickEditModeNewEndPointSize
{
get
{
if( m_quickEditModeNewEndPointSize == null )
m_quickEditModeNewEndPointSize = EditorPrefs.GetFloat( "BezierSolution_QuickEditNewEndPointSize", 0.075f );
return m_quickEditModeNewEndPointSize.Value;
}
set
{
m_quickEditModeNewEndPointSize = value;
EditorPrefs.SetFloat( "BezierSolution_QuickEditNewEndPointSize", value );
}
}
private static float? m_normalsPreviewLength = null;
public static float NormalsPreviewLength
{
get
{
if( m_normalsPreviewLength == null )
m_normalsPreviewLength = EditorPrefs.GetFloat( "BezierSolution_NormalsPreviewLength", 0.35f );
return m_normalsPreviewLength.Value;
}
set
{
value = Mathf.Max( value, 0f );
m_normalsPreviewLength = value;
EditorPrefs.SetFloat( "BezierSolution_NormalsPreviewLength", value );
}
}
private static float? m_evenlySpacedPointsSize = null;
public static float EvenlySpacedPointsSize
{
get
{
if( m_evenlySpacedPointsSize == null )
m_evenlySpacedPointsSize = EditorPrefs.GetFloat( "BezierSolution_EvenlySpacedPointsSize", 0.1f );
return m_evenlySpacedPointsSize.Value;
}
set
{
m_evenlySpacedPointsSize = value;
EditorPrefs.SetFloat( "BezierSolution_EvenlySpacedPointsSize", value );
}
}
private static float? m_extraDataAsFrustumSize = null;
public static float ExtraDataAsFrustumSize
{
get
{
if( m_extraDataAsFrustumSize == null )
m_extraDataAsFrustumSize = EditorPrefs.GetFloat( "BezierSolution_ExtraDataFrustumSize", 2.2f );
return m_extraDataAsFrustumSize.Value;
}
set
{
m_extraDataAsFrustumSize = value;
EditorPrefs.SetFloat( "BezierSolution_ExtraDataFrustumSize", value );
}
}
#endregion
#region Other Settings
private static float? m_splineSmoothness = null;
public static float SplineSmoothness
{
get
{
if( m_splineSmoothness == null )
m_splineSmoothness = EditorPrefs.GetFloat( "BezierSolution_SplineSmoothness", 10f );
return m_splineSmoothness.Value;
}
set
{
value = Mathf.Max( value, 1f );
m_splineSmoothness = value;
EditorPrefs.SetFloat( "BezierSolution_SplineSmoothness", value );
}
}
private static int? m_displayedIntermediateNormalsCount = null;
public static int DisplayedIntermediateNormalsCount
{
get
{
if( m_displayedIntermediateNormalsCount == null )
m_displayedIntermediateNormalsCount = EditorPrefs.GetInt( "BezierSolution_IntermediateNormals", 8 );
return m_displayedIntermediateNormalsCount.Value;
}
set
{
value = Mathf.Clamp( value, 0, 999 );
m_displayedIntermediateNormalsCount = value;
EditorPrefs.SetInt( "BezierSolution_IntermediateNormals", value );
}
}
private static bool? m_moveMultiplePointsInOppositeDirections = null;
public static bool MoveMultiplePointsInOppositeDirections
{
get
{
if( m_moveMultiplePointsInOppositeDirections == null )
m_moveMultiplePointsInOppositeDirections = EditorPrefs.GetBool( "BezierSolution_OppositeTransformation", false );
return m_moveMultiplePointsInOppositeDirections.Value;
}
set
{
m_moveMultiplePointsInOppositeDirections = value;
EditorPrefs.SetBool( "BezierSolution_OppositeTransformation", value );
}
}
private static bool? m_quickEditSplineModifyNormals = null;
public static bool QuickEditSplineModifyNormals
{
get
{
if( m_quickEditSplineModifyNormals == null )
m_quickEditSplineModifyNormals = EditorPrefs.GetBool( "BezierSolution_QuickEditModifyNormals", true );
return m_quickEditSplineModifyNormals.Value;
}
set
{
m_quickEditSplineModifyNormals = value;
EditorPrefs.SetBool( "BezierSolution_QuickEditModifyNormals", value );
}
}
private static bool? m_quickEditSplinePreserveShape = null;
public static bool QuickEditSplinePreserveShape
{
get
{
if( m_quickEditSplinePreserveShape == null )
m_quickEditSplinePreserveShape = EditorPrefs.GetBool( "BezierSolution_QuickEditPreserveShape", false );
return m_quickEditSplinePreserveShape.Value;
}
set
{
m_quickEditSplinePreserveShape = value;
EditorPrefs.SetBool( "BezierSolution_QuickEditPreserveShape", value );
}
}
#endregion
#region Visibility Settings
private static bool? m_showControlPoints = null;
public static bool ShowControlPoints
{
get
{
if( m_showControlPoints == null )
m_showControlPoints = EditorPrefs.GetBool( "BezierSolution_ShowControlPoints", true );
return m_showControlPoints.Value;
}
set
{
m_showControlPoints = value;
EditorPrefs.SetBool( "BezierSolution_ShowControlPoints", value );
}
}
private static bool? m_showControlPointDirections = null;
public static bool ShowControlPointDirections
{
get
{
if( m_showControlPointDirections == null )
m_showControlPointDirections = EditorPrefs.GetBool( "BezierSolution_ShowControlPointDirs", true );
return m_showControlPointDirections.Value;
}
set
{
m_showControlPointDirections = value;
EditorPrefs.SetBool( "BezierSolution_ShowControlPointDirs", value );
}
}
private static bool? m_showEndPointLabels = null;
public static bool ShowEndPointLabels
{
get
{
if( m_showEndPointLabels == null )
m_showEndPointLabels = EditorPrefs.GetBool( "BezierSolution_ShowEndPointLabels", true );
return m_showEndPointLabels.Value;
}
set
{
m_showEndPointLabels = value;
EditorPrefs.SetBool( "BezierSolution_ShowEndPointLabels", value );
}
}
private static bool? m_showNormals = null;
public static bool ShowNormals
{
get
{
if( m_showNormals == null )
m_showNormals = EditorPrefs.GetBool( "BezierSolution_ShowNormals", true );
return m_showNormals.Value;
}
set
{
m_showNormals = value;
EditorPrefs.SetBool( "BezierSolution_ShowNormals", value );
}
}
private static bool? m_showEvenlySpacedPoints = null;
public static bool ShowEvenlySpacedPoints
{
get
{
if( m_showEvenlySpacedPoints == null )
m_showEvenlySpacedPoints = EditorPrefs.GetBool( "BezierSolution_ShowEvenlySpacedPoints", false );
return m_showEvenlySpacedPoints.Value;
}
set
{
m_showEvenlySpacedPoints = value;
EditorPrefs.SetBool( "BezierSolution_ShowEvenlySpacedPoints", value );
}
}
private static bool? m_visualizeExtraDataAsFrustum = null;
public static bool VisualizeExtraDataAsFrustum
{
get
{
if( m_visualizeExtraDataAsFrustum == null )
m_visualizeExtraDataAsFrustum = EditorPrefs.GetBool( "BezierSolution_VisualizeFrustum", false );
return m_visualizeExtraDataAsFrustum.Value;
}
set
{
m_visualizeExtraDataAsFrustum = value;
EditorPrefs.SetBool( "BezierSolution_VisualizeFrustum", value );
}
}
#endregion
#if UNITY_2018_3_OR_NEWER
[SettingsProvider]
public static SettingsProvider CreatePreferencesGUI()
{
return new SettingsProvider( "Project/yasirkula/Bezier Solution", SettingsScope.Project )
{
guiHandler = ( searchContext ) => PreferencesGUI(),
keywords = new System.Collections.Generic.HashSet<string>() { "Bezier", "Spline", "Point", "Normals", "Color", "Size" }
};
}
[MenuItem( "CONTEXT/BezierSpline/Open Settings" )]
[MenuItem( "CONTEXT/BezierPoint/Open Settings" )]
private static void OpenPreferencesWindow( MenuCommand command )
{
SettingsService.OpenProjectSettings( "yasirkula/Bezier Solution" );
}
#endif
#if !UNITY_2018_3_OR_NEWER
[PreferenceItem( "Bezier Solution" )]
#endif
public static void PreferencesGUI()
{
Color c;
float f;
int i;
bool b;
float labelWidth = EditorGUIUtility.labelWidth;
EditorGUIUtility.labelWidth += 50f;
EditorGUI.BeginChangeCheck();
EditorGUI.BeginChangeCheck();
c = ColorField( "Selected Spline Color", SelectedSplineColor, new Color( 0.8f, 0.6f, 0.8f, 1f ) );
if( EditorGUI.EndChangeCheck() )
SelectedSplineColor = c;
EditorGUI.BeginChangeCheck();
c = ColorField( "Unselected Spline Color", NormalSplineColor, new Color( 0.8f, 0.6f, 0.8f, 1f ) );
if( EditorGUI.EndChangeCheck() )
NormalSplineColor = c;
EditorGUI.BeginChangeCheck();
f = FloatField( "Selected Spline Thickness", SplineThickness, 8f );
if( EditorGUI.EndChangeCheck() )
SplineThickness = f;
EditorGUI.BeginChangeCheck();
f = FloatField( "Unselected Spline Smoothness", SplineSmoothness, 10f );
if( EditorGUI.EndChangeCheck() )
SplineSmoothness = f;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
c = ColorField( "Selected End Points Color", SelectedEndPointColor, Color.yellow );
if( EditorGUI.EndChangeCheck() )
SelectedEndPointColor = c;
EditorGUI.BeginChangeCheck();
c = ColorField( "Unselected End Point Color", NormalEndPointColor, Color.white );
if( EditorGUI.EndChangeCheck() )
NormalEndPointColor = c;
EditorGUI.BeginChangeCheck();
f = FloatField( "Selected End Points Size", SelectedEndPointSize, 0.075f * 1.5f );
if( EditorGUI.EndChangeCheck() )
SelectedEndPointSize = f;
EditorGUI.BeginChangeCheck();
f = FloatField( "Unselected End Points Size", EndPointSize, 0.075f );
if( EditorGUI.EndChangeCheck() )
EndPointSize = f;
EditorGUI.BeginChangeCheck();
b = EditorGUILayout.Toggle( "Show End Point Labels", ShowEndPointLabels );
if( EditorGUI.EndChangeCheck() )
ShowEndPointLabels = b;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
b = EditorGUILayout.Toggle( "Show Control Points", ShowControlPoints );
if( EditorGUI.EndChangeCheck() )
ShowControlPoints = b;
EditorGUI.indentLevel++;
EditorGUI.BeginChangeCheck();
b = EditorGUILayout.Toggle( "Show Control Point Directions", ShowControlPointDirections );
if( EditorGUI.EndChangeCheck() )
ShowControlPointDirections = b;
EditorGUI.BeginChangeCheck();
c = ColorField( "Selected Control Point Color", SelectedControlPointColor, Color.green );
if( EditorGUI.EndChangeCheck() )
SelectedControlPointColor = c;
EditorGUI.BeginChangeCheck();
c = ColorField( "Unselected Control Point Color", NormalControlPointColor, Color.white );
if( EditorGUI.EndChangeCheck() )
NormalControlPointColor = c;
EditorGUI.BeginChangeCheck();
f = FloatField( "Control Points Size", ControlPointSize, 0.05f );
if( EditorGUI.EndChangeCheck() )
ControlPointSize = f;
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
b = EditorGUILayout.Toggle( "Show Normals", ShowNormals );
if( EditorGUI.EndChangeCheck() )
ShowNormals = b;
EditorGUI.indentLevel++;
EditorGUI.BeginChangeCheck();
i = IntField( "Displayed Intermediate Normals", DisplayedIntermediateNormalsCount, 8 );
if( EditorGUI.EndChangeCheck() )
DisplayedIntermediateNormalsCount = i;
EditorGUI.BeginChangeCheck();
c = ColorField( "Normals Preview Color", NormalsPreviewColor, Color.blue );
if( EditorGUI.EndChangeCheck() )
NormalsPreviewColor = c;
EditorGUI.BeginChangeCheck();
f = FloatField( "Normals Preview Length", NormalsPreviewLength, 0.35f );
if( EditorGUI.EndChangeCheck() )
NormalsPreviewLength = f;
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
b = EditorGUILayout.Toggle( "Visualize Evenly Spaced Points", ShowEvenlySpacedPoints );
if( EditorGUI.EndChangeCheck() )
ShowEvenlySpacedPoints = b;
EditorGUI.indentLevel++;
EditorGUI.BeginChangeCheck();
c = ColorField( "Evenly Spaced Points Color", EvenlySpacedPointsColor, Color.white );
if( EditorGUI.EndChangeCheck() )
EvenlySpacedPointsColor = c;
EditorGUI.BeginChangeCheck();
f = FloatField( "Evenly Spaced Points Size", EvenlySpacedPointsSize, 0.1f );
if( EditorGUI.EndChangeCheck() )
EvenlySpacedPointsSize = f;
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
c = ColorField( "Quick Edit New Point Color", QuickEditModeNewEndPointColor, Color.cyan );
if( EditorGUI.EndChangeCheck() )
QuickEditModeNewEndPointColor = c;
EditorGUI.BeginChangeCheck();
c = ColorField( "Quick Edit Delete Point Color", QuickEditModeDeleteEndPointColor, Color.red );
if( EditorGUI.EndChangeCheck() )
QuickEditModeDeleteEndPointColor = c;
EditorGUI.BeginChangeCheck();
f = FloatField( "Quick Edit New Point Size", QuickEditModeNewEndPointSize, 0.075f );
if( EditorGUI.EndChangeCheck() )
QuickEditModeNewEndPointSize = f;
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
b = EditorGUILayout.Toggle( new GUIContent( "Visualize Extra Data As Frustum", "Visualize end points' Extra Data as camera frustum in Scene window" ), VisualizeExtraDataAsFrustum );
if( EditorGUI.EndChangeCheck() )
VisualizeExtraDataAsFrustum = b;
EditorGUI.indentLevel++;
EditorGUI.BeginChangeCheck();
f = FloatField( "Frustum Size", ExtraDataAsFrustumSize, 2.2f );
if( EditorGUI.EndChangeCheck() )
ExtraDataAsFrustumSize = f;
EditorGUI.indentLevel--;
EditorGUIUtility.labelWidth = labelWidth;
if( EditorGUI.EndChangeCheck() )
SceneView.RepaintAll();
}
private static Color ColorField( string label, Color value, Color defaultValue )
{
GUILayout.BeginHorizontal();
Color result = EditorGUILayout.ColorField( label, value );
if( GUILayout.Button( "Reset", BezierUtils.GL_WIDTH_60 ) )
result = defaultValue;
GUILayout.EndHorizontal();
return result;
}
private static float FloatField( string label, float value, float defaultValue )
{
GUILayout.BeginHorizontal();
float result = EditorGUILayout.FloatField( label, value );
if( GUILayout.Button( "Reset", BezierUtils.GL_WIDTH_60 ) )
result = defaultValue;
GUILayout.EndHorizontal();
return result;
}
private static int IntField( string label, int value, int defaultValue )
{
GUILayout.BeginHorizontal();
int result = EditorGUILayout.IntField( label, value );
if( GUILayout.Button( "Reset", BezierUtils.GL_WIDTH_60 ) )
result = defaultValue;
GUILayout.EndHorizontal();
return result;
}
private static Color GetColor( string pref, Color defaultColor )
{
if( !EditorPrefs.HasKey( pref ) )
return defaultColor;
string[] parts = EditorPrefs.GetString( pref ).Split( ';' );
return new Color32( byte.Parse( parts[0] ), byte.Parse( parts[1] ), byte.Parse( parts[2] ), byte.Parse( parts[3] ) );
}
private static void SetColor( string pref, Color32 value )
{
EditorPrefs.SetString( pref, string.Concat( value.r.ToString(), ";", value.g.ToString(), ";", value.b.ToString(), ";", value.a.ToString() ) );
}
}
}