#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 { //[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; [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; //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); } } 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; } } public override void useDefaults() { //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; 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); const float labelWidth = 200.0f; rootElement.Query