diff --git a/OpenSim/Region/Framework/Interfaces/IWorldComm.cs b/OpenSim/Region/Framework/Interfaces/IWorldComm.cs index 74526c452f..948b9dc522 100644 --- a/OpenSim/Region/Framework/Interfaces/IWorldComm.cs +++ b/OpenSim/Region/Framework/Interfaces/IWorldComm.cs @@ -49,10 +49,49 @@ namespace OpenSim.Region.Framework.Interfaces public interface IWorldComm { + /// + /// Create a listen event callback with the specified filters. + /// The parameters localID,itemID are needed to uniquely identify + /// the script during 'peek' time. Parameter hostID is needed to + /// determine the position of the script. + /// + /// localID of the script engine + /// UUID of the script engine + /// UUID of the SceneObjectPart + /// channel to listen on + /// name to filter on + /// key to filter on (user given, could be totally faked) + /// msg to filter on + /// number of the scripts handle int Listen(uint LocalID, UUID itemID, UUID hostID, int channel, string name, UUID id, string msg); + + /// + /// This method scans over the objects which registered an interest in listen callbacks. + /// For everyone it finds, it checks if it fits the given filter. If it does, then + /// enqueue the message for delivery to the objects listen event handler. + /// The enqueued ListenerInfo no longer has filter values, but the actually trigged values. + /// Objects that do an llSay have their messages delivered here and for nearby avatars, + /// the OnChatFromClient event is used. + /// + /// type of delvery (whisper,say,shout or regionwide) + /// channel to sent on + /// name of sender (object or avatar) + /// key of sender (object or avatar) + /// msg to sent void DeliverMessage(ChatTypeEnum type, int channel, string name, UUID id, string msg); + + /// + /// Are there any listen events ready to be dispatched? + /// + /// boolean indication bool HasMessages(); + + /// + /// Pop the first availlable listen event from the queue + /// + /// ListenerInfo with filter filled in IWorldCommListenerInfo GetNextMessage(); + void ListenControl(UUID itemID, int handle, int active); void ListenRemove(UUID itemID, int handle); void DeleteListener(UUID itemID); diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 139fda02e6..fe40f524ad 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -92,8 +92,7 @@ namespace OpenSim.Region.Framework.Scenes public delegate void OnShutdownDelegate(); public event OnShutdownDelegate OnShutdown; - - public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); + public delegate void ObjectDeGrabDelegate(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); public delegate void ScriptResetDelegate(uint localID, UUID itemID); @@ -103,7 +102,14 @@ namespace OpenSim.Region.Framework.Scenes public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; + /// + /// Called when an object is touched/grabbed. + /// + /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of + /// the root part. + public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); public event ObjectGrabDelegate OnObjectGrab; + public event ObjectGrabDelegate OnObjectGrabbing; public event ObjectDeGrabDelegate OnObjectDeGrab; public event ScriptResetDelegate OnScriptReset; @@ -111,55 +117,42 @@ namespace OpenSim.Region.Framework.Scenes public event OnPermissionErrorDelegate OnPermissionError; public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource); - public event NewRezScript OnRezScript; public delegate void RemoveScript(uint localID, UUID itemID); - public event RemoveScript OnRemoveScript; public delegate void StartScript(uint localID, UUID itemID); - public event StartScript OnStartScript; public delegate void StopScript(uint localID, UUID itemID); - public event StopScript OnStopScript; public delegate bool SceneGroupMoved(UUID groupID, Vector3 delta); - public event SceneGroupMoved OnSceneGroupMove; public delegate void SceneGroupGrabed(UUID groupID, Vector3 offset, UUID userID); - public event SceneGroupGrabed OnSceneGroupGrab; public delegate bool SceneGroupSpinStarted(UUID groupID); - public event SceneGroupSpinStarted OnSceneGroupSpinStart; public delegate bool SceneGroupSpun(UUID groupID, Quaternion rotation); - public event SceneGroupSpun OnSceneGroupSpin; public delegate void LandObjectAdded(ILandObject newParcel); - public event LandObjectAdded OnLandObjectAdded; public delegate void LandObjectRemoved(UUID globalID); - public event LandObjectRemoved OnLandObjectRemoved; public delegate void AvatarEnteringNewParcel(ScenePresence avatar, int localLandID, UUID regionID); - public event AvatarEnteringNewParcel OnAvatarEnteringNewParcel; public delegate void SignificantClientMovement(IClientAPI remote_client); - public event SignificantClientMovement OnSignificantClientMovement; public delegate void IncomingInstantMessage(GridInstantMessage message); - public event IncomingInstantMessage OnIncomingInstantMessage; public event IncomingInstantMessage OnUnhandledInstantMessage; diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 768ceb5f3f..9cb13989e3 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -301,6 +301,9 @@ namespace OpenSim.Region.Framework.Scenes set { m_rootPart.GroupID = value; } } + /// + /// The parts of this scene object group. You must lock this property before using it. + /// public Dictionary Children { get { return m_parts; } @@ -2239,7 +2242,7 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Get a child part with a given UUID + /// Get a part with a given UUID /// /// /// null if a child part with the primID was not found @@ -2254,7 +2257,7 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Get a child part with a given local ID + /// Get a part with a given local ID /// /// /// null if a child part with the local ID was not found diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index a99e6c7bc6..fe1e218c73 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -1930,7 +1930,7 @@ namespace OpenSim.Region.Framework.Scenes foreach (uint localId in startedColliders) { if (localId == 0) - return; + continue; // always running this check because if the user deletes the object it would return a null reference. if (m_parentGroup == null) return; @@ -2066,7 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes { // always running this check because if the user deletes the object it would return a null reference. if (localId == 0) - return; + continue; if (m_parentGroup == null) return; @@ -2198,7 +2198,7 @@ namespace OpenSim.Region.Framework.Scenes foreach (uint localId in endedColliders) { if (localId == 0) - return; + continue; // always running this check because if the user deletes the object it would return a null reference. if (m_parentGroup == null) @@ -3205,6 +3205,11 @@ namespace OpenSim.Region.Framework.Scenes } } + /// + /// Set the events that this part will pass on to listeners. + /// + /// + /// public void SetScriptEvents(UUID scriptid, int events) { // scriptEvents oldparts;