diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToPhysEngineConnector.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToPhysEngineConnector.cs index 4df6fa5afd..611eb1ed32 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToPhysEngineConnector.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SceneToPhysEngineConnector.cs @@ -293,7 +293,27 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule private void HandlePhysTerseUpdate(RegionSyncMessage msg) { - // TODO: + OSDMap data = RegionSyncUtil.DeserializeMessage(msg, LogHeader); + try + { + uint localID = data["localID"].AsUInteger(); + // m_log.DebugFormat("{0}: received PhysUpdateAttributes for {1}", LogHeader, localID); + PhysicsActor pa = FindPhysicsActor(localID); + if (pa != null) + { + pa.RequestPhysicsterseUpdate(); + } + else + { + m_log.WarnFormat("{0}: terse update for unknown localID {1}", LogHeader, localID); + return; + } + } + catch (Exception e) + { + m_log.WarnFormat("{0}: EXCEPTION processing PhysTerseUpdate: {1}", LogHeader, e); + return; + } return; } @@ -316,7 +336,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule /// private void HandlePhysUpdateAttributes(RegionSyncMessage msg) { - // TODO: OSDMap data = RegionSyncUtil.DeserializeMessage(msg, LogHeader); try { @@ -339,6 +358,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule pa.Buoyancy = (float)(data["buoyancy"].AsReal()); pa.CollidingGround = data["isCollidingGround"].AsBoolean(); pa.IsColliding = data["isCollidingGround"].AsBoolean(); + + pa.RequestPhysicsterseUpdate(); // tell the system the values have changed } else {