mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 20:05:33 +08:00
Lots of experimentation yielded a fair approximation of a hip offset from the
physical center of an avatar, for display purposes. This should keep the avatar feet above ground visually in most cases. Tweaked for both height extremes and various leg lengths. Improvements welcome
This commit is contained in:
@@ -759,7 +759,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
}
|
||||
|
||||
float posZLimit = (float)m_scene.GetLandHeight((int)pos.X, (int)pos.Y);
|
||||
float newPosZ = posZLimit + localAVHeight;
|
||||
float newPosZ = posZLimit + localAVHeight / 2;
|
||||
if (posZLimit >= (pos.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ)))
|
||||
{
|
||||
pos.Z = newPosZ;
|
||||
@@ -1752,6 +1752,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
Vector3 pos = m_pos;
|
||||
Vector3 vel = Velocity;
|
||||
Quaternion rot = m_bodyRot;
|
||||
pos.Z -= m_appearance.HipOffset;
|
||||
remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * (float)ushort.MaxValue), LocalId, new Vector3(pos.X, pos.Y, pos.Z),
|
||||
new Vector3(vel.X, vel.Y, vel.Z), rot);
|
||||
|
||||
@@ -1835,6 +1836,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
// Note: because Quaternion is a struct, it can't be null
|
||||
Quaternion rot = m_bodyRot;
|
||||
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z -= m_appearance.HipOffset;
|
||||
|
||||
remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid,
|
||||
LocalId, m_pos, m_appearance.Texture.ToBytes(),
|
||||
m_parentID, rot);
|
||||
@@ -1900,6 +1904,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||
// Note: because Quaternion is a struct, it can't be null
|
||||
Quaternion rot = m_bodyRot;
|
||||
|
||||
Vector3 pos = m_pos;
|
||||
pos.Z -= m_appearance.HipOffset;
|
||||
|
||||
m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId,
|
||||
m_pos, m_appearance.Texture.ToBytes(), m_parentID, rot);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user