Example #1
0
        protected void GrabUpdate(UUID objectID, Vector3 offset, Vector3 pos, IClientAPI remoteClient, List <SurfaceTouchEventArgs> surfaceArgs)
        {
            SceneObjectGroup group = m_sceneGraph.GetGroupByPrim(objectID);

            if (group != null)
            {
                SceneObjectPart part = group.GetChildPart(objectID);

                if (part != null)
                {
                    SurfaceTouchEventArgs surfaceArg = null;
                    if (surfaceArgs != null && surfaceArgs.Count > 0)
                    {
                        surfaceArg = surfaceArgs[0];
                    }

                    // If the touched prim handles touches, deliver it
                    // If not, deliver to root prim,if the root prim doesnt
                    // handle it, deliver a grab to the scene graph
                    if ((part.ScriptEvents & ScriptEvents.touch) != 0)
                    {
                        EventManager.TriggerObjectGrabUpdate(part.LocalId, 0, part.OffsetPosition, remoteClient, surfaceArg);
                    }
                    else if ((group.RootPart.ScriptEvents & ScriptEvents.touch) != 0)
                    {
                        EventManager.TriggerObjectGrabUpdate(group.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg);
                    }
                    else
                    {
                        //no one can handle it, send a grab
                        m_sceneGraph.MoveObject(objectID, offset, pos, remoteClient, surfaceArgs);
                    }
                }
            }
        }