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; } } } }