diff options
Diffstat (limited to 'OpenSim/Region/Physics/UbitOdePlugin')
-rw-r--r-- | OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs | 48 | ||||
-rw-r--r-- | OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | 1 |
2 files changed, 45 insertions, 4 deletions
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, |