2024-01-27 04:09:57 +08:00
#if UNITY_EDITOR
using UnityEngine ;
using UnityEditor ;
using UnityEngine.UIElements ;
namespace GSpawn
{
public enum PickSpawnGuidePrefabKeys
{
Alt = 0 ,
Control
}
public enum SelectionReplaceKeys
{
Alt = 0 ,
Control_Alt ,
Shift_Alt ,
}
public class InputPrefs : Prefs < InputPrefs >
{
//[SerializeField][UIFieldConfig("Rotation axes type", "Allows you to specify the rotation axes that are used when rotating entities (i.e. world axes, grid axes).", "General", false)]
//private RotationAxesType _rotationAxesType = defaultRotationAxesType;
[SerializeField] [ UIFieldConfig ( "Keyboard X rotation step" , "The amount of rotation applied around the X axis when rotating entities with the keyboard." , "Keyboard" , true ) ] [ Min ( 1e-2f ) ]
private float _keyboardXRotationStep = defaultKeyboardXRotationStep ;
[SerializeField] [ UIFieldConfig ( "Keyboard Y rotation step" , "The amount of rotation applied around the Y axis when rotating entities with the keyboard." ) ] [ Min ( 1e-2f ) ]
private float _keyboardYRotationStep = defaultKeyboardYRotationStep ;
[SerializeField] [ UIFieldConfig ( "Keyboard Z rotation step" , "The amount of rotation applied around the Z axis when rotating entities with the keyboard." ) ] [ Min ( 1e-2f ) ]
private float _keyboardZRotationStep = defaultKeyboardZRotationStep ;
[SerializeField] [ UIFieldConfig ( "Offset sensitivity" , "Mouse sensitivity when offsetting entities (e.g. when offsetting objects from a surface)." , "Mouse" , true ) ] [ Range ( 1e-2f , 10.0f ) ]
private float _mouseOffsetSensitivity = defaultMouseOffsetSensitivity ;
[SerializeField] [ UIFieldConfig ( "Rotation sensitivity" , "Mouse sensitivity when rotating entities." ) ] [ Range ( 1e-2f , 10.0f ) ]
private float _mouseRotationSensitivity = defaultMouseRotationSensitivity ;
[SerializeField] [ UIFieldConfig ( "Scroll rotation step" , "The amount of rotation applied when rotating entities with the mouse scroll wheel." ) ] [ Min ( 1e-2f ) ]
private float _scrollRotationStep = defaultScrollRotationStep ;
[SerializeField] [ UIFieldConfig ( "Scale sensitivity" , "Mouse sensitivity when scaling entities." ) ] [ Range ( 1e-2f , 10.0f ) ]
private float _mouseScaleSensitivity = defaultMouseScaleSensitivity ;
[SerializeField] [ UIFieldConfig ( "Log shortcuts" , "If checked, shortcuts will be displayed on the screen when they are used. Useful when recording video tutorials." , "Shortcut Logging" , true ) ]
private bool _logShortcuts = defaultLogShortcuts ;
[SerializeField] [ UIFieldConfig ( "Log text color" , "The text color used when drawing the shortcuts on the screen." ) ]
private Color _shortcutLogTextColor = defaultShortcutLogTextColor ;
[SerializeField] [ UIFieldConfig ( "Log font size" , "The font size used when drawing the shortcuts on the screen." ) ] [ Min ( 10 ) ]
private int _shortcutLogFontSize = defaultShortcutLogFontSize ;
[SerializeField] [ UIFieldConfig ( "Pick spawn guide prefab" , "The modifier key used to enable prefab picking when working with the spawn guide." , "Shortcuts" , true ) ]
private PickSpawnGuidePrefabKeys _pickSpawnGuidePrefabKeys = defaultPickSpawnGuidePrefabKeys ;
[SerializeField] [ UIFieldConfig ( "Selection replace" , "The modifier key used to enable selection replacement." ) ]
private SelectionReplaceKeys _selectionReplaceKeys = defaultSelectionReplaceKeys ;
2024-02-22 16:26:51 +08:00
[SerializeField] [ UIFieldConfig ( "Rotate previews with ALT + RClick" , "If checked, prefab preview rotation is performed using ALT + Right click (macOS only)." , "macOS" , true ) ]
private bool _macOS_RotatePreviewsAltRClick = default_macOS_RotatePreviewsAltRClick ;
2024-01-27 04:09:57 +08:00
2024-02-22 16:26:51 +08:00
//public RotationAxesType rotationAxesType { get { return _rotationAxesType; } set { UndoEx.record(this); _rotationAxesType = value; EditorUtility.SetDirty(this); } }
public float keyboardXRotationStep { get { return _keyboardXRotationStep ; } set { UndoEx . record ( this ) ; _keyboardXRotationStep = Mathf . Max ( 1e-2f , value ) ; EditorUtility . SetDirty ( this ) ; } }
public float keyboardYRotationStep { get { return _keyboardYRotationStep ; } set { UndoEx . record ( this ) ; _keyboardYRotationStep = Mathf . Max ( 1e-2f , value ) ; EditorUtility . SetDirty ( this ) ; } }
public float keyboardZRotationStep { get { return _keyboardZRotationStep ; } set { UndoEx . record ( this ) ; _keyboardZRotationStep = Mathf . Max ( 1e-2f , value ) ; EditorUtility . SetDirty ( this ) ; } }
public float mouseOffsetSensitivity { get { return _mouseOffsetSensitivity ; } set { UndoEx . record ( this ) ; _mouseOffsetSensitivity = Mathf . Clamp ( value , 1e-2f , 10.0f ) ; EditorUtility . SetDirty ( this ) ; } }
public float mouseRotationSensitivity { get { return _mouseRotationSensitivity ; } set { UndoEx . record ( this ) ; _mouseRotationSensitivity = Mathf . Clamp ( value , 1e-2f , 10.0f ) ; EditorUtility . SetDirty ( this ) ; } }
public float scrollRotationStep { get { return _scrollRotationStep ; } set { UndoEx . record ( this ) ; _scrollRotationStep = Mathf . Max ( 1e-2f , value ) ; EditorUtility . SetDirty ( this ) ; } }
public float mouseScaleSensitivity { get { return _mouseScaleSensitivity ; } set { UndoEx . record ( this ) ; _mouseScaleSensitivity = Mathf . Clamp ( value , 1e-2f , 10.0f ) ; EditorUtility . SetDirty ( this ) ; } }
public bool logShortcuts { get { return _logShortcuts ; } set { UndoEx . record ( this ) ; _logShortcuts = value ; EditorUtility . SetDirty ( this ) ; } }
public Color shortcutLogTextColor { get { return _shortcutLogTextColor ; } set { UndoEx . record ( this ) ; _shortcutLogTextColor = value ; EditorUtility . SetDirty ( this ) ; } }
public int shortcutLogFontSize { get { return _shortcutLogFontSize ; } set { UndoEx . record ( this ) ; _shortcutLogFontSize = Mathf . Clamp ( value , 10 , 50 ) ; EditorUtility . SetDirty ( this ) ; } }
public PickSpawnGuidePrefabKeys pickSpawnGuidePrefabKeys { get { return _pickSpawnGuidePrefabKeys ; } set { UndoEx . record ( this ) ; _pickSpawnGuidePrefabKeys = value ; EditorUtility . SetDirty ( this ) ; } }
public SelectionReplaceKeys selectionReplaceKeys { get { return _selectionReplaceKeys ; } set { UndoEx . record ( this ) ; _selectionReplaceKeys = value ; EditorUtility . SetDirty ( this ) ; } }
public bool macOS_RotatePreviewsAltRClick { get { return _macOS_RotatePreviewsAltRClick ; } set { UndoEx . record ( this ) ; _macOS_RotatePreviewsAltRClick = value ; EditorUtility . SetDirty ( this ) ; } }
2024-01-27 04:09:57 +08:00
2024-02-22 16:26:51 +08:00
public static RotationAxesType defaultRotationAxesType { get { return RotationAxesType . Grid ; } }
public static float defaultMouseOffsetSensitivity { get { return 0.05f ; } }
public static float defaultMouseRotationSensitivity { get { return 1.0f ; } }
public static float defaultMouseScaleSensitivity { get { return 0.01f ; } }
public static float defaultKeyboardXRotationStep { get { return 90.0f ; } }
public static float defaultKeyboardYRotationStep { get { return 90.0f ; } }
public static float defaultKeyboardZRotationStep { get { return 90.0f ; } }
public static float defaultScrollRotationStep { get { return 90.0f ; } }
public static bool defaultLogShortcuts { get { return false ; } }
public static Color defaultShortcutLogTextColor { get { return Color . green ; } }
public static int defaultShortcutLogFontSize { get { return 30 ; } }
public static PickSpawnGuidePrefabKeys defaultPickSpawnGuidePrefabKeys { get { return PickSpawnGuidePrefabKeys . Alt ; } }
public static SelectionReplaceKeys defaultSelectionReplaceKeys { get { return SelectionReplaceKeys . Alt ; } }
public static bool default_macOS_RotatePreviewsAltRClick { get { return false ; } }
2024-01-27 04:09:57 +08:00
public override void useDefaults ( )
{
2024-02-22 16:26:51 +08:00
//rotationAxesType = defaultRotationAxesType;
keyboardXRotationStep = defaultKeyboardXRotationStep ;
keyboardYRotationStep = defaultKeyboardYRotationStep ;
keyboardZRotationStep = defaultKeyboardZRotationStep ;
mouseOffsetSensitivity = defaultMouseOffsetSensitivity ;
mouseRotationSensitivity = defaultMouseRotationSensitivity ;
scrollRotationStep = defaultScrollRotationStep ;
mouseScaleSensitivity = defaultMouseScaleSensitivity ;
logShortcuts = defaultLogShortcuts ;
shortcutLogTextColor = defaultShortcutLogTextColor ;
shortcutLogFontSize = defaultShortcutLogFontSize ;
pickSpawnGuidePrefabKeys = defaultPickSpawnGuidePrefabKeys ;
selectionReplaceKeys = defaultSelectionReplaceKeys ;
macOS_RotatePreviewsAltRClick = default_macOS_RotatePreviewsAltRClick ;
2024-01-27 04:09:57 +08:00
EditorUtility . SetDirty ( this ) ;
}
public Vector3 getRotationAxis ( int axisIndex )
{
if ( axisIndex = = 0 ) return PluginScene . instance . grid . right ;
else if ( axisIndex = = 1 ) return PluginScene . instance . grid . up ;
else return PluginScene . instance . grid . look ;
/ *
if ( _rotationAxesType = = RotationAxesType . World )
{
if ( axisIndex = = 0 ) return Vector3 . right ;
else if ( axisIndex = = 1 ) return Vector3 . up ;
else return Vector3 . forward ;
}
else
{
if ( axisIndex = = 0 ) return PluginScene . instance . grid . right ;
else if ( axisIndex = = 1 ) return PluginScene . instance . grid . up ;
else return PluginScene . instance . grid . look ;
} * /
}
}
class InputPrefsProvider : SettingsProvider
{
public InputPrefsProvider ( string path , SettingsScope scope )
: base ( path , scope ) { }
public override void OnActivate ( string searchContext , VisualElement rootElement )
{
UI . createPrefsTitleLabel ( "Input" , rootElement ) ;
InputPrefs . instance . buildDefaultUI ( rootElement , PluginSettingsUIBuildConfig . defaultConfig ) ;
2024-02-22 16:26:51 +08:00
const float labelWidth = 200.0f ;
2024-01-27 04:09:57 +08:00
rootElement . Query < Label > ( ) . ForEach ( item = > item . setChildLabelWidth ( labelWidth ) ) ;
}
[SettingsProvider]
public static SettingsProvider create ( )
{
if ( GSpawn . active = = null ) return null ;
return new InputPrefsProvider ( "Preferences/" + GSpawn . pluginName + "/Input" , SettingsScope . User ) ;
}
}
}
#endif