コード例 #1
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        GUILayout.BeginHorizontal();
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Edit...", GUILayout.Width(50), GUILayout.Height(20)))
        {
            exSpriteAnimClipEditor editor = exSpriteAnimClipEditor.NewWindow();
            editor.Edit(target);
        }
        GUILayout.Space(5);
        GUILayout.EndHorizontal();
    }
コード例 #2
0
    public static exSpriteAnimClipEditor NewWindow()
    {
        exSpriteAnimClipEditor newWindow = EditorWindow.GetWindow <exSpriteAnimClipEditor>();

        return(newWindow);
    }
コード例 #3
0
    // ------------------------------------------------------------------
    // Desc:
    // ------------------------------------------------------------------

    public override void OnInspectorGUI()
    {
        exSprite sprite             = editSpAnim.GetComponent <exSprite>();
        bool     checkDefaultSprite = (sprite != null) && string.IsNullOrEmpty(sprite.textureGUID);

        EditorGUIUtility.LookLikeInspector();
        EditorGUILayout.Space();
        EditorGUI.indentLevel = 1;

        // ========================================================
        // Play Automatically
        // ========================================================

        editSpAnim.playAutomatically = EditorGUILayout.Toggle("Play Automatically", editSpAnim.playAutomatically);

        // ========================================================
        // Default Animation
        // ========================================================

        GUILayout.BeginHorizontal();
        editSpAnim.defaultAnimation = (exSpriteAnimClip)EditorGUILayout.ObjectField("Default Animation"
                                                                                    , editSpAnim.defaultAnimation
                                                                                    , typeof(exSpriteAnimClip)
                                                                                    , false
                                                                                    );
        if (GUILayout.Button("Edit...", GUILayout.Width(40), GUILayout.Height(15)))
        {
            exSpriteAnimClipEditor editor = exSpriteAnimClipEditor.NewWindow();
            editor.Edit(editSpAnim.defaultAnimation);
        }
        if (editSpAnim.defaultAnimation != null)
        {
            int idx = editSpAnim.animations.IndexOf(editSpAnim.defaultAnimation);
            if (idx == -1)
            {
                editSpAnim.animations.Add(editSpAnim.defaultAnimation);
            }
        }
        GUILayout.EndHorizontal();

        // ========================================================
        // Animations
        // ========================================================

        Rect lastRect = new Rect(0, 0, 1, 1);
        Rect dropRect = new Rect(0, 0, 1, 1);

        EditorGUI.indentLevel = 0;
        showAnimations        = EditorGUILayout.Foldout(showAnimations, "Animations");
        if (showAnimations)
        {
            EditorGUI.indentLevel = 2;
            // int count = EditorGUILayout.IntField ( "Size", editSpAnim.animations.Count );
            int count = exEditorHelper.IntField("Size", editSpAnim.animations.Count);
            lastRect        = GUILayoutUtility.GetLastRect();
            dropRect.height = lastRect.yMax - dropRect.y;
            count           = Mathf.Max(count, 0);

            if (count != editSpAnim.animations.Count)
            {
                //
                if (count > editSpAnim.animations.Count)
                {
                    int num = count - editSpAnim.animations.Count;
                    for (int i = 0; i < num; ++i)
                    {
                        editSpAnim.animations.Add(null);
                    }
                }
                else
                {
                    editSpAnim.animations.RemoveRange(count, editSpAnim.animations.Count - count);
                }

                //
                GUI.changed = true;
            }

            int idxRemoved = -1;
            for (int i = 0; i < editSpAnim.animations.Count; ++i)
            {
                GUILayout.BeginHorizontal();
                editSpAnim.animations[i] =
                    (exSpriteAnimClip)EditorGUILayout.ObjectField("[" + i + "]"
                                                                  , editSpAnim.animations[i]
                                                                  , typeof(exSpriteAnimClip)
                                                                  , false
                                                                  );
                if (GUILayout.Button("-", GUILayout.Width(15), GUILayout.Height(15)))
                {
                    idxRemoved = i;
                }
                if (GUILayout.Button("Edit...", GUILayout.Width(40), GUILayout.Height(15)))
                {
                    exSpriteAnimClipEditor editor = exSpriteAnimClipEditor.NewWindow();
                    editor.Edit(editSpAnim.animations[i]);
                }
                // TODO: I think we can instantiate animation state {
                // EditorGUI.indentLevel += 1;
                // // TODO:
                // EditorGUI.indentLevel -= 1;
                // } TODO end
                GUILayout.EndHorizontal();
            }

            // if we have item to remove
            if (idxRemoved != -1)
            {
                exSpriteAnimClip animClip = editSpAnim.animations[idxRemoved];
                editSpAnim.animations.RemoveAt(idxRemoved);
                if (animClip == editSpAnim.defaultAnimation)
                {
                    editSpAnim.defaultAnimation = null;
                }
            }

            EditorGUI.indentLevel = 1;
            EditorGUILayout.Space();

            lastRect        = GUILayoutUtility.GetLastRect();
            dropRect.x      = lastRect.x + 30;
            dropRect.y      = lastRect.yMax;
            dropRect.width  = lastRect.xMax - 30 - 4;
            dropRect.height = 20;

            exEditorHelper.DrawRect(dropRect, new Color(0.2f, 0.2f, 0.2f, 1.0f), new Color(0.5f, 0.5f, 0.5f, 1.0f));
            GUILayout.Space(20);

            // ========================================================
            // drag and drop
            // ========================================================

            if (dropRect.Contains(Event.current.mousePosition))
            {
                if (Event.current.type == EventType.DragUpdated)
                {
                    // Show a copy icon on the drag
                    foreach (Object o in DragAndDrop.objectReferences)
                    {
                        if (o is exSpriteAnimClip)
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                            break;
                        }
                    }
                }
                else if (Event.current.type == EventType.DragPerform)
                {
                    DragAndDrop.AcceptDrag();
                    foreach (Object o in DragAndDrop.objectReferences)
                    {
                        if (o is exSpriteAnimClip)
                        {
                            editSpAnim.animations.Add(o as exSpriteAnimClip);
                        }
                    }
                    GUI.changed = true;
                }
            }
        }
        EditorGUILayout.Space();

        // TODO: FIXME {
        // ========================================================
        //
        // ========================================================

        if (checkDefaultSprite &&
            editSpAnim.animations.Count > 0 &&
            editSpAnim.animations[0] != null &&
            editSpAnim.animations[0].frameInfos.Count > 0)
        {
            exSpriteAnimClip.FrameInfo fi = editSpAnim.animations[0].frameInfos[0];
            sprite.textureGUID = fi.textureGUID;
            sprite.SetSprite(fi.atlas, fi.index);
            sprite.Build();
        }
        // } TODO end

        // ========================================================
        // set dirty if anything changed
        // ========================================================

        if (GUI.changed)
        {
            EditorUtility.SetDirty(editSpAnim);
        }
    }