Show avatars as sitting on proot prims only to avoid motion jitter
for passengersavinationmerge
parent
f1a76195ea
commit
56cc573d2f
|
@ -4828,9 +4828,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
{
|
{
|
||||||
ScenePresence presence = (ScenePresence)entity;
|
ScenePresence presence = (ScenePresence)entity;
|
||||||
|
|
||||||
|
position = presence.OffsetPosition;
|
||||||
|
rotation = presence.Rotation;
|
||||||
|
|
||||||
|
if (presence.ParentID != 0)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = m_scene.GetSceneObjectPart(presence.ParentID);
|
||||||
|
if (part != null && part != part.ParentGroup.RootPart)
|
||||||
|
{
|
||||||
|
position = part.OffsetPosition + presence.OffsetPosition * part.RotationOffset;
|
||||||
|
rotation = presence.Rotation * part.RotationOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attachPoint = 0;
|
attachPoint = 0;
|
||||||
collisionPlane = presence.CollisionPlane;
|
collisionPlane = presence.CollisionPlane;
|
||||||
position = presence.OffsetPosition;
|
|
||||||
velocity = presence.Velocity;
|
velocity = presence.Velocity;
|
||||||
acceleration = Vector3.Zero;
|
acceleration = Vector3.Zero;
|
||||||
|
|
||||||
|
@ -4840,7 +4852,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// acceleration = new Vector3(1, 0, 0);
|
// acceleration = new Vector3(1, 0, 0);
|
||||||
|
|
||||||
angularVelocity = Vector3.Zero;
|
angularVelocity = Vector3.Zero;
|
||||||
rotation = presence.Rotation;
|
|
||||||
|
|
||||||
if (sendTexture)
|
if (sendTexture)
|
||||||
textureEntry = presence.Appearance.Texture.GetBytes();
|
textureEntry = presence.Appearance.Texture.GetBytes();
|
||||||
|
@ -4945,13 +4956,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
protected ObjectUpdatePacket.ObjectDataBlock CreateAvatarUpdateBlock(ScenePresence data)
|
protected ObjectUpdatePacket.ObjectDataBlock CreateAvatarUpdateBlock(ScenePresence data)
|
||||||
{
|
{
|
||||||
|
Vector3 offsetPosition = data.OffsetPosition;
|
||||||
|
Quaternion rotation = data.Rotation;
|
||||||
|
uint parentID = data.ParentID;
|
||||||
|
|
||||||
|
if (parentID != 0)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = m_scene.GetSceneObjectPart(parentID);
|
||||||
|
if (part != null && part != part.ParentGroup.RootPart)
|
||||||
|
{
|
||||||
|
offsetPosition = part.OffsetPosition + data.OffsetPosition * part.RotationOffset;
|
||||||
|
rotation = data.Rotation * part.RotationOffset;
|
||||||
|
parentID = part.ParentGroup.RootPart.LocalId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
byte[] objectData = new byte[76];
|
byte[] objectData = new byte[76];
|
||||||
|
|
||||||
data.CollisionPlane.ToBytes(objectData, 0);
|
data.CollisionPlane.ToBytes(objectData, 0);
|
||||||
data.OffsetPosition.ToBytes(objectData, 16);
|
offsetPosition.ToBytes(objectData, 16);
|
||||||
// data.Velocity.ToBytes(objectData, 28);
|
// data.Velocity.ToBytes(objectData, 28);
|
||||||
// data.Acceleration.ToBytes(objectData, 40);
|
// data.Acceleration.ToBytes(objectData, 40);
|
||||||
data.Rotation.ToBytes(objectData, 52);
|
rotation.ToBytes(objectData, 52);
|
||||||
//data.AngularVelocity.ToBytes(objectData, 64);
|
//data.AngularVelocity.ToBytes(objectData, 64);
|
||||||
|
|
||||||
ObjectUpdatePacket.ObjectDataBlock update = new ObjectUpdatePacket.ObjectDataBlock();
|
ObjectUpdatePacket.ObjectDataBlock update = new ObjectUpdatePacket.ObjectDataBlock();
|
||||||
|
@ -4965,7 +4991,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
update.NameValue = Utils.StringToBytes("FirstName STRING RW SV " + data.Firstname + "\nLastName STRING RW SV " +
|
update.NameValue = Utils.StringToBytes("FirstName STRING RW SV " + data.Firstname + "\nLastName STRING RW SV " +
|
||||||
data.Lastname + "\nTitle STRING RW SV " + data.Grouptitle);
|
data.Lastname + "\nTitle STRING RW SV " + data.Grouptitle);
|
||||||
update.ObjectData = objectData;
|
update.ObjectData = objectData;
|
||||||
update.ParentID = data.ParentID;
|
update.ParentID = parentID;
|
||||||
update.PathCurve = 16;
|
update.PathCurve = 16;
|
||||||
update.PathScaleX = 100;
|
update.PathScaleX = 100;
|
||||||
update.PathScaleY = 100;
|
update.PathScaleY = 100;
|
||||||
|
|
Loading…
Reference in New Issue