aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs47
1 files changed, 41 insertions, 6 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 46c4d7b..2a3d735 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1281,7 +1281,8 @@ namespace OpenSim.Region.Framework.Scenes
1281 1281
1282 m_rootPart.SetParentLocalId(0); 1282 m_rootPart.SetParentLocalId(0);
1283 AttachmentPoint = (byte)0; 1283 AttachmentPoint = (byte)0;
1284 m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive); 1284 // must check if buildind should be true or false here
1285 m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive,false);
1285 HasGroupChanged = true; 1286 HasGroupChanged = true;
1286 RootPart.Rezzed = DateTime.Now; 1287 RootPart.Rezzed = DateTime.Now;
1287 RootPart.RemFlag(PrimFlags.TemporaryOnRez); 1288 RootPart.RemFlag(PrimFlags.TemporaryOnRez);
@@ -1581,21 +1582,33 @@ namespace OpenSim.Region.Framework.Scenes
1581 public void ApplyPhysics() 1582 public void ApplyPhysics()
1582 { 1583 {
1583 // Apply physics to the root prim 1584 // Apply physics to the root prim
1584 m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive); 1585 // m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive);
1585 1586
1586 // Apply physics to child prims 1587 // Apply physics to child prims
1587 SceneObjectPart[] parts = m_parts.GetArray(); 1588 SceneObjectPart[] parts = m_parts.GetArray();
1588 if (parts.Length > 1) 1589 if (parts.Length > 1)
1589 { 1590 {
1591 ResetChildPrimPhysicsPositions();
1592
1593 // Apply physics to the root prim
1594 m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive, true);
1590 for (int i = 0; i < parts.Length; i++) 1595 for (int i = 0; i < parts.Length; i++)
1591 { 1596 {
1592 SceneObjectPart part = parts[i]; 1597 SceneObjectPart part = parts[i];
1593 if (part.LocalId != m_rootPart.LocalId) 1598 if (part.LocalId != m_rootPart.LocalId)
1594 part.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), part.VolumeDetectActive); 1599// part.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), part.VolumeDetectActive);
1595 } 1600 part.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), part.VolumeDetectActive, true);
1596 1601
1602 }
1597 // Hack to get the physics scene geometries in the right spot 1603 // Hack to get the physics scene geometries in the right spot
1598 ResetChildPrimPhysicsPositions(); 1604// ResetChildPrimPhysicsPositions();
1605 if (m_rootPart.PhysActor != null)
1606 m_rootPart.PhysActor.Building = false;
1607 }
1608 else
1609 {
1610 // Apply physics to the root prim
1611 m_rootPart.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_rootPart.VolumeDetectActive, false);
1599 } 1612 }
1600 } 1613 }
1601 1614
@@ -1829,13 +1842,16 @@ namespace OpenSim.Region.Framework.Scenes
1829 pbs, 1842 pbs,
1830 newPart.AbsolutePosition, 1843 newPart.AbsolutePosition,
1831 newPart.Scale, 1844 newPart.Scale,
1832 newPart.RotationOffset, 1845 //newPart.RotationOffset,
1846 newPart.GetWorldRotation(),
1833 part.PhysActor.IsPhysical, 1847 part.PhysActor.IsPhysical,
1834 newPart.LocalId); 1848 newPart.LocalId);
1835 1849
1836 newPart.DoPhysicsPropertyUpdate(part.PhysActor.IsPhysical, true); 1850 newPart.DoPhysicsPropertyUpdate(part.PhysActor.IsPhysical, true);
1837 } 1851 }
1838 } 1852 }
1853 if (dupe.m_rootPart.PhysActor != null && userExposed)
1854 dupe.m_rootPart.PhysActor.Building = false; // tell physics to finish building
1839 1855
1840 if (userExposed) 1856 if (userExposed)
1841 { 1857 {
@@ -2849,12 +2865,31 @@ namespace OpenSim.Region.Framework.Scenes
2849 } 2865 }
2850 } 2866 }
2851 2867
2868/*
2852 RootPart.UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect); 2869 RootPart.UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect);
2853 for (int i = 0; i < parts.Length; i++) 2870 for (int i = 0; i < parts.Length; i++)
2854 { 2871 {
2855 if (parts[i] != RootPart) 2872 if (parts[i] != RootPart)
2856 parts[i].UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect); 2873 parts[i].UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect);
2857 } 2874 }
2875*/
2876 if (parts.Length > 1)
2877 {
2878 m_rootPart.UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect, true);
2879
2880 for (int i = 0; i < parts.Length; i++)
2881 {
2882
2883 if (parts[i].UUID != m_rootPart.UUID)
2884 parts[i].UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect, true);
2885 }
2886
2887 if (m_rootPart.PhysActor != null)
2888 m_rootPart.PhysActor.Building = false;
2889 }
2890 else
2891 m_rootPart.UpdatePrimFlags(UsePhysics, SetTemporary, SetPhantom, SetVolumeDetect, false);
2892
2858 } 2893 }
2859 } 2894 }
2860 2895