public override void OnInspectorGUI()
    {
        tk2dSlicedSprite sprite = (tk2dSlicedSprite)target;

        base.OnInspectorGUI();

        if (sprite.Collection == null)
        {
            return;
        }


        var spriteData = sprite.GetCurrentSpriteDef();

        if (spriteData == null)
        {
            return;
        }

        EditorGUILayout.BeginVertical();

        // need raw extents (excluding scale)
        Vector3 extents = spriteData.boundsData[1];

        // this is the size of one texel
        Vector3 spritePixelMultiplier = new Vector3(0, 0);

        bool newCreateBoxCollider = EditorGUILayout.Toggle("Create Box Collider", sprite.CreateBoxCollider);

        if (newCreateBoxCollider != sprite.CreateBoxCollider)
        {
            Undo.RegisterUndo(targetSlicedSprites, "Create Box Collider");
            sprite.CreateBoxCollider = newCreateBoxCollider;
        }

        // if either of these are zero, the division to rescale to pixels will result in a
        // div0, so display the data in fractions to avoid this situation
        bool editBorderInFractions = true;

        if (spriteData.texelSize.x != 0.0f && spriteData.texelSize.y != 0.0f && extents.x != 0.0f && extents.y != 0.0f)
        {
            spritePixelMultiplier = new Vector3(extents.x / spriteData.texelSize.x, extents.y / spriteData.texelSize.y, 1);
            editBorderInFractions = false;
        }

        if (!editBorderInFractions)
        {
            Vector2 newDimensions = EditorGUILayout.Vector2Field("Dimensions (Pixel Units)", sprite.dimensions);
            if (newDimensions != sprite.dimensions)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite Dimensions");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.dimensions = newDimensions;
                }
            }

            tk2dSlicedSprite.Anchor newAnchor = (tk2dSlicedSprite.Anchor)EditorGUILayout.EnumPopup("Anchor", sprite.anchor);
            if (newAnchor != sprite.anchor)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite Anchor");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.anchor = newAnchor;
                }
            }

            EditorGUILayout.PrefixLabel("Border");
            EditorGUI.indentLevel++;

            float newBorderLeft = EditorGUILayout.FloatField("Left", sprite.borderLeft * spritePixelMultiplier.x) / spritePixelMultiplier.x;
            if (newBorderLeft != sprite.borderLeft)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderLeft");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderLeft = newBorderLeft;
                }
            }
            float newBorderRight = EditorGUILayout.FloatField("Right", sprite.borderRight * spritePixelMultiplier.x) / spritePixelMultiplier.x;
            if (newBorderRight != sprite.borderRight)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderRight");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderRight = newBorderRight;
                }
            }
            float newBorderTop = EditorGUILayout.FloatField("Top", sprite.borderTop * spritePixelMultiplier.y) / spritePixelMultiplier.y;
            if (newBorderTop != sprite.borderTop)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderTop");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderTop = newBorderTop;
                }
            }
            float newBorderBottom = EditorGUILayout.FloatField("Bottom", sprite.borderBottom * spritePixelMultiplier.y) / spritePixelMultiplier.y;
            if (newBorderBottom != sprite.borderBottom)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderBottom");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderBottom = newBorderBottom;
                }
            }

            bool newBorderOnly = EditorGUILayout.Toggle("Draw Border Only", sprite.BorderOnly);
            if (newBorderOnly != sprite.BorderOnly)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite Border Only");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.BorderOnly = newBorderOnly;
                }
            }

            EditorGUI.indentLevel--;
        }
        else
        {
            GUILayout.Label("Border (Displayed as Fraction).\nSprite Collection needs to be rebuilt.", "textarea");
            EditorGUI.indentLevel++;

            float newBorderLeft = EditorGUILayout.FloatField("Left", sprite.borderLeft);
            if (newBorderLeft != sprite.borderLeft)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderLeft");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderLeft = newBorderLeft;
                }
            }
            float newBorderRight = EditorGUILayout.FloatField("Right", sprite.borderRight);
            if (newBorderRight != sprite.borderRight)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderRight");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderRight = newBorderRight;
                }
            }
            float newBorderTop = EditorGUILayout.FloatField("Top", sprite.borderTop);
            if (newBorderTop != sprite.borderTop)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderTop");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderTop = newBorderTop;
                }
            }
            float newBorderBottom = EditorGUILayout.FloatField("Bottom", sprite.borderBottom);
            if (newBorderBottom != sprite.borderBottom)
            {
                Undo.RegisterUndo(targetSlicedSprites, "Sliced Sprite BorderBottom");
                foreach (tk2dSlicedSprite spr in targetSlicedSprites)
                {
                    spr.borderBottom = newBorderBottom;
                }
            }

            EditorGUI.indentLevel--;
        }

        // One of the border valus has changed, so simply rebuild mesh data here
        if (GUI.changed)
        {
            foreach (tk2dSlicedSprite spr in targetSlicedSprites)
            {
                spr.Build();
                EditorUtility.SetDirty(spr);
            }
        }

        EditorGUILayout.EndVertical();
    }
Beispiel #2
0
    public override void OnInspectorGUI()
    {
        tk2dSlicedSprite sprite = (tk2dSlicedSprite)target;

        base.OnInspectorGUI();

        EditorGUILayout.BeginVertical();

        var spriteData = sprite.GetCurrentSpriteDef();

        // need raw extents (excluding scale)
        Vector3 extents = spriteData.boundsData[1];

        // this is the size of one texel
        Vector3 spritePixelMultiplier = new Vector3(0, 0);

        // if either of these are zero, the division to rescale to pixels will result in a
        // div0, so display the data in fractions to avoid this situation
        bool editBorderInFractions = true;

        if (spriteData.texelSize.x != 0.0f && spriteData.texelSize.y != 0.0f && extents.x != 0.0f && extents.y != 0.0f)
        {
            spritePixelMultiplier = new Vector3(extents.x / spriteData.texelSize.x, extents.y / spriteData.texelSize.y, 1);
            editBorderInFractions = false;
        }

        if (!editBorderInFractions)
        {
            if (sprite.transform.localScale == Vector3.one)
            {
                Vector2 scalePixelUnits        = new Vector2(spritePixelMultiplier.x * sprite.scale.x, spritePixelMultiplier.y * sprite.scale.y);
                Vector2 scalePixelUnitsChanged = EditorGUILayout.Vector2Field("Scale (Pixel Units)", scalePixelUnits);
                if (scalePixelUnits != scalePixelUnitsChanged)
                {
                    sprite.scale = new Vector3(scalePixelUnitsChanged.x / spritePixelMultiplier.x, scalePixelUnitsChanged.y / spritePixelMultiplier.y, sprite.scale.z);
                }
            }

            EditorGUILayout.PrefixLabel("Border");

            sprite.borderLeft   = EditorGUILayout.FloatField("Left", sprite.borderLeft * spritePixelMultiplier.x) / spritePixelMultiplier.x;
            sprite.borderRight  = EditorGUILayout.FloatField("Right", sprite.borderRight * spritePixelMultiplier.x) / spritePixelMultiplier.x;
            sprite.borderTop    = EditorGUILayout.FloatField("Top", sprite.borderTop * spritePixelMultiplier.y) / spritePixelMultiplier.y;
            sprite.borderBottom = EditorGUILayout.FloatField("Bottom", sprite.borderBottom * spritePixelMultiplier.y) / spritePixelMultiplier.y;
        }
        else
        {
            GUILayout.Label("Border (Displayed as Fraction).\nSprite Collection needs to be rebuilt.", "textarea");
            sprite.borderLeft   = EditorGUILayout.FloatField("Left", sprite.borderLeft);
            sprite.borderRight  = EditorGUILayout.FloatField("Right", sprite.borderRight);
            sprite.borderTop    = EditorGUILayout.FloatField("Top", sprite.borderTop);
            sprite.borderBottom = EditorGUILayout.FloatField("Bottom", sprite.borderBottom);
        }

        // One of the border valus has changed, so simply rebuild mesh data here
        if (GUI.changed)
        {
            sprite.Build();
        }

        if (GUI.changed || GUILayout.Button("Commit"))
        {
            Vector3 scl      = sprite.transform.localScale;
            Vector3 newScale = new Vector3(sprite.scale.x * scl.x, sprite.scale.y * scl.y, sprite.scale.z);
            sprite.scale = newScale;
            sprite.transform.localScale = Vector3.one;
        }

        EditorGUILayout.EndVertical();
    }