123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675 |
- using UnityEngine;
- using UnityEngine.U2D;
- using UnityEditor;
- using UnityEditor.AnimatedValues;
- using UnityEditorInternal;
- using UnityEditor.U2D.Common;
- using System.Collections.Generic;
- using UnityEditor.U2D.SpriteShape;
-
- namespace UnityEditor.U2D
- {
- [CustomEditor(typeof(UnityEngine.U2D.SpriteShape)), CanEditMultipleObjects]
- internal class SpriteShapeEditor : Editor, IAngleRangeCache
- {
- private static class Contents
- {
- public static readonly GUIContent fillTextureLabel = new GUIContent("Texture", "Fill texture used for Shape Fill.");
- public static readonly GUIContent fillScaleLabel = new GUIContent("Offset", "Determines Border Offset for Shape.");
- public static readonly GUIContent useSpriteBorderLabel = new GUIContent("Use Sprite Borders", "Draw Sprite Borders on discontinuities");
- public static readonly GUIContent cornerTypeLabel = new GUIContent("Corner Type", "Corner type sprite used.");
- public static readonly GUIContent controlPointsLabel = new GUIContent("Control Points");
- public static readonly GUIContent fillLabel = new GUIContent("Fill");
- public static readonly GUIContent cornerLabel = new GUIContent("Corners");
- public static readonly GUIContent cornerListLabel = new GUIContent("Corner List");
- public static readonly GUIContent cornerSpriteTypeLabel = new GUIContent("Corner Sprite");
- public static readonly GUIContent angleRangesLabel = new GUIContent("Angle Ranges");
- public static readonly GUIContent spritesLabel = new GUIContent("Sprites");
- public static readonly GUIContent angleRangeLabel = new GUIContent("Angle Range ({0})");
- public static readonly GUIContent wrapModeErrorLabel = new GUIContent("Fill texture must have wrap modes set to Repeat. Please re-import.");
- public static readonly GUIContent createRangeButtonLabel = new GUIContent("Create Range");
- public static readonly Color proBackgroundColor = new Color32(49, 77, 121, 255);
- public static readonly Color proBackgroundRangeColor = new Color32(25, 25, 25, 128);
- public static readonly Color proColor1 = new Color32(10, 46, 42, 255);
- public static readonly Color proColor2 = new Color32(33, 151, 138, 255);
- public static readonly Color defaultColor1 = new Color32(25, 61, 57, 255);
- public static readonly Color defaultColor2 = new Color32(47, 166, 153, 255);
- public static readonly Color defaultBackgroundColor = new Color32(64, 92, 136, 255);
- }
-
- private SerializedProperty m_FillTextureProp;
- private SerializedProperty m_AngleRangesProp;
- private SerializedProperty m_CornerSpritesProp;
- private SerializedProperty m_FillOffsetProp;
- private SerializedProperty m_UseSpriteBordersProp;
-
- private ReorderableList m_AngleRangeSpriteList = null;
- private ReorderableList m_EmptySpriteList = null;
-
- [SerializeField]
- private float m_PreviewAngle = 0f;
- [SerializeField]
- private int m_SelectedIndex;
- private const int kInvalidMinimum = -1;
- private Rect m_AngleRangeRect;
- private AngleRangeController controller;
- private AngleRange m_CurrentAngleRange;
- private Dictionary<int, int> m_SpriteSelection = new Dictionary<int, int>();
-
-
- private Sprite m_PreviewSprite;
- private Mesh m_PreviewSpriteMesh;
- private Mesh previewSpriteMesh
- {
- get
- {
- if (m_PreviewSpriteMesh == null)
- {
- m_PreviewSpriteMesh = new Mesh();
- m_PreviewSpriteMesh.MarkDynamic();
- m_PreviewSpriteMesh.hideFlags = HideFlags.DontSave;
- }
-
- return m_PreviewSpriteMesh;
- }
- }
-
- public List<AngleRange> angleRanges
- {
- get
- {
- if (spriteShape == null)
- return new List<AngleRange>();
- Debug.Assert(spriteShape != null);
- return spriteShape.angleRanges;
- }
- }
-
- public int selectedIndex
- {
- get { return m_SelectedIndex; }
- set { m_SelectedIndex = value; }
- }
-
- bool isSelectedIndexValid
- {
- get { return (selectedIndex != kInvalidMinimum && selectedIndex < angleRanges.Count); }
- }
-
- public float previewAngle
- {
- get { return m_PreviewAngle; }
- set
- {
- m_PreviewAngle = value;
- SessionState.SetFloat("SpriteShape/PreviewAngle/" + target.GetInstanceID(), value);
- }
- }
-
- public UnityEngine.U2D.SpriteShape spriteShape
- {
- get
- {
- if (target == null)
- return null;
- return target as UnityEngine.U2D.SpriteShape;
- }
- }
-
- public void RegisterUndo(string name)
- {
- Undo.RegisterCompleteObjectUndo(spriteShape, name);
- Undo.RegisterCompleteObjectUndo(this, name);
- EditorUtility.SetDirty(spriteShape);
- }
-
- void OnReset(UnityEngine.U2D.SpriteShape obj)
- {
- InitCache();
- }
-
- void InitCache()
- {
- selectedIndex = SpriteShapeEditorUtility.GetRangeIndexFromAngle(angleRanges, m_PreviewAngle);
- SetupAngleRangeController();
- }
-
- public void OnEnable()
- {
- if (targets == null || targets.Length == 0)
- return;
-
- m_PreviewAngle = SessionState.GetFloat("SpriteShape/PreviewAngle/" + target.GetInstanceID(), m_PreviewAngle);
-
- m_FillTextureProp = this.serializedObject.FindProperty("m_FillTexture");
- m_UseSpriteBordersProp = serializedObject.FindProperty("m_UseSpriteBorders");
- m_AngleRangesProp = this.serializedObject.FindProperty("m_Angles");
- m_CornerSpritesProp = this.serializedObject.FindProperty("m_CornerSprites");
- m_FillOffsetProp = this.serializedObject.FindProperty("m_FillOffset");
-
- InitCache();
-
- Undo.undoRedoPerformed += UndoRedoPerformed;
- UnityEngine.U2D.SpriteShape.onReset += OnReset;
- }
-
- public void OnDisable()
- {
- UnityEngine.U2D.SpriteShape.onReset -= OnReset;
- }
-
- public override bool RequiresConstantRepaint()
- {
- return true;
- }
-
- private void SetupAngleRangeController()
- {
- var radius = 125f;
- var angleOffset = -90f;
- var color1 = Contents.defaultColor1;
- var color2 = Contents.defaultColor2;
-
- if (!EditorGUIUtility.isProSkin)
- {
- color1 = Contents.proColor1;
- color2 = Contents.proColor2;
- }
-
- controller = new AngleRangeController();
- controller.view = new AngleRangeView();
- controller.cache = this;
- controller.radius = radius;
- controller.angleOffset = angleOffset;
- controller.gradientMin = color1;
- controller.gradientMid = color2;
- controller.gradientMax = color1;
- controller.snap = true;
- controller.selectionChanged += OnSelectionChange;
-
- OnSelectionChange();
- }
-
- private void OnSelectionChange()
- {
- CreateReorderableSpriteList();
-
- EditorApplication.delayCall += () =>
- {
- m_CurrentAngleRange = controller.selectedAngleRange;
- };
- }
-
- private void OnDestroy()
- {
- if (m_PreviewSpriteMesh)
- UnityEngine.Object.DestroyImmediate(m_PreviewSpriteMesh);
-
- Undo.undoRedoPerformed -= UndoRedoPerformed;
- }
-
- private void UndoRedoPerformed()
- {
- InitCache();
- OnSelectionChange();
- }
-
- private void OnSelelectSpriteCallback(ReorderableList list)
- {
- if (selectedIndex >= 0)
- {
- SetPreviewSpriteIndex(selectedIndex, list.index);
- }
- }
-
- private bool OnCanAddCallback(ReorderableList list)
- {
- return (list.count < 64);
- }
-
- private void OnRemoveSprite(ReorderableList list)
- {
- var count = list.count;
- var index = list.index;
-
- ReorderableList.defaultBehaviours.DoRemoveButton(list);
-
- if (list.count < count && list.count > 0)
- {
- list.index = Mathf.Clamp(index, 0, list.count - 1);
- OnSelelectSpriteCallback(list);
- }
- }
-
- private void DrawSpriteListHeader(Rect rect)
- {
- EditorGUI.LabelField(rect, Contents.spritesLabel);
- HandleAngleSpriteListGUI(rect);
- }
-
- private void DrawSpriteListElement(Rect rect, int index, bool selected, bool focused)
- {
- rect.y += 2f;
- rect.height = EditorGUIUtility.singleLineHeight;
- var sprite = m_AngleRangesProp.GetArrayElementAtIndex(selectedIndex).FindPropertyRelative("m_Sprites").GetArrayElementAtIndex(index);
- EditorGUI.BeginChangeCheck();
- EditorGUI.PropertyField(rect, sprite, GUIContent.none);
- if (EditorGUI.EndChangeCheck())
- {
- m_AngleRangeSpriteList.index = index;
- OnSelelectSpriteCallback(m_AngleRangeSpriteList);
- }
- }
-
- public void DrawHeader(GUIContent content)
- {
- EditorGUILayout.LabelField(content, EditorStyles.boldLabel);
- }
-
- private void SetPreviewSpriteIndex(int rangeIndex, int index)
- {
- m_SpriteSelection[rangeIndex] = index;
- }
-
- private int GetPreviewSpriteIndex(int rangeIndex)
- {
- int index;
- m_SpriteSelection.TryGetValue(rangeIndex, out index);
-
- return index;
- }
-
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
-
- EditorGUILayout.Space();
- DrawHeader(Contents.controlPointsLabel);
- EditorGUILayout.PropertyField(m_UseSpriteBordersProp, Contents.useSpriteBorderLabel);
-
-
- EditorGUILayout.Space();
- DrawHeader(Contents.fillLabel);
- EditorGUILayout.PropertyField(m_FillTextureProp, Contents.fillTextureLabel);
- EditorGUILayout.Slider(m_FillOffsetProp, -0.5f, 0.5f, Contents.fillScaleLabel);
-
-
- if (m_FillTextureProp.objectReferenceValue != null)
- {
- var fillTex = m_FillTextureProp.objectReferenceValue as Texture2D;
- if (fillTex.wrapModeU != TextureWrapMode.Repeat || fillTex.wrapModeV != TextureWrapMode.Repeat)
- EditorGUILayout.HelpBox(Contents.wrapModeErrorLabel.text, MessageType.Warning);
- }
-
- EditorGUILayout.Space();
- DrawHeader(Contents.angleRangesLabel);
- DoRangesGUI();
-
- if (targets.Length == 1)
- {
- DoRangeInspector();
- DoCreateRangeButton();
- }
-
- EditorGUILayout.Space();
- DrawHeader(Contents.cornerLabel);
-
- HashSet<Sprite> tightMeshSprites = new HashSet<Sprite>();
-
- for (int i = 0; i < angleRanges.Count; ++i)
- {
- AngleRange angleRange = angleRanges[i];
- foreach (Sprite sprite in angleRange.sprites)
- {
- if (sprite != null)
- {
- string assetPath = AssetDatabase.GetAssetPath(sprite);
- TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
- if (importer != null)
- {
- TextureImporterSettings textureSettings = new TextureImporterSettings();
- importer.ReadTextureSettings(textureSettings);
- if (textureSettings.spriteMeshType == SpriteMeshType.Tight)
- tightMeshSprites.Add(sprite);
- }
- }
- }
- }
-
- var labelWidth = EditorGUIUtility.labelWidth;
- EditorGUIUtility.labelWidth = EditorGUIUtility.labelWidth + 20f;
-
- for (int i = 0; i < m_CornerSpritesProp.arraySize; ++i)
- {
- var m_CornerProp = m_CornerSpritesProp.GetArrayElementAtIndex(i);
- var m_CornerType = m_CornerProp.FindPropertyRelative("m_CornerType");
- var m_CornerSprite = m_CornerProp.FindPropertyRelative("m_Sprites").GetArrayElementAtIndex(0);
-
- m_CornerSprite.objectReferenceValue = EditorGUILayout.ObjectField(new GUIContent(m_CornerType.enumDisplayNames[m_CornerType.intValue]), m_CornerSprite.objectReferenceValue, typeof(Sprite), false, GUILayout.Height(18.0f) );
-
- var sprite = m_CornerSprite.objectReferenceValue as Sprite;
- if (sprite != null)
- {
- string assetPath = AssetDatabase.GetAssetPath(sprite);
- TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter;
- if (importer != null)
- {
- TextureImporterSettings textureSettings = new TextureImporterSettings();
- importer.ReadTextureSettings(textureSettings);
- if (textureSettings.spriteMeshType == SpriteMeshType.Tight)
- tightMeshSprites.Add(sprite);
- }
- }
- }
-
-
- EditorGUIUtility.labelWidth = 0;
-
- serializedObject.ApplyModifiedProperties();
-
- if (tightMeshSprites.Count > 0)
- {
- int i = 0;
- string tightSpriteWarning = "The following sprites ( ";
- foreach (var sprite in tightMeshSprites)
- {
- string appendString = (i < tightMeshSprites.Count - 1) ? ", " : " ) ";
- tightSpriteWarning += (sprite.name + appendString);
- ++i;
- }
- tightSpriteWarning += "are imported as Sprites using Tight mesh. This can lead to Rendering Artifacts. Please use Full Rect.";
- EditorGUILayout.HelpBox(tightSpriteWarning, MessageType.Warning);
- }
-
- controller.view.DoCreateRangeTooltip();
-
- EditorGUIUtility.labelWidth = labelWidth;
- }
-
- private void DoRangeInspector()
- {
- var start = 0f;
- var end = 0f;
- var order = 0;
-
- if (m_CurrentAngleRange != null)
- {
- start = m_CurrentAngleRange.start;
- end = m_CurrentAngleRange.end;
- order = m_CurrentAngleRange.order;
- }
-
- var arSize = m_AngleRangesProp.arraySize;
-
- using (new EditorGUI.DisabledGroupScope(m_CurrentAngleRange == null))
- {
- DrawHeader(new GUIContent(string.Format(Contents.angleRangeLabel.text, (end - start))));
-
- EditorGUIUtility.labelWidth = 0f;
- EditorGUI.BeginChangeCheck();
-
- RangeField(ref start, ref end, ref order);
-
- if (EditorGUI.EndChangeCheck() && m_CurrentAngleRange != null)
- {
- RegisterUndo("Set Range");
-
- m_CurrentAngleRange.order = order;
- controller.SetRange(m_CurrentAngleRange, start, end);
-
- if (start >= end)
- controller.RemoveInvalidRanges();
- }
-
- EditorGUILayout.Space();
-
- if (m_AngleRangeSpriteList != null && arSize > 0)
- m_AngleRangeSpriteList.DoLayoutList();
- else
- m_EmptySpriteList.DoLayoutList();
- }
- }
-
- private void DoCreateRangeButton()
- {
- if (selectedIndex != kInvalidMinimum && angleRanges.Count != 0)
- return;
-
- EditorGUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
-
- if (GUILayout.Button(Contents.createRangeButtonLabel, GUILayout.MaxWidth(100f)))
- {
- RegisterUndo("Create Range");
- controller.CreateRange();
- }
-
- GUILayout.FlexibleSpace();
- EditorGUILayout.EndHorizontal();
- }
-
- private void RangeField(ref float start, ref float end, ref int order)
- {
- var values = new int[] { Mathf.RoundToInt(-start), Mathf.RoundToInt(-end), order };
- var labels = new GUIContent[] { new GUIContent("Start"), new GUIContent("End"), new GUIContent("Order") };
-
- var position = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight);
- EditorGUI.BeginChangeCheck();
- SpriteShapeEditorGUI.MultiDelayedIntField(position, labels, values, 40f);
- if (EditorGUI.EndChangeCheck())
- {
- start = -1f * values[0];
- end = -1f * values[1];
- order = values[2];
- }
- }
-
- private void HandleAngleSpriteListGUI(Rect rect)
- {
- if (m_CurrentAngleRange == null || !isSelectedIndexValid)
- return;
-
- var currentEvent = Event.current;
- var usedEvent = false;
- var sprites = m_AngleRangesProp.GetArrayElementAtIndex(selectedIndex).FindPropertyRelative("m_Sprites");
- switch (currentEvent.type)
- {
- case EventType.DragExited:
- if (GUI.enabled)
- HandleUtility.Repaint();
- break;
-
- case EventType.DragUpdated:
- case EventType.DragPerform:
- if (rect.Contains(currentEvent.mousePosition) && GUI.enabled)
- {
- // Check each single object, so we can add multiple objects in a single drag.
- var didAcceptDrag = false;
- var references = DragAndDrop.objectReferences;
- foreach (var obj in references)
- {
- if (obj is Sprite)
- {
- Sprite spr = obj as Sprite;
- if (spr.texture != null)
- {
- DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
- if (currentEvent.type == EventType.DragPerform && sprites.arraySize < 64)
- {
- sprites.InsertArrayElementAtIndex(sprites.arraySize);
- var spriteProp = sprites.GetArrayElementAtIndex(sprites.arraySize - 1);
- spriteProp.objectReferenceValue = obj;
- didAcceptDrag = true;
- DragAndDrop.activeControlID = 0;
- }
- }
- }
- }
-
- serializedObject.ApplyModifiedProperties();
-
- if (didAcceptDrag)
- {
- GUI.changed = true;
- DragAndDrop.AcceptDrag();
- usedEvent = true;
- }
- }
- break;
- }
-
- if (usedEvent)
- currentEvent.Use();
- }
-
- private void DoRangesGUI()
- {
- var radius = controller.radius;
-
- EditorGUILayout.Space();
- EditorGUILayout.Space();
-
- var rect = EditorGUILayout.GetControlRect(false, radius * 2f);
-
- if (Event.current.type == EventType.Repaint)
- m_AngleRangeRect = rect;
-
- { //Draw background
- var backgroundColor = Contents.proBackgroundColor;
- var backgroundRangeColor = Contents.proBackgroundRangeColor;
-
- if (!EditorGUIUtility.isProSkin)
- {
- backgroundColor = Contents.defaultBackgroundColor;
- backgroundRangeColor.a = 0.1f;
- }
- var c = Handles.color;
- Handles.color = backgroundRangeColor;
- SpriteShapeHandleUtility.DrawSolidArc(rect.center, Vector3.forward, Vector3.right, 360f, radius, AngleRangeGUI.kRangeWidth);
- Handles.color = backgroundColor;
- Handles.DrawSolidDisc(rect.center, Vector3.forward, radius - AngleRangeGUI.kRangeWidth + 1f);
- Handles.color = c;
- }
-
- if (targets.Length == 1)
- {
- { //Draw fill texture and sprite preview
- SpriteShapeHandleUtility.DrawTextureArc(
- m_FillTextureProp.objectReferenceValue as Texture, 100.0f,
- rect.center, Vector3.forward, Quaternion.AngleAxis(m_PreviewAngle, Vector3.forward) * Vector3.right, 180f,
- radius - AngleRangeGUI.kRangeWidth);
-
- var rectSize = Vector2.one * (radius - AngleRangeGUI.kRangeWidth) * 2f;
- rectSize.y *= 0.33f;
- var spriteRect = new Rect(rect.center - rectSize * 0.5f, rectSize);
- DrawSpritePreview(spriteRect);
- HandleSpritePreviewCycle(spriteRect);
- }
-
- controller.rect = m_AngleRangeRect;
- controller.OnGUI();
- }
-
- EditorGUILayout.Space();
- EditorGUILayout.Space();
- }
-
- private void CreateReorderableSpriteList()
- {
- if (m_EmptySpriteList == null)
- {
- m_EmptySpriteList = new ReorderableList(new List<Sprite>(), typeof(Sprite), false, true, false, false)
- {
- drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, Contents.spritesLabel); }
- };
- }
-
- m_AngleRangeSpriteList = null;
-
- serializedObject.UpdateIfRequiredOrScript();
-
- Debug.Assert(angleRanges.Count == m_AngleRangesProp.arraySize);
- Debug.Assert(selectedIndex < angleRanges.Count || selectedIndex == 0);
-
- if (targets.Length == 1 && isSelectedIndexValid)
- {
- var spritesProp = m_AngleRangesProp.GetArrayElementAtIndex(selectedIndex).FindPropertyRelative("m_Sprites");
- m_AngleRangeSpriteList = new ReorderableList(spritesProp.serializedObject, spritesProp)
- {
- drawElementCallback = DrawSpriteListElement,
- drawHeaderCallback = DrawSpriteListHeader,
- onSelectCallback = OnSelelectSpriteCallback,
- onRemoveCallback = OnRemoveSprite,
- onCanAddCallback = OnCanAddCallback,
- elementHeight = EditorGUIUtility.singleLineHeight + 6f
- };
- }
- }
-
- private void DrawSpritePreview(Rect rect)
- {
- if (Event.current.type != EventType.Repaint)
- return;
-
- if (!isSelectedIndexValid)
- return;
-
- var sprites = angleRanges[selectedIndex].sprites;
-
- if (sprites.Count == 0)
- return;
-
- var selectedSpriteIndex = GetPreviewSpriteIndex(selectedIndex);
-
- if (selectedSpriteIndex == kInvalidMinimum || selectedSpriteIndex >= sprites.Count)
- return;
-
- var sprite = sprites[selectedSpriteIndex];
-
- if (sprite == null)
- return;
-
- if (m_PreviewSprite != sprite)
- {
- m_PreviewSprite = sprite;
- EditorSpriteGUIUtility.DrawSpriteInRectPrepare(rect, sprite, EditorSpriteGUIUtility.FitMode.Tiled, true, true, previewSpriteMesh);
- }
-
- var material = EditorSpriteGUIUtility.spriteMaterial;
- material.mainTexture = EditorSpriteGUIUtility.GetOriginalSpriteTexture(sprite);
-
- EditorSpriteGUIUtility.DrawMesh(previewSpriteMesh, material, rect.center, Quaternion.AngleAxis(m_PreviewAngle, Vector3.forward), new Vector3(1f, -1f, 1f));
- }
-
- private void HandleSpritePreviewCycle(Rect rect)
- {
- if (!isSelectedIndexValid)
- return;
-
- Debug.Assert(m_AngleRangeSpriteList != null);
-
- var spriteIndex = GetPreviewSpriteIndex(selectedIndex);
- var sprites = angleRanges[selectedIndex].sprites;
-
- var ev = Event.current;
- if (ev.type == EventType.MouseDown && ev.button == 0 && HandleUtility.nearestControl == 0 &&
- ContainsPosition(rect, ev.mousePosition, m_PreviewAngle) && spriteIndex != kInvalidMinimum && sprites.Count > 0)
- {
- spriteIndex = Mathf.RoundToInt(Mathf.Repeat(spriteIndex + 1f, sprites.Count));
- SetPreviewSpriteIndex(selectedIndex, spriteIndex);
-
- m_AngleRangeSpriteList.GrabKeyboardFocus();
- m_AngleRangeSpriteList.index = spriteIndex;
-
- ev.Use();
- }
- }
-
- private bool ContainsPosition(Rect rect, Vector2 position, float angle)
- {
- Vector2 delta = position - rect.center;
- position = (Vector2)(Quaternion.AngleAxis(-angle, Vector3.forward) * (Vector3)delta) + rect.center;
- return rect.Contains(position);
- }
- }
- }
|