aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneGraph.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneGraph.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs67
1 files changed, 58 insertions, 9 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 3d6057b..c0236f4 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -352,25 +352,26 @@ namespace OpenSim.Region.Framework.Scenes
352 /// This method does not send updates to the client - callers need to handle this themselves. 352 /// This method does not send updates to the client - callers need to handle this themselves.
353 /// <param name="sceneObject"></param> 353 /// <param name="sceneObject"></param>
354 /// <param name="attachToBackup"></param> 354 /// <param name="attachToBackup"></param>
355 /// <param name="pos">Position of the object</param> 355 /// <param name="pos">Position of the object. If null then the position stored in the object is used.</param>
356 /// <param name="rot">Rotation of the object</param> 356 /// <param name="rot">Rotation of the object. If null then the rotation stored in the object is used.</param>
357 /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param> 357 /// <param name="vel">Velocity of the object. This parameter only has an effect if the object is physical</param>
358 /// <returns></returns> 358 /// <returns></returns>
359 public bool AddNewSceneObject( 359 public bool AddNewSceneObject(
360 SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel) 360 SceneObjectGroup sceneObject, bool attachToBackup, Vector3? pos, Quaternion? rot, Vector3 vel)
361 { 361 {
362 AddNewSceneObject(sceneObject, true, false); 362 AddNewSceneObject(sceneObject, true, false);
363 363
364 // we set it's position in world. 364 if (pos != null)
365 sceneObject.AbsolutePosition = pos; 365 sceneObject.AbsolutePosition = (Vector3)pos;
366 366
367 if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) 367 if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim)
368 { 368 {
369 sceneObject.ClearPartAttachmentData(); 369 sceneObject.ClearPartAttachmentData();
370 } 370 }
371 371
372 sceneObject.UpdateGroupRotationR(rot); 372 if (rot != null)
373 373 sceneObject.UpdateGroupRotationR((Quaternion)rot);
374
374 //group.ApplyPhysics(m_physicalPrim); 375 //group.ApplyPhysics(m_physicalPrim);
375 if (sceneObject.RootPart.PhysActor != null && sceneObject.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero) 376 if (sceneObject.RootPart.PhysActor != null && sceneObject.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero)
376 { 377 {
@@ -385,6 +386,9 @@ namespace OpenSim.Region.Framework.Scenes
385 /// Add an object to the scene. This will both update the scene, and send information about the 386 /// Add an object to the scene. This will both update the scene, and send information about the
386 /// new object to all clients interested in the scene. 387 /// new object to all clients interested in the scene.
387 /// </summary> 388 /// </summary>
389 /// <remarks>
390 /// The object's stored position, rotation and velocity are used.
391 /// </remarks>
388 /// <param name="sceneObject"></param> 392 /// <param name="sceneObject"></param>
389 /// <param name="attachToBackup"> 393 /// <param name="attachToBackup">
390 /// If true, the object is made persistent into the scene. 394 /// If true, the object is made persistent into the scene.
@@ -1048,6 +1052,51 @@ namespace OpenSim.Region.Framework.Scenes
1048 } 1052 }
1049 1053
1050 /// <summary> 1054 /// <summary>
1055 /// Get a group in the scene
1056 /// </summary>
1057 /// <param name="fullID">UUID of the group</param>
1058 /// <returns>null if no such group was found</returns>
1059 protected internal SceneObjectGroup GetSceneObjectGroup(UUID fullID)
1060 {
1061 lock (SceneObjectGroupsByFullID)
1062 {
1063 if (SceneObjectGroupsByFullID.ContainsKey(fullID))
1064 return SceneObjectGroupsByFullID[fullID];
1065 }
1066
1067 return null;
1068 }
1069
1070 /// <summary>
1071 /// Get a group by name from the scene (will return the first
1072 /// found, if there are more than one prim with the same name)
1073 /// </summary>
1074 /// <param name="name"></param>
1075 /// <returns>null if the part was not found</returns>
1076 protected internal SceneObjectGroup GetSceneObjectGroup(string name)
1077 {
1078 SceneObjectGroup so = null;
1079
1080 Entities.Find(
1081 delegate(EntityBase entity)
1082 {
1083 if (entity is SceneObjectGroup)
1084 {
1085 if (entity.Name == name)
1086 {
1087 so = (SceneObjectGroup)entity;
1088 return true;
1089 }
1090 }
1091
1092 return false;
1093 }
1094 );
1095
1096 return so;
1097 }
1098
1099 /// <summary>
1051 /// Get a part contained in this scene. 1100 /// Get a part contained in this scene.
1052 /// </summary> 1101 /// </summary>
1053 /// <param name="localID"></param> 1102 /// <param name="localID"></param>
@@ -1061,7 +1110,7 @@ namespace OpenSim.Region.Framework.Scenes
1061 } 1110 }
1062 1111
1063 /// <summary> 1112 /// <summary>
1064 /// Get a named prim contained in this scene (will return the first 1113 /// Get a prim by name from the scene (will return the first
1065 /// found, if there are more than one prim with the same name) 1114 /// found, if there are more than one prim with the same name)
1066 /// </summary> 1115 /// </summary>
1067 /// <param name="name"></param> 1116 /// <param name="name"></param>