Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/SRDebugger/UI/MobileMenuController.cs
2026-02-21 16:45:37 +08:00

134 lines
3.5 KiB
C#

using SRDebugger.UI.Other;
using SRF;
using UnityEngine;
using UnityEngine.UI;
namespace SRDebugger.UI
{
public class MobileMenuController : SRMonoBehaviourEx
{
private Button _closeButton;
[SerializeField]
private float _maxMenuWidth = 185f;
[SerializeField]
private float _peekAmount = 45f;
private float _targetXPosition;
[RequiredField]
public RectTransform Content;
[RequiredField]
public RectTransform Menu;
[RequiredField]
public Button OpenButton;
[RequiredField]
public SRTabController TabController;
public float PeekAmount
{
get
{
return _peekAmount;
}
}
public float MaxMenuWidth
{
get
{
return _maxMenuWidth;
}
}
protected override void OnEnable()
{
base.OnEnable();
RectTransform rectTransform = Menu.parent as RectTransform;
LayoutElement component = Menu.GetComponent<LayoutElement>();
component.ignoreLayout = true;
Menu.pivot = new Vector2(1f, 1f);
Menu.offsetMin = new Vector2(1f, 0f);
Menu.offsetMax = new Vector2(1f, 1f);
Menu.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Mathf.Clamp(rectTransform.rect.width - PeekAmount, 0f, MaxMenuWidth));
Menu.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, rectTransform.rect.height);
Menu.anchoredPosition = new Vector2(0f, 0f);
if (_closeButton == null)
{
CreateCloseButton();
}
OpenButton.gameObject.SetActive(true);
TabController.ActiveTabChanged += TabControllerOnActiveTabChanged;
}
protected override void OnDisable()
{
base.OnDisable();
LayoutElement component = Menu.GetComponent<LayoutElement>();
component.ignoreLayout = false;
Content.anchoredPosition = new Vector2(0f, 0f);
_closeButton.gameObject.SetActive(false);
OpenButton.gameObject.SetActive(false);
TabController.ActiveTabChanged -= TabControllerOnActiveTabChanged;
}
private void CreateCloseButton()
{
GameObject gameObject = Content.CreateChild("CloseButton");
RectTransform rectTransform = gameObject.AddComponent<RectTransform>();
gameObject.AddComponent<LayoutElement>().ignoreLayout = true;
rectTransform.anchorMin = new Vector2(0f, 0f);
rectTransform.anchorMax = new Vector2(1f, 1f);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Content.rect.width);
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, Content.rect.height);
gameObject.AddComponent<Image>().color = new Color(0f, 0f, 0f, 0f);
_closeButton = gameObject.AddComponent<Button>();
_closeButton.transition = Selectable.Transition.None;
_closeButton.onClick.AddListener(CloseButtonClicked);
_closeButton.gameObject.SetActive(false);
}
private void CloseButtonClicked()
{
Close();
}
protected override void Update()
{
base.Update();
float x = Content.anchoredPosition.x;
if (Mathf.Abs(_targetXPosition - x) < 2.5f)
{
Content.anchoredPosition = new Vector2(_targetXPosition, Content.anchoredPosition.y);
}
else
{
Content.anchoredPosition = new Vector2(SRMath.SpringLerp(x, _targetXPosition, 15f, Time.unscaledDeltaTime), Content.anchoredPosition.y);
}
}
private void TabControllerOnActiveTabChanged(SRTabController srTabController, SRTab srTab)
{
Close();
}
[ContextMenu("Open")]
public void Open()
{
_targetXPosition = Menu.rect.width;
_closeButton.gameObject.SetActive(true);
}
[ContextMenu("Close")]
public void Close()
{
_targetXPosition = 0f;
_closeButton.gameObject.SetActive(false);
}
}
}