コード例 #1
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorUtility.SetDirty(target);
        animationComponent ac = (animationComponent)target;

        int numAnims = 0;

        if (ac.animations != null)
        {
            numAnims = ac.animations.Length;
        }
        numAnims = EditorGUILayout.IntField("Animation count", numAnims);

        if (numAnims < 0)
        {
            numAnims = 0;
        }
        if (ac.animations == null || (ac.animations != null && numAnims != ac.animations.Length))
        {
            animation[] newA = new animation[numAnims];
            for (int i = 0; i < newA.Length; i++)
            {
                if (i < ac.animations.Length)
                {
                    newA[i] = ac.animations[i];
                }
                else
                {
                    newA[i] = new animation(ac.transform.parent.gameObject.GetComponent <charComponent>(), i);
                }
            }

            ac.animations = newA;
        }

        if (GUILayout.Button("Add a Animation"))
        {
            animation[] newA = new animation[ac.animations.Length + 1];
            for (int i = 0; i < ac.animations.Length; i++)
            {
                newA[i] = ac.animations[i];
            }

            newA[ac.animations.Length] = new animation(ac.transform.parent.gameObject.GetComponent <charComponent>(), ac.animations.Length);

            ac.animations = newA;
        }

        if (ac.animations != null)
        {
            foldAnimations = EditorGUILayout.Foldout(foldAnimations, "Show Animations");
            EditorGUI.indentLevel++;
            for (int i = 0; i < ac.animations.Length; i++)
            {
                ac.animations[i].fold = EditorGUILayout.Foldout(ac.animations[i].fold, ac.animations[i].name);
                if (ac.animations[i].fold)
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.LabelField("Index " + ac.animations[i].index);
                    ac.animations[i].name = EditorGUILayout.TextField("Name", ac.animations[i].name);

                    int numFrameLists = 0;
                    if (ac.animations[i].frames != null)
                    {
                        numFrameLists = ac.animations[i].frames.Length;
                    }
                    EditorGUILayout.LabelField("Frame Count " + numFrameLists);

                    if (GUILayout.Button("Add a Frame"))
                    {
                        frameList[]           newf        = new frameList[numFrameLists + 1];
                        int[]                 times       = new int[numFrameLists + 1];
                        int[]                 nexts       = new int[numFrameLists + 1];
                        bool[]                xFlips      = new bool[numFrameLists + 1];
                        bool[]                yFlips      = new bool[numFrameLists + 1];
                        bool[]                foldFrames  = new bool[numFrameLists + 1];
                        charComponentAction[] StartAction = new charComponentAction[numFrameLists + 1];
                        charComponentAction[] EndAction   = new charComponentAction[numFrameLists + 1];
                        for (int j = 0; j < numFrameLists; j++)
                        {
                            newf[j]        = ac.animations[i].frames[j];
                            times[j]       = ac.animations[i].times[j];
                            nexts[j]       = ac.animations[i].nexts[j];
                            xFlips[j]      = ac.animations[i].xFlips[j];
                            yFlips[j]      = ac.animations[i].yFlips[j];
                            foldFrames[j]  = ac.animations[i].foldFrames[j];
                            StartAction[j] = ac.animations[i].StartAction[j];
                            EndAction[j]   = ac.animations[i].EndAction[j];
                        }

                        newf[numFrameLists]        = new frameList();
                        times[numFrameLists]       = 1;
                        nexts[numFrameLists]       = numFrameLists + 1;
                        xFlips[numFrameLists]      = false;
                        yFlips[numFrameLists]      = false;
                        foldFrames[numFrameLists]  = false;
                        StartAction[numFrameLists] = default(charComponentAction);
                        EndAction[numFrameLists]   = default(charComponentAction);

                        ac.animations[i].frames      = newf;
                        ac.animations[i].times       = times;
                        ac.animations[i].nexts       = nexts;
                        ac.animations[i].xFlips      = xFlips;
                        ac.animations[i].yFlips      = yFlips;
                        ac.animations[i].foldFrames  = foldFrames;
                        ac.animations[i].StartAction = StartAction;
                        ac.animations[i].EndAction   = EndAction;
                    }

                    if (ac.animations[i].frames != null)
                    {
                        selectedGC = (graphicComponent)EditorGUILayout.ObjectField(selectedGC, typeof(graphicComponent), true);

                        if (selectedGC != null && selectedGC.allFrames != null && selectedGC.allFrames.Length > 0)
                        {
                            string[] names = new string[selectedGC.allFrames.Length];
                            for (int k = 0; k < selectedGC.allFrames.Length; k++)
                            {
                                names[k] = selectedGC.allFrames[k].name;
                            }
                            selectedFrame = EditorGUILayout.Popup("Frames", selectedFrame, names);
                            EditorGUILayout.ObjectField(selectedGC.allFrames[selectedFrame].mainSprite, typeof(Sprite), true, GUILayout.Width(112), GUILayout.Height(64));
                            EditorGUILayout.LabelField("X: " + selectedGC.allFrames[selectedFrame].mainPosX + " Y: " + selectedGC.allFrames[selectedFrame].mainPosY);
                            EditorGUILayout.LabelField("Flip X: " + selectedGC.allFrames[selectedFrame].GlobalFlipX + " Flip Y: " + selectedGC.allFrames[selectedFrame].GlobalFlipX);
                        }
                        for (int j = 0; j < ac.animations[i].frames.Length; j++)
                        {
                            ac.animations[i].foldFrames[j] = EditorGUILayout.Foldout(ac.animations[i].foldFrames[j], "Frame " + (j + 1));
                            if (ac.animations[i].foldFrames[j])
                            {
                                EditorGUI.indentLevel++;
                                if (GUILayout.Button("Add"))
                                {
                                    ac.animations[i].frames[j].frames.Add(selectedGC.allFrames[selectedFrame]);
                                }

                                foreach (frame f in ac.animations[i].frames[j].frames)
                                {
                                    f.fold = EditorGUILayout.Foldout(f.fold, f.name);
                                    if (f.fold)
                                    {
                                        EditorGUI.indentLevel++;

                                        EditorGUILayout.ObjectField(f.mainSprite, typeof(Sprite), true, GUILayout.Width(128), GUILayout.Height(64));
                                        EditorGUILayout.LabelField("X: " + f.mainPosX + " Y: " + f.mainPosY);
                                        EditorGUILayout.LabelField("Flip X: " + f.GlobalFlipX + " Flip Y: " + f.GlobalFlipX);
                                        int ind = ac.animations[i].frames[j].frames.IndexOf(f);
                                        if (GUILayout.Button("Change"))
                                        {
                                            ac.animations[i].frames[j].frames[ind] = selectedGC.allFrames[selectedFrame];
                                        }
                                        if (GUILayout.Button("Refresh"))
                                        {
                                            ac.animations[i].frames[j].frames[ind] = selectedGC.allFrames[ac.animations[i].frames[j].frames[ind].index];
                                        }
                                        if (GUILayout.Button("Delete"))
                                        {
                                            ac.animations[i].frames[j].frames.RemoveAt(ind);
                                            break;
                                        }
                                        if (ind != 0 && GUILayout.Button("Up"))
                                        {
                                            frame faux = ac.animations[i].frames[j].frames[ind - 1];
                                            ac.animations[i].frames[j].frames[ind - 1] = f;
                                            ac.animations[i].frames[j].frames[ind]     = faux;
                                        }
                                        if (ind != ac.animations[i].frames[j].frames.Count - 1 && GUILayout.Button("Down"))
                                        {
                                            frame faux = ac.animations[i].frames[j].frames[ind + 1];
                                            ac.animations[i].frames[j].frames[ind + 1] = f;
                                            ac.animations[i].frames[j].frames[ind]     = faux;
                                        }
                                        if (GUILayout.Button("Use"))
                                        {
                                            f.Use();
                                        }

                                        EditorGUI.indentLevel--;
                                    }
                                }

                                EditorGUI.indentLevel--;
                                ac.animations[i].nexts[j]  = EditorGUILayout.IntField("Next", ac.animations[i].nexts[j]);
                                ac.animations[i].times[j]  = EditorGUILayout.IntField("Time", ac.animations[i].times[j]);
                                ac.animations[i].xFlips[j] = EditorGUILayout.Toggle("X Flip", ac.animations[i].xFlips[j]);
                                ac.animations[i].yFlips[j] = EditorGUILayout.Toggle("Y Flip", ac.animations[i].yFlips[j]);
                            }
                        }
                    }


                    EditorGUI.indentLevel--;
                }
            }
            EditorGUI.indentLevel--;
        }
        EditorUtility.SetDirty(target);
    }
コード例 #2
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        graphicComponent gc = (graphicComponent)target;

        GUILayout.Label("Frames");
        EditorGUI.indentLevel++;

        int numFrames = 0;

        if (gc.allFrames != null)
        {
            numFrames = gc.allFrames.Length;
        }
        numFrames = EditorGUILayout.IntField("Frame count", numFrames);

        if (numFrames < 0)
        {
            numFrames = 0;
        }
        if (gc.allFrames != null && numFrames != gc.allFrames.Length)
        {
            frame[] newf = new frame[numFrames];
            for (int i = 0; i < newf.Length; i++)
            {
                if (i < gc.allFrames.Length)
                {
                    newf[i] = gc.allFrames[i];
                }
                else
                {
                    newf[i] = new frame(gc, i);
                }
            }

            gc.allFrames = newf;
        }

        if (GUILayout.Button("Add a Frame"))
        {
            frame[] newf;
            if (gc.allFrames != null)
            {
                newf = new frame[gc.allFrames.Length + 1];

                for (int i = 0; i < gc.allFrames.Length; i++)
                {
                    newf[i] = gc.allFrames[i];
                }
            }
            else
            {
                newf = new frame[1];
            }

            newf[newf.Length - 1] = new frame(gc, newf.Length - 1);

            gc.allFrames = newf;
        }

        foldFrames = EditorGUILayout.Foldout(foldFrames, "Show Frames");
        if (foldFrames)
        {
            EditorGUI.indentLevel++;
            for (int i = 0; i < gc.allFrames.Length; i++)
            {
                gc.allFrames[i].fold = EditorGUILayout.Foldout(gc.allFrames[i].fold, gc.allFrames[i].name);
                if (gc.allFrames[i].fold)
                {
                    EditorGUILayout.LabelField("Index " + gc.allFrames[i].index);
                    gc.allFrames[i].name            = EditorGUILayout.TextField("Name", gc.allFrames[i].name);
                    gc.allFrames[i].canChangeSprite = EditorGUILayout.Toggle("Change Sprite?", gc.allFrames[i].canChangeSprite);
                    gc.allFrames[i].haveBlaxVersion = EditorGUILayout.Toggle("Blax Version?", gc.allFrames[i].haveBlaxVersion);
                    if (gc.allFrames[i].canChangeSprite)
                    {
                        EditorGUI.indentLevel++;
                        EditorGUILayout.LabelField("Main Sprite");
                        EditorGUI.indentLevel++;
                        EditorGUILayout.LabelField("Not Flipped");
                        gc.allFrames[i].mainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].mainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));

                        gc.allFrames[i].specialXFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialXFlipSprite, "X Flipped Sprite");
                        if (gc.allFrames[i].specialXFlipSprite)
                        {
                            gc.allFrames[i].xfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].xfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                        }

                        gc.allFrames[i].specialYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialYFlipSprite, "Y Flipped Sprite");
                        if (gc.allFrames[i].specialYFlipSprite)
                        {
                            gc.allFrames[i].yfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].yfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                        }

                        gc.allFrames[i].specialXYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialXYFlipSprite, "XY Flipped Sprite");
                        if (gc.allFrames[i].specialXYFlipSprite)
                        {
                            gc.allFrames[i].xyfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].xyfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                        }
                        EditorGUI.indentLevel--;
                        if (gc.allFrames[i].haveBlaxVersion)
                        {
                            EditorGUILayout.LabelField("Blax Version Sprite");
                            gc.allFrames[i].blaxVersion = EditorGUILayout.Foldout(gc.allFrames[i].blaxVersion, "Blax Version");
                            if (gc.allFrames[i].blaxVersion)
                            {
                                EditorGUI.indentLevel++;
                                EditorGUILayout.LabelField("Not Flipped");
                                gc.allFrames[i].blaxMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));

                                gc.allFrames[i].blaxSpecialXFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialXFlipSprite, "X Flipped Sprite");
                                if (gc.allFrames[i].blaxSpecialXFlipSprite)
                                {
                                    gc.allFrames[i].blaxXFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxXFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                                }

                                gc.allFrames[i].blaxSpecialYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialYFlipSprite, "Y Flipped Sprite");
                                if (gc.allFrames[i].blaxSpecialYFlipSprite)
                                {
                                    gc.allFrames[i].blaxYFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxYFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                                }

                                gc.allFrames[i].blaxSpecialXYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialXYFlipSprite, "XY Flipped Sprite");
                                if (gc.allFrames[i].blaxSpecialXYFlipSprite)
                                {
                                    gc.allFrames[i].blaxXYFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxXYFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                                }
                                EditorGUI.indentLevel--;
                            }
                        }

                        EditorGUI.indentLevel--;
                    }
                    gc.allFrames[i].GlobalFlipX = EditorGUILayout.Toggle("Flip X", gc.allFrames[i].GlobalFlipX);
                    gc.allFrames[i].GlobalFlipY = EditorGUILayout.Toggle("Flip Y", gc.allFrames[i].GlobalFlipY);
                    gc.allFrames[i].canChangeX  = EditorGUILayout.Toggle("Change X?", gc.allFrames[i].canChangeX);
                    if (gc.allFrames[i].canChangeX)
                    {
                        gc.allFrames[i].mainPosX = EditorGUILayout.FloatField("X", gc.allFrames[i].mainPosX);
                    }
                    gc.allFrames[i].canChangeY = EditorGUILayout.Toggle("Change Y?", gc.allFrames[i].canChangeY);
                    if (gc.allFrames[i].canChangeY)
                    {
                        gc.allFrames[i].mainPosY = EditorGUILayout.FloatField("Y", gc.allFrames[i].mainPosY);
                    }
                    if (GUILayout.Button("Use"))
                    {
                        gc.allFrames[i].Use();
                    }
                }
            }
        }
        EditorGUI.indentLevel = 0;
        if (txt != null)
        {
            txt = (Texture2D)EditorGUILayout.ObjectField(txt, typeof(Texture2D), false, GUILayout.Width(304), GUILayout.Height((304f / txt.width) * txt.height));
        }
        else
        {
            txt = (Texture2D)EditorGUILayout.ObjectField(txt, typeof(Texture2D), false, GUILayout.Width(288), GUILayout.Height(96));
        }
        sprites = null;
        if (txt != null)
        {
            string path = AssetDatabase.GetAssetPath(txt);
            sprites = AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().ToArray();
        }
        gi            = (GraphicImport)EditorGUILayout.EnumPopup("Graphic Import", gi);
        startNum      = EditorGUILayout.IntField("Start Index", startNum);
        endNum        = EditorGUILayout.IntField("End Index", endNum);
        startingIndex = EditorGUILayout.IntField("Starting Index", startingIndex);

        if (txt != null && GUILayout.Button("Get All Sprites"))
        {
            if (startNum < 0)
            {
                startNum = 0;
            }
            if (startNum >= sprites.Length)
            {
                startNum = sprites.Length - 1;
            }
            if (endNum < startNum)
            {
                endNum = startNum;
            }
            if (endNum >= sprites.Length)
            {
                endNum = sprites.Length - 1;
            }
            if (startingIndex < 0)
            {
                startingIndex = 0;
            }

            frame[] allf = new frame[Mathf.Max(startingIndex + endNum + 1 - startNum, gc.allFrames.Length)];
            frame   faux;
            for (int i = startNum, j = 0, k = 0; j < allf.Length; j++, k++)
            {
                if (j < startingIndex || j > startingIndex + endNum - startNum)
                {
                    allf[j] = gc.allFrames[j];
                    k++;
                }
                else
                {
                    faux                 = new frame(gc, j);
                    faux.name            = txt.name + j;
                    faux.canChangeSprite = true;

                    allf[j] = faux;

                    switch (gi)
                    {
                    case GraphicImport.Main:
                        allf[j].mainSprite = sprites[i];
                        break;

                    case GraphicImport.XFlipped:
                        allf[j].xfMainSprite = sprites[i];
                        break;

                    case GraphicImport.YFlipped:
                        allf[j].yfMainSprite = sprites[i];
                        break;

                    case GraphicImport.XYFlipped:
                        allf[j].xyfMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxMain:
                        allf[j].blaxMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxXFlipped:
                        allf[j].blaxXFMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxYFlipped:
                        allf[j].blaxYFMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxXYFlipped:
                        allf[j].blaxXYFMainSprite = sprites[i];
                        break;
                    }
                    i++;
                }
            }
            gc.allFrames = allf;
        }
        EditorUtility.SetDirty(target);
    }
コード例 #3
0
 public frame(graphicComponent MainObject, int Index)
 {
     index      = Index;
     mainObject = MainObject;
 }