Пример #1
0
        void Draw()
        {
            gradientPreveiwRect = new Rect(borderSize, borderSize, position.width - (borderSize * 2), 25);

            GUI.DrawTexture(gradientPreveiwRect, gradient.GetTexture((int)gradientPreveiwRect.width));
            keyRects = new Rect[gradient.NumKeys];
            for (int i = 0; i < gradient.NumKeys; i++)
            {
                ColorKeyData key     = gradient.GetKey(i);
                Rect         keyRect = new Rect(gradientPreveiwRect.x + gradientPreveiwRect.width * key.Time - (keyWidth / 2f), gradientPreveiwRect.yMax + borderSize, keyWidth, keyHeight);
                if (i == selectedKeyIndex)
                {
                    EditorGUI.DrawRect(new Rect(keyRect.x - 2, keyRect.y - 2, keyRect.width + 4, keyRect.height + 4), Color.black);
                }

                EditorGUI.DrawRect(keyRect, key.Color);
                keyRects[i] = keyRect;
            }

            Rect settingsRect = new Rect(borderSize, keyRects[0].y + borderSize + keyHeight, position.width - borderSize * 2, position.height - (borderSize + keyHeight * 4));

            GUILayout.BeginArea(settingsRect);
            EditorGUI.BeginChangeCheck();
            Color newcolor = EditorGUILayout.ColorField(gradient.GetKey(selectedKeyIndex).Color);

            if (EditorGUI.EndChangeCheck())
            {
                gradient.UpdateKeyColor(selectedKeyIndex, newcolor);
            }
            // display gradient
            gradient.blendMode      = (MegaGradient.BlendMode)EditorGUILayout.EnumPopup("Blend Mode", gradient.blendMode);
            gradient.randomizeColor = EditorGUILayout.Toggle("Randomize New Color", gradient.randomizeColor);
            GUILayout.EndArea();
        }
Пример #2
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            Event guiEvent = Event.current;

            object[] objects = property.serializedObject.targetObjects;
            MegaGradientDataComponent dataComponent = null;

            for (int i = 0; i < objects.Length; i++)
            {
                //	Debug.Log(objects[i].GetType());
                if (objects[i].GetType() == typeof(MegaGradientDataComponent))
                {
                    dataComponent = (MegaGradientDataComponent)objects[i];
                }
            }
            if (dataComponent != null)
            {
                if (Application.isPlaying)
                {
                    MegaGradientData gradient    = dataComponent.gradient;                 //(MegaGradientData)fieldInfo.GetValue(property.serializedObject.targetObject);
                    float            labelWidth  = GUI.skin.label.CalcSize(label).x + LABEL_BUFFER;
                    Rect             textureRect = new Rect(position.x + labelWidth, position.y, position.width - labelWidth, position.height);
                    // display gradient on inspector

                    if (gradient.isCreated)
                    {
                        if (guiEvent.type == EventType.Repaint)
                        {
                            GUI.Label(position, label);
                            GUI.DrawTexture(textureRect, gradient.GetTexture((int)position.width));
                        }
                        else
                        {
                            // if mouse down and left mouse button click
                            if (guiEvent.type == EventType.MouseDown && guiEvent.button == 0)
                            {
                                // if mouse position inside the gradient box
                                if (textureRect.Contains(guiEvent.mousePosition))
                                {
                                    MegaGradientDataEditor window = EditorWindow.GetWindow <MegaGradientDataEditor>();
                                    window.SetGradient(gradient);
                                    window.SetRequestReceived(dataComponent.entityRequest.RequestReceived);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (guiEvent.type == EventType.Repaint)
                        {
                            GUI.Label(position, new GUIContent("MegaGradientData: Data is not created!"));
                        }
                    }
                }
                else
                {
                    // edit mode
                }
            }
            else
            {
                Debug.LogWarning("Failed to get MegaGradientDataComponent!");
            }
        }