mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-14 21:55:09 +00:00
76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
|
using UnityEngine;
|
||
|
using UnityEngine.EventSystems;
|
||
|
using static TMPro.SpriteAssetUtilities.TexturePacker_JsonArray;
|
||
|
|
||
|
namespace HeavenStudio.Editor.Track
|
||
|
{
|
||
|
public class ZoomComponent : MonoBehaviour, IScrollHandler
|
||
|
{
|
||
|
[SerializeField] float _minimumScale = 0.5f;
|
||
|
[SerializeField] Vector2 _initialScale = Vector2.one;
|
||
|
[SerializeField] float _maximumScale = 3f;
|
||
|
[SerializeField] float _scaleIncrement = .5f;
|
||
|
|
||
|
[HideInInspector] Vector3 _scale;
|
||
|
|
||
|
RectTransform _thisTransform;
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
_initialScale = transform.localScale;
|
||
|
_thisTransform = transform as RectTransform;
|
||
|
|
||
|
_scale.Set(_initialScale.x, _initialScale.y, 1);
|
||
|
_thisTransform.localScale = _scale;
|
||
|
}
|
||
|
|
||
|
public void OnScroll(PointerEventData eventData)
|
||
|
{
|
||
|
Vector2 relativeMousePosition;
|
||
|
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(_thisTransform, Input.mousePosition, Editor.instance.EditorCamera, out relativeMousePosition);
|
||
|
|
||
|
float delta = eventData.scrollDelta.y;
|
||
|
delta = Mathf.Clamp(delta, -1f, 1f);
|
||
|
|
||
|
_scaleIncrement = 0.1f * _scale.x;
|
||
|
|
||
|
if (delta > 0 && _scale.x < _maximumScale)
|
||
|
{
|
||
|
ZoomIn(delta, relativeMousePosition);
|
||
|
}
|
||
|
else if (delta < 0 && _scale.x > _minimumScale)
|
||
|
{
|
||
|
ZoomOut(delta, relativeMousePosition);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void ZoomIn(float delta, Vector2 relativeMousePosition)
|
||
|
{
|
||
|
float incre = _scaleIncrement * delta;
|
||
|
|
||
|
var newScale = Mathf.Clamp(_scale.x + incre, _minimumScale, _maximumScale);
|
||
|
_scale.Set(newScale, 1, 1);
|
||
|
_thisTransform.localScale = _scale;
|
||
|
relativeMousePosition = new Vector2(relativeMousePosition.x, 0);
|
||
|
_thisTransform.anchoredPosition -= (relativeMousePosition * incre);
|
||
|
}
|
||
|
|
||
|
public void ZoomOut(float delta, Vector2 relativeMousePosition)
|
||
|
{
|
||
|
float incre = _scaleIncrement * -delta;
|
||
|
|
||
|
var newScale = _scale.x - incre;
|
||
|
_scale.Set(newScale, 1, 1);
|
||
|
_thisTransform.localScale = _scale;
|
||
|
relativeMousePosition = new Vector2(relativeMousePosition.x, 0);
|
||
|
_thisTransform.anchoredPosition += (relativeMousePosition * incre);
|
||
|
}
|
||
|
|
||
|
public void ResetZoom()
|
||
|
{
|
||
|
_scale.Set(100, 1, 1);
|
||
|
_thisTransform.localScale = _scale;
|
||
|
}
|
||
|
}
|
||
|
}
|