77 lines
2.6 KiB
C#
77 lines
2.6 KiB
C#
namespace Fusion.Statistics {
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
|
|
public class FusionStatsCanvas : MonoBehaviour, IDragHandler, IEndDragHandler {
|
|
[Header("General References")]
|
|
[SerializeField] private Canvas _canvas;
|
|
[SerializeField] private CanvasScaler _canvasScaler;
|
|
[SerializeField] private RectTransform _canvasPanel;
|
|
|
|
[Space] [Header("Panel References")]
|
|
[SerializeField] private GameObject _contentPanel;
|
|
[SerializeField] private GameObject _bottomPanel;
|
|
|
|
[Space] [Header("Misc")]
|
|
[SerializeField] private Button _hideButton;
|
|
[SerializeField] private Button _closeButton;
|
|
|
|
[Space] [Header("World Anchor Panel Settings")]
|
|
[SerializeField] private FusionStatsConfig _config;
|
|
|
|
private bool _isColapsed => !_contentPanel.activeSelf;
|
|
|
|
private Vector2 _canvasPanelOriginPos;
|
|
|
|
internal void SetupStatsCanvas(FusionStatistics fusionStatistics, UnityAction closeButtonAction) {
|
|
_canvasPanelOriginPos = _canvasPanel.anchoredPosition;
|
|
|
|
//Setup buttons
|
|
_closeButton.onClick.RemoveAllListeners();
|
|
_closeButton.onClick.AddListener(closeButtonAction);
|
|
|
|
_hideButton.onClick.RemoveAllListeners();
|
|
_hideButton.onClick.AddListener(ToggleHide);
|
|
|
|
// Setup runner statistics ref
|
|
_config.SetupStatisticReference(fusionStatistics);
|
|
}
|
|
|
|
|
|
public void OnDrag(PointerEventData eventData) {
|
|
_canvasPanel.anchoredPosition += eventData.delta / _canvas.scaleFactor;
|
|
}
|
|
|
|
public void OnEndDrag(PointerEventData eventData) {
|
|
if (CheckDraggableRectVisibility(_canvasPanel) == false)
|
|
SnapPanelBackToOriginPos();
|
|
}
|
|
|
|
public void SnapPanelBackToOriginPos() {
|
|
_canvasPanel.anchoredPosition = _canvasPanelOriginPos;
|
|
}
|
|
|
|
|
|
internal void ToggleHide() {
|
|
var active = _contentPanel.activeSelf;
|
|
_hideButton.transform.rotation = active ? Quaternion.Euler(0, 0, 90) : Quaternion.identity;
|
|
_contentPanel.SetActive(!active);
|
|
_bottomPanel.SetActive(!active);
|
|
}
|
|
|
|
// Better offscreen check for later.
|
|
private bool CheckDraggableRectVisibility(RectTransform rectTransform) {
|
|
var anchoredPos = rectTransform.anchoredPosition;
|
|
|
|
if (anchoredPos.x >= rectTransform.rect.width || anchoredPos.x <= -_canvasScaler.referenceResolution.x)
|
|
return false;
|
|
|
|
if (anchoredPos.y >= (_isColapsed ? 50 : rectTransform.rect.height) || anchoredPos.y <= -_canvasScaler.referenceResolution.y)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
}
|
|
} |