aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorKitto Flora2009-12-24 19:19:44 -0500
committerKitto Flora2009-12-24 19:19:44 -0500
commite7439efc74a1cc0daedc51eb25ae66cd03db70b5 (patch)
tree47dcf22626bca7662575e3ab6c6680d41b812172 /OpenSim/Region
parentMerge branch 'master' into careminster (diff)
downloadopensim-SC-e7439efc74a1cc0daedc51eb25ae66cd03db70b5.zip
opensim-SC-e7439efc74a1cc0daedc51eb25ae66cd03db70b5.tar.gz
opensim-SC-e7439efc74a1cc0daedc51eb25ae66cd03db70b5.tar.bz2
opensim-SC-e7439efc74a1cc0daedc51eb25ae66cd03db70b5.tar.xz
Recover out-of-region objects during db load.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs24
-rw-r--r--OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs4
2 files changed, 27 insertions, 1 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index b0fb8b3..998d598 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -222,6 +222,30 @@ namespace OpenSim.Region.Framework.Scenes
222 protected internal bool AddRestoredSceneObject( 222 protected internal bool AddRestoredSceneObject(
223 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted) 223 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
224 { 224 {
225 // KF: Check for out-of-region, move inside and make static.
226 Vector3 npos = new Vector3(sceneObject.RootPart.GroupPosition.X,
227 sceneObject.RootPart.GroupPosition.Y,
228 sceneObject.RootPart.GroupPosition.Z);
229 if (npos.X < 0.0 || npos.Y < 0.0 || npos.Z < 0.0 ||
230 npos.X > Constants.RegionSize ||
231 npos.Y > Constants.RegionSize)
232 {
233 if (npos.X < 0.0) npos.X = 1.0f;
234 if (npos.Y < 0.0) npos.Y = 1.0f;
235 if (npos.Z < 0.0) npos.Z = 0.0f;
236 if (npos.X > Constants.RegionSize) npos.X = Constants.RegionSize - 1.0f;
237 if (npos.Y > Constants.RegionSize) npos.Y = Constants.RegionSize - 1.0f;
238
239 foreach (SceneObjectPart part in sceneObject.Children.Values)
240 {
241 part.GroupPosition = npos;
242 }
243 sceneObject.RootPart.Velocity = Vector3.Zero;
244 sceneObject.RootPart.AngularVelocity = Vector3.Zero;
245 sceneObject.RootPart.Acceleration = Vector3.Zero;
246 sceneObject.RootPart.Velocity = Vector3.Zero;
247 }
248
225 if (!alreadyPersisted) 249 if (!alreadyPersisted)
226 { 250 {
227 sceneObject.ForceInventoryPersistence(); 251 sceneObject.ForceInventoryPersistence();
diff --git a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
index 983431d..0179240 100644
--- a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
@@ -215,6 +215,7 @@ namespace OpenSim.Region.Physics.OdePlugin
215 parent_scene.GetTerrainHeightAtXY(((float)Constants.RegionSize * 0.5f), ((float)Constants.RegionSize * 0.5f)) + 0.5f); 215 parent_scene.GetTerrainHeightAtXY(((float)Constants.RegionSize * 0.5f), ((float)Constants.RegionSize * 0.5f)) + 0.5f);
216 m_log.Warn("[PHYSICS]: Got nonFinite Object create Position"); 216 m_log.Warn("[PHYSICS]: Got nonFinite Object create Position");
217 } 217 }
218
218 _position = pos; 219 _position = pos;
219 m_taintposition = pos; 220 m_taintposition = pos;
220 PID_D = parent_scene.bodyPIDD; 221 PID_D = parent_scene.bodyPIDD;
@@ -254,7 +255,8 @@ namespace OpenSim.Region.Physics.OdePlugin
254 _parent_scene = parent_scene; 255 _parent_scene = parent_scene;
255 m_targetSpace = (IntPtr)0; 256 m_targetSpace = (IntPtr)0;
256 257
257 if (pos.Z < 0) 258// if (pos.Z < 0)
259 if (pos.Z < parent_scene.GetTerrainHeightAtXY(pos.X, pos.Y))
258 m_isphysical = false; 260 m_isphysical = false;
259 else 261 else
260 { 262 {