diff --git a/OpenMetaverse/ObjectManager.cs b/OpenMetaverse/ObjectManager.cs index e8685792..52e1a62c 100644 --- a/OpenMetaverse/ObjectManager.cs +++ b/OpenMetaverse/ObjectManager.cs @@ -166,6 +166,7 @@ namespace OpenMetaverse #region Delegates + #region ObjectUpdate event /// The event subscribers, null of no subscribers private EventHandler m_ObjectUpdate; @@ -181,7 +182,9 @@ namespace OpenMetaverse add { lock (m_ObjectUpdateLock) { m_ObjectUpdate += value; } } remove { lock (m_ObjectUpdateLock) { m_ObjectUpdate -= value; } } } + #endregion ObjectUpdate event + #region ObjectProperties event /// The event subscribers, null of no subscribers private EventHandler m_ObjectProperties; @@ -231,7 +234,9 @@ namespace OpenMetaverse add { lock (m_ObjectPropertiesUpdatedLock) { m_ObjectPropertiesUpdated += value; } } remove { lock (m_ObjectPropertiesUpdatedLock) { m_ObjectPropertiesUpdated -= value; } } } + #endregion ObjectProperties event + #region ObjectPropertiesFamily event /// The event subscribers, null of no subscribers private EventHandler m_ObjectPropertiesFamily; @@ -256,7 +261,9 @@ namespace OpenMetaverse add { lock (m_ObjectPropertiesFamilyLock) { m_ObjectPropertiesFamily += value; } } remove { lock (m_ObjectPropertiesFamilyLock) { m_ObjectPropertiesFamily -= value; } } } + #endregion ObjectPropertiesFamily + #region AvatarUpdate event /// The event subscribers, null of no subscribers private EventHandler m_AvatarUpdate; @@ -280,7 +287,9 @@ namespace OpenMetaverse add { lock (m_AvatarUpdateLock) { m_AvatarUpdate += value; } } remove { lock (m_AvatarUpdateLock) { m_AvatarUpdate -= value; } } } + #endregion AvatarUpdate event + #region TerseObjectUpdate event /// The event subscribers, null of no subscribers private EventHandler m_TerseObjectUpdate; @@ -294,7 +303,9 @@ namespace OpenMetaverse add { lock (m_TerseObjectUpdateLock) { m_TerseObjectUpdate += value; } } remove { lock (m_TerseObjectUpdateLock) { m_TerseObjectUpdate -= value; } } } + #endregion TerseObjectUpdate event + #region ObjectDataBlockUpdate event /// The event subscribers, null of no subscribers private EventHandler m_ObjectDataBlockUpdate; @@ -318,7 +329,9 @@ namespace OpenMetaverse add { lock (m_ObjectDataBlockUpdateLock) { m_ObjectDataBlockUpdate += value; } } remove { lock (m_ObjectDataBlockUpdateLock) { m_ObjectDataBlockUpdate -= value; } } } + #endregion ObjectDataBlockUpdate event + #region KillObject event /// The event subscribers, null of no subscribers private EventHandler m_KillObject; @@ -342,7 +355,35 @@ namespace OpenMetaverse add { lock (m_KillObjectLock) { m_KillObject += value; } } remove { lock (m_KillObjectLock) { m_KillObject -= value; } } } + #endregion KillObject event + #region KillObjects event + /// The event subscribers, null of no subscribers + private EventHandler m_KillObjects; + + ///Raises the KillObjects Event + /// A KillObjectsEventArgs object containing + /// the data sent from the simulator + protected virtual void OnKillObjects(KillObjectsEventArgs e) + { + EventHandler handler = m_KillObjects; + if (handler != null) + handler(this, e); + } + + /// Thread sync lock object + private readonly object m_KillObjectsLock = new object(); + + /// Raised when the simulator informs us when a group of + /// or is no longer within view + public event EventHandler KillObjects + { + add { lock (m_KillObjectsLock) { m_KillObjects += value; } } + remove { lock (m_KillObjectsLock) { m_KillObjects -= value; } } + } + #endregion KillObjects event + + #region AvatarSitChanged event /// The event subscribers, null of no subscribers private EventHandler m_AvatarSitChanged; @@ -366,7 +407,9 @@ namespace OpenMetaverse add { lock (m_AvatarSitChangedLock) { m_AvatarSitChanged += value; } } remove { lock (m_AvatarSitChangedLock) { m_AvatarSitChanged -= value; } } } + #endregion AvatarSitChanged event + #region PayPriceReply event /// The event subscribers, null of no subscribers private EventHandler m_PayPriceReply; @@ -390,7 +433,9 @@ namespace OpenMetaverse add { lock (m_PayPriceReplyLock) { m_PayPriceReply += value; } } remove { lock (m_PayPriceReplyLock) { m_PayPriceReply -= value; } } } + #endregion PayPriceReply + #region PhysicsProperties event /// /// Callback for getting object media data via CAP /// @@ -424,6 +469,7 @@ namespace OpenMetaverse add { lock (m_PhysicsPropertiesLock) { m_PhysicsProperties += value; } } remove { lock (m_PhysicsPropertiesLock) { m_PhysicsProperties -= value; } } } + #endregion PhysicsProperties event #endregion Delegates @@ -2617,10 +2663,13 @@ namespace OpenMetaverse // Notify first, so that handler has a chance to get a // reference from the ObjectTracker to the object being killed + uint[] killed = new uint[kill.ObjectData.Length]; for (int i = 0; i < kill.ObjectData.Length; i++) { OnKillObject(new KillObjectEventArgs(simulator, kill.ObjectData[i].ID)); + killed[i] = kill.ObjectData[i].ID; } + OnKillObjects(new KillObjectsEventArgs(e.Simulator, killed)); lock (simulator.ObjectsPrimitives.Dictionary) @@ -3594,6 +3643,25 @@ namespace OpenMetaverse } } + /// Provides notification when an Avatar, Object or Attachment is DeRezzed or moves out of the avatars view for the + /// event + public class KillObjectsEventArgs : EventArgs + { + private readonly Simulator m_Simulator; + private readonly uint[] m_ObjectLocalIDs; + + /// Get the simulator the object is located + public Simulator Simulator { get { return m_Simulator; } } + /// The LocalID of the object + public uint[] ObjectLocalIDs { get { return m_ObjectLocalIDs; } } + + public KillObjectsEventArgs(Simulator simulator, uint[] objectIDs) + { + this.m_Simulator = simulator; + this.m_ObjectLocalIDs = objectIDs; + } + } + /// /// Provides updates sit position data ///