aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs26
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs5
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs4
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs12
4 files changed, 18 insertions, 29 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs
index 69f1902..5591ddc 100644
--- a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs
+++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs
@@ -195,33 +195,9 @@ namespace OpenSim.Region.Environment.Scenes
195 { 195 {
196 SceneObjectGroup obj = new SceneObjectGroup(xmlData); 196 SceneObjectGroup obj = new SceneObjectGroup(xmlData);
197 197
198 LLVector3 receivedVelocity = obj.RootPart.Velocity;
199 //System.Console.WriteLine(obj.RootPart.Velocity.ToString());
200 scene.AddSceneObjectFromStorage(obj); 198 scene.AddSceneObjectFromStorage(obj);
201 199
202 SceneObjectPart rootPart = obj.GetChildPart(obj.UUID); 200 obj.ApplyPhysics(scene.m_physicalPrim);
203 bool UsePhysics = (((rootPart.GetEffectiveObjectFlags() & (uint) LLObject.ObjectFlags.Physics) > 0) &&
204 scene.m_physicalPrim);
205 if ((rootPart.GetEffectiveObjectFlags() & (uint) LLObject.ObjectFlags.Phantom) == 0)
206 {
207 rootPart.PhysActor = scene.PhysicsScene.AddPrimShape(
208 rootPart.Name,
209 rootPart.Shape,
210 new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y,
211 rootPart.AbsolutePosition.Z),
212 new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
213 new Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
214 rootPart.RotationOffset.Y, rootPart.RotationOffset.Z), UsePhysics);
215
216 // to quote from SceneObjectPart: Basic
217 // Physics returns null.. joy joy joy.
218 if (rootPart.PhysActor != null)
219 {
220 rootPart.PhysActor.LocalID = rootPart.LocalId;
221 rootPart.DoPhysicsPropertyUpdate(UsePhysics, true);
222 }
223 rootPart.Velocity = receivedVelocity;
224 }
225 201
226 obj.ScheduleGroupForFullUpdate(); 202 obj.ScheduleGroupForFullUpdate();
227 } 203 }
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index e274139..b39e08d 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -79,7 +79,12 @@ namespace OpenSim.Region.Environment.Scenes
79 private int m_timePhase = 24; 79 private int m_timePhase = 24;
80 80
81 private readonly Mutex updateLock; 81 private readonly Mutex updateLock;
82
83 /// <summary>
84 /// Are we applying physics to any of the prims in this scene?
85 /// </summary>
82 public bool m_physicalPrim; 86 public bool m_physicalPrim;
87
83 public bool m_seeIntoRegionFromNeighbor; 88 public bool m_seeIntoRegionFromNeighbor;
84 public int MaxUndoCount = 5; 89 public int MaxUndoCount = 5;
85 private int m_RestartTimerCounter; 90 private int m_RestartTimerCounter;
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index f750200..877f196 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1052,6 +1052,10 @@ namespace OpenSim.Region.Environment.Scenes
1052 m_rootPart.ScheduleFullUpdate(); 1052 m_rootPart.ScheduleFullUpdate();
1053 } 1053 }
1054 1054
1055 /// <summary>
1056 /// Apply physics to this group
1057 /// </summary>
1058 /// <param name="m_physicalPrim"></param>
1055 public void ApplyPhysics(bool m_physicalPrim) 1059 public void ApplyPhysics(bool m_physicalPrim)
1056 { 1060 {
1057 lock (m_parts) 1061 lock (m_parts)
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 42df746..85351f4 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -494,8 +494,9 @@ namespace OpenSim.Region.Environment.Scenes
494 494
495 return m_velocity; 495 return m_velocity;
496 } 496 }
497 set { 497
498 498 set
499 {
499 m_velocity = value; 500 m_velocity = value;
500 if (PhysActor != null) 501 if (PhysActor != null)
501 { 502 {
@@ -505,7 +506,6 @@ namespace OpenSim.Region.Environment.Scenes
505 m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); 506 m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
506 } 507 }
507 } 508 }
508
509 } 509 }
510 } 510 }
511 511
@@ -913,9 +913,13 @@ namespace OpenSim.Region.Environment.Scenes
913 return newobject; 913 return newobject;
914 } 914 }
915 915
916 /// <summary>
917 /// Apply physics to this part.
918 /// </summary>
919 /// <param name="rootObjectFlags"></param>
920 /// <param name="m_physicalPrim"></param>
916 public void ApplyPhysics(uint rootObjectFlags, bool m_physicalPrim) 921 public void ApplyPhysics(uint rootObjectFlags, bool m_physicalPrim)
917 { 922 {
918
919 bool isPhysical = (((rootObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0) && m_physicalPrim); 923 bool isPhysical = (((rootObjectFlags & (uint) LLObject.ObjectFlags.Physics) != 0) && m_physicalPrim);
920 bool isPhantom = ((rootObjectFlags & (uint) LLObject.ObjectFlags.Phantom) != 0); 924 bool isPhantom = ((rootObjectFlags & (uint) LLObject.ObjectFlags.Phantom) != 0);
921 925