aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Scene.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-03-03 22:14:06 +0000
committerJustin Clark-Casey (justincc)2010-03-03 22:14:06 +0000
commitedb176447ba9cd6d29bd45d9b3714aa0dab9cbf9 (patch)
tree5cd33ef765c28d2265b4e119f78ca5a1104ca590 /OpenSim/Region/Framework/Scenes/Scene.cs
parentActually make EventManager.OnAttach() fire when an object is attached. Previ... (diff)
downloadopensim-SC_OLD-edb176447ba9cd6d29bd45d9b3714aa0dab9cbf9.zip
opensim-SC_OLD-edb176447ba9cd6d29bd45d9b3714aa0dab9cbf9.tar.gz
opensim-SC_OLD-edb176447ba9cd6d29bd45d9b3714aa0dab9cbf9.tar.bz2
opensim-SC_OLD-edb176447ba9cd6d29bd45d9b3714aa0dab9cbf9.tar.xz
Fix bug where approximately half the time, attachments would rez only their root prim until right clicked (or otherwise updated).
The root cause of this problem was that multiple ObjectUpdates were being sent on attachment which differed enough to confuse the client. Sometimes these would eliminate each other and sometimes not, depending on whether the scheduler looked at the queued updates. The solution here is to only schedule the ObjectUpdate once the attachment code has done all it needs to do.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs40
1 files changed, 32 insertions, 8 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 5e5a52e..a880fe7 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1906,14 +1906,22 @@ namespace OpenSim.Region.Framework.Scenes
1906 //m_log.DebugFormat( 1906 //m_log.DebugFormat(
1907 // "[SCENE]: Scene.AddNewPrim() pcode {0} called for {1} in {2}", shape.PCode, ownerID, RegionInfo.RegionName); 1907 // "[SCENE]: Scene.AddNewPrim() pcode {0} called for {1} in {2}", shape.PCode, ownerID, RegionInfo.RegionName);
1908 1908
1909 SceneObjectGroup sceneObject = null;
1910
1909 // If an entity creator has been registered for this prim type then use that 1911 // If an entity creator has been registered for this prim type then use that
1910 if (m_entityCreators.ContainsKey((PCode)shape.PCode)) 1912 if (m_entityCreators.ContainsKey((PCode)shape.PCode))
1911 return m_entityCreators[(PCode)shape.PCode].CreateEntity(ownerID, groupID, pos, rot, shape); 1913 {
1914 sceneObject = m_entityCreators[(PCode)shape.PCode].CreateEntity(ownerID, groupID, pos, rot, shape);
1915 }
1916 else
1917 {
1918 // Otherwise, use this default creation code;
1919 sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
1920 AddNewSceneObject(sceneObject, true);
1921 sceneObject.SetGroup(groupID, null);
1922 }
1912 1923
1913 // Otherwise, use this default creation code; 1924 sceneObject.ScheduleGroupForFullUpdate();
1914 SceneObjectGroup sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
1915 AddNewSceneObject(sceneObject, true);
1916 sceneObject.SetGroup(groupID, null);
1917 1925
1918 return sceneObject; 1926 return sceneObject;
1919 } 1927 }
@@ -1941,7 +1949,7 @@ namespace OpenSim.Region.Framework.Scenes
1941 } 1949 }
1942 1950
1943 /// <summary> 1951 /// <summary>
1944 /// Add a newly created object to the scene 1952 /// Add a newly created object to the scene. Updates are also sent to viewers.
1945 /// </summary> 1953 /// </summary>
1946 /// <param name="sceneObject"></param> 1954 /// <param name="sceneObject"></param>
1947 /// <param name="attachToBackup"> 1955 /// <param name="attachToBackup">
@@ -1950,8 +1958,25 @@ namespace OpenSim.Region.Framework.Scenes
1950 /// </param> 1958 /// </param>
1951 public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup) 1959 public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup)
1952 { 1960 {
1953 return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup); 1961 return AddNewSceneObject(sceneObject, attachToBackup, true);
1954 } 1962 }
1963
1964 /// <summary>
1965 /// Add a newly created object to the scene
1966 /// </summary>
1967 /// <param name="sceneObject"></param>
1968 /// <param name="attachToBackup">
1969 /// If true, the object is made persistent into the scene.
1970 /// If false, the object will not persist over server restarts
1971 /// </param>
1972 /// <param name="sendClientUpdates">
1973 /// If true, updates for the new scene object are sent to all viewers in range.
1974 /// If false, it is left to the caller to schedule the update
1975 /// </param>
1976 public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
1977 {
1978 return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates);
1979 }
1955 1980
1956 /// <summary> 1981 /// <summary>
1957 /// Delete every object from the scene 1982 /// Delete every object from the scene
@@ -3143,7 +3168,6 @@ namespace OpenSim.Region.Framework.Scenes
3143 m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid; 3168 m_sceneGridService.OnLogOffUser += HandleLogOffUserFromGrid;
3144 m_sceneGridService.KiPrimitive += SendKillObject; 3169 m_sceneGridService.KiPrimitive += SendKillObject;
3145 m_sceneGridService.OnGetLandData += GetLandData; 3170 m_sceneGridService.OnGetLandData += GetLandData;
3146
3147 } 3171 }
3148 3172
3149 /// <summary> 3173 /// <summary>