From 18c625bda669509fc9aae330703fe09ff7a6c72e Mon Sep 17 00:00:00 2001 From: Dan Lake Date: Thu, 10 Nov 2011 14:09:35 -0800 Subject: When updating SOG, a physics taint should not override a full update with a terse update --- .../Region/Framework/Scenes/SceneObjectGroup.cs | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes') diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index 339cf0f..f6bfc9b 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -1731,18 +1731,23 @@ namespace OpenSim.Region.Framework.Scenes //if ((RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) // return; - bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); - - if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) + // If we somehow got here to updating the SOG and its root part is not scheduled for update, + // check to see if the physical position or rotation warrant an update. + if (m_rootPart.UpdateFlag == UpdateRequired.NONE) { - m_rootPart.UpdateFlag = UpdateRequired.TERSE; - lastPhysGroupPos = AbsolutePosition; - } + bool UsePhysics = ((RootPart.Flags & PrimFlags.Physics) != 0); - if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) - { - m_rootPart.UpdateFlag = UpdateRequired.TERSE; - lastPhysGroupRot = GroupRotation; + if (UsePhysics && !AbsolutePosition.ApproxEquals(lastPhysGroupPos, 0.02f)) + { + m_rootPart.UpdateFlag = UpdateRequired.TERSE; + lastPhysGroupPos = AbsolutePosition; + } + + if (UsePhysics && !GroupRotation.ApproxEquals(lastPhysGroupRot, 0.1f)) + { + m_rootPart.UpdateFlag = UpdateRequired.TERSE; + lastPhysGroupRot = GroupRotation; + } } SceneObjectPart[] parts = m_parts.GetArray(); -- cgit v1.1