Commit fc945e10 authored by ElderLich's avatar ElderLich

Bug Fix: Main Menu Hover Arrow Overlap on Long Localized Labels

Fixed main menu button sizing so long localized labels no longer overlap with the hover > arrow. Button width now recalculates from the currently selected language values (including reverting to stock alignment for shorter OCG labels), while preserving stock hover animation behavior.
parent 0fb0a658
...@@ -2,12 +2,19 @@ using System.Collections.Generic; ...@@ -2,12 +2,19 @@ using System.Collections.Generic;
using DG.Tweening; using DG.Tweening;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using TMPro;
using YgomSystem.UI; using YgomSystem.UI;
namespace MDPro3.UI namespace MDPro3.UI
{ {
public class SelectionButton_MainMenu : SelectionButton public class SelectionButton_MainMenu : SelectionButton
{ {
private const float ArrowRestX = -5f;
private const float ArrowStartX = -262f;
private const float ArrowTextGap = 30f;
private static float s_BaseButtonWidth = -1f;
private static float s_BaseTextWidth = -1f;
protected override void Awake() protected override void Awake()
{ {
ElementsReset(); ElementsReset();
...@@ -19,6 +26,8 @@ namespace MDPro3.UI ...@@ -19,6 +26,8 @@ namespace MDPro3.UI
private void ElementsReset() private void ElementsReset()
{ {
EnsureMainMenuButtonWidth();
// Out // Out
Manager.GetElement<CanvasGroup>("Out").alpha = 1f; Manager.GetElement<CanvasGroup>("Out").alpha = 1f;
Manager.GetElement<RectTransform>("Line").localScale = Vector3.one; Manager.GetElement<RectTransform>("Line").localScale = Vector3.one;
...@@ -27,7 +36,7 @@ namespace MDPro3.UI ...@@ -27,7 +36,7 @@ namespace MDPro3.UI
Manager.GetElement<CanvasGroup>("Hover").alpha = 0f; Manager.GetElement<CanvasGroup>("Hover").alpha = 0f;
Manager.GetElement<RectTransform>("PlateTween").localScale = new Vector3(0.5f, 1f, 1f); Manager.GetElement<RectTransform>("PlateTween").localScale = new Vector3(0.5f, 1f, 1f);
Manager.GetElement<RectTransform>("HoverTextMask").offsetMax = new Vector2(-340f, 0f); Manager.GetElement<RectTransform>("HoverTextMask").offsetMax = new Vector2(-340f, 0f);
Manager.GetElement<RectTransform>("Arrow").localPosition = new Vector2(-5f, 0f); Manager.GetElement<RectTransform>("Arrow").localPosition = new Vector2(ArrowRestX, 0f);
// Cursor // Cursor
Manager.GetElement<RectTransform>("Corner").offsetMin = new Vector2(0f, 0f); Manager.GetElement<RectTransform>("Corner").offsetMin = new Vector2(0f, 0f);
...@@ -42,6 +51,7 @@ namespace MDPro3.UI ...@@ -42,6 +51,7 @@ namespace MDPro3.UI
if (hoverd) if (hoverd)
return; return;
base.HoverOn(); base.HoverOn();
EnsureMainMenuButtonWidth();
Manager.GetElement<CanvasGroup>("Out").alpha = 0f; Manager.GetElement<CanvasGroup>("Out").alpha = 0f;
...@@ -54,11 +64,73 @@ namespace MDPro3.UI ...@@ -54,11 +64,73 @@ namespace MDPro3.UI
Manager.GetElement<RectTransform>("HoverTextMask").offsetMax = new Vector2(-340f, 0f); Manager.GetElement<RectTransform>("HoverTextMask").offsetMax = new Vector2(-340f, 0f);
Manager.GetElement<RectTransform>("HoverTextMask").DOSizeDelta(Vector2.zero, 0.2f); Manager.GetElement<RectTransform>("HoverTextMask").DOSizeDelta(Vector2.zero, 0.2f);
Manager.GetElement<RectTransform>("Arrow").anchoredPosition = new Vector2(-262f, 0f); Manager.GetElement<RectTransform>("Arrow").anchoredPosition = new Vector2(ArrowStartX, 0f);
var tween2 = Manager.GetElement<RectTransform>("Arrow").DOAnchorPosX(-5f, 0.33f).SetEase(Ease.OutQuart); var tween2 = Manager.GetElement<RectTransform>("Arrow").DOAnchorPosX(ArrowRestX, 0.33f).SetEase(Ease.OutQuart);
hoverOnTweens.Add(tween2); hoverOnTweens.Add(tween2);
} }
private void EnsureMainMenuButtonWidth()
{
var selfRect = transform as RectTransform;
if (selfRect == null || selfRect.parent == null)
return;
var selfTextRect = Manager.GetElement<RectTransform>("Text");
if (s_BaseButtonWidth < 0f)
s_BaseButtonWidth = selfRect.sizeDelta.x;
if (s_BaseTextWidth < 0f && selfTextRect != null)
s_BaseTextWidth = selfTextRect.rect.width;
if (s_BaseButtonWidth <= 0f || s_BaseTextWidth <= 0f)
return;
var buttons = selfRect.parent.GetComponentsInChildren<SelectionButton_MainMenu>(true);
var maxTargetWidth = s_BaseButtonWidth;
foreach (var button in buttons)
{
if (button == null)
continue;
var buttonRect = button.transform as RectTransform;
if (buttonRect == null)
continue;
var text = button.Manager.GetElement<TextMeshProUGUI>("Text");
var textOver = button.Manager.GetElement<TextMeshProUGUI>("TextOver");
var textRect = button.Manager.GetElement<RectTransform>("Text");
if (text == null || textRect == null)
continue;
text.ForceMeshUpdate();
textOver?.ForceMeshUpdate();
var maxLabelWidth = text.preferredWidth;
if (textOver != null && textOver.preferredWidth > maxLabelWidth)
maxLabelWidth = textOver.preferredWidth;
var neededTextWidth = maxLabelWidth + ArrowTextGap;
var extraWidth = Mathf.Max(0f, neededTextWidth - s_BaseTextWidth);
var targetWidth = s_BaseButtonWidth + extraWidth;
if (targetWidth > maxTargetWidth)
maxTargetWidth = targetWidth;
}
var resolvedWidth = Mathf.Ceil(maxTargetWidth);
foreach (var button in buttons)
{
if (button == null)
continue;
var buttonRect = button.transform as RectTransform;
if (buttonRect == null)
continue;
if (Mathf.Abs(buttonRect.sizeDelta.x - resolvedWidth) < 0.01f)
continue;
buttonRect.sizeDelta = new Vector2(resolvedWidth, buttonRect.sizeDelta.y);
}
}
protected override void HoverOff(bool force = false) protected override void HoverOff(bool force = false)
{ {
base.HoverOff(); base.HoverOff();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment