public void GetSprites()
    {
        spriteList.Clear();

        Sprite[] sprites = spriteDatabase.GetSprites(spriteGroupSelect, spriteSetSelect);

        if (sprites == null)
        {
            return;
        }

        for (int i = 0; i < sprites.Length; ++i)
        {
            Define.SpriteInfo info = null;
            if (sprites[i] != null)
            {
                info       = new Define.SpriteInfo();
                info.group = spriteGroupSelect;
                info.set   = spriteSetSelect;
                info.index = i;
            }

            spriteList.Add(new SpriteObject(new Rect(spriteObjectX, i * (spriteObjectHeight + 2f)
                                                     , spriteObjectWidth, spriteObjectHeight)
                                            , info, sprites[i] == null ? "null" : sprites[i].name));
        }
    }
    public void ObjectCheck(EditorWindow edit, ref Define.SpriteInfo dragInfo)
    {
        Event ev = Event.current;

        if (ev.type == EventType.MouseDown)
        {
            if (area.Contains(ev.mousePosition))
            {
                select = this;

                edit.Repaint();
            }
        }
        else if (ev.type == EventType.mouseUp)
        {
            if (area.Contains(ev.mousePosition))
            {
                if (select == this)
                {
                    if (thisFrame)
                    {
                        thisFrame = false;

                        select = null;

                        edit.Repaint();
                    }
                    else
                    {
                        thisFrame = true;
                    }
                }
            }
        }

        if (select != this)
        {
            thisFrame = false;
        }


        if (dragInfo == null)
        {
            if (area.Contains(ev.mousePosition))
            {
                if (ev.type == EventType.MouseDrag)
                {
                    dragInfo = info;
                }
            }
        }

        ColorCheck();
    }
    public void InformationDraw()
    {
        Rect infoArea = new Rect(5f, 10f, 155f, position.height - 20f);

        GUILayout.BeginArea(infoArea);
        GUILayout.BeginHorizontal();

        GUILayout.Button("▶", GUILayout.Width(20f));
        GUILayout.Button("▣", GUILayout.Width(20f));
        GUILayout.Label("currFrame : " + currFrame.ToString());

        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();

        GUILayout.Label("fps");
        framePerSec = EditorGUILayout.FloatField(framePerSec);

        GUILayout.EndHorizontal();


        GUILayout.BeginHorizontal();

        GUILayout.Label("loop");
        loop = EditorGUILayout.Toggle(loop);

        GUILayout.EndHorizontal();

        if (Frame.select != null)
        {
            Define.SpriteInfo info = Frame.select.frameInfo;

            if (info != null)
            {
                GUI.Label(new Rect(3f, 55f, 150f, 25f), "sprite : " + spriteList[info.index].name);
            }
        }

        GUILayout.Space(25f);

        SaveButton();

        LoadButton();

        GUILayout.EndArea();
    }
    public bool FrameCheck(EditorWindow edit, ref Define.SpriteInfo dragInfo)
    {
        Event ev = Event.current;

        if (ev.type == EventType.MouseDown)
        {
            if (area.Contains(ev.mousePosition))
            {
                if (select == this)
                {
                    select = null;
                }
                else
                {
                    select = this;
                }

                edit.Repaint();
            }
        }
        if (dragInfo != null)
        {
            if (area.Contains(ev.mousePosition))
            {
                if (ev.type == EventType.mouseUp)
                {
                    frameInfo = dragInfo;
                    dragInfo  = null;

                    ContainCheck();
                    edit.Repaint();
                }
            }
        }

        ColorCheck();

        return(select == this);
    }
 public void AddFrame(Define.SpriteInfo info)
 {
     frameList.Add(new Frame(new Rect(12f * frameList.Count + frameX, frameY, frameWidth, frameHeight), info));
 }
    void OnGUI()
    {
        if (Event.current.type == EventType.MouseUp)
        {
            mouseUp = true;
        }

        Rect frameArea = new Rect(165f, 10f, position.width - 370f, position.height - 25f);
        Rect boxArea   = frameArea;

        boxArea.height += 5f;
        GUI.Box(boxArea, "");

        GUILayout.BeginArea(frameArea);
        frameScroll = GUILayout.BeginScrollView(frameScroll);

        GUILayout.BeginHorizontal();

        for (int i = 0; i < frameList.Count; ++i)
        {
            if (frameList[i].FrameCheck(this, ref dragInfo))
            {
                currFrame = i;
            }

            frameList[i].Draw();

            if (i % 5 == 0)
            {
                Rect r = frameList[i].area;

                DrawLine(new Vector3(5f + i * frameWidth, 28f, 0f), new Vector3(5f + i * frameWidth, 15f, 0f));

                r.y    -= 24f;
                r.width = 20f;
                GUI.Label(r, i.ToString());
            }
            else
            {
                DrawLine(new Vector3(5f + i * frameWidth, 28f, 0f), new Vector3(5f + i * frameWidth, 23f, 0f));
            }
        }

        if (Frame.select == null)
        {
            currFrame = -1;
        }

        if (mouseUp)
        {
            if (dragInfo != null)
            {
                dragInfo = null;
            }
        }

        DrawLine(new Vector3(5f, 28f, 0f), new Vector3(5f + frameList.Count * frameWidth, 28f, 0f));

        GUILayout.EndHorizontal();

        GUILayout.Space(frameHeight + 30f);

        if (frameList.Count != 0)
        {
            curve = EditorGUILayout.CurveField(curve, Color.green, new Rect(0, 0, 1f, 5f),
                                               new GUILayoutOption[]
            {
                GUILayout.Width(frameList.Count * 12f),
                GUILayout.Height(position.height - 155f),
            });
        }

        GUILayout.EndScrollView();

        if (GUILayout.Button("AddFrame"))
        {
            AddFrame();
        }
        if (GUILayout.Button("DeleteFrame"))
        {
            DeleteFrame(currFrame);
        }
        GUILayout.EndArea();

        Rect spriteArea = new Rect(position.width - 200f, 10f, 195f, position.height - 20f);

        GUILayout.BeginArea(spriteArea);

        spriteGroupSelect = EditorGUILayout.Popup(spriteGroupSelect, spriteGroup);
        if (prevSpriteGroupSelect != spriteGroupSelect)
        {
            prevSpriteGroupSelect = spriteGroupSelect;
            GetSpriteSelect();
            GetSprites();
        }

        if (spriteSet != null)
        {
            spriteSetSelect = EditorGUILayout.Popup(spriteSetSelect, spriteSet);
            if (prevSpriteSetSelect != spriteSetSelect)
            {
                prevSpriteSetSelect = spriteSetSelect;
                GetSprites();
            }
        }

        GUILayout.BeginVertical("box");

        spriteScroll = GUILayout.BeginScrollView(spriteScroll, false, true);

        if (spriteList.Count != 0)
        {
            for (int i = 0; i < spriteList.Count; ++i)
            {
                Rect rect = spriteList[i].area;
                rect.x = 0f;

                spriteList[i].ObjectCheck(this, ref dragInfo);
                GUI.Label(rect, i.ToString() + ".");
                spriteList[i].Draw(2f);
            }
        }

        GUILayout.EndScrollView();


        GUILayout.EndVertical();

        GUILayout.BeginHorizontal();

        GUILayout.Label("Range");
        rangeMin = EditorGUILayout.IntField(rangeMin);
        GUILayout.Label("~");
        rangeMax = EditorGUILayout.IntField(rangeMax);

        GUILayout.EndHorizontal();

        if (GUILayout.Button("Add to Range"))
        {
            AddToRange();
        }
        if (GUILayout.Button("Add All"))
        {
            AddAll();
        }

        GUILayout.EndArea();

        // curve = EditorGUILayout.CurveField(curve,Color.green,new Rect(0,0,1f,5f),GUILayout.Height(100f));

        // if(GUILayout.Button("Test"))
        // {
        //     Debug.Log(curve.Evaluate(0.001f));
        //     Debug.Log(curve.Evaluate(1f));
        // }

        // GUI.color = Color.red;
        // GUI.Box(new Rect(0,0,100,100),"check");

        InformationDraw();


        SpeedSync();
        mouseUp = false;
    }
 public SpriteObject(Rect rect, Define.SpriteInfo i, string n)
 {
     area = rect;
     info = i;
     name = n;
 }
 public Frame(Rect rt, Define.SpriteInfo frame)
 {
     area = rt; frameInfo = frame; ContainCheck();
 }