aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/AvatarSkeleton.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs6
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs5
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs48
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs1
6 files changed, 68 insertions, 6 deletions
diff --git a/OpenSim/Framework/AvatarSkeleton.cs b/OpenSim/Framework/AvatarSkeleton.cs
index 269099b..7a49f22 100644
--- a/OpenSim/Framework/AvatarSkeleton.cs
+++ b/OpenSim/Framework/AvatarSkeleton.cs
@@ -275,7 +275,8 @@ namespace OpenSim.Framework
275 size += pelvisToFoot; 275 size += pelvisToFoot;
276 276
277 m_standSize = new Vector3(0.45f, 0.6f, size); 277 m_standSize = new Vector3(0.45f, 0.6f, size);
278 m_feetOffset = 0.5f * size - pelvisToFoot; 278 // m_feetOffset = 0.5f * size - pelvisToFoot;
279 m_feetOffset = 0.0f;
279 } 280 }
280 } 281 }
281} 282}
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 8496005..d557a28 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -174,12 +174,21 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
174 // m_log.DebugFormat( 174 // m_log.DebugFormat(
175 // "[AVFACTORY]: Setting visual params for {0} to {1}", 175 // "[AVFACTORY]: Setting visual params for {0} to {1}",
176 // client.Name, string.Join(", ", visualParamsStrings)); 176 // client.Name, string.Join(", ", visualParamsStrings));
177 177/*
178 float oldHeight = sp.Appearance.AvatarHeight; 178 float oldHeight = sp.Appearance.AvatarHeight;
179 changed = sp.Appearance.SetVisualParams(visualParams); 179 changed = sp.Appearance.SetVisualParams(visualParams);
180 180
181 if (sp.Appearance.AvatarHeight != oldHeight && sp.Appearance.AvatarHeight > 0) 181 if (sp.Appearance.AvatarHeight != oldHeight && sp.Appearance.AvatarHeight > 0)
182 ((ScenePresence)sp).SetHeight(sp.Appearance.AvatarHeight); 182 ((ScenePresence)sp).SetHeight(sp.Appearance.AvatarHeight);
183 */
184 float oldoff = sp.Appearance.AvatarFeetOffset;
185 Vector3 oldbox = sp.Appearance.AvatarBoxSize;
186 changed = sp.Appearance.SetVisualParams(visualParams);
187 float off = sp.Appearance.AvatarFeetOffset;
188 Vector3 box = sp.Appearance.AvatarBoxSize;
189 if(oldoff != off || oldbox != box)
190 ((ScenePresence)sp).SetSize(box,off);
191
183 } 192 }
184 193
185 // Process the baked texture array 194 // Process the baked texture array
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index f5d609d..b6eae8e 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1260,6 +1260,12 @@ namespace OpenSim.Region.Framework.Scenes
1260 PhysicsActor.Size = new Vector3(0.45f, 0.6f, height); 1260 PhysicsActor.Size = new Vector3(0.45f, 0.6f, height);
1261 } 1261 }
1262 1262
1263 public void SetSize(Vector3 size, float feetoffset)
1264 {
1265 if (PhysicsActor != null && !IsChildAgent)
1266 PhysicsActor.setAvatarSize(size, feetoffset);
1267 }
1268
1263 /// <summary> 1269 /// <summary>
1264 /// Complete Avatar's movement into the region. 1270 /// Complete Avatar's movement into the region.
1265 /// </summary> 1271 /// </summary>
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index e1168bd..0405dad 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -175,6 +175,11 @@ namespace OpenSim.Region.Physics.Manager
175 175
176 public abstract Vector3 Size { get; set; } 176 public abstract Vector3 Size { get; set; }
177 177
178 public virtual void setAvatarSize(Vector3 size, float feetOffset)
179 {
180 Size = size;
181 }
182
178 public virtual bool Phantom { get; set; } 183 public virtual bool Phantom { get; set; }
179 184
180 public virtual bool IsVolumeDtc 185 public virtual bool IsVolumeDtc
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
index fd6b8aa..9c245e6 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
@@ -90,13 +90,12 @@ namespace OpenSim.Region.Physics.OdePlugin
90 public float PID_D; 90 public float PID_D;
91 public float PID_P; 91 public float PID_P;
92 92
93 private float m_feetOffset = 0;
93 private float feetOff = 0; 94 private float feetOff = 0;
94 private float feetSZ = 0.5f; 95 private float feetSZ = 0.5f;
95 const float feetScale = 0.8f; 96 const float feetScale = 0.8f;
96 const float sizeZAdjust = 0.18f;
97 private float boneOff = 0; 97 private float boneOff = 0;
98 98
99
100 public float walkDivisor = 1.3f; 99 public float walkDivisor = 1.3f;
101 public float runDivisor = 0.8f; 100 public float runDivisor = 0.8f;
102 private bool flying = false; 101 private bool flying = false;
@@ -475,6 +474,28 @@ namespace OpenSim.Region.Physics.OdePlugin
475 } 474 }
476 } 475 }
477 476
477 public override void setAvatarSize(Vector3 size, float feetOffset)
478 {
479 if (size.IsFinite())
480 {
481 if (size.X < 0.01f)
482 size.X = 0.01f;
483 if (size.Y < 0.01f)
484 size.Y = 0.01f;
485 if (size.Z < 0.01f)
486 size.Z = 0.01f;
487
488 strAvatarSize st = new strAvatarSize();
489 st.size = size;
490 st.offset = feetOffset;
491 AddChange(changes.AvatarSize, st);
492 }
493 else
494 {
495 m_log.Warn("[PHYSICS]: Got a NaN AvatarSize from Scene on a Character");
496 }
497
498 }
478 /// <summary> 499 /// <summary>
479 /// This creates the Avatar's physical Surrogate at the position supplied 500 /// This creates the Avatar's physical Surrogate at the position supplied
480 /// </summary> 501 /// </summary>
@@ -673,7 +694,8 @@ namespace OpenSim.Region.Physics.OdePlugin
673 // sizes one day should came from visual parameters 694 // sizes one day should came from visual parameters
674 float sx = m_size.X; 695 float sx = m_size.X;
675 float sy = m_size.Y; 696 float sy = m_size.Y;
676 float sz = m_size.Z + sizeZAdjust; 697 float sz = m_size.Z;
698
677 699
678 float topsx = sx * 0.9f; 700 float topsx = sx * 0.9f;
679 float midsx = sx; 701 float midsx = sx;
@@ -693,7 +715,7 @@ namespace OpenSim.Region.Physics.OdePlugin
693 float midsz = sz - topsz - feetsz; 715 float midsz = sz - topsz - feetsz;
694 float bonesz = sz; 716 float bonesz = sz;
695 717
696 float bot = -sz * 0.5f; 718 float bot = -sz * 0.5f + m_feetOffset;
697 719
698 boneOff = bot + 0.3f; 720 boneOff = bot + 0.3f;
699 721
@@ -754,6 +776,7 @@ namespace OpenSim.Region.Physics.OdePlugin
754 d.GeomSetOffsetPosition(feetbox, 0, 0, feetz); 776 d.GeomSetOffsetPosition(feetbox, 0, 0, feetz);
755 d.GeomSetOffsetPosition(midbox, 0, 0, midz); 777 d.GeomSetOffsetPosition(midbox, 0, 0, midz);
756 d.GeomSetOffsetPosition(topbox, 0, 0, topz); 778 d.GeomSetOffsetPosition(topbox, 0, 0, topz);
779 d.GeomSetOffsetPosition(bonebox, 0, 0, m_feetOffset);
757 780
758 // The purpose of the AMotor here is to keep the avatar's physical 781 // The purpose of the AMotor here is to keep the avatar's physical
759 // surrogate from rotating while moving 782 // surrogate from rotating while moving
@@ -1402,6 +1425,12 @@ namespace OpenSim.Region.Physics.OdePlugin
1402 { 1425 {
1403 } 1426 }
1404 1427
1428 private void changeAvatarSize(strAvatarSize st)
1429 {
1430 m_feetOffset = st.offset;
1431 changeSize(st.size);
1432 }
1433
1405 private void changeSize(Vector3 pSize) 1434 private void changeSize(Vector3 pSize)
1406 { 1435 {
1407 if (pSize.IsFinite()) 1436 if (pSize.IsFinite())
@@ -1609,6 +1638,10 @@ namespace OpenSim.Region.Physics.OdePlugin
1609 changeSize((Vector3)arg); 1638 changeSize((Vector3)arg);
1610 break; 1639 break;
1611 1640
1641 case changes.AvatarSize:
1642 changeAvatarSize((strAvatarSize)arg);
1643 break;
1644
1612 case changes.Momentum: 1645 case changes.Momentum:
1613 changeMomentum((Vector3)arg); 1646 changeMomentum((Vector3)arg);
1614 break; 1647 break;
@@ -1656,5 +1689,12 @@ namespace OpenSim.Region.Physics.OdePlugin
1656 { 1689 {
1657 _parent_scene.AddChange((PhysicsActor)this, what, arg); 1690 _parent_scene.AddChange((PhysicsActor)this, what, arg);
1658 } 1691 }
1692
1693 private struct strAvatarSize
1694 {
1695 public Vector3 size;
1696 public float offset;
1697 }
1698
1659 } 1699 }
1660} 1700}
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
index 2b4d368..7d1d2fe 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs
@@ -147,6 +147,7 @@ namespace OpenSim.Region.Physics.OdePlugin
147 PIDHoverActive, 147 PIDHoverActive,
148 148
149 Size, 149 Size,
150 AvatarSize,
150 Shape, 151 Shape,
151 PhysRepData, 152 PhysRepData,
152 AddPhysRep, 153 AddPhysRep,