BITFALL/Assets/GSpawn - Level Designer/Scripts/Prefs/ObjectTransformSessionPrefs.cs

216 lines
25 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using UnityEngine.UIElements;
namespace GSpawn
{
public class ObjectTransformSessionPrefs : Prefs<ObjectTransformSessionPrefs>
{
[SerializeField][UIFieldConfig("Rotation relative to grid", "If this is checked, the scene grid will act as a parent for objects involved in modular snap. Those " +
"objects will have their rotations applied relative to the grid. Useful when the grid contains arbitrary rotations.", "Modular Snap", false)]
private bool _modularSnapRotationRelativeToGrid = defaultModularSnapRotationRelativeToGrid;
[SerializeField][UIFieldConfig("Draw object pivot ticks", "If this is checked, a tick will be drawn at the position of each target object.")]
private bool _modularSnapDrawObjectPivotTicks = defaultModularSnapDrawObjectPivotTicks;
[SerializeField][UIFieldConfig("Draw projected object pivot ticks", "If this is checked, a tick will be drawn for the projected position of each target object. This is the position of the object projected onto the scene grid.")]
private bool _modularSnapDrawProjectedObjectPivotTicks = defaultModularSnapDrawProjectedObjectPivotTicks;
[SerializeField][UIFieldConfig("Draw object pivot projection lines", "If this is checked, lines will be drawn from each object position to its projected position onto the scene grid.")]
private bool _modularSnapDrawObjectPivotProjectionLines = defaultModularSnapDrawObjectPivotProjectionLines;
[SerializeField][UIFieldConfig("Draw object boxes", "If this is checked, a box will be drawn around each target object.")]
private bool _modularSnapDrawObjectBoxes = defaultModularSnapDrawObjectBoxes;
[SerializeField][UIFieldConfig("Object pivot tick color", "The color of the object pivot ticks.")]
private Color _modularSnapObjectPivotTickColor = defaultModularSnapObjectPivotTickColor;
[SerializeField][UIFieldConfig("Object pivot tick size", "The size of the object pivot ticks.")][Min(0.0f)]
private float _modularSnapObjectPivotTickSize = defaultModularSnapObjectPivotTickSize;
[SerializeField][UIFieldConfig("Projected object pivot tick color", "The color of the projected object pivot ticks.")]
private Color _modularSnapProjectedObjectPivotTickColor = defaultModularSnapProjectedObjectPivotTickColor;
[SerializeField][UIFieldConfig("Projected object pivot tick size", "The size of the projected object pivot ticks.")][Min(0.0f)]
private float _modularSnapProjectedObjectPivotTickSize = defaultModularSnapProjectedObjectPivotTickSize;
[SerializeField][UIFieldConfig("Object pivot projection line color", "The color of the object pivot projection lines.")]
private Color _modularSnapObjectPivotProjectionLineColor = defaultModularSnapObjectPivotProjectionLineColor;
[SerializeField][UIFieldConfig("Object box wire color", "The wire color of the target object boxes.")]
private Color _modularSnapObjectBoxWireColor = defaultModularSnapObjectBoxWireColor;
[SerializeField][UIFieldConfig("Show info text", "If checked, the plugin will offer textual information during a modular snap session.")]
private bool _modularSnapShowInfoText = defaultModularSnapShowInfoText;
[SerializeField][UIFieldConfig("Draw alignment highlights", "If checked, a highlight will be drawn for objects whose positions are aligned with the target objects.")]
private bool _modularSnapDrawAlignmentHighlights = defaultModularSnapDrawAlignmentHighlights;
[SerializeField][UIFieldConfig("Alignment highlight radius", "If alignment highlights are turned on, only objects that fall within this radius will be highlighted.")][Min(0.1f)]
private float _modularSnapAlignmentHighlightRadius = defaultModularSnapAlignmentHighlightRadius;
[SerializeField][UIFieldConfig("Show alignment hints", "If alignment highlights are turned on, having this checked will display hints related to the highlighted objects.")]
private bool _modularSnapShowAlignmentHints = defaultModularSnapShowAlignmentHints;
[SerializeField][UIFieldConfig("Max number of alignment hints", "If alignment hints are turned on, this is the maximum number of hints that will be displayed.")][Min(1)]
private int _modularSnapMaxNumAlignmentHints = defaultModularSnapMaxNumAlignmentHints;
[SerializeField] [UIFieldConfig("Draw anchor lines", "If this is checked, lines will be drawn from the anchor pivot to each of the target objects.", "Surface Snap", true)]
private bool _surfaceSnapDrawAnchorLines = defaultSurfaceSnapDrawAnchorLines;
[SerializeField] [UIFieldConfig("Draw anchor tick", "If this is checked, a tick will be drawn at the intersection point between the mouse cursor and the snap surface. This is the anchor point.")]
private bool _surfaceSnapDrawAnchorTick = defaultSurfaceSnapDrawAnchorTick;
[SerializeField] [UIFieldConfig("Draw object pivot ticks", "If this is checked, a tick will be drawn at the position of each target object.")]
private bool _surfaceSnapDrawObjectPivotTicks = defaultSurfaceSnapDrawObjectPivotTicks;
[SerializeField] [UIFieldConfig("Draw object boxes", "If this is checked, a box will be drawn around each target object.")]
private bool _surfaceSnapDrawObjectBoxes = defaultSurfaceSnapDrawObjectBoxes;
[SerializeField] [UIFieldConfig("Anchor line color", "The color of the anchor lines.")]
private Color _surfaceSnapAnchorLineColor = defaultSurfaceSnapAnchorLineColor;
[SerializeField] [UIFieldConfig("Anchor tick color", "The color of the anchor tick.")]
private Color _surfaceSnapAnchorTickColor = defaultSurfaceSnapAnchorTickColor;
[SerializeField] [UIFieldConfig("Anchor tick size", "The size of the anchor tick.")] [Min(0.0f)]
private float _surfaceSnapAnchorTickSize = defaultSurfaceSnapAnchorTickSize;
[SerializeField] [UIFieldConfig("Object pivot tick color", "The color of the target object pivot ticks.")]
private Color _surfaceSnapObjectPivotTickColor = defaultSurfaceSnapObjectPivotTickColor;
[SerializeField] [UIFieldConfig("Object pivot tick size", "The size of the target object pivot ticks.")] [Min(0.0f)]
private float _surfaceSnapObjectPivotTickSize = defaultSurfaceSnapObjectPivotTickSize;
[SerializeField] [UIFieldConfig("Object box wire color", "The wire color of the target object boxes.")]
private Color _surfaceSnapObjectBoxWireColor = defaultSurfaceSnapObjectBoxWireColor;
[SerializeField][UIFieldConfig("Show info text", "If checked, the plugin will offer textual information during a surface snap session.")]
private bool _surfaceSnapShowInfoText = defaultSurfaceSnapShowInfoText;
[SerializeField] [UIFieldConfig("Tick color", "The snap pivot tick color.", "Vertex Snap", true)]
private Color _vertSnapTickColor = defaultVertSnapTickColor;
[SerializeField] [UIFieldConfig("Tick size", "The snap pivot tick size.")] [Min(0.0f)]
private float _vertSnapTickSize = defaultVertSnapTickSize;
[SerializeField] [UIFieldConfig("Triangle wire color", "The wire color of the triangle that contains the selected vertex.")]
private Color _vertSnapTriangleWireColor = defaultVertSnapTriangleWireColor;
[SerializeField] [UIFieldConfig("Tick color", "The snap pivot tick color.", "Box Snap", true)]
private Color _boxSnapTickColor = defaultBoxSnapTickColor;
[SerializeField] [UIFieldConfig("Center tick color", "The snap pivot tick color when it coincides with the center of one of the target object boxes.")]
private Color _boxSnapCenterTickColor = defaultBoxSnapCenterTickColor;
[SerializeField] [UIFieldConfig("Tick size", "The snap pivot tick size.")] [Min(0.0f)]
private float _boxSnapTickSize = defaultBoxSnapTickSize;
[SerializeField] [UIFieldConfig("Object box wire color", "The wire color of the object boxes.")]
private Color _boxSnapObjectBoxWireColor = defaultBoxSnapObjectBoxWireColor;
public bool modularSnapRotationRelativeToGrid { get { return _modularSnapRotationRelativeToGrid; } set { UndoEx.record(this); _modularSnapRotationRelativeToGrid = value; EditorUtility.SetDirty(this); } }
public bool modularSnapDrawObjectPivotTicks { get { return _modularSnapDrawObjectPivotTicks; } set { UndoEx.record(this); _modularSnapDrawObjectPivotTicks = value; EditorUtility.SetDirty(this); } }
public bool modularSnapDrawProjectedObjectPivotTicks { get { return _modularSnapDrawProjectedObjectPivotTicks; } set { UndoEx.record(this); _modularSnapDrawProjectedObjectPivotTicks = value; EditorUtility.SetDirty(this); } }
public bool modularSnapDrawObjectPivotProjectionLines { get { return _modularSnapDrawObjectPivotProjectionLines; } set { UndoEx.record(this); _modularSnapDrawObjectPivotProjectionLines = value; EditorUtility.SetDirty(this); } }
public bool modularSnapDrawObjectBoxes { get { return _modularSnapDrawObjectBoxes; } set { UndoEx.record(this); _modularSnapDrawObjectBoxes = value; EditorUtility.SetDirty(this); } }
public Color modularSnapObjectPivotTickColor { get { return _modularSnapObjectPivotTickColor; } set { UndoEx.record(this); _modularSnapObjectPivotTickColor = value; EditorUtility.SetDirty(this); } }
public float modularSnapObjectPivotTickSize { get { return _modularSnapObjectPivotTickSize; } set { UndoEx.record(this); _modularSnapObjectPivotTickSize = Mathf.Max(0.0f, value); EditorUtility.SetDirty(this); } }
public Color modularSnapProjectedObjectPivotTickColor { get { return _modularSnapProjectedObjectPivotTickColor; } set { UndoEx.record(this); _modularSnapProjectedObjectPivotTickColor = value; EditorUtility.SetDirty(this); } }
public float modularSnapProjectedObjectPivotTickSize { get { return _modularSnapProjectedObjectPivotTickSize; } set { UndoEx.record(this); _modularSnapProjectedObjectPivotTickSize = Mathf.Max(0.0f, value); EditorUtility.SetDirty(this); } }
public Color modularSnapObjectPivotProjectionLineColor { get { return _modularSnapObjectPivotProjectionLineColor; } set { UndoEx.record(this); _modularSnapObjectPivotProjectionLineColor = value; EditorUtility.SetDirty(this); } }
public Color modularSnapObjectBoxWireColor { get { return _modularSnapObjectBoxWireColor; } set { UndoEx.record(this); _modularSnapObjectBoxWireColor = value; EditorUtility.SetDirty(this); } }
public bool modularSnapShowInfoText { get { return _modularSnapShowInfoText; } set { UndoEx.record(this); _modularSnapShowInfoText = value; EditorUtility.SetDirty(this); } }
public bool modularSnapDrawAlingmentHighlights { get { return _modularSnapDrawAlignmentHighlights; } set { UndoEx.record(this); _modularSnapDrawAlignmentHighlights = value; EditorUtility.SetDirty(this); } }
public float modularSnapAlignmentHighlightRadius { get { return _modularSnapAlignmentHighlightRadius; } set { UndoEx.record(this); _modularSnapAlignmentHighlightRadius = Mathf.Max(value, 0.1f); EditorUtility.SetDirty(this); } }
public bool modularSnapShowAlignmentHints { get { return _modularSnapShowAlignmentHints; } set { UndoEx.record(this); _modularSnapShowAlignmentHints = value; EditorUtility.SetDirty(this); } }
public int modularSnapMaxNumAlignmentHints { get { return _modularSnapMaxNumAlignmentHints; } set { UndoEx.record(this); _modularSnapMaxNumAlignmentHints = Mathf.Max(1, value); EditorUtility.SetDirty(this); } }
public bool surfaceSnapDrawAnchorLines { get { return _surfaceSnapDrawAnchorLines; } set { UndoEx.record(this); _surfaceSnapDrawAnchorLines = value; EditorUtility.SetDirty(this); } }
public bool surfaceSnapDrawAnchorTick { get { return _surfaceSnapDrawAnchorTick; } set { UndoEx.record(this); _surfaceSnapDrawAnchorTick = value; EditorUtility.SetDirty(this); } }
public bool surfaceSnapDrawObjectPivotTicks { get { return _surfaceSnapDrawObjectPivotTicks; } set { UndoEx.record(this); _surfaceSnapDrawObjectPivotTicks = value; EditorUtility.SetDirty(this); } }
public bool surfaceSnapDrawObjectBoxes { get { return _surfaceSnapDrawObjectBoxes; } set { UndoEx.record(this); _surfaceSnapDrawObjectBoxes = value; EditorUtility.SetDirty(this); } }
public Color surfaceSnapAnchorLineColor { get { return _surfaceSnapAnchorLineColor; } set { UndoEx.record(this); _surfaceSnapAnchorLineColor = value; EditorUtility.SetDirty(this); } }
public Color surfaceSnapAnchorTickColor { get { return _surfaceSnapAnchorTickColor; } set { UndoEx.record(this); _surfaceSnapAnchorTickColor = value; EditorUtility.SetDirty(this); } }
public float surfaceSnapAnchorTickSize { get { return _surfaceSnapAnchorTickSize; } set { UndoEx.record(this); _surfaceSnapAnchorTickSize = Mathf.Max(0.0f, value); EditorUtility.SetDirty(this); } }
public Color surfaceSnapObjectPivotTickColor { get { return _surfaceSnapObjectPivotTickColor; } set { UndoEx.record(this); _surfaceSnapObjectPivotTickColor = value; EditorUtility.SetDirty(this); } }
public float surfaceSnapObjectPivotTickSize { get { return _surfaceSnapObjectPivotTickSize; } set { UndoEx.record(this); _surfaceSnapObjectPivotTickSize = Mathf.Max(0.0f, value); EditorUtility.SetDirty(this); } }
public Color surfaceSnapObjectBoxWireColor { get { return _surfaceSnapObjectBoxWireColor; } set { UndoEx.record(this); _surfaceSnapObjectBoxWireColor = value; EditorUtility.SetDirty(this); } }
public bool surfaceSnapShowInfoText { get { return _surfaceSnapShowInfoText; } set { UndoEx.record(this); _surfaceSnapShowInfoText = value; EditorUtility.SetDirty(this); } }
public Color vertSnapTickColor { get { return _vertSnapTickColor; } set { UndoEx.record(this); _vertSnapTickColor = value; EditorUtility.SetDirty(this); } }
public float vertSnapTickSize { get { return _vertSnapTickSize; } set { UndoEx.record(this); _vertSnapTickSize = Mathf.Max(0.0f, value); EditorUtility.SetDirty(this); } }
public Color vertSnapTriangleWireColor { get { return _vertSnapTriangleWireColor; } set { UndoEx.record(this); _vertSnapTriangleWireColor = value; EditorUtility.SetDirty(this); } }
public Color boxSnapTickColor { get { return _boxSnapTickColor; } set { UndoEx.record(this); _boxSnapTickColor = value; EditorUtility.SetDirty(this); } }
public Color boxSnapCenterTickColor { get { return _boxSnapCenterTickColor; } set { UndoEx.record(this); _boxSnapCenterTickColor = value; EditorUtility.SetDirty(this); } }
public float boxSnapTickSize { get { return _boxSnapTickSize; } set { UndoEx.record(this); _boxSnapTickSize = Mathf.Max(0.0f, value); EditorUtility.SetDirty(this); } }
public Color boxSnapObjectBoxWireColor { get { return _boxSnapObjectBoxWireColor; } set { UndoEx.record(this); _boxSnapObjectBoxWireColor = value; EditorUtility.SetDirty(this); } }
public static bool defaultModularSnapRotationRelativeToGrid { get { return true; } }
public static bool defaultModularSnapDrawObjectPivotTicks { get { return true; } }
public static bool defaultModularSnapDrawProjectedObjectPivotTicks { get { return true; } }
public static bool defaultModularSnapDrawObjectPivotProjectionLines { get { return true; } }
public static bool defaultModularSnapDrawObjectBoxes { get { return true; } }
public static Color defaultModularSnapObjectPivotProjectionLineColor { get { return Color.white.createNewAlpha(0.25f); } }
public static Color defaultModularSnapObjectPivotTickColor { get { return Color.green; } }
public static float defaultModularSnapObjectPivotTickSize { get { return DefaultSystemValues.tickSize; } }
public static Color defaultModularSnapProjectedObjectPivotTickColor { get { return ColorEx.orange; } }
public static float defaultModularSnapProjectedObjectPivotTickSize { get { return DefaultSystemValues.tickSize; } }
public static Color defaultModularSnapObjectBoxWireColor { get { return Color.white.createNewAlpha(0.25f); } }
public static bool defaultModularSnapShowInfoText { get { return true; } }
public static bool defaultModularSnapDrawAlignmentHighlights { get { return true; } }
public static float defaultModularSnapAlignmentHighlightRadius { get { return 80.0f; } }
public static bool defaultModularSnapShowAlignmentHints { get { return true; } }
public static int defaultModularSnapMaxNumAlignmentHints { get { return 2; } }
public static bool defaultSurfaceSnapDrawAnchorLines { get { return true; } }
public static bool defaultSurfaceSnapDrawAnchorTick { get { return true; } }
public static bool defaultSurfaceSnapDrawObjectPivotTicks { get { return true; } }
public static bool defaultSurfaceSnapDrawObjectBoxes { get { return true; } }
public static Color defaultSurfaceSnapAnchorLineColor { get { return Color.white.createNewAlpha(0.25f); } }
public static Color defaultSurfaceSnapAnchorTickColor { get { return ColorEx.orange; } }
public static float defaultSurfaceSnapAnchorTickSize { get { return DefaultSystemValues.tickSize; } }
public static Color defaultSurfaceSnapObjectPivotTickColor { get { return Color.green; } }
public static float defaultSurfaceSnapObjectPivotTickSize { get { return DefaultSystemValues.tickSize; } }
public static Color defaultSurfaceSnapObjectBoxWireColor { get { return Color.white.createNewAlpha(0.25f); } }
public static bool defaultSurfaceSnapShowInfoText { get { return true; } }
public static Color defaultVertSnapTickColor { get { return Color.green; } }
public static float defaultVertSnapTickSize { get { return DefaultSystemValues.tickSize; } }
public static Color defaultVertSnapTriangleWireColor { get { return Color.green; } }
public static Color defaultBoxSnapTickColor { get { return Color.green; } }
public static Color defaultBoxSnapCenterTickColor { get { return Color.magenta; } }
public static float defaultBoxSnapTickSize { get { return DefaultSystemValues.tickSize; } }
public static Color defaultBoxSnapObjectBoxWireColor { get { return Color.yellow; } }
public override void useDefaults()
{
modularSnapRotationRelativeToGrid = defaultModularSnapRotationRelativeToGrid;
modularSnapDrawObjectPivotTicks = defaultModularSnapDrawObjectPivotTicks;
modularSnapDrawProjectedObjectPivotTicks = defaultModularSnapDrawProjectedObjectPivotTicks;
modularSnapDrawObjectPivotProjectionLines = defaultModularSnapDrawObjectPivotProjectionLines;
modularSnapDrawObjectBoxes = defaultModularSnapDrawObjectBoxes;
modularSnapObjectPivotTickColor = defaultModularSnapObjectPivotTickColor;
modularSnapObjectPivotTickSize = defaultModularSnapObjectPivotTickSize;
modularSnapProjectedObjectPivotTickColor = defaultModularSnapProjectedObjectPivotTickColor;
modularSnapProjectedObjectPivotTickSize = defaultModularSnapProjectedObjectPivotTickSize;
modularSnapObjectPivotProjectionLineColor = defaultModularSnapObjectPivotProjectionLineColor;
modularSnapObjectBoxWireColor = defaultModularSnapObjectBoxWireColor;
modularSnapShowInfoText = defaultModularSnapShowInfoText;
modularSnapDrawAlingmentHighlights = defaultModularSnapDrawAlignmentHighlights;
modularSnapAlignmentHighlightRadius = defaultModularSnapAlignmentHighlightRadius;
modularSnapShowAlignmentHints = defaultModularSnapShowAlignmentHints;
modularSnapMaxNumAlignmentHints = defaultModularSnapMaxNumAlignmentHints;
surfaceSnapDrawAnchorLines = defaultSurfaceSnapDrawAnchorLines;
surfaceSnapDrawAnchorTick = defaultSurfaceSnapDrawAnchorTick;
surfaceSnapDrawObjectPivotTicks = defaultSurfaceSnapDrawObjectPivotTicks;
surfaceSnapDrawObjectBoxes = defaultSurfaceSnapDrawObjectBoxes;
surfaceSnapAnchorLineColor = defaultSurfaceSnapAnchorLineColor;
surfaceSnapAnchorTickColor = defaultSurfaceSnapAnchorTickColor;
surfaceSnapAnchorTickSize = defaultSurfaceSnapAnchorTickSize;
surfaceSnapObjectPivotTickColor = defaultSurfaceSnapObjectPivotTickColor;
surfaceSnapObjectPivotTickSize = defaultSurfaceSnapObjectPivotTickSize;
surfaceSnapObjectBoxWireColor = defaultSurfaceSnapObjectBoxWireColor;
surfaceSnapShowInfoText = defaultSurfaceSnapShowInfoText;
vertSnapTickColor = defaultVertSnapTickColor;
vertSnapTickSize = defaultVertSnapTickSize;
vertSnapTriangleWireColor = defaultVertSnapTriangleWireColor;
boxSnapTickColor = defaultBoxSnapTickColor;
boxSnapCenterTickColor = defaultBoxSnapCenterTickColor;
boxSnapTickSize = defaultBoxSnapTickSize;
boxSnapObjectBoxWireColor = defaultBoxSnapObjectBoxWireColor;
EditorUtility.SetDirty(this);
}
}
class ObjectTransformSessionPrefsProvider : SettingsProvider
{
public ObjectTransformSessionPrefsProvider(string path, SettingsScope scope)
: base(path, scope) { }
public override void OnActivate(string searchContext, VisualElement rootElement)
{
UI.createPrefsTitleLabel("Object Transform Sessions", rootElement);
ObjectTransformSessionPrefs.instance.buildDefaultUI(rootElement, PluginSettingsUIBuildConfig.defaultConfig);
const float labelWidth = 210.0f;
rootElement.Query<Label>().ForEach(item => item.setChildLabelWidth(labelWidth));
}
[SettingsProvider]
public static SettingsProvider create()
{
if (GSpawn.active == null) return null;
return new ObjectTransformSessionPrefsProvider("Preferences/" + GSpawn.pluginName + "/Object Transform Sessions", SettingsScope.User);
}
}
}
#endif