using UnityEngine; public class GizmoRotateElement : MonoBehaviour { [SerializeField] private GizmoDirection direction; [SerializeField] private float rotationSensitivity = 0.3f; [SerializeField] private Material SelectedMat; [SerializeField] private bool enableSnapping = true; [SerializeField] private float snapAngle = 15f; private Transform attachedTransform; private AxisRotateStrategy rotateStrategy; private GhostManagerV2 ghostManager; private Material OGMat; private bool isDragging; private Vector2 lastMousePos; private void Start() { OGMat = GetComponent().material; ghostManager = GhostManagerV2.getInstance(); attachedTransform = transform.GetComponentInParent().transform; } // private void Update() // { // if (!isDragging || rotateStrategy == null) return; // Vector2 delta = (Vector2)Input.mousePosition - lastMousePos; // lastMousePos = Input.mousePosition; // float degrees = (delta.x + delta.y) * rotationSensitivity; // if (degrees != 0f) // rotateStrategy.Rotate(degrees); // } public void onSelectEnter() { ghostManager.SetupExistingBlock(attachedTransform.gameObject); // The gizmo root (parent) position determines the pivot Vector3 lockedPosition = transform.parent.position; rotateStrategy = new AxisRotateStrategy(GetLocalAxis(), lockedPosition) { EnableSnapping = enableSnapping, SnapAngle = snapAngle }; rotateStrategy.BeginRotate(); ghostManager.SetMovementStrategy(rotateStrategy); if (!InputModeManager.Has(InputMode.Gizmo)) InputModeManager.Push(InputMode.Gizmo); lastMousePos = Input.mousePosition; isDragging = true; GetComponent().material = SelectedMat; Debug.Log($"Rotate drag started on {direction} axis"); } public void onSelectExit() { isDragging = false; if (InputModeManager.Has(InputMode.Gizmo)) InputModeManager.Pop(InputMode.Gizmo); if (rotateStrategy != null) { rotateStrategy.EndRotate(); ghostManager.TryCommitOrCancel(); rotateStrategy = null; Debug.Log("Rotate drag ended"); } } public void ResetMat() { GetComponent().material = OGMat; } private AxisRotateStrategy.LocalAxis GetLocalAxis() => direction switch { GizmoDirection.X => AxisRotateStrategy.LocalAxis.Right, GizmoDirection.Y => AxisRotateStrategy.LocalAxis.Up, GizmoDirection.Z => AxisRotateStrategy.LocalAxis.Forward, _ => AxisRotateStrategy.LocalAxis.Up, }; }