aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs13
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs9
2 files changed, 20 insertions, 2 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index f2ceb20..f549461 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -227,6 +227,7 @@ namespace OpenSim.Framework
227 } 227 }
228 228
229 protected float m_avatarHeight = 0; 229 protected float m_avatarHeight = 0;
230 protected float m_hipOffset = 0;
230 231
231 public virtual float AvatarHeight 232 public virtual float AvatarHeight
232 { 233 {
@@ -234,6 +235,11 @@ namespace OpenSim.Framework
234 set { m_avatarHeight = value; } 235 set { m_avatarHeight = value; }
235 } 236 }
236 237
238 public virtual float HipOffset
239 {
240 get { return m_hipOffset; }
241 }
242
237 public AvatarAppearance() 243 public AvatarAppearance()
238 { 244 {
239 m_wearables = new AvatarWearable[MAX_WEARABLES]; 245 m_wearables = new AvatarWearable[MAX_WEARABLES];
@@ -275,7 +281,12 @@ namespace OpenSim.Framework
275 + 0.08f * (float)m_visualparams[77] / 255.0f // Shoe heel height 281 + 0.08f * (float)m_visualparams[77] / 255.0f // Shoe heel height
276 + 0.07f * (float)m_visualparams[78] / 255.0f // Shoe platform height 282 + 0.07f * (float)m_visualparams[78] / 255.0f // Shoe platform height
277 + 0.076f * (float)m_visualparams[148] / 255.0f; // Neck length 283 + 0.076f * (float)m_visualparams[148] / 255.0f; // Neck length
278 284 m_hipOffset = (0.615385f // Half of avatar
285 + 0.08f * (float)m_visualparams[77] / 255.0f // Shoe heel height
286 + 0.07f * (float)m_visualparams[78] / 255.0f // Shoe platform height
287 + 0.3836f * (float)m_visualparams[125] / 255.0f // Leg length
288 - m_avatarHeight / 2) * 0.3f - 0.04f;
289 System.Console.WriteLine("Height {0} Hip offset {1}", m_avatarHeight, m_hipOffset);
279 } 290 }
280 291
281 public virtual void SetWearable(int wearableId, AvatarWearable wearable) 292 public virtual void SetWearable(int wearableId, AvatarWearable wearable)
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index af17fac..c91027c 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -759,7 +759,7 @@ namespace OpenSim.Region.Environment.Scenes
759 } 759 }
760 760
761 float posZLimit = (float)m_scene.GetLandHeight((int)pos.X, (int)pos.Y); 761 float posZLimit = (float)m_scene.GetLandHeight((int)pos.X, (int)pos.Y);
762 float newPosZ = posZLimit + localAVHeight; 762 float newPosZ = posZLimit + localAVHeight / 2;
763 if (posZLimit >= (pos.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ))) 763 if (posZLimit >= (pos.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ)))
764 { 764 {
765 pos.Z = newPosZ; 765 pos.Z = newPosZ;
@@ -1752,6 +1752,7 @@ namespace OpenSim.Region.Environment.Scenes
1752 Vector3 pos = m_pos; 1752 Vector3 pos = m_pos;
1753 Vector3 vel = Velocity; 1753 Vector3 vel = Velocity;
1754 Quaternion rot = m_bodyRot; 1754 Quaternion rot = m_bodyRot;
1755 pos.Z -= m_appearance.HipOffset;
1755 remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * (float)ushort.MaxValue), LocalId, new Vector3(pos.X, pos.Y, pos.Z), 1756 remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * (float)ushort.MaxValue), LocalId, new Vector3(pos.X, pos.Y, pos.Z),
1756 new Vector3(vel.X, vel.Y, vel.Z), rot); 1757 new Vector3(vel.X, vel.Y, vel.Z), rot);
1757 1758
@@ -1835,6 +1836,9 @@ namespace OpenSim.Region.Environment.Scenes
1835 // Note: because Quaternion is a struct, it can't be null 1836 // Note: because Quaternion is a struct, it can't be null
1836 Quaternion rot = m_bodyRot; 1837 Quaternion rot = m_bodyRot;
1837 1838
1839 Vector3 pos = m_pos;
1840 pos.Z -= m_appearance.HipOffset;
1841
1838 remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, 1842 remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid,
1839 LocalId, m_pos, m_appearance.Texture.ToBytes(), 1843 LocalId, m_pos, m_appearance.Texture.ToBytes(),
1840 m_parentID, rot); 1844 m_parentID, rot);
@@ -1900,6 +1904,9 @@ namespace OpenSim.Region.Environment.Scenes
1900 // Note: because Quaternion is a struct, it can't be null 1904 // Note: because Quaternion is a struct, it can't be null
1901 Quaternion rot = m_bodyRot; 1905 Quaternion rot = m_bodyRot;
1902 1906
1907 Vector3 pos = m_pos;
1908 pos.Z -= m_appearance.HipOffset;
1909
1903 m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId, 1910 m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId,
1904 m_pos, m_appearance.Texture.ToBytes(), m_parentID, rot); 1911 m_pos, m_appearance.Texture.ToBytes(), m_parentID, rot);
1905 1912