using Core.Language; using Fort23.Core; using UnityEngine; using UnityEngine.UI; namespace Fort23.Mono { [UIBinding(prefab = "TipMessagePanel")] public partial class TipMessagePanel : UIPanel { public static async void OpenTipMessagePanel(string meg, Vector2 worldPos = default) { TipMessagePanel tipMessagePanel = await UIManager.Instance.LoadAndOpenPanel(null, UILayer.Top); tipMessagePanel.SetTipMessage(meg, worldPos); } public static async void OpenTipMessagePanel(int meg, Vector2 worldPos = default) { TipMessagePanel tipMessagePanel = await UIManager.Instance.LoadAndOpenPanel(null, UILayer.Top); tipMessagePanel.SetTipMessage(LanguageManager.Instance.Text(meg), worldPos); } public override async CTask Open() { await base.Open(); GObjectPoolInterface.SetActive(false); } private void Init() { } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { button_bg.onClick.AddListener(OnClickButton_bg); } private void OnClickButton_bg() { UIManager.Instance.HideUIUIPanel(this); } public async void SetTipMessage(string msg, Vector2 pos) { pos = this.transform.worldToLocalMatrix * pos; if (pos.x > 186) { pos.x = 186; } if (pos.x < -186) { pos.x = -186; } GObjectPoolInterface.SetActive(true); message.text = msg; RectTransform rectTransform = message.GetComponent(); message.SetLayoutDirty(); //message.OnRebuildRequested(); LayoutRebuilder.MarkLayoutForRebuild(rectTransform); LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform); rectTransform.GetComponent().SetLayoutVertical(); RectTransform bgTran = bg_icon.GetComponent(); // await TimerComponent.Instance.WaitAsync(100); // float y2 = LayoutUtility.GetPreferredSize(rectTransform, 0) + 40; // message.OnRebuildRequested(); // massge.OnRebuildRequested(); float y = rectTransform.sizeDelta.y + 40; if (y < 100) { y = 100; } bgTran.sizeDelta = new Vector2(bgTran.sizeDelta.x, y); float maxY = this.transform.sizeDelta.y / 2; float my2 = y / 2; if (pos.y > maxY - my2) { pos.y = maxY - my2; } if (pos.y < my2 - maxY) { pos.y = my2 - maxY; } dotPoint.anchoredPosition = pos; LayoutRebuilder.MarkLayoutForRebuild(bgTran); LayoutRebuilder.ForceRebuildLayoutImmediate(bgTran); GObjectPoolInterface.SetActive(true); } } }