Esempio n. 1
0
 IEnumerator OnDrag()
 {
     while (isDragging)
     {
         transform.position = dragAnchor.TransformPoint(diffPoint);
         transform.rotation = dragAnchor.rotation * diffQ;
         OnGrabUpdate?.Invoke(dragAnchor);
         yield return(null);
     }
 }
Esempio n. 2
0
        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);
        }