Files
2026-02-21 16:45:37 +08:00

93 lines
1.8 KiB
C#

using LE_LevelEditor.LEInput;
using UnityEngine;
namespace LE_LevelEditor.UI
{
public abstract class LE_GUI3dBase : MonoBehaviour, LE_IInputHandler
{
protected Ray m_cursorRay = default(Ray);
protected RaycastHit m_cursorHitInfo;
private bool m_isCursorOverSomething;
private int m_inactiveFrame = -1;
protected Vector3 m_cursorScreenCoords = -1f * Vector3.zero;
public bool IsCursorOverSomething
{
get
{
CheckCursor();
return m_isCursorOverSomething;
}
}
public bool IsInteractable
{
get
{
return m_inactiveFrame + 1 < Time.frameCount;
}
set
{
if (value)
{
m_inactiveFrame = -1;
}
else
{
m_inactiveFrame = Time.frameCount;
}
}
}
public Vector3 CursorScreenCoords
{
get
{
return m_cursorScreenCoords;
}
}
public abstract LE_EEditMode ActiveEditMode { get; }
public void SetIsCursorOverSomething(bool p_isHit)
{
m_isCursorOverSomething = p_isHit;
}
public virtual void SetCursorPosition(Vector3 p_cursorScreenCoords)
{
m_cursorScreenCoords = p_cursorScreenCoords;
m_cursorRay = Camera.main.ScreenPointToRay(p_cursorScreenCoords);
m_isCursorOverSomething = Physics.Raycast(m_cursorRay, out m_cursorHitInfo);
}
public virtual void SetIsCursorAction(bool p_isCursorAction)
{
}
public virtual void MoveCamera(Vector3 p_fromScreenCoords, Vector3 p_toScreenCoords)
{
}
public virtual void RotateCamera(Vector3 p_fromScreenCoords, Vector3 p_toScreenCoords)
{
}
public virtual void RotateCameraAroundPivot(Vector3 p_fromScreenCoords, Vector3 p_toScreenCoords)
{
}
private void CheckCursor()
{
if (m_isCursorOverSomething && (m_cursorHitInfo.collider == null || m_cursorHitInfo.transform == null))
{
m_isCursorOverSomething = false;
}
}
}
}