Fix the root cause of keyframe motion region crossing offset - UpdateSceneObject

was being called twice on each crossing.
avinationmerge
Melanie 2013-08-25 06:26:56 +02:00
parent e0399ccaec
commit f7378829c3
2 changed files with 5 additions and 23 deletions

View File

@ -478,7 +478,6 @@ namespace OpenSim.Region.Framework.Scenes
k.Position = pos; k.Position = pos;
// k.Velocity = Vector3.Zero; // k.Velocity = Vector3.Zero;
} }
k.AngularVelocity = (Vector3)k.Position;
k.StartRotation = rot; k.StartRotation = rot;
if (k.Rotation.HasValue) if (k.Rotation.HasValue)
@ -619,7 +618,7 @@ namespace OpenSim.Region.Framework.Scenes
m_group.RootPart.Velocity = Vector3.Zero; m_group.RootPart.Velocity = Vector3.Zero;
m_group.RootPart.AngularVelocity = Vector3.Zero; m_group.RootPart.AngularVelocity = Vector3.Zero;
m_nextPosition = NormalizeVector(m_currentFrame.AngularVelocity); m_nextPosition = (Vector3)m_currentFrame.Position;
m_group.AbsolutePosition = m_nextPosition; m_group.AbsolutePosition = m_nextPosition;
// we are sending imediate updates, no doing force a extra terseUpdate // we are sending imediate updates, no doing force a extra terseUpdate
@ -707,26 +706,7 @@ namespace OpenSim.Region.Framework.Scenes
m_group.SendGroupRootTerseUpdate(); m_group.SendGroupRootTerseUpdate();
} }
} }
private Vector3 NormalizeVector(Vector3? pPosition)
{
if (pPosition == null)
return Vector3.Zero;
Vector3 tmp = (Vector3) pPosition;
while (tmp.X > Constants.RegionSize)
tmp.X -= Constants.RegionSize;
while (tmp.X < 0)
tmp.X += Constants.RegionSize;
while (tmp.Y > Constants.RegionSize)
tmp.Y -= Constants.RegionSize;
while (tmp.Y < 0)
tmp.Y += Constants.RegionSize;
return tmp;
}
public Byte[] Serialize() public Byte[] Serialize()
{ {
StopTimer(); StopTimer();

View File

@ -2802,8 +2802,10 @@ namespace OpenSim.Region.Framework.Scenes
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject)); newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
newObject.ResumeScripts(); newObject.ResumeScripts();
if (newObject.RootPart.KeyframeMotion != null) // AddSceneObject already does this and doing it again messes
newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject); // up region crossings, so don't.
//if (newObject.RootPart.KeyframeMotion != null)
// newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject);
} }
// Do this as late as possible so that listeners have full access to the incoming object // Do this as late as possible so that listeners have full access to the incoming object