aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs90
1 files changed, 40 insertions, 50 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index dbe0e57..92ce411 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -271,28 +271,40 @@ namespace OpenSim.Region.Framework.Scenes
271 { 271 {
272 if (!m_parentScene.CombineRegions) 272 if (!m_parentScene.CombineRegions)
273 { 273 {
274 // temporary checks to remove after varsize suport
275 float regionSizeX = m_parentScene.RegionInfo.RegionSizeX;
276 if (regionSizeX == 0)
277 regionSizeX = Constants.RegionSize;
278 float regionSizeY = m_parentScene.RegionInfo.RegionSizeY;
279 if (regionSizeY == 0)
280 regionSizeY = Constants.RegionSize;
281
274 // KF: Check for out-of-region, move inside and make static. 282 // KF: Check for out-of-region, move inside and make static.
275 Vector3 npos = new Vector3(sceneObject.RootPart.GroupPosition.X, 283 Vector3 npos = new Vector3(sceneObject.RootPart.GroupPosition.X,
276 sceneObject.RootPart.GroupPosition.Y, 284 sceneObject.RootPart.GroupPosition.Y,
277 sceneObject.RootPart.GroupPosition.Z); 285 sceneObject.RootPart.GroupPosition.Z);
278 if (!(((sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) && (sceneObject.RootPart.Shape.State != 0))) && (npos.X < 0.0 || npos.Y < 0.0 || npos.Z < 0.0 || 286 if (!(((sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) && (sceneObject.RootPart.Shape.State != 0))) && (npos.X < 0.0 || npos.Y < 0.0 || npos.Z < 0.0 ||
279 npos.X > Constants.RegionSize || 287 npos.X > regionSizeX ||
280 npos.Y > Constants.RegionSize)) 288 npos.Y > regionSizeY))
281 { 289 {
282 if (npos.X < 0.0) npos.X = 1.0f; 290 if (npos.X < 0.0) npos.X = 1.0f;
283 if (npos.Y < 0.0) npos.Y = 1.0f; 291 if (npos.Y < 0.0) npos.Y = 1.0f;
284 if (npos.Z < 0.0) npos.Z = 0.0f; 292 if (npos.Z < 0.0) npos.Z = 0.0f;
285 if (npos.X > Constants.RegionSize) npos.X = Constants.RegionSize - 1.0f; 293 if (npos.X > regionSizeX) npos.X = regionSizeX - 1.0f;
286 if (npos.Y > Constants.RegionSize) npos.Y = Constants.RegionSize - 1.0f; 294 if (npos.Y > regionSizeY) npos.Y = regionSizeY - 1.0f;
287 295
296 SceneObjectPart rootpart = sceneObject.RootPart;
297 rootpart.GroupPosition = npos;
298
288 foreach (SceneObjectPart part in sceneObject.Parts) 299 foreach (SceneObjectPart part in sceneObject.Parts)
289 { 300 {
301 if (part == rootpart)
302 continue;
290 part.GroupPosition = npos; 303 part.GroupPosition = npos;
291 } 304 }
292 sceneObject.RootPart.Velocity = Vector3.Zero; 305 rootpart.Velocity = Vector3.Zero;
293 sceneObject.RootPart.AngularVelocity = Vector3.Zero; 306 rootpart.AngularVelocity = Vector3.Zero;
294 sceneObject.RootPart.Acceleration = Vector3.Zero; 307 rootpart.Acceleration = Vector3.Zero;
295 sceneObject.RootPart.Velocity = Vector3.Zero;
296 } 308 }
297 } 309 }
298 310
@@ -321,7 +333,6 @@ namespace OpenSim.Region.Framework.Scenes
321 /// </returns> 333 /// </returns>
322 protected internal bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates) 334 protected internal bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
323 { 335 {
324
325 336
326 bool ret = AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); 337 bool ret = AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
327 338
@@ -428,9 +439,9 @@ namespace OpenSim.Region.Framework.Scenes
428 { 439 {
429 Vector3 scale = part.Shape.Scale; 440 Vector3 scale = part.Shape.Scale;
430 441
431 scale.X = Math.Max(m_parentScene.m_minNonphys, Math.Min(m_parentScene.m_maxNonphys, scale.X)); 442 scale.X = Util.Clamp(scale.X, m_parentScene.m_minNonphys, m_parentScene.m_maxNonphys);
432 scale.Y = Math.Max(m_parentScene.m_minNonphys, Math.Min(m_parentScene.m_maxNonphys, scale.Y)); 443 scale.Y = Util.Clamp(scale.Y, m_parentScene.m_minNonphys, m_parentScene.m_maxNonphys);
433 scale.Z = Math.Max(m_parentScene.m_minNonphys, Math.Min(m_parentScene.m_maxNonphys, scale.Z)); 444 scale.Z = Util.Clamp(scale.Z, m_parentScene.m_minNonphys, m_parentScene.m_maxNonphys);
434 445
435 part.Shape.Scale = scale; 446 part.Shape.Scale = scale;
436 } 447 }
@@ -439,26 +450,17 @@ namespace OpenSim.Region.Framework.Scenes
439 450
440 sceneObject.AttachToScene(m_parentScene); 451 sceneObject.AttachToScene(m_parentScene);
441 452
442
443 Entities.Add(sceneObject); 453 Entities.Add(sceneObject);
444 454
445
446 lock (SceneObjectGroupsByFullID) 455 lock (SceneObjectGroupsByFullID)
447 SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; 456 SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject;
448 457
449 lock (SceneObjectGroupsByFullPartID) 458 foreach (SceneObjectPart part in parts)
450 { 459 {
451 foreach (SceneObjectPart part in parts) 460 lock (SceneObjectGroupsByFullPartID)
452 SceneObjectGroupsByFullPartID[part.UUID] = sceneObject; 461 SceneObjectGroupsByFullPartID[part.UUID] = sceneObject;
453 }
454 462
455 lock (SceneObjectGroupsByLocalPartID) 463 lock (SceneObjectGroupsByLocalPartID)
456 {
457// m_log.DebugFormat(
458// "[SCENE GRAPH]: Adding scene object {0} {1} {2} to SceneObjectGroupsByLocalPartID in {3}",
459// sceneObject.Name, sceneObject.UUID, sceneObject.LocalId, m_parentScene.RegionInfo.RegionName);
460
461 foreach (SceneObjectPart part in parts)
462 SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject; 464 SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject;
463 } 465 }
464 466
@@ -475,14 +477,10 @@ namespace OpenSim.Region.Framework.Scenes
475 { 477 {
476 // no tests, caller has responsability... 478 // no tests, caller has responsability...
477 lock (SceneObjectGroupsByFullPartID) 479 lock (SceneObjectGroupsByFullPartID)
478 {
479 SceneObjectGroupsByFullPartID[part.UUID] = grp; 480 SceneObjectGroupsByFullPartID[part.UUID] = grp;
480 }
481 481
482 lock (SceneObjectGroupsByLocalPartID) 482 lock (SceneObjectGroupsByLocalPartID)
483 {
484 SceneObjectGroupsByLocalPartID[part.LocalId] = grp; 483 SceneObjectGroupsByLocalPartID[part.LocalId] = grp;
485 }
486 } 484 }
487 485
488 /// <summary> 486 /// <summary>
@@ -511,25 +509,23 @@ namespace OpenSim.Region.Framework.Scenes
511 if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics) 509 if ((grp.RootPart.Flags & PrimFlags.Physics) == PrimFlags.Physics)
512 RemovePhysicalPrim(grp.PrimCount); 510 RemovePhysicalPrim(grp.PrimCount);
513 } 511 }
514 512
513 bool ret = Entities.Remove(uuid);
514
515 lock (SceneObjectGroupsByFullID) 515 lock (SceneObjectGroupsByFullID)
516 SceneObjectGroupsByFullID.Remove(grp.UUID); 516 SceneObjectGroupsByFullID.Remove(grp.UUID);
517 517
518 lock (SceneObjectGroupsByFullPartID) 518 SceneObjectPart[] parts = grp.Parts;
519 for (int i = 0; i < parts.Length; i++)
519 { 520 {
520 SceneObjectPart[] parts = grp.Parts; 521 lock (SceneObjectGroupsByFullPartID)
521 for (int i = 0; i < parts.Length; i++)
522 SceneObjectGroupsByFullPartID.Remove(parts[i].UUID); 522 SceneObjectGroupsByFullPartID.Remove(parts[i].UUID);
523 }
524 523
525 lock (SceneObjectGroupsByLocalPartID) 524 lock (SceneObjectGroupsByLocalPartID)
526 {
527 SceneObjectPart[] parts = grp.Parts;
528 for (int i = 0; i < parts.Length; i++)
529 SceneObjectGroupsByLocalPartID.Remove(parts[i].LocalId); 525 SceneObjectGroupsByLocalPartID.Remove(parts[i].LocalId);
530 } 526 }
531 527
532 return Entities.Remove(uuid); 528 return ret;
533 } 529 }
534 530
535 /// <summary> 531 /// <summary>
@@ -2133,21 +2129,15 @@ namespace OpenSim.Region.Framework.Scenes
2133 lock (SceneObjectGroupsByFullID) 2129 lock (SceneObjectGroupsByFullID)
2134 SceneObjectGroupsByFullID[copy.UUID] = copy; 2130 SceneObjectGroupsByFullID[copy.UUID] = copy;
2135 2131
2136 SceneObjectPart[] children = copy.Parts; 2132 SceneObjectPart[] parts = copy.Parts;
2137 2133 foreach (SceneObjectPart part in parts)
2138 lock (SceneObjectGroupsByFullPartID)
2139 { 2134 {
2140 SceneObjectGroupsByFullPartID[copy.UUID] = copy; 2135 lock (SceneObjectGroupsByFullPartID)
2141 foreach (SceneObjectPart part in children)
2142 SceneObjectGroupsByFullPartID[part.UUID] = copy; 2136 SceneObjectGroupsByFullPartID[part.UUID] = copy;
2143 } 2137 lock (SceneObjectGroupsByLocalPartID)
2144
2145 lock (SceneObjectGroupsByLocalPartID)
2146 {
2147 SceneObjectGroupsByLocalPartID[copy.LocalId] = copy;
2148 foreach (SceneObjectPart part in children)
2149 SceneObjectGroupsByLocalPartID[part.LocalId] = copy; 2138 SceneObjectGroupsByLocalPartID[part.LocalId] = copy;
2150 } 2139 }
2140
2151 // PROBABLE END OF FIXME 2141 // PROBABLE END OF FIXME
2152 2142
2153 // Since we copy from a source group that is in selected 2143 // Since we copy from a source group that is in selected