protected override void DragBegin(InteractiveHandle target, DragBeginInfo info) { if (target != ownerHandle) { return; } m_InitialPosWorld = info.translation.initialPosition; m_InitialPosLocal = Quaternion.Inverse(transform.localRotation) * transform.localPosition; m_TotalTranslation = Vector3.zero; if (translationBegun != null) { translationBegun.Invoke(new TranslationBeginInfo( //World new TranslationInfo( m_InitialPosWorld, Vector3.zero, Vector3.zero, transform.forward), //Local new TranslationInfo( m_InitialPosLocal, Vector3.zero, Vector3.zero, transform.localRotation * Vector3.forward))); } OnTranslationBegin(info.translation); }
protected override void DragBegin(InteractiveHandle target, DragBeginInfo info) { if (target != ownerHandle) { return; } m_LastDirection = info.translation.initialPosition - transform.position; m_TotalAngle = 0f; m_Normal = planeNormal; if (rotationBegun != null) { rotationBegun.Invoke(new RotationBeginInfo( new RotationInfo( // World 0, 0, m_Normal), new RotationInfo( // Local 0, 0, transform.worldToLocalMatrix.rotation * m_Normal))); } }
public bool StartDrag(Vector3 hitPos) { if (m_State != State.Hovering) { return(false); } m_StartDragPosition = hitPos; m_LastFramePosition = hitPos; m_State = State.Dragging; var eventData = new DragBeginInfo(new DragTranslation( m_StartDragPosition, m_StartDragPosition, Vector3.zero)); foreach (var behaviour in TakeSnapshot(m_Context.GetHandleBehaviours())) { if (behaviour == null) { continue; } behaviour.DoDragBegin(m_ActiveHandle, eventData); } return(true); }