165 lines
4.5 KiB
C#
165 lines
4.5 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UVC.Core;
|
|
|
|
namespace UVC.Util
|
|
{
|
|
/// <summary>
|
|
/// 커서의 모양을 관리하는 싱글톤 클래스입니다.
|
|
/// </summary>
|
|
public class CursorManager : SingletonScene<CursorManager>
|
|
{
|
|
/// <summary>
|
|
/// 커서 유형별 텍스처와 핫스팟 정보를 담는 구조체입니다.
|
|
/// </summary>
|
|
[System.Serializable]
|
|
public struct CursorData
|
|
{
|
|
public CursorType type;
|
|
public Texture2D texture;
|
|
public Vector2 hotspot;
|
|
}
|
|
|
|
[Header("Cursor Settings")]
|
|
[Tooltip("각 커서 유형에 맞는 텍스처와 핫스팟을 설정합니다.")]
|
|
[SerializeField]
|
|
private List<CursorData> _cursorDataList = new List<CursorData>();
|
|
|
|
private Dictionary<CursorType, CursorData> _cursorDataDict;
|
|
|
|
/// <summary>
|
|
/// 초기화 시점에 리스트를 딕셔너리로 변환하여 빠른 조회를 가능하게 합니다.
|
|
/// </summary>
|
|
protected override void Init()
|
|
{
|
|
base.Init();
|
|
_cursorDataDict = _cursorDataList.ToDictionary(data => data.type);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 지정된 유형으로 커서를 변경합니다.
|
|
/// </summary>
|
|
/// <param name="type">변경할 커서의 유형</param>
|
|
public void SetCursor(CursorType type)
|
|
{
|
|
if (type == CursorType.Default)
|
|
{
|
|
// 기본 커서로 설정
|
|
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
|
|
return;
|
|
}
|
|
|
|
if (_cursorDataDict.TryGetValue(type, out CursorData data))
|
|
{
|
|
if (data.texture != null)
|
|
{
|
|
Cursor.SetCursor(data.texture, data.hotspot, CursorMode.Auto);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning($"CursorManager: '{type}'에 대한 텍스처가 설정되지 않았습니다.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning($"CursorManager: '{type}'에 대한 커서 데이터가 없습니다.");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 커서를 시스템 기본값으로 되돌립니다.
|
|
/// </summary>
|
|
public void SetDefaultCursor()
|
|
{
|
|
SetCursor(CursorType.Default);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// CursorManager에서 사용할 커서 유형을 정의합니다.
|
|
/// </summary>
|
|
public enum CursorType
|
|
{
|
|
/// <summary>
|
|
/// 시스템 기본 커서
|
|
/// </summary>
|
|
Default,
|
|
/// <summary>
|
|
/// 수직 Column 조절 커서
|
|
/// </summary>
|
|
ResizeCol,
|
|
/// <summary>
|
|
/// 수평 Row 조절 커서
|
|
/// </summary>
|
|
ResizeRow,
|
|
/// <summary>
|
|
/// 수평 크기 조절 커서
|
|
/// </summary>
|
|
ResizeH,
|
|
/// <summary>
|
|
/// 수직 크기 조절 커서
|
|
/// </summary>
|
|
ResizeV,
|
|
/// <summary>
|
|
/// 좌상우하 대각선 크기 조절 커서
|
|
/// </summary>
|
|
ResizeTLBR,
|
|
/// <summary>
|
|
/// 우상좌하 대각선 크기 조절 커서
|
|
/// </summary>
|
|
ResizeTRBL,
|
|
/// <summary>
|
|
/// 이동 커서
|
|
/// </summary>
|
|
Move,
|
|
/// <summary>
|
|
/// 회전 bottom left 커서
|
|
/// </summary>
|
|
RotateBL,
|
|
/// <summary>
|
|
/// 회전 bottom right 커서
|
|
/// </summary>
|
|
RotateBR,
|
|
/// <summary>
|
|
/// 회전 top left 커서
|
|
/// </summary>
|
|
RotateTL,
|
|
/// <summary>
|
|
/// 회전 top right 커서
|
|
/// </summary>
|
|
RotateTR,
|
|
/// <summary>
|
|
/// 스케일 조절 커서
|
|
/// </summary>
|
|
Scale,
|
|
/// <summary>
|
|
/// 대기 상태 커서
|
|
/// </summary>
|
|
Wait,
|
|
/// <summary>
|
|
/// 검지 펼친 손 상태 커서
|
|
/// </summary>
|
|
HandPoint,
|
|
/// <summary>
|
|
/// 꽉쥔 손 상태 커서
|
|
/// </summary>
|
|
HandGrab,
|
|
/// <summary>
|
|
/// 손 모양 커서
|
|
/// </summary>
|
|
Hand,
|
|
/// <summary>
|
|
/// Zoom in 커서
|
|
/// </summary>
|
|
ZoomIn,
|
|
/// <summary>
|
|
/// Zoom out 커서
|
|
/// </summary>
|
|
ZoomOut,
|
|
Node,
|
|
Link,
|
|
Arc
|
|
}
|
|
}
|