diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs index 8fd8e52e15..b0fe12a85a 100644 --- a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs +++ b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectGroup2.cs @@ -19,7 +19,6 @@ namespace OpenSim.Region.Environment.Scenes protected Dictionary m_parts = new Dictionary(); protected ulong m_regionHandle; - protected Scene m_scene; public event PrimCountTaintedDelegate OnPrimCountTainted; @@ -54,8 +53,10 @@ namespace OpenSim.Region.Environment.Scenes m_scene = world; this.Pos = pos; - this.m_rootPart = new AllNewSceneObjectPart2(m_regionHandle, this, ownerID, localID, shape, pos); - this.m_parts.Add(this.m_rootPart.UUID, this.m_rootPart); + LLVector3 rootOffset = new LLVector3(0, 0, 0); + AllNewSceneObjectPart2 newPart = new AllNewSceneObjectPart2(m_regionHandle, this, ownerID, localID, shape, rootOffset); + this.m_parts.Add(newPart.UUID, newPart); + this.SetPartAsRoot(newPart); } /// @@ -63,7 +64,10 @@ namespace OpenSim.Region.Environment.Scenes /// public void FlagGroupForFullUpdate() { - + foreach (AllNewSceneObjectPart2 part in this.m_parts.Values) + { + part.SendFullUpdateToAllClients(); + } } /// @@ -71,7 +75,10 @@ namespace OpenSim.Region.Environment.Scenes /// public void FlagGroupForTerseUpdate() { - + foreach (AllNewSceneObjectPart2 part in this.m_parts.Values) + { + part.SendTerseUpdateToALLClients(); + } } /// @@ -413,5 +420,14 @@ namespace OpenSim.Region.Environment.Scenes { } + + /// + /// + /// + /// + public List RequestSceneAvatars() + { + return m_scene.RequestAvatarList(); + } } } diff --git a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs index 62f9b93356..b0303a34f6 100644 --- a/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs +++ b/OpenSim/Region/Environment/Scenes/AllNewSceneObjectPart2.cs @@ -316,16 +316,25 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region Update Scheduling + /// + /// + /// private void ClearUpdateSchedule() { m_updateFlag = 0; } + /// + /// + /// private void ScheduleFullUpdate() { m_updateFlag = 2; } + /// + /// + /// private void ScheduleTerseUpdate() { if (m_updateFlag < 1) @@ -333,6 +342,26 @@ namespace OpenSim.Region.Environment.Scenes m_updateFlag = 1; } } + + /// + /// + /// + public void SendScheduledUpdates() + { + if (m_updateFlag == 1) //some change has been made so update the clients + { + SendTerseUpdateToALLClients(); + ClearUpdateSchedule(); + } + else + { + if (m_updateFlag == 2) // is a new prim just been created/reloaded or has major changes + { + SendFullUpdateToAllClients(); + ClearUpdateSchedule(); + } + } + } #endregion #region Shape @@ -389,7 +418,7 @@ namespace OpenSim.Region.Environment.Scenes this.m_Shape.ExtraParams[i++] = (byte)((length >> 24) % 256); Array.Copy(data, 0, this.m_Shape.ExtraParams, i, data.Length); - //this.ScheduleFullUpdate(); + this.ScheduleFullUpdate(); } #endregion @@ -442,6 +471,18 @@ namespace OpenSim.Region.Environment.Scenes #endregion #region Client Update Methods + /// + /// + /// + public void SendFullUpdateToAllClients() + { + List avatars = this.m_parentGroup.RequestSceneAvatars(); + for (int i = 0; i < avatars.Count; i++) + { + SendFullUpdateToClient(avatars[i].ControllingClient); + } + } + /// /// /// @@ -457,6 +498,18 @@ namespace OpenSim.Region.Environment.Scenes OwnerID, m_text, ParentID, this.m_particleSystem); } + /// + /// + /// + public void SendTerseUpdateToALLClients() + { + List avatars = this.m_parentGroup.RequestSceneAvatars(); + for (int i = 0; i < avatars.Count; i++) + { + SendTerseUpdateToClient(avatars[i].ControllingClient); + } + } + /// /// ///