Ejemplo n.º 1
0
        /// <summary>Alternative inspector control (eg: EditorGUILayout.SpriteField) for Image.sprite/VectorImage.vectorImageData/Text.text. Supports undo/redo and multiple selected objects.</summary>
        /// <param name="label">The label to appear in the inspector control.</param>
        /// <param name="graphics">The Graphics that the modifications will be applied to.</param>
        /// <param name="visualReference">The Graphic to use for the 'current' values in the control if the Graphic values are different.</param>
        /// <returns>Whether the control was successfully able to be drawn.</returns>
        public static bool GraphicMultiField(string label, Graphic[] graphics, Graphic visualReference = null)
        {
            if (visualReference == null)
            {
                visualReference = graphics[0];
            }

            Image image = visualReference as Image;

            if (image != null)
            {
                ImageMultiField(label, graphics.Select(graphic => graphic as Image).ToArray(), visualReference as Image);
                return(true);
            }

            VectorImage vectorImage = visualReference as VectorImage;

            if (vectorImage != null)
            {
                VectorImageMultiField(label, graphics.Select(graphic => graphic as VectorImage).ToArray(), visualReference as VectorImage);
                return(true);
            }

            Text text = visualReference as Text;

            if (text != null)
            {
                TextMultiField(label, graphics.Select(graphic => graphic as Text).ToArray(), visualReference as Text);
                return(true);
            }

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>Alternative inspector control (eg: EditorGUILayout.SpriteField) for Image.sprite/VectorImage.vectorImageData/Text.text. Supports undo/redo.</summary>
        /// <param name="label">The label to appear in the inspector control.</param>
        /// <param name="graphic">The Graphic to modify.</param>
        /// <param name="disableIfMultipleObjectsSelected">Is this field drawn disabled if multiple GameObjects are selected?</param>
        /// <returns>Whether the control was successfully able to be drawn.</returns>
        public static bool GraphicField(string label, Graphic graphic, bool disableIfMultipleObjectsSelected = true)
        {
            using (new DisabledScope(TooManySelected(!disableIfMultipleObjectsSelected)))
            {
                Image image = graphic as Image;
                if (image != null)
                {
                    ImageField(label, image, disableIfMultipleObjectsSelected);
                    return(true);
                }

                VectorImage vectorImage = graphic as VectorImage;
                if (vectorImage != null)
                {
                    VectorImageField(label, vectorImage, disableIfMultipleObjectsSelected);
                    return(true);
                }

                Text text = graphic as Text;
                if (text != null)
                {
                    TextField(label, text);
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sets the image of a Graphic (must be of type VectorImage).
        /// </summary>
        /// <param name="graphic">The graphic to modify.</param>
        /// <param name="vectorImageData">The vector image data to set.</param>
        public static void SetImage(this Graphic graphic, VectorImageData vectorImageData)
        {
            VectorImage imageToSet = graphic as VectorImage;

            if (imageToSet != null)
            {
                imageToSet.vectorImageData = vectorImageData;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Gets the vector image.
        /// </summary>
        /// <param name="graphic">The graphic to check.</param>
        /// <returns>The VectorImageData of the Graphic, if applicable and one exists.</returns>
        public static VectorImageData GetVectorImage(this Graphic graphic)
        {
            VectorImage imageToGet = graphic as VectorImage;

            if (imageToGet != null)
            {
                return(imageToGet.vectorImageData);
            }

            return(null);
        }
Ejemplo n.º 5
0
        public void Initialize(OptionDataList optionDataList, Action <int> onItemClick, string titleText, ImageData icon)
        {
            m_TitleSection.SetTitle(titleText, icon);

            m_OptionDataList = optionDataList;
            m_SelectionItems = new List <DialogSimpleOption>();

            Image       imageIcon  = m_OptionTemplate.GetChildByName <Image>("Icon");
            VectorImage vectorIcon = m_OptionTemplate.GetChildByName <VectorImage>("Icon");

            if (m_OptionDataList.options.Count > 0 && m_OptionDataList.options[0].imageData != null)
            {
                if (m_OptionDataList.options[0].imageData.imageDataType == ImageDataType.Sprite)
                {
                    DestroyImmediate(vectorIcon.gameObject);
                }
                else
                {
                    DestroyImmediate(imageIcon.gameObject);
                }
            }
            else
            {
                DestroyImmediate(imageIcon.gameObject);
            }

            for (int i = 0; i < m_OptionDataList.options.Count; i++)
            {
                m_SelectionItems.Add(CreateSelectionItem(i));
            }

            float availableHeight = DialogManager.rectTransform.rect.height;

            LayoutGroup textAreaRectTransform = m_TitleSection.text.transform.parent.GetComponent <LayoutGroup>();

            if (textAreaRectTransform.gameObject.activeSelf)
            {
                textAreaRectTransform.CalculateLayoutInputVertical();
                availableHeight -= textAreaRectTransform.preferredHeight;
            }

            m_ListScrollLayoutElement.maxHeight = availableHeight - 48f;

            Destroy(m_OptionTemplate);

            m_OnItemClick = onItemClick;

            Initialize();
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Sets the image of a Graphic (must be of type Image if imageData has type Sprite, or VectorImage if imageData has type VectorImageData).
        /// </summary>
        /// <param name="graphic">The graphic to modify.</param>
        /// <param name="imageData">The image data to set.</param>
        public static void SetImage(this Graphic graphic, ImageData imageData)
        {
            VectorImage vectorImage = graphic as VectorImage;

            if (vectorImage != null && imageData != null)
            {
                if (imageData.imageDataType == ImageDataType.VectorImage)
                {
                    vectorImage.vectorImageData = imageData.vectorImageData;
                }
                return;
            }

            Image spriteImage = graphic as Image;

            if (spriteImage != null && imageData != null)
            {
                if (imageData.imageDataType == ImageDataType.Sprite)
                {
                    spriteImage.sprite = imageData.sprite;
                }
            }
        }
Ejemplo n.º 7
0
        /// <summary>Inspector control (eg: EditorGUILayout.SpriteField) for VectorImage.vectorImageData. Supports undo/redo.</summary>
        /// <param name="label">The label to appear in the inspector control.</param>
        /// <param name="vectorImages">The VectorImages to modify.</param>
        /// <param name="visualReference">The VectorImage to use for the 'current' values in the control if the VectorImage values are different.</param>
        /// <returns>Whether the control was successfully able to be drawn.</returns>
        public static bool VectorImageMultiField(string label, VectorImage[] vectorImages, VectorImage visualReference = null)
        {
            if (vectorImages.ToList().TrueForAll(vectorImage => vectorImage == null))
            {
                return(false);
            }

            if (visualReference == null)
            {
                visualReference = vectorImages.ToList().First(vectorImage => vectorImage != null);
            }

            List <VectorImageData> vectorImageDatas = new List <VectorImageData>();

            for (int i = 0; i < vectorImages.Length; i++)
            {
                if (vectorImages[i] != null && vectorImages[i].vectorImageData != null)
                {
                    vectorImageDatas.Add(vectorImages[i].vectorImageData);
                }
            }

            Action iconPickAction = () =>
            {
                for (int i = 0; i < vectorImages.Length; i++)
                {
                    if (vectorImages[i] != null)
                    {
                        vectorImages[i].Refresh();
                    }
                }
            };

            return(VectorImageDataMultiField(label, vectorImageDatas.ToArray(), vectorImages, iconPickAction, visualReference.vectorImageData));
        }
Ejemplo n.º 8
0
 /// <summary>Inspector control (eg: EditorGUILayout.SpriteField) for VectorImage.vectorImageData. Supports undo/redo.</summary>
 /// <param name="label">The label to appear in the inspector control.</param>
 /// <param name="getReferenceFunc">The function used to get each VectorImage reference from each selected GameObject.</param>
 /// <param name="visualReference">The VectorImage to use for the 'current' values in the control if the VectorImage values are different.</param>
 /// <returns>Whether the control was successfully able to be drawn.</returns>
 public static bool VectorImageMultiField(string label, Func <GameObject, VectorImage> getReferenceFunc, VectorImage visualReference = null)
 {
     return(VectorImageMultiField(label, Selection.gameObjects.Select(getReferenceFunc).ToArray(), visualReference));
 }
Ejemplo n.º 9
0
 /// <summary>Inspector control (eg: EditorGUILayout.SpriteField) for VectorImage.vectorImageData. Supports undo/redo.</summary>
 /// <param name="label">The label to appear in the inspector control.</param>
 /// <param name="vectorImage">The VectorImage to modify.</param>
 /// <param name="disableIfMultipleObjectsSelected">Is this field drawn disabled if multiple GameObjects are selected?</param>
 /// <returns>Whether the control was successfully able to be drawn.</returns>
 public static bool VectorImageField(string label, VectorImage vectorImage, bool disableIfMultipleObjectsSelected = true)
 {
     return(VectorImageDataField(label, vectorImage.vectorImageData, vectorImage, vectorImage.Refresh, disableIfMultipleObjectsSelected));
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Converts the button between flat and raised.
        /// Note that this doesn't animate the transition. If you want to simply hide/show the button's shadows, it's recommended to use instead use the <see cref="materialShadow"/>.
        /// </summary>
        /// <param name="noExitGUI">Should <see cref="GUIUtility.ExitGUI"/> be called? Prevents inspector errors in some situations.</param>
        public void Convert(bool noExitGUI = false)
        {
#if UNITY_EDITOR
            string flatRoundedSquare   = "Assets/MaterialUI/Images/RoundedSquare/roundedsquare_";
            string raisedRoundedSquare = "Assets/MaterialUI/Images/RoundedSquare_Stroke/roundedsquare_stroke_";

            string imagePath = "";

            if (!isCircularButton)
            {
                imagePath = isRaisedButton ? flatRoundedSquare : raisedRoundedSquare;
            }

            if (isRaisedButton)
            {
                DestroyImmediate(m_ShadowsCanvasGroup.gameObject);
                m_ShadowsCanvasGroup = null;

                if (materialShadow)
                {
                    DestroyImmediate(materialShadow);
                }

                if (materialRipple != null)
                {
                    materialRipple.highlightWhen = MaterialRipple.HighlightActive.Hovered;
                }
            }
            else
            {
                string path = isCircularButton ? pathToCirclePrefab : pathToRectPrefab;

                GameObject tempButton = Instantiate(AssetDatabase.LoadAssetAtPath <GameObject>(path));

                GameObject newShadow = tempButton.transform.FindChild("Shadows").gameObject;

                m_ShadowsCanvasGroup = newShadow.GetComponent <CanvasGroup>();

                RectTransform newShadowRectTransform = (RectTransform)newShadow.transform;

                newShadowRectTransform.SetParent(rectTransform);
                newShadowRectTransform.SetAsFirstSibling();
                newShadowRectTransform.localScale       = Vector3.one;
                newShadowRectTransform.localEulerAngles = Vector3.zero;

                RectTransform tempRectTransform = m_BackgroundImage != null
                    ? (RectTransform)m_BackgroundImage.transform
                    : rectTransform;

                if (isCircularButton)
                {
                    newShadowRectTransform.anchoredPosition = Vector2.zero;
//                    RectTransformSnap newSnapper = newShadow.GetAddComponent<RectTransformSnap>();
//                    newSnapper.sourceRectTransform = tempRectTransform;
//                    newSnapper.valuesArePercentage = true;
//                    newSnapper.snapWidth = true;
//                    newSnapper.snapHeight = true;
//                    newSnapper.snapEveryFrame = true;
//                    newSnapper.paddingPercent = new Vector2(225, 225);
                    Vector3 tempVector3 = rectTransform.GetPositionRegardlessOfPivot();
                    tempVector3.y -= 1f;
                    newShadowRectTransform.position = tempVector3;
                }
                else
                {
                    newShadowRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, tempRectTransform.GetProperSize().x + 54);
                    newShadowRectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempRectTransform.GetProperSize().y + 54);
                    Vector3 tempVector3 = rectTransform.GetPositionRegardlessOfPivot();
                    newShadowRectTransform.position = tempVector3;
                }

                DestroyImmediate(tempButton);

                gameObject.AddComponent <MaterialShadow>();

                materialShadow.shadowsActiveWhen = MaterialShadow.ShadowsActive.Hovered;

                materialShadow.animatedShadows = newShadow.GetComponentsInChildren <AnimatedShadow>();

                materialShadow.isEnabled = true;

                if (materialRipple != null)
                {
                    materialRipple.highlightWhen = MaterialRipple.HighlightActive.Clicked;
                }
            }

            if (!isCircularButton)
            {
//                SpriteSwapper spriteSwapper = GetComponent<SpriteSwapper>();
//
//                if (spriteSwapper != null)
//                {
//                    spriteSwapper.sprite1X = AssetDatabase.LoadAssetAtPath<Sprite>(imagePath + "100%.png");
//                    spriteSwapper.sprite2X = AssetDatabase.LoadAssetAtPath<Sprite>(imagePath + "200%.png");
//                    spriteSwapper.sprite4X = AssetDatabase.LoadAssetAtPath<Sprite>(imagePath + "400%.png");
//                }
//                else
//                {
                if (m_BackgroundImage != null)
                {
                    ((Image)m_BackgroundImage).sprite = AssetDatabase.LoadAssetAtPath <Sprite>(imagePath + "100%.png");
                }
//                }
            }
            else
            {
                if (!isRaisedButton)
                {
                    RectTransform tempRectTransform = (RectTransform) new GameObject("Stroke", typeof(VectorImage)).transform;

                    tempRectTransform.SetParent(m_BackgroundImage.rectTransform);
                    tempRectTransform.localScale       = Vector3.one;
                    tempRectTransform.localEulerAngles = Vector3.zero;
                    tempRectTransform.anchorMin        = Vector2.zero;
                    tempRectTransform.anchorMax        = Vector2.one;
                    tempRectTransform.anchoredPosition = Vector2.zero;
                    tempRectTransform.sizeDelta        = Vector2.zero;

                    VectorImage vectorImage = tempRectTransform.GetComponent <VectorImage>();
                    vectorImage.vectorImageData = MaterialUIIconHelper.GetIcon("circle_stroke_thin").vectorImageData;
                    vectorImage.sizeMode        = VectorImage.SizeMode.MatchMin;
                    vectorImage.color           = new Color(0f, 0f, 0f, 0.125f);

                    tempRectTransform.name = "Stroke";
                }
                else
                {
                    VectorImage[] images = backgroundImage.GetComponentsInChildren <VectorImage>();

                    for (int i = 0; i < images.Length; i++)
                    {
                        if (images[i].name == "Stroke")
                        {
                            DestroyImmediate(images[i].gameObject);
                        }
                    }
                }
            }

            name = isRaisedButton ? name.Replace("Raised", "Flat") : name.Replace("Flat", "Raised");

            if (m_BackgroundImage != null)
            {
                if (!isRaisedButton)
                {
                    if (m_BackgroundImage.color == Color.clear)
                    {
                        m_BackgroundImage.color = Color.white;
                    }
                }
                else
                {
                    if (m_BackgroundImage.color == Color.white)
                    {
                        m_BackgroundImage.color = Color.clear;
                    }
                }
            }

            m_IsRaisedButton = !m_IsRaisedButton;

            if (!noExitGUI)
            {
                GUIUtility.ExitGUI();
            }
#endif
        }