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); } } } }