void Start()
    {
        timeLimit = 1.0f;
        speed     = 2.0f;

        // Get the 'size' of the mole sprite
        Bounds bounds = sprite.GetUntrimmedBounds();

        height = bounds.max.y - bounds.min.y;

        // We want the mole to be fully clipped on the Y axis initially.
        spriteRec       = sprite.ClipRect;
        spriteRec.y     = 1.0f;
        sprite.ClipRect = spriteRec;

        colliderTransform = sprite.transform;

        //Move the mole sprite into the correct place relative to the hole
        Vector3 localPos = sprite.transform.localPosition;

        transformY = localPos.y;
        localPos.y = transformY - (height * sprite.ClipRect.y);
        sprite.transform.localPosition = localPos;

        sprite.gameObject.SetActive(false);

        // Add mole to the main game script's mole container
        MainGameScript.Instance.RegisterMole(this);
    }
    void Start()
    {
        _downVelocity       = new Vector3(0, -175, 0);
        _defaultPositon     = new Vector3(320, 0, 0);
        _defaultPositionTop = new Vector3(320, 1135, 0);

        // Get the 'size' of the line segment.
        Bounds bounds = sprite.GetUntrimmedBounds();

        width = bounds.max.x - bounds.min.x;

        // We want the segment to be mostly clipped on the left and right sides initially.
        spriteRec       = sprite.ClipRect;
        spriteRec.x     = xMin;
        widthMin        = (0.5f - xMin) * 2;
        spriteRec.width = widthMin;
        sprite.ClipRect = spriteRec;

        colliderTransform = sprite.transform;

        // Register Segment with the main game script.
        MainGameScript.Instance.RegisterSegment(this);

        sprite.renderer.enabled = false;
    }
    public new void OnSceneGUI()
    {
        if (tk2dPreferences.inst.enableSpriteHandles == false || !tk2dEditorUtility.IsEditable(target))
        {
            return;
        }

        tk2dClippedSprite spr = (tk2dClippedSprite)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);
        Rect      clipRect  = new Rect(b.min.x + b.size.x * ((spr.scale.x > 0) ? spr.clipBottomLeft.x : (1.0f - spr.clipTopRight.x)),
                                       b.min.y + b.size.y * ((spr.scale.y > 0) ? spr.clipBottomLeft.y : (1.0f - spr.clipTopRight.y)),
                                       b.size.x * spr.ClipRect.width,
                                       b.size.y * spr.ClipRect.height);

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

        // Clip region outline (if editing)
        if (showSceneClipControl)
        {
            Handles.color = new Color(1, 0, 0, 0.5f);
            tk2dSceneHelper.DrawRect(clipRect, t);
        }

        Handles.BeginGUI();
        if (!showSceneClipControl)
        {
            // Do the normal resize and rotate controls
            if (tk2dSceneHelper.RectControlsToggle())
            {
                EditorGUI.BeginChangeCheck();
                Rect resizeRect = tk2dSceneHelper.RectControl(102030, 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));
                    EditorUtility.SetDirty(spr);
                }
            }
            // Rotate handles
            if (!tk2dSceneHelper.RectControlsToggle())
            {
                EditorGUI.BeginChangeCheck();
                float theta = tk2dSceneHelper.RectRotateControl(405060, localRect, t, new List <int>());
                if (EditorGUI.EndChangeCheck())
                {
                    if (Mathf.Abs(theta) > Mathf.Epsilon)
                    {
                        tk2dUndo.RecordObject(t, "Rotate");
                        t.Rotate(t.forward, theta, Space.World);
                    }
                }
            }
        }
        else
        {
            // Clip region control
            EditorGUI.BeginChangeCheck();
            Rect resizeRect = tk2dSceneHelper.RectControl(708090, clipRect, t);
            if (EditorGUI.EndChangeCheck())
            {
                Rect newSprClipRect = new Rect(((spr.scale.x > 0) ? (resizeRect.xMin - localRect.xMin) : (localRect.xMax - resizeRect.xMax)) / localRect.width,
                                               ((spr.scale.y > 0) ? (resizeRect.yMin - localRect.yMin) : (localRect.yMax - resizeRect.yMax)) / localRect.height,
                                               resizeRect.width / localRect.width,
                                               resizeRect.height / localRect.height);
                if (newSprClipRect != spr.ClipRect)
                {
                    tk2dUndo.RecordObject(spr, "Resize");
                    spr.ClipRect = newSprClipRect;
                    EditorUtility.SetDirty(spr);
                }
            }
        }
        Handles.EndGUI();

        // Sprite selecting
        tk2dSceneHelper.HandleSelectSprites();

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

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
Exemple #4
0
    public new void OnSceneGUI()
    {
        if (tk2dPreferences.inst.enableSpriteHandles == false)
        {
            return;
        }

        tk2dClippedSprite spr = (tk2dClippedSprite)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);
        Rect      clipRect  = new Rect(b.min.x + b.size.x * spr.clipBottomLeft.x, b.min.y + b.size.y * spr.clipBottomLeft.y,
                                       b.size.x * spr.ClipRect.width, b.size.y * spr.ClipRect.height);
        Vector3 unscaledBoundsSize = sprite.untrimmedBoundsData[1];

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

        // Clip region outline (if editing)
        if (showSceneClipControl)
        {
            Handles.color = new Color(1, 0, 0, 0.5f);
            tk2dSceneHelper.DrawRect(clipRect, t);
        }

        Handles.BeginGUI();
        if (!showSceneClipControl)
        {
            // Do the normal resize and rotate controls
            if (tk2dSceneHelper.RectControlsToggle())
            {
                EditorGUI.BeginChangeCheck();
                Rect resizeRect = tk2dSceneHelper.RectControl(102030, localRect, t);
                if (EditorGUI.EndChangeCheck())
                {
                    Vector3 newScale = new Vector3(resizeRect.width / unscaledBoundsSize.x, resizeRect.height / unscaledBoundsSize.y, spr.scale.z);
                    if (newScale != spr.scale)
                    {
                        Undo.RegisterUndo(new Object[] { t, spr }, "Resize");
                        float   factorX = (Mathf.Abs(spr.scale.x) > Mathf.Epsilon) ? (newScale.x / spr.scale.x) : 0.0f;
                        float   factorY = (Mathf.Abs(spr.scale.y) > Mathf.Epsilon) ? (newScale.y / spr.scale.y) : 0.0f;
                        Vector3 offset  = new Vector3(resizeRect.xMin - localRect.xMin * factorX,
                                                      resizeRect.yMin - localRect.yMin * factorY, 0.0f);
                        Vector3 newPosition = t.TransformPoint(offset);
                        if (newPosition != t.position)
                        {
                            t.position = newPosition;
                        }
                        spr.scale = newScale;
                        EditorUtility.SetDirty(spr);
                    }
                }
            }
            // Rotate handles
            if (!tk2dSceneHelper.RectControlsToggle())
            {
                EditorGUI.BeginChangeCheck();
                float theta = tk2dSceneHelper.RectRotateControl(405060, localRect, t, new List <int>());
                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RegisterUndo(t, "Rotate");
                    if (Mathf.Abs(theta) > Mathf.Epsilon)
                    {
                        t.Rotate(t.forward, theta);
                    }
                }
            }
        }
        else
        {
            // Clip region control
            EditorGUI.BeginChangeCheck();
            Rect resizeRect = tk2dSceneHelper.RectControl(708090, clipRect, t);
            if (EditorGUI.EndChangeCheck())
            {
                Rect newSprClipRect = new Rect((resizeRect.xMin - localRect.xMin) / localRect.width, (resizeRect.yMin - localRect.yMin) / localRect.height,
                                               resizeRect.width / localRect.width, resizeRect.height / localRect.height);
                if (newSprClipRect != spr.ClipRect)
                {
                    Undo.RegisterUndo(spr, "Resize");
                    spr.ClipRect = newSprClipRect;
                    EditorUtility.SetDirty(spr);
                }
            }
        }
        Handles.EndGUI();

        // Sprite selecting
        tk2dSceneHelper.HandleSelectSprites();

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