예제 #1
0
    public void OnSceneGUI()
    {
        if (tk2dPreferences.inst.enableSpriteHandles == false || !tk2dEditorUtility.IsEditable(target))
        {
            return;
        }

        tk2dSprite spr    = (tk2dSprite)target;
        var        sprite = spr.CurrentSprite;

        if (sprite == null)
        {
            return;
        }

        Transform t         = spr.transform;
        Bounds    b         = spr.GetUntrimmedBounds();
        Rect      localRect = new Rect(b.min.x, b.min.y, b.size.x, b.size.y);

        // Draw rect outline
        Handles.color = new Color(1, 1, 1, 0.5f);
        tk2dSceneHelper.DrawRect(localRect, t);

        Handles.BeginGUI();
        // Resize handles
        if (tk2dSceneHelper.RectControlsToggle())
        {
            EditorGUI.BeginChangeCheck();
            Rect resizeRect = tk2dSceneHelper.RectControl(999888, localRect, t);
            if (EditorGUI.EndChangeCheck())
            {
                tk2dUndo.RecordObjects(new Object[] { t, spr }, "Resize");
                spr.ReshapeBounds(new Vector3(resizeRect.xMin, resizeRect.yMin) - new Vector3(localRect.xMin, localRect.yMin),
                                  new Vector3(resizeRect.xMax, resizeRect.yMax) - new Vector3(localRect.xMax, localRect.yMax));
                tk2dUtil.SetDirty(spr);
            }
        }
        // Rotate handles
        if (!tk2dSceneHelper.RectControlsToggle())
        {
            EditorGUI.BeginChangeCheck();
            float theta = tk2dSceneHelper.RectRotateControl(888999, localRect, t, new List <int>());
            if (EditorGUI.EndChangeCheck())
            {
                tk2dUndo.RecordObject(t, "Rotate");
                if (Mathf.Abs(theta) > Mathf.Epsilon)
                {
                    t.Rotate(t.forward, theta, Space.World);
                }
            }
        }
        Handles.EndGUI();

        // Sprite selecting
        tk2dSceneHelper.HandleSelectSprites();

        // Move targeted sprites
        tk2dSceneHelper.HandleMoveSprites(t, localRect);

        if (GUI.changed)
        {
            tk2dUtil.SetDirty(target);
        }
    }