IEnumerator OnDrag() { while (isDragging) { transform.position = dragAnchor.TransformPoint(diffPoint); transform.rotation = dragAnchor.rotation * diffQ; OnGrabUpdate?.Invoke(dragAnchor); yield return(null); } }
public bool Touch(UUID target) { SceneObjectPart part = m_scene.GetSceneObjectPart(target); if (part == null) { return(false); } bool objectTouchable = hasTouchEvents(part); // Only touch an object that is scripted to respond if (!objectTouchable && !part.IsRoot) { objectTouchable = hasTouchEvents(part.ParentGroup.RootPart); } if (!objectTouchable) { return(false); } // Set up the surface args as if the touch is from a client that does not support this SurfaceTouchEventArgs surfaceArgs = new SurfaceTouchEventArgs() { FaceIndex = -1, // TOUCH_INVALID_FACE Binormal = Vector3.Zero, // TOUCH_INVALID_VECTOR Normal = Vector3.Zero, // TOUCH_INVALID_VECTOR STCoord = new Vector3(-1.0f, -1.0f, 0.0f), // TOUCH_INVALID_TEXCOORD UVCoord = new Vector3(-1.0f, -1.0f, 0.0f) // TOUCH_INVALID_TEXCOORD }; List <SurfaceTouchEventArgs> touchArgs = new List <SurfaceTouchEventArgs>() { surfaceArgs }; Vector3 offset = part.OffsetPosition * -1.0f; if (OnGrabObject == null) { return(false); } OnGrabObject(part.LocalId, offset, this, touchArgs); OnGrabUpdate?.Invoke(part.UUID, offset, part.ParentGroup.RootPart.GroupPosition, this, touchArgs); OnDeGrabObject?.Invoke(part.LocalId, this, touchArgs); return(true); }