Пример #1
0
    public void Show(string message, RectTransform rectTransform, TooltipAnchorPosition anchorPosition)
    {
        if (rectTransform == null)
        {
            return;
        }

        resizerText.text = message;

        switch (State)
        {
        case TooltipState.HIDDEN:

            State = TooltipState.WAITING_FOR_DISPLAY;

            break;

        case TooltipState.FADING_OUT:

            State = TooltipState.FADING_IN;

            break;
        }

        StartCoroutine(waitForAndOfAFrameAndReposition(rectTransform, anchorPosition));
    }
Пример #2
0
 public void ShowFromScene(string message, Vector3 sceneWorldPosition, TooltipAnchorPosition anchorPosition)
 {
     helperTransform.position = mainCamera.WorldToScreenPoint(sceneWorldPosition);
     Show(message, helperTransform, anchorPosition);
 }
Пример #3
0
    /// <summary>
    /// The layouter has to resize according to new inserted text -
    /// need to wait for end of a frame to correctly reposition.
    /// </summary>
    /// <param name="parentRectTransform"></param>
    /// <param name="anchorPosition"></param>
    /// <returns></returns>
    IEnumerator waitForAndOfAFrameAndReposition(RectTransform parentRectTransform, TooltipAnchorPosition anchorPosition)
    {
        yield return(new WaitForEndOfFrame());

        float   parentWidth;
        float   parentHeight;
        Vector3 parentPosOffset
            = getRectTransformOffsetToCenter(parentRectTransform, out parentHeight, out parentWidth);  //offset from pos to calculate center

        switch (anchorPosition)
        {
        case TooltipAnchorPosition.CENTER:

            resizerTransform.pivot = new Vector2(0.5f, 0.5f);

            break;

        case TooltipAnchorPosition.DOWN:

            resizerTransform.pivot = new Vector2(0.5f, 1f);
            parentPosOffset.y     -= (parentHeight / 2f + offsetFromParent);

            break;

        case TooltipAnchorPosition.UP:

            resizerTransform.pivot = new Vector2(0.5f, 0f);
            parentPosOffset.y     += (parentHeight / 2f + offsetFromParent);

            break;

        case TooltipAnchorPosition.LEFT:

            resizerTransform.pivot = new Vector2(1f, 0.5f);
            parentPosOffset.x     -= (parentWidth / 2f + offsetFromParent);

            break;

        case TooltipAnchorPosition.RIGHT:

            resizerTransform.pivot = new Vector2(0f, 0.5f);
            parentPosOffset.x     += (parentWidth / 2f + offsetFromParent);

            break;
        }

        Vector3 targetPos = parentRectTransform.position + parentPosOffset;

        resizerTransform.position = parentRectTransform.position + parentPosOffset;

        float   width;
        float   height;
        Vector3 currentCenter = getRectTransformOffsetToCenter(resizerTransform, out height, out width);

        currentCenter = targetPos + currentCenter;
        float innerFrameWidth  = resizerInnerFrame.sizeDelta.x;
        float innerFrameHeight = resizerInnerFrame.sizeDelta.y;

        //rect sides positions
        float left  = currentCenter.x - (innerFrameWidth / 2f);
        float right = currentCenter.x + (innerFrameWidth / 2f);
        float up    = currentCenter.y + (innerFrameHeight / 2f);
        float down  = currentCenter.y - (innerFrameHeight / 2f);

        Vector3 offset = new Vector3();  //the offset that rect must be moved to fit into a screen

        if (left < 0)
        {
            offset.x = -left;
        }

        if (right > Screen.width)
        {
            offset.x = Screen.width - right;
        }

        if (up > Screen.height)
        {
            offset.y = Screen.height - up;
        }

        if (down < 0)
        {
            offset.y = -down;
        }

        //float innerFrameWidth = resizerInnerFrame.sizeDelta.x;
        //float innerFrameHeight = resizerInnerFrame.sizeDelta.y;
        Vector2 sizeDiff = new Vector2(width - innerFrameWidth, height - innerFrameHeight);

        switch (anchorPosition)
        {
        case TooltipAnchorPosition.CENTER:
            break;

        case TooltipAnchorPosition.DOWN:

            offset.y += sizeDiff.y / 2f;

            break;

        case TooltipAnchorPosition.UP:

            offset.y -= sizeDiff.y / 2f;

            break;

        case TooltipAnchorPosition.LEFT:

            offset.x += sizeDiff.x / 2f;

            break;

        case TooltipAnchorPosition.RIGHT:

            offset.x -= sizeDiff.x / 2f;

            break;
        }

        resizerTransform.position = resizerTransform.position + offset;
        RectTransform thisRectTransform = (RectTransform)transform;

        thisRectTransform.pivot    = resizerTransform.pivot;
        thisRectTransform.position = resizerTransform.position;
        thisText.text = resizerText.text;
    }