diff --git a/Assets/Scripts/UI/FactExplorer/FactExplorer.cs b/Assets/Scripts/UI/FactExplorer/FactExplorer.cs index c23cdad9582f9a5b6e947af7b4e89787ee0994e7..b956c23c999a30d2fc8642cf2dd875e3ef127233 100644 --- a/Assets/Scripts/UI/FactExplorer/FactExplorer.cs +++ b/Assets/Scripts/UI/FactExplorer/FactExplorer.cs @@ -86,16 +86,20 @@ private void DestroyIfClickedOutside() private void MoveToPreferredPosition(Vector3 prefPos) { LayoutRebuilder.ForceRebuildLayoutImmediate(transform.GetComponent<RectTransform>()); - // calculate opimal position + // calculate optimal position var deltaPos = mainFactUI.position - prefPos; transform.position -= deltaPos; // clamp position, so that no parts of the FactExplorer are out of screen - RectTransform feRect = GetComponent<RectTransform>(); - Vector2 apos = feRect.anchoredPosition; - apos.x = Mathf.Clamp(apos.x, 0, Screen.width - feRect.sizeDelta.x); - apos.y = Mathf.Clamp(apos.y, -Screen.height + feRect.sizeDelta.y, 0); - feRect.anchoredPosition = apos; + RectTransform rect = GetComponent<RectTransform>(); + RectTransform canvasRect = GetComponentInParent<Canvas>().transform.GetComponent<RectTransform>(); + + var sizeDelta = canvasRect.sizeDelta - rect.sizeDelta; + var panelPivot = rect.pivot; + var position = rect.anchoredPosition; + position.x = Mathf.Clamp(position.x, -sizeDelta.x * panelPivot.x, sizeDelta.x * (1 - panelPivot.x)); + position.y = Mathf.Clamp(position.y, -sizeDelta.y * panelPivot.y, sizeDelta.y * (1 - panelPivot.y)); + rect.anchoredPosition = position; } #endregion Implementation